Vaswani, A. "Attention is all you need." Advances in Neural Information Processing Systems(2017).https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf
"The code we used to train and evaluate our models is available at https://github.com/tensorflow/tensor2tensor."
주요 sequence 변환 모델은 인코더와 디코더를 포함한 RNN, 또는 CNN을 기반으로 하였습니다. 가장 좋은 성능의 모델들은 attention 메커니즘을 통해 인코더와 디코더를 연결합니다. 연구자들은 recurrence와 convolution 없이 오직 attention만 사용한 간단한 네트워크 아키텍처를 가진 Transformer를 제안합니다.
Transformer는 품질이 우수하고, 병렬화가 용이하며, 학습에 소요되는 시간이 훨씬 짧습니다. WWT 2014 영어-독어 번역 작업에서 28.4 BLEU를 달성하였는데, 이는 앙상블을 포함한 기존의 최고 점수보다 2BLEU 향상된 결과입니다. 또한, WWT 2014 영어-불어 번역 작업에서는 41.8 BLEU를 달성하였습니다.
해당 연구는 transformer를 크고 제한된 학습 데이터를 통해 영어 구문 분석에 성공적으로 적용시켰으며, 일반화 능력 또한 좋다는 것을 보였습니다.
RNNs, LSTM, GRU 등은 언어 모델링 및 기계 번역과 같은 순차적 모델링(seqeunce modeling)과 변환(transduction) 분야에서 최첨단의 방법으로 자리잡았습니다. 이후로도 순환 언어 모델, 인코더-디코더 구조로 성능의 한계를 극복하는 다양한 노력이 지속되었습니다.
reccurent model은 일반적으로 입력과 출력 시퀀스에서 각 기호의 위치에 따라 계산을 분해합니다. 이전 상태(h_t-1)과 현재 입력을 기반으로 h_t를 계산하는 방식입니다. 이는 순차적으로 이루어지기 때문에 병렬 처리가 어려워지고, 긴 시퀀스를 처리할 때 메모리 제약을 주기에 batch size를 제한하게됩니다.
attention 메커니즘은 입력과 출력 시퀀스 간의 거리와 상관없이 의존성을 모델링할 수 있게 해줍니다. 일부 예외를 제외하고, 대부분 reccurent network와 함께 사용됩니다.
본 연구에서는 Transformer라는 모델 아키텍처를 제안합니다. 이는 순환 구조를 배제하며 입, 출력간 전역 의존성(global dependencies)를 모델링 하기위해 어텐션 메커니즘'만' 사용합니다.
ByteNet(Kalchbrenner et.al., 2017), ConvS2S(Jonas Gehring et.al., 2017) 와 같은 모델들은 CNN을 base로 사용하며, 모든 위치에 대한 은닉 표현(hidden representations)을 병렬로 계산합니다. 이러한 경우 input, output 거리에서 dependency를 학습시키기가 어려워집니다.
transformer에서는 이에 필요한 연산의 수가 상수로 줄어듭니다. 하지만 이는 attention weight를 평균화하는 결과로, effective resolution이 감소하게 됩니다. transformer에서는 이를 Multi-Head Attention을 통해 보완하게 됩니다.
Self-Attention은 단일 시퀀스 내에서 서로 다른 position을 연관시켜 시퀀스의 표현을 학습하는 어텐션 메커니즘입니다. 주로 독해, 추상적 요약, 텍스트 함의, 작업에 독립적인 문장을 학습하는 등 다양한 작업에서 성공적으로 사용된 바가 있습니다.
Transformer는 입/출력을 계산하기 위해 self-attention만을 사용하며, RNN/CNN을 사용하지 않은 최초의 transduction 모델입니다.
Reprinted Figure.1
변환 모델은 기본적으로 인코더-디코더 구조를 가집니다. 인코더는 입력 시퀀스 (x1, ..., xn)를 continuous representation 시퀀스 (z1, ..., zn)으로 매핑합니다. 이후 디코더는 z를 기반으로 출력 시퀀스 (y1, ..., ym)을 하나씩 생성합니다. 이 과정은 self-regressive하게 작동합니다.
Encoder는 6개의 동일한 레이어로 구성된 stack입니다. 각 레이어는 두 개의 하위 레이어로 구성되는데, 각각 multi-head self attention과 fully-connected feed-forward 레이어입니다. 두 하위 레이어 주변에서 잔차 연결(residual connection)을 적용하며, 이후 정규화를 수행하기에 각 하위 레이어의 출력은 다음과 같습니다.

