[Transformer] Attention Is All You Need
Introduction
RNN, LSTM, 그리고 GRU 활용 모델은 기계번역 등의 문제에서 뛰어난 성과를 보였다. 하지만 RNN 계열 모델은 재귀적인 특성 때문에 병렬 처리 연산이 불가능하다는 것이 치명적인 단점이다. 그러면 RNN의 어떤 점이 재귀적인 것일까? RNN 계열 모델은 이전 단계에서 계산한 $h_{t-1}$ 로 현 단계의 $h_t$ 를 순차적으로 생성하는 부분이 재귀적인 특성을 보여준다. 따라서 RNN 계층의 순환 구조가 연산을 병렬화할 수 없게 만든다. 그리고 RNN 계열 모델은 또 한 가지의 문제점이 존재한다. 입력과 출력 간의 대응되는 단어들 사이의 거리가 멀수록 그 관계를 모델이 잘 학습하지 못한다 (Long-term dependency problem). 이러한 단점을 보완하고자 seq2seq 구조에서의 Attention만을 사용하는 것을 바로 Transformer 라고한다.
Transformer Architecture
지금까지의 Transduction (변환) 모델은 대부분 RNN 계열의 encoder-decoder 구조를 가지고 있는 반면, Transformer은 encoder-decoder 구조를 사용하지만 그 내부는 attention과 point-wise feed forward network 만으로 구성되어 있다.
Encoder-Decoder Stacks
Encoder는 동일한 레이어의 구성으로 6개가 stacked 되어있고, 각 레이어는 아래 2개의 서브레이어로 이루어져 있다.
- Multi-head self-attention
- position-wise fully connected feed-forward network
각 서브레이어의 출력값은 $LayerNorm(x + SubLayer(x))$ 으로 skip connection과 normalization을 적용했다.
Decoder은 6개의 동일한 레이어로 stacked 되어있지만, 3 개의 서브레이어로 이루어져 있다.
- Multi-head self-attention
- Masked Multi-head self-attention
- position-wise fully connected feed-forward network
Encoder와 동일하게 skip connection와 normalization을 사용하고, Decoder가 출력값을 생성할 때 다음 출력(미래)에서 정보를 얻는 것을 방지하기 위해 masking을 사용한다.
Attention & Multi-head Attention
Scaled Dot-Product Attention의 입력값으로 $d_k$ 차원의 query-key와 $d_v$ 차원의 value가 들어간다. 가장 먼저 query와 key의 dot product을 계산하고, $\sqrt {d_k}$로 나눈 값을 softmax 함수를 통해 values의 가중치 값을 구한다. 여기서 $\frac {1}{\sqrt {d_k}}$ 값을 곱해주지 않으면 additive attention 보다 성능이 떨어진다고 한다.
$$
Attention(Q, K, V) = softmax(\frac {Q \cdot K^T}{\sqrt {d_k}})\cdot V
$$
$$
MultiHead(Q, K, V ) = Concat(head_1,..., head_h) W^{O}
$$
$$
where \ \ head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
$$
$$
W_i^Q \in R^{ d_{model} \times d_k}, W_i^K \in R^{d_{model} \times d_k}, W_i^V \in R^{d_{model} \times d_v}
$$
본 논문에서는 8 개의 head (attention)를 사용했다. 그리고 $d_k$ = $d_v$ = $\frac {d_{model}}{h}$ = 64를 사용했다.
Point-wise Feed forward Network
Multi-head self attention 레이어에서 출력된 값을 입력 값으로 받고, ReLU 활성함수를 사용한다. Point-wise Feed Forward Network (FFN)의 수식은 아래와 같다 (이는 conv 1 x 1 연산을 두 번하는 것도 동일하다).
$$
FFN(x) = max(0, xW_i + b_1) W_2 + b_2
$$
Positional Encoding
Transformer에서는 RNN 계열의 모델을 사용하지 않기 때문에 sequence에 있는 원소들의 위치에 대한 정보도 함께 넣어줘야 한다. 그래서 Encoder와 Decoder이 시작하기 전에 positional encoding를 입력하고 embedding에 더해준다. 모델에서 위치 정보를 추가하기 위해 사용한 것은 사인과 코사인함수이다.
$$
PE_{(pos,2i)}=sin\bigg(\frac {pos}{10000^{\frac {2i}{dmodel}}}\bigg)
$$
$$
PE_{(pos,2i + 1)}=cos\bigg(\frac {pos}{10000^{\frac {2i}{dmodel}}}\bigg)
$$
Results
Machine Translation (EN-DE & EN-FR)에 대한 실험 결과이다. Transformer (base model)만 봐도 EN-DE 기계번역 문제에서 가장 높은 성능을 보여줬고, 특히 Transformer (big) 은 EN-DE/EN-FR 기계번역 문제에서 모두 state-of-the-art를 수준의 성능을 보여 주었다.