[paper] attention is all you need

hyunsooo·2021년 11월 22일
0

저명한 번역모델은 인코더와 디코더를 가지고 있으며 RNN, CNN에 기반을 두고 있다.
가장 성능이 좋은 모델들은 인코더와 디코더가 어텐션 메커니즘으로 연결되어 있다.
이 연구에서는 CNN과 RNN없이 오직 어텐션 메커니즘만을 기반으로한 Transformer라는 신경망 구조를 제안한다.
결과적으로 2가지의 기계번역 실험에서 이 모델은 품질이 우수한 것으로 나타났고 병렬화가 더 용이하고 학습시간이 더 적게 요구된다.

1. Introduction

RNN, 특히 LSTM, GRU는 언어모델링과 기계번역과 같은 시퀀스모델링, 변환 문제에서 최신의 접근 방식으로 확립해왔다.
그 이후로 수많은 노력이 순환언어모델과 인코더-디코더 구조의 경계를 계속 확장해 왔다.

순환모델들은 전통적으로 input과 output 시퀀스의 symbol positions을 따라서 요소들을 계산한다.
계산하는 단계에서 위치 정렬을 위해, 이전의 hidden state ht1h_{t-1}과 위치 tt의 input과의 계산를 통해 hidden state의 hth_{t}를 생성한다.
이런 순차적인 특징들은 본질적으로 메모리 제약들로 배치처리가 제한되기 때문에 병렬화를 방해한다.
최근 연구는 factorization trick과 conditional computation을 통해 계산 효율의 상당한 증진을 달성했으며 conditional computation의 경우 모델 성능도 개선했다.
하지만 여전히 순차적인 계산의 제약은 남아있다.

어텐션 메커니즘은 input 또는 output 시퀀스의 거리에 관계없이 모델링을 할 수 있도록 다양한 작업에서 강력한 시퀀스 모델링과 번역모델의 필수적인 부분이 되었다.
그러나 소수의 경우를 제외한 모든 경우에, 어텐션 메커니즘은 순환네트워크와 결합되어 사용되어져 왔다.

이 연구에서 순환구조를 피하고 그 대신에 input과 output 사이에서 global dependencies를 이끌어내기 위해 어텐션 메커니즘에 전적으로 의지하는 모델 구조인 Transformer를 제안한다.
트랜스포머는 8개의 GPU에서 12시간 동안 훈련 후 상당히 많은 병렬화를 허용하고 번역 품질에 새로운 SOTA에 도달할 수 있다.

2. Background

순차적인 계산을 줄이려는 목표는 Extended Neural GPU, ByteNet, ConvS2S의 기초를 형성하였고, 이들 모두는 기본 블럭으로 CNN을 사용한다.

이런 모델들에서 두개의 임의의 input 또는 output의 position 신호를 연결하는 작동횟수는 두 위치 사이의 거리에서 ConvS2S는 선형으로 ByteNet은 로그적으로 증가한다.
이는 거리가 멀어질수록 dependencies를 학습하는것이 더 어려워 지게 만든다.
트랜스포머에서는 Multi-head Attention을 통해 일정한 작업회수로 감소한다.

intra-attention이라고도 불리는 Self-Attention은 시퀀스를 계산하기 위한 단일 시퀀스의 다른 위치를 연관시키는 어텐션 메커니즘이다.
Self-attention은 다양한 tasks에서 성공적으로 사용되었다.

End-to-End 메모리 네트워크는 시퀀스 aligned recurrence 대신 recurrent attention mechanism에 기반하였으며 simple-language QA와 언어모델링에서 좋은 성과를 냈다.

트랜스포머는 sequence aligned RNNs or CNN사용 없이 input과 output계산을 전반적으로 self-attention에 의지하는 첫번째 번역 모델이다.

3. Model Architecture

가장 성능이 좋은 시퀀스 번역모델들은 인코더와 디코더구조를 가지고 있다.
여기서 인코더는 입력 시퀀스 x=(x1,...,xn)x = (x_1, ..., x_n)을 continuous 표현 z=(z1,...,zn)z = (z_1, ..., z_n)로 매핑한다.
zz가 주어지면, 디코더는 한번에 한 원소씩 output sequence y=(y1,...ym)y = (y_1, ... y_m)을 생성한다.
모델의 각 단계는 auto-regressive이며, 다음 원소를 생성할때, 추가적인 input으로 이전에 생성된 symbols을 사용한다.
트랜스포머는 인코더 디코더 둘다 Self-attention, point_wise FC layer를 사용하는 구조를 따른다.