Sublayer는 각 하위 레이어가 구현하는 함수이고, 이러한 잔차 연결을 가능하게 하기 위해서 모든 하위 레이어와 임베딩 레이어에서 512차원의 출력을 생성합니다.
Decoder는 인코더와 마찬가지로 6개의 동일한 레이어로 구성된 stack입니다. 디코더의 레이어는 인코더 레이어의 두 하위 레이어 외에 3번째 하위 레이어를 추가로 포함합니다. 추가된 레이어는 인코더의 출력에 대해 multi-head attention을 수행합니다.
이후 인코더와 마찬가지로 잔차 연결을 적용하고, 정규화를 수행합니다. 디코더의 self-attention 레이어는 이후에 위치를 참조하지 못하도록 masking을 해줍니다. masking은 위치 i에서의 예측이 i보다 작은 위치의 출력에만 의존하는 것을 보장해줍니다.
Reprinted Figure.2

Scaled Dot-Product Attention 의 입력은 dx차원의 Query, Key, 그리고 dv 차원의 Value로 구성됩니다. scaled dot product attention은 모든 Query와 Key의 dot product를 계산한 후, 이를 root(dk)로 나누어 softmax 함수를 적용해 Value에 대한 가중치를 얻습니다. 결과적으로, attention 함수의 output은 value들의 weighted sum으로 계산됩니다.
이는 기존의 dot-product attention 방식에서 scailing factor(1/root(dk))를 곱해준 결과입니다. dk가 너무 커지는 경우 gradient가 매우 작아지기 때문에 dot product를 스케일링하여 이를 해결하는 방식입니다.

Multi-Head Attention 은 d_model 차원의 단일 어텐션 함수를 수행하기보다, Q, K, V를 h번 서로 독립적으로 학습된 linear projection으로 dk, dk, dv 차원에 linear projection을 수행하는 방식입니다.
이후 projection된 값들이 병렬적으로 attention을 거쳐 dv 차원의 output을 만듭니다. 이를 다시 합친 후에, 다시 한 번 projection하여 최종 결과값을 만듭니다.
multi-head attention은 모델이 서로 다른 위치의 정보들을 동시에 주목할 수 있도록 만들어줍니다. single-head attention에서는 평균화로 인해 이러한 부분이 제한됩니다.
또한, 각 head마다 차원이 감소되었기 때문에, 전체 차원에 대한 single-head attention과 총 cost가 비슷합니다.
이러한 방법들은 Transformer에 다음과 같이 적용됩니다.

하위 레이어에는 Attention layer 외에도 Fully connected feed-forawrd network가 있습니다. 활성화 함수로는 ReLU를 사용하며, 모두 동일한 구조이나 다른 레이어 간에는 서로 다른 파라미터를 사용합니다.
input/output 토큰을 d_model 차원의 벡터로 변환하기 위해 학습된 임베딩을 사용합니다. 또한, 디코더의 출력을 선형 변환과 softmax를 사용하여 다음 토큰의 확률로 변환시킵니다.
transformer는 2개의 임베딩 레이어와 pre-softmax 선형 변환에서 동일한 가중치를 공유합니다. 임베딩 레이어에서는 가중치에 root(d_model)을 곱해줍니다.
Transformer는 RNN, CNN을 포함하지 않기 때문에 모델이 시퀀스의 순서를 인식할 수 있도록 토큰 간의 위치에 대한 정보를 모델에 주입해주어야합니다. 이를 위해 아래와 같이 positional encoding을 encoder와 decoder 스택의 입력 임베딩에 추가합니다.

pos는 위치를, i는 차원을 나타냅니다. 즉, positional encoding의 각 차원은 하나의 sin에 해당하며 파장의 길이가 2pi에서 10000 - 2pi까지 급격하기 변화합니다.
이러한 함수를 선택한 이유는 고정된 offset k에 대해 PE(pos + k)가 PE(pos)의 선형 함수로 표현되어 모델이 상대적인 위치를 잘 학습할 것이라는 가설에 기인합니다.
Reprinted Table.1
Table.1은 self-attention layer와 Recurrent layer, Convolution layer를 1) layer당 시간 복잡도, 2) 병렬화할 수 있는 계산의 양, 3) 장기 의존성(long-range dependency)간의 path 길이를 비교한 결과입니다.
Table.1에서 알 수 있듯이 self-attention layer는 상수 시간안에 모든 position을 연결합니다. Recurrent Layer의 경우에는 이 작업에 O(n)이 소요됩니다. 따라서 일반적인 경우(= n<d) self-attention가 recurrent layer에 비해 빠릅니다.
Convolution layer는 커널의 너비 k가 n보다 작은 경우 input과 output의 모든 쌍을 연결하지 않습니다. contiguous kernel의 경우 O(n/k)개의 stack이, dilated convolution의 경우 O(log_k(n))개의 stack이 필요합니다. 이는 장기 의존성 간 path의 최대 길이를 증가시킵니다.
일반적으로 convolution layer는 recurrent layer보다 cost를 k배 많이 사용하지만, saparable convolution의 경우 복잡도를 O(knd + nd^2)가지 줄일 수 있습니다. 즉, k=n의 경우 transformer와 동일합니다.
모델을 학습하기 위한 데이터는 WMT 2014 데이터셋 English-German(450m)과 이보다 더 큰 WMT 2014 데이터셋 English-French(3,600m)을 사용합니다. 문장은 BPE(Byte Pair Encoding)을 사용하여 인코딩합니다. 학습 배치는 약 25,000개의 원문 토큰과 25,000개의 타겟 토큰으로 구성되어있습니다.
Optimizer는 Adam을 사용했으며, 학습률은 아래 공식에 따라 자동적으로 조정되었습니다. 이는 학습 초반 단계(warmup_steps)동안 학습률을 선형적으로 증가시키고, 이후에는 스텝 번호(step_num)의 역제곱근에 비례하여 감소시키는 방식입니다.

학습에는 아래와 같은 정규화 방식을 사용하였습니다.
Residual Dropout는 각 sublayer의 출력에 dropout을 적용한 후, 이들의 입력을 합쳐 정규화하는 것입니다. 또한, 인코더와 디코더 스택의 임베딩과 포지션 임베딩의 합을 구할 때도 dropout을 적용했습니다.
Label Smoothing을 사용하였기에 perplexity가 증가했지만, 정확도와 BLEU score를 개선했습니다.
Reprinted Table.2
English-to-German 작업에서 Transformer 모델(big)은 이전의 SOTA 모델 대비 BLEU 점수를 2.0 이상 초과하여 28.4를 기록하였습니다. 또한, 학습 비용도 2.310^19 FLOPs로 타 모델과 앙상블 대비 매우 적었습니다. 학습 비용의 경우 base 모델은 3.310^18로 두드러지게 적었으며, base 모델 또한 이전 기술 대비 높은 BLEU 점수를 기록했습니다.
또한, English-to-French 작업에서는 big 모델이 BLEU 점수 41.0을 기록했습니다. 이는 앙상블을 제외한 모델들의 성능을 뛰어넘는 결과이며, 학습 비용 또한 1/4 수준으로 이루어낸 결과입니다.
Reprinted Table.3
Transformer에서 다양한 컴포넌트의 중요성을 비교하기 위해, base 모델을 여러 방식으로 변형하여 성능변화를 측정했습니다. 이 때 사용한 데이터셋은 WMT 2013 English-German(newstest2013)입니다.
(A) 계산량은 일정하게 유지하며, attention head수와 key, value값의 차원을 변경한 결과입니다. Single-head-attention은 optimal한 설정보다 BLEU 점수가 0.9 낮았습니다. 또한, head 수가 너무 많아지면 점수가 다시 떨어졌습니다.
(B) key의 크기를 줄일경우, 모델의 성능이 저하됨을 확인했습니다. 즉, compatibility을 결정하기가 쉽지 않으며 dot product보다 더 정교한 함수가 유익할 수 있음을 시사합니다.
(C), (D) 더 큰 모델이 더 좋은 성능을 보인다는 가설을 검증하였으며, P_drop의 증가가 BLEU를 증가시키는 것은 dropout이 과적합을 방지하는데 매우 유용함을 시사합니다.
(E) sinusoidal 포지션 임베딩을 학습된 포지션 임베딩으로 대체했고, base 모델과 동일한 성능을 내는 것을 확인했습니다.
이 연구에서는 Transformer을 소개했습니다. 전체적으로 attention에 기반한 최초의 sequence transduction model입니다. 일반적으로 encoder-decoder 모델에서 사용되는 recurrent layer들을 multi-head self-attention으로 대체했습니다.
Transformer는 번역 작업에서 RNN, 또는 CNN 기반의 아키텍처보다 훨씬 빠른 학습속도를 보였습니다. 또한, WMT 2014 English-German, English-French에서 새로운 SOTA를 달성했습니다. 특히, English-German에서는 이전에 보고된 모든 단일 및 앙상블 모델보다 성능이 뛰어났습니다.
연구자들은 Attention 기반 모델의 미래를 기대하고 있고, 이를 다른 작업에도 적용할 계획입니다. Transformer를 텍스트 외의 입력과 출력에 대해서도 처리할 수 있도록 확장하고, 대규모 입력과 출력에 대해 효율적으로 처리하기 위한 국소적이고 제한된 attention 메커니즘을 조사할 계획입니다.