Attention Is All You Need(NIPS 2017)
0. Abstract
- Sequence transduction 모델은 `RNN` 혹은 `CNN`에 기반하며 `Encoder-Decoder` 구조를 포함
- 가장 좋은 성능을 기록한 모델들도 Encoder와 Decoder를 `Attention mechanism`으로 연결
- 본 논문은 RNN과 CNN을 완전히 배제한, 오직 Attention mechanism에 기반한 새로운 네트워크 `Transformer`를 제안
- Transformer는 병렬화가 가능하며, 훈련에 적은 시간이 소요됨과 동시에 두 개의 번역 task에서 우수한 성능을 보임
- WMT 2014 English-German Translation task에서 28.4 BLEU을 기록하여 최고의 성능을 보임
- WMT 2014 Engish-French Translation task에서는 8개의 GPU를 통해 3.5일 동안의 훈련으로 41.8 BLEU을 기록해 single model SOTA를 달성했으며, Training cost 또한 기존에 방법론보다 훨씬 낮음
- Large-Scale 및 Limited 학습 데이터에서도 English constituency parsing 분석에 성공적으로 적용하여 Transformer가 다른 task에서도 잘 일반화된다는 것을 보임
1. Introduction
- `RNN`, `LSTM`, `GRU` 등의 모델이 language modeling, machine translation 등과 같은 sequence modeling 및 transduction problem에서 자주 사용되며 좋은 성능을 보이고 있으며, 이후 수많은 노력을 통해 Recurrent Language Model과 Encoder-Decoder 아키텍쳐의 경계를 넓혀가는 중임
- Attention mechanism은 다양한 작업에서 sequence modeling과 transduction model에서 필수적인 부분이 되었으며, input 또는 output sequence의 거리에 관계없이 종속성을 모델링할 수 있음
- 그러나 대부분의 연구에선 Attention mechanism과 Recurrent network는 함께 사용
- Transformer는 Recurrence를 Attention으로 대체해 Input과 Output의 global dependency를 도출
- Transformer는 또한 병렬화가 가능해 여러 GPU를 활용한 훈련을 통해 훈련 시간을 단축
3. Model Architecture
3.1 Encoder and Decoder stacks
Encoder
- Encoder는 동일한 6개(=N)의 layer로 구성되어 있으며, 각 layer는 Multi-head Self-Attention과 Position-wise Fully Connected Feed-Forward network 2개의 sub-layer가 존재
- 2개의 sub-layer 각각에는 `Layer Normalization` 기반의 `Residual Connection`를 적용
- 각 sub-layer의 output은 LayerNorm(x + Sublayer(x))으로, Sublayer(x)는 sub-layer 자신으로 구성된 함수
- Figure 1에서 Add는 자기 자신을 더하는 것을, Norm은 Layer Normalization을 의미
- Residual Connection을 통해 그레이디언트의 흐름을 보존하고, Layer Normalization을 통해 학습을 안정화
- Residual Connection을 유용하게 하기 위해, 모델의 모든 sub-layer와 embedding-layer의 output의 차원은 512로 구성
- 이는 sub-layer 자신으로 구성된 함수를 더하는 과정에서 차원을 맞추기 위함으로 보임
Decoder
- Decoder 또한 동일한 6개(=N)의 layer로 구성되며, 2개의 sub-layer와 추가적인 sub-layer 존재
- Encoder에서 생성된 output에 대한 `Multi-head Attention`을 수행하는 layer
- Encoder와 동일하게 Layer Normalization 기반의 Residual Connection을 모든 sub-layer에 적용
- Self-Attention layer에 Masking 수행
- time step i에서 예측을 수행할 때 이미 알고 있는 position인 i 이전의 time step position만 사용
3.2 Attention
- Attention 함수는 벡터 형태의 `query`와 `key-value` 쌍을 output에 mapping하는 것
- output은 value들의 weighted sum 형태이며, 해당 가중치는 key와 query의 `Scaled Dot-Product Attention`, `Softmax`에 의해 계산
- `Self-Attention`이라 표현하는 이유는, 기존에 Encoder의 context vector와 Decoder의 hidden state 간에 Attention을 수행해 관련성을 확인하는 것과 다르게 같은 Encoder, Decoder 내 연관성을 확인하기 때문
3.2.1 Scaled Dot-Product Attention
- input은 d_k 차원의 query와 key, d_v 차원의 value로 구성
- query와 모든 key들 간의 ` Dot Product(MatMul)`을 수행한 후 d_k 차원의 제곱근으로 나눠주는 `scaling` 수행
- `Masking`은 Decoder의 첫 Self-Attention 과정에서 사용(Opt)
- 이로 인해 `Scaled Dot-Product Attention`이라 명명
- 이후 가중치를 얻기 위해 해당 값에 `Softmax` 함수를 적용하고 value와의 weighted sum을 통해 output 산출
- Attention을 계산할 때 가장 많이 쓰이는 방법은 `Additive Attention`과 `Dot-Product Attention`
- Dot-Product Attention은 scaling factor(d_k의 제곱근으로 나눔)를 제외하고는 본 논문의 algorithm과 동일
- Additive Attention은 한 개의 hidden layer의 feedforward network를 통해 compatibility function을 계산
- Dot-Product Attention은 Additive Attention과 이론적 복잡도는 같지만, 고도로 최적화된 행렬 곱셈 코드를 사용할 수 있기 때문에 실제로는 훨씬 빠르고 공간 효율적
- 작은 값의 d_k에선 두 방법이 비슷하게 작동하지만, d_k 값이 큰 상황에선 scaling이 없을 경우 Dot-Product Attention보다 Additive Attention의 성능이 더 좋음
- 이는 d_k 값이 클 경우에 Dot-Product의 크기가 매우 커져 Softmax 함수가 매우 작은 gradients의 영역으로 밀려나가는 것이기 때문으로 추정
- 따라서 이러한 부분에 대응하기 위해 Dot-Product의 scale을 d_k의 제곱근으로 조정
3.2.2 Multi-head Attention
- Query, Key, Value를 모두 model의 차원에 맞춰 single attention function을 수행하는 것 대신 `Linear Projection`을 h번 수행하여 각각 d_k, d_k, d_v 차원으로 선형 투영
- 각각의 Linear Projection은 서로 다른 학습된 가중치를 활용
- 이렇게 투영된 Query, Key, Value들을 각각 병렬적으로 Attention function을 수행한 후 d_v 차원의 output을 산출
- 이후 이 값들은 concatenate되며 다시 project를 수행해 최종 값을 산출
- `Multi-head Attention`은 모델이 서로 다른 위치에서 서로 다른 respresentation subspace의 정보를 활용할 수 있게 함
- 본 논문에선 h=8, 즉 8개의 head를 사용하여 Attention 수행
- d_k = d_v = d_model / h = 64
- query와 key의 차원과 value의 차원은 결국 모델의 차원을 head의 개수로 나눠 동일한데, 왜 다른 표기를 사용할까? 아래 6.1 Model variants 파트에서도 이는 모두 동일
- 각 head의 차원이 감소했기 때문에 총 계산 비용은 전체 차원을 사용하는 single-head attention과 동일
- d_k = d_v = d_model / h = 64
3.2.3 Applications of Attention in Our Model
- `Encoder-Decoder Attention` layer에서 query는 이전 Decoder layer에서 생성되며, memory key와 value는 Encoder의 output에 포함
- 이는 Decoder의 모든 position에서 input sequence의 모든 position을 attend 하게 함
- 이러한 방식은 전형적인 Seq2Seq 모델의 Encoder-Decoder Attention mechanism을 모방
- Encoder의 `Self-Attention` layer에서는 모든 key, value, query가 이전 Encoder layer의 Output에서 가져옴
- Decoder의 `Self-Attention` layer 또한 해당 position까지의 모든 position을 attend 하게 함
- `Auto-Regressive` 속성을 유지하기 위해서 Decoder에서 왼쪽으로 정보가 흐르지 않게 해야함
- 이를 위해 scaled dot-product 내부에서 Softmax의 Input 값 중 Masking 해야 하는 값들은 모두 (-∞)로 설정
- 이는 Figure 2를 통해 확인 가능
3.3 Position-wise Feed-Forward Networks
- Encoder와 Decoder의 각 layer들은 attention layer에 더해 각각의 position이 개별적이지만 동일하게 적용되는 `Fully-Connected Feed-Forward Network`을 포함
- 2개의 linear transformation로 구성되며 그 사이에는 `ReLU` 활성화 함수 포함
- linear transformation은 한 layer 내 다른 position들에 대해선 동일하게 적용되지만, 각각의 layer들은 다른 파라미터 사용
3.4 Embedding and Softmax
- Input 및 Output token을 d_model 차원으로 변환하기 위해 이미 알려져 있는 embedding 알고리즘(`GloVe`,`FastText`, `word2vec` 등) 사용
- 잘 알려진 `Linear transformation`과 `Softmax`를 통해 Decoder의 Output을 예측된 다음 token에 대한 확률로 변환
- 2개의 embedding layer와 softmax 이전의 linear transformation에서 같은 weight matrix를 공유
- embedding layer에선 이 가중치 값들에 d_model의 제곱근을 곱해줌
- 이는 embedding이라는 것이 결국 어떠한 token을 잘 표현해주는 vector로 변환하는 과정이기 때문에, input과 output이 correlation을 가지고 있는 경우 같은 weight를 공유하는 것이 바람직할 수 있음
3.5 Positional Encoding
- Transformer에는 recurrence 혹은 convolution이 없기 때문에 sequence의 순서 정보를 반영하기 위해 sequence 내 token들의 상대적 혹은 절대적인 위치를 주입해주어야 하며, 이를 위해 `Positional Encoding`을 활용
- Positional Encoding은 embedding과 동일한 d_model 차원을 가지고 있어 embedding과의 합이 가능
- `sine` 및 `cosine` 함수를 통해 구성
- pos는 position이며, i는 dimension
- 차원마다 다른 주기를 갖는 sine 함수를 통해 위치 정보를 인코딩
- 파장은 2파이에서 10000*2파이 까지의 기하 수열을 따름
- 이 함수를 사용한 이유는 어떤 고정된 offset k에 대해서 PE_pos+k를 PE_pos의 linear funciton으로 나타낼 수 있기 때문
- 기존에 positional encoding도 실험해봤지만, 해당 함수와 큰 차이가 없었음
- sinusoidal function을 선택한 이유는 모델이 훈련 중에 마주한 sequence보다 더 긴 길이의 sequence에 대해서 예측을 할 경우에도 위치 정보를 더 잘 파악할 수 있기 때문
4. Why Self-Attention
- 본 논문에서 Recurrent Layer 혹은 Convolutional Layer가 아닌 Self-Attention Layer를 활용한 3가지 이유
- Layer 당 total computational complexity
- 필요한 최소 sequential 연산 횟수로 측정 가능한 병렬화할 수 있는 computation의 총량
- 네트워크 내 long-range dependency 간의 path length
- long-range dependency를 학습할 수 있어야 멀리 떨어져 있는 두 단어간의 관계를 학습할 수 있어 이는 sequence transduction task에서 중요한 부분
- 해당 path의 길이가 짧으면, input과 output sentence 간의 long-range dependency를 학습하기 쉬워짐
- 따라서 input 및 output position 간의 maximum length도 비교
- 매우 긴 sequence를 포함하는 task의 경우 computational performance를 향상시키기 위해 각 output position을 중심으로 input sequence에서 크기 r의 neighborhood만 고려하는 restricted model도 가능
5. Training
5.1 Training Data and Batching
- standard WMT 2014 English-German dataset(4.5M sentence pairs with 37,000 tokens)
- WMT 2014 English-Frence dataset(36M sentences with 32,000 tokens)
5.2 Hardware and Schedule
- 모델 학습을 더욱 빠르게 처리하기 위해 8개의 NVIDIA P100 GPU를 통해 모델을 훈련
- base model : 각 training step 0.4 second → 총 100,000 steps(12 hours)
- big model : 각 training step 1.0 second → 총 300,000 steps(3.5days)
5.3 Optimizer
- `Adam` optimizer(B1 = 0.9, B2 = 0.8, epsilon = 10^-9)
- `leraning rate`는 `warmup_steps`에 해당하는 training step에선 점점 증가시키고, 그 이후`step_number`의 역제곱에 비례하여 감소
- warmup_step = 4,000
5.4 Regularization
Residual Dropout
- 각 sub-layer(Multi-head Self-Attention, Feed-Forward Neural Network, Masking Self-Attention 모두)에서 Add & Normalization을 수행하기 전 `Dropout`을 적용
- base model에서 Dropout 비율은 0.1
- Encoder 및 Decoder에서 embedding과 positional encoding을 합친 후 Dropout 적용
Label Smoothing
- `Label Smoothing`이란, 말그대로 Label을 깎는, 즉 Smoothing하게 하여 모델의 일반화 성능을 꾀하는 것
- hard label(one-hot)을 soft label로 변화
- ex> hard label [0,1,0,0]이 있다면 이를 soft label [0.025, 0.925, 0.025, 0.025]로 변화
- epsilon_ls = 0.1로 설정
- 이러한 방식은 모델이 확실하지 않은 것을 훈련하지만, 모델의 정확도와 BLEU point를 높여줌
6. Results
6.1 Machine Translation
- Transformer(big) 모델은 WMT 2014 English-German task에서 28.4 BLEU point로 SOTA 달성
- Transformer(base) 모델은 이전의 모든 모델보다 높은 BLEU point를 기록했지만, Training Cost 또한 가장 낮음
- WMT 2014 English-French task에서도 Transformer(big) 모델이 1/4도 안되는 Training Cost로 가장 높은 41.8 BLEU point로 SOTA 달성
- Dropout 비율은 0.3 대신 0.1 사용
- base 모델은 10분 간격으로 작성된 5개의 checkpoint를 평균하여 얻은 단일 모델을 사용
- beam size = 4, alpha = 0.6으로 `beam search` 진행
6.2 Model variants
- (A) : head의 개수를 각각 1, 4, 16, 32로 변경시키면 이에 맞게 key와 value의 차원 또한 변경
- head의 개수가 16개일 때 가장 좋은 성능을 기록(단일 head보다 +0.9 BLEU)
- head의 개수가 너무 많아도 성능에는 그리 좋지 않은 영향
- (B) : key의 dimension을 낮추는 것이 모델 학습에 악영향을 끼침
- compatibility를 결정하는 것은 쉽지 않음
- Dot product보다 더 정교한 compatibility function을 사용하는 것이 더 유용할 수 있음
- (C), (D) : Encoder 및 Decoder의 Layer 개수를 나타내는 N, 모델의 dimension, Feed-Forward Neural Network의 차원 등 모델의 크기를 키울수록 더 좋은 성능을 나타냄
- dropout 및 label smoothing 또한 over-fitting을 피하는데 효과적
- (E) : Transformer의 sinusoidal positional encoding 대신 기존에 방법을 사용했을 때 base 모델과 성능 차이가 없음
6.3 English Constituency Parsing
- Transformer가 다른 task로 일반화가 가능한지 확인하기 위해 English Constituency Parsing에 대한 실험 진행
- 해당 모델은 4개의 layer로 구성되며, 모델의 차원은 1024
- task-specific tuning이 부족함에도 불구하고, Transformer는 Dyer et al., (2016)을 제외한 모든 모델보다 좋은 성능을 보임
7. Conclusion
- 본 논문에선 Encoder-Decoder 구조에서 매우 흔하게 사용되는 recurrent layer를 `Multi-headed Self-Attention`으로 대체하여 처음으로 Attention으로만 구성되어 sequence tranduction을 수행하는 Transformer 모델을 제안
- Transformer는 번역 작업에서 convolutional 혹은 recurrent layer보다 확연하게 빠른 학습이 가능
- WMT 2014 English-German, English-French 번역 작업에서 기존 ensemble 모델보다 좋은 성능으로 SOTA 달성
- 향후 Transformer를 image, audio, video 등의 대규모 input & output을 효율적으로 처리할 수 있는 Attention mechanism을 연구할 계획
Comment
- Transformer의 가장 큰 의의는 sequence data, 특히 Machine Translation에서 기존에 RNN, CNN을 완전히 배제하고, 오로지 Attention Mechanism만을 통해 낮은 Training cost를 가지고도 높은 성능을 보였으며, 병렬화를 통해 학습 속도를 단축시켰다는 점에 있다.
- Transformer의 Model 구조에서 핵심적인 부분은 크게 3가지이다.
- `Scaled Dot-Product Attention`과 `(Masking) Multi-head Self-Attention`을 통해 기존에 방식과 다른 어텐션 수행
- `Position-wise Feed-Forward Neural Network`을 통해 position별로 Linear Projection 수행
- Sequence Data의 순차적인 특징을 반영하기 위해 Embedding 값에 `Positional Encoding` 적용
- 본 논문에서 Encoder와 Decoder의 Layer 개수는 6개로 동일하다. 해당 실험에서 이 Layer의 개수를 늘릴수록 성능이 좋아지는 것을 확인할 수 있는데, 8개의 Layer까지 실험해 봤지만 최종적인 선택은 Big 모델 또한 6개의 Layer이다. Layer를 6개에서 8개 혹은 그 이상으로 늘리는 것이 성능이 크게 좋아지지 않아서, 혹은 과적합의 우려로 인한 것이라고 생각하는데 이러한 Layer의 개수 또한 더욱 고민해 볼 필요가 있는 부분이라는 생각이 든다.
Reference
[1] https://ratsgo.github.io/insight-notes/docs/interpretable/smoothing