3.1 Encoder and Decoder Stacks

Encoder : 인코더는 6개의 동일한 레이어로 구성된다. 각 레이어는 두개의 서브 레이어들을 가지는데 첫번째는 multi-head self-attention mechanism이다. 두 번째로는 feed-forward network층을 가진다.
또한 두개의 레이어 각각에 residual connection과 LayerNormalization을 사용한다.
sub-layer의 출력은 LayerNorm(x+Sublayer(x))LayerNorm(x + Sublayer(x))이고, 여기에 Sublayer(x)Sublayer(x)는 sub-layer자체에 구현된 함수이다.
embedding 레이어뿐 아니라 모델에 모든 sub-layer에서 residual connection을 용이하게 하기위해 output의 차원을 512로 만든다.

Decoder : 디코더 또한 6개의 동일한 레이어로 구성된다. 디코더는 인코더의 2개의 서브 레이어에 추가적으로 3번째의 서브레이어를 추가한다. 이 3번째 서브레이어는 인코더의 output으로 multi-head attention을 수행한다.
인코더와 유사하게 각각의 서브 레이어에 residual connection과 layer normalization을 사용한다.
현재 위치가 다음의 위치에 영향을 받는 것을 방지하기 위해 디코더 self-attention sub-layer를 수정한다.
이 것을 masking이라고 하며, 위치 ii에 대한 예측은 오직 ii보다 작은 위치들의 출력에만 의존하는 것을 보장한다.

3.2 Attention

어텐션 함수는 query와 key-value쌍으로 output을 매핑하는 것으로 설명할 수 있다. 이때 query, key, value, output은 모두 벡터이다.
output은 value들의 가중합으로 계산되고 이 가중치는 query와 대응하는 key의 호환성 함수에 의해 계산된다.

3.2.1 Scaled Dot-Product Attention

input은 queries, keys (dim=dk)(dim = d_k)와 values (dim=dv)(dim = d_v)로 구성되어 있다.
모든 key값과 query와의 dot product로 계산하고 dk\sqrt{d_k}로 나누어 준다. 그리고 values의 가중치를 얻기 위해 softmax 함수를 적용한다.
실제로, 일련의 쿼리에 대한 attention function을 행렬 Q로 동시에 계산한다.
key와 values 또한 행렬 K와 V로 사용한다.
output 행렬은 아래와 같은 식으로 계산한다.

일반적으로 사용하는 attention fuction으로는 additive attention, dot-product attention이 있다.
Dot-product attention은 scaling factor of1dk\frac{1}{\sqrt{d_k}} 부분을 제외하고 위와 같다.
Additive attention은 단일 hidden layer에서 feed-forward network를 사용하는 함수이다.

이 두가지는 이론적인 complexity는 유사하지만 dot-product는 행렬곱을 사용하여 구현되기 때문에 훨씬 빠르고 공간 효율적이다.

작은 차원 dkd_{k}에서 두가지의 성능은 비슷하지만 additive attention은 dkd_k가 큰 값에 scaling 없이도 dot product attention보다 성능이 뛰어나다.

dkd_{k}가 클수록 dot-product는 극도로 작은 기울기를 가지는 것을 방지하기 위해 1dk\frac{1}{d_k}로 스케일링 한다.

3.2.2 Multi-Head Attention

dmodeld_{model}차원 key, value, query를 가진 단일 attention function을 수행하는것 대신에,
query, key, value를 dk,dk,dvd_k, d_k, d_v 차원으로 각각 다르게 h번 학습시키는 것이 더 이점이 있다.
이 query, key, vale에서 attention fuction을 병렬적으로 수행하고, dvd_v차원의 output을 산출한다.
위의 그림처럼 output들을 이어붙이고 하나의 선형함수에 통과시켜 최종 output을 구한다.

여기에 WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dvW^Q_i \in \mathbb{R^{d_{model} \times d_{k}}}, W^K_i \in \mathbb{R^{d_{model} \times d_{k}}}, W^V_i \in \mathbb{R^{d_{model} \times d_{v}}}
WORhdv×dmodelW^O \in \mathbb{R^{hd_v \times d_{model}}}를 따르며, 이 논문에서는 h=8,dk=dv=dmodel/h=64h =8, d_k = d_v = d_{model}/h = 64를 사용하였다.

각각의 head의 차원이 줄은 덕분에 최종 계산 비용은 차원을 줄이지 않은 single-head attention이랑 비슷하다.

3.2.3 Applications of Attention in our Model

트랜스포머에서는 multi-head attention을 3가지의 다른 방법으로 사용한다.

  • encoder-decoder attention layer에서 query는 이전의 decoder layer의 query를 사용하고 key와 value는 encoder의 output으로부터 온 것을 사용한다. 이는 input sequence의 모든 위치를 고려하게 한다.

  • 인코더는 self-attention layer를 포함한다. 이 layer의 모든 key, value, query는 같은 곳, 인코더의 이전 layer의 출력에서 온다. 인코더의 각 위치는 이전 인코더 layer의 모든 위치와 계산된다.

  • 마찬가지로 디코더의 self-attention layer는 디코더의 각 위치가 해당 위치 까지의 모든 위치에 참여하도록 허용한다. auto-regressive 특성을 유지하기 위해 디코더의 왼쪽으로의 정보의 흐름을 막을 필요가 있다. masking layer는 dot-product를 수행할 때, -\infty로 설정하여 softmax를 통과하면 0의 값을 가지도록 한다.

3.3 Position-wise Feed-Forward Networks

인코더와 디코더에서 attention sub-layer 외에도 fully connected feed-forward network를 포하며, 각 위치에 개별적이고 동일하게 작용한다 이는 중간에 ReLU 활성화함수가 있는 2개의 선형변환으로 구성된다.

이 선형변환은 같을지라도 각각 다른 파라미터를 사용한다. 이것은 kernel size가 1인 2개의 convolution과 같다.
input, output의 차원은 dmodel=512d_{model} = 512이고 inner-layer는 dff=2048d_{ff} = 2048이다.

3.4 Embeddings and Softmax

서로다른 시퀀스번역 모델과 마찬가지로, input tokens과 output tokens을 dmodeld_{model}의 차원을 가진 벡터로 변환하기 위한 학습된 임베딩을 사용한다. 또한 디코더의 아웃풋을 다음 토큰을 예측하기 위한 확률로 선형변환과 softmax 함수를 사용한다.
트랜스포머에서는 2개의 임베딩레이어와 소프트맥스 이전의 선형변환 사이에서 같은 가중치 행렬을 공유한다.
임베딩층의 가중치에 dmodel\sqrt{d_{model}}의 값을 곱해서 사용한다.

3.5 Positional Encoding

트랜스포머에 RNN과 CNN이 없기 때문에, 모델이 시퀀스의 순서를 사용하기 위해 상대적 위치, 절대적 위치에 대한 정보를 주입해야 한다.

이를 위해서 인코더와 디코더의 아래에 input 임베딩에 positional encodings을 추가한다.
이 positinal encoding은 임베딩층과 마찬가지로 dmodeld_{model}의 차원을 가진다. 따라서 이 둘을 합칠 수 있다. positional encoding으로 많은 종류들이 있으며 이 논문에서 positional encoding으로 sine, cosine 함수를 사용한다.

여기서 pospos는 위치이고 ii는 차원을 뜻한다.
따라서, positional encoding의 각 차원은 사인곡선에 대응하게 된다.
이 사인함수를 선택한 이유는 고정된 위치 k에 대해 선형 함수로 표현되어 모델이 상대적 위치에 따른 정보를 쉽게 배울 수 있다고 가정했기 때문이다.
또한 모델이 훈련 데이터 보다 더 긴 시퀀스의 길이도 추론할 수 있기 때문에 사용한다.

4. Why Self-Attention

이 세셕에서는, 다양한 형상의 셀프어텐션과 전형적인 시퀀스 번역의 인코더와 디코더에 은닉층 처럼 (x1,...xn)(x_1,...x_n)을 동일한 길이의 (z1,...zn)(z_1,...z_n)으로 매핑하는데 일반적으로 사용하는 CNN과 RNN 대해 비교한다.

결과적으로 self-anttention이 적합한 이유는 아래의 3가지와 같다.

  1. 레이어마다 총 계산 복잡도가 적음

  2. 병렬화할 수 있는 계산의 양. 즉, 병렬적으로 계산이 가능하다.

  3. 장거리 의존성이다. 많은 시퀀스 변환 tasks에서 장거리 의존성을 학습하는것은 중요한 열쇠이다. 의존성을 학습하는 능력에 영향을 주는 중요한 요인은 네트워크 에서 forward, backward 신호가 횡단할 수 있는 경로의 길이이다.
    input, output 시퀀스의 위치의 조합 사이에서 이 경로의 길이가 더 짧을 수록 장거리 의존성을 학습하기가 더 쉬워진다. 따라서 다른 layer 유형으로 구성된 네트워크의 두 input, output의 위치 사이의 최대 경로 길이를 비교한다.

위의 표에 따르면, RNN은 O(n)O(n)의 순차적인 동작을 요구하는 반면에 self-attention layer는 순차적으로 일정한 수의 동작으로 모든 위치를 연결된다.
계산복잡도의 관점에서, self-attention은 시퀀스의 길이(n)(n)이 차원 dd보다 더 작을 때 RNN보다 더 빠르며, word-piece, bpe처럼 최신 기계 번역 모델에서 사용하는 문장 표현의 경우가 가장 많이 사용 된다.
긴 시퀀스를 포함하는 tasks에 대한 계산 성능을 향상하기위해, self-attention은 각각의 output 위치 중심으로 input 시퀀스의 size의 이웃만 고려하도록 제한될 수 있다. 이것은 최대 경로 길이를 O(n/r)O(n/r)로 증가시킬 수 있다.

kernel width가 k<nk < n인 단일 Convolutional layer는 모든 input과 output쌍이 연결될 수 없다. 그렇게 하기 위해서는 연속 커널의 경우 O(n/k)O(n/k) 컨볼루션 레이어의 스택이 필요하며, 확장된 컨볼루션의 경우 O(logk(n))O(\log_k{(n)})이 필요하고 네트워크의 두 위치 사이의 가장 긴 경로의 길이가 증가한다.
일반적으로 convolution layer는 recurrent layer보다 k배 만큼 비싸다.

5. Training

용어설명
데이터(german)WMT 2014 English-German dataset(4.5M쌍의 문장, 37000 vocab)
데이터(french)WMT 2014 English-French dataset(36M쌍의 문장, 32000 vocab)
Batch25000
Hardware8개 NVIDIA P100 GPU
OptimizerAdam β1=0.9,β2=0.98,ϵ=109\beta_{1}=0.9, \beta_{2}=0.98, \epsilon = 10^{-9}
lrate=dmodel0.5min(stepnum0.5,stepnumwarmupsteps1.5)lrate = d_{model}^{-0.5} \cdot min(step_num^{-0.5},step_num \cdot warmup_steps^{-1.5})
warmsteps = 4000
Regularization- Residual Dropout : sub layer에 추가되고 정규화 되기 전의 sub layer 출력에 드롭아웃을 적용, 또한 인코더, 디코더의 임베딩 및 positional 인코딩에 드롭아웃을 적용

- Label Smoothing ϵls=0.1\epsilon_{ls} = 0.1

label smoothing : 모델의 정규화(regularization) 기술로 기존의 One-hot 표현이 아닌 다른 표현방법을 사용한다. 기존의 hard target(one-hot)을 soft targe으로 바꾸는 것이 핵심이며, 수식을 아래와 같다.

ykLS=yk(1α)+α/Ky_k^{LS} = y_k(1-\alpha) + \alpha/K

yky_k는 k번째 클래스가 정답이 1, 아니면 0을 나타내고, α\alpha는 hyperparameter이다.
KK는 범주의 개수를 나타낸다.

예를 들어,

[0, 1, 0, 0]과 같은 라벨이 있을때 label smoothing을 적용 하면(α=0.1\alpha = 0.1)

[0.025, 0.925, 0.025, 0.025]와 같이 나타 낼 수 있다.

이렇게 함으로 누릴 수 있는 효과는 기존의 one-hot 인코딩을 통한 softmax-cross entropy는 정답의 확률만 높이는데에 초점이 잡혀져있지만 label smoothing을 실시하면 오답의 class들도 uniform한 값을 가지기 때문에 정답과는 가깝고 오답과는 동일한 거리에 있도록 멀게 만든다.
따라서 정답 타겟에 과잉적으로 확신하는 현상을 감소시켜주며, 최대 로짓이 너무 커지는 것을 방지한다.

6. Results

6.1 Machine Translation

6.2 Model Variations

7. Conclusion

이 논문에서 소개한 Transformer는 recurrence와 convolution을 모두 제거하고 attention에만 의존하는 모델이다. 이 모델은 계산량을 줄이고 병렬화를 통해 학습 속도가 훨씬 빠르며 성능 또한 우수하다. 앞으로 이 attention기반 모델을 다양한 task의 적용하고 연구할 계획이다.

github : https://github.com/khs0415p/transformer

profile
지식 공유

0개의 댓글