Abstract
기존의 시퀀스 변환 모델은 복잡한 RNN, CNN, attention mechanism으로 구성된 인코더와 디코더 구조를 기반으로 한다. 그러나 본 논문에서는 attention mechanism 기반의 Transformer라는 보다 심플한 구조의 네트워크를 소개한다. 실험 결과 Transformer는 기존의 모델보다 품질이 뛰어나고 병렬화가 더 쉬우며 학습 시간이 현저히 짧다.
1 Introduction
기본의 RNN 기반의 시퀀스 변환 모델은 본질적인 문제점이 존재한다. RNN은 time step t에 입력된 데이터와 이전의 time step t-1에 출력된 hidden states $h_{t-1}$를 입력받아 현재의 hidden states $h_{t}$를 생성한다. 이러한 순차적인 방식은 자연스럽게 훈련 데이터들 안에서의 병렬적인 학습을 불가능하게 하며, 메모리 제약으로 인해 데이터들이 batch 단위로 훈련되기 때문에 시퀀스의 길이가 길어질수록 중요하다.
attention mechanism은 입력과 출력 시퀀스의 길이와 상관없이 의존성을 모델링할 수 있도록 하며 다양한 분야에서 필수적인 요소로 사용되었다. 그러나 여전히 attention mechanism은 RNN과 같이 사용된다.
본 논문에서는 Transforemer를 제안한다. Transformer는 반복되는 구조, 순차적인 방식이 아닌 입력과 출력 간의 전역적인 종속성을 모델링하기 위해 attention mechanism을 완전히 활용하여 더 많은 병렬화를 허용하는 모델 구조이다.
3 Model Architecture
모든 경쟁적인 시퀀스 변환 모델들은 encoder-decoder 구조를 가진다. input sequence $(x_1, ..., x_n)$가 주어지면 encoder는 continuous representations $z=(z_1, ..., z_n)$로 맵핑한다. decoder는 $z$가 주어지면 각 time step마다 한 번에 한 요소씩 output sequence $(y_1, ..., y_m)$를 생성한다. 각 단계에서 모델은 auto-regressive하게 다음 요소를 생성하기 위해 이전에 생성된 요소를 추가 입력으로 사용한다.
Transformer는 그림 1과 같이 여러 개의 self-attention과 fully connected layer로 구성된 encoder와 decoder로 이뤄진다.

3.1 Encoder and Decoder Stacks
Encoder
6개의 identical layer로 구성되며, 각 layer는 두 개의 sub-layer를 가진다. 첫번째는 multi-head self-attention mechanism이고 두번째는 간단한 fully connected feed-forward network이다. 우리는 두 sub-layer에 대해서 layer normalization 다음에 residual connection을 적용했다. 즉, 각 sub-layer의 출력은 $LayerNorm(x+Sublayer(x))$이다.
Decoder
decoder도 6개의 identical layer로 구성되며, 하나의 identical layer는 encoder의 두 개의 sub-layer와 encoder 출력에 대해 multi-head self-attetion mechanism을 수행하는 sub-layer를 하나 더 추가한 세 개의 sub-layer를 가진다. 또한 마찬가지로 noramalization이후 residual connections을 추가한다. 또한 decoder의 self-attention에서는 마스킹을 통해 position $i$에 대한 예측을 위해 $i$보다 이전의 위치의 출력에만 의존할 수 있도록한다.
3.2 Attention
3.2.1 Scaled Dot-Product Attention
scaled dot-product attetion의 입력은 $d_k$ 차원의 queries과 keys, $d_v$ 차원의 values로 구성된다. 입력이 주어지면 먼저 queries와 keys의 dot products를 수행한다. 그 뒤 $\sqrt{d_k}$로 스케일을 조정한다. 그리고 softmax를 적용하여 나온 score값으로 values에 가중치를 준다. 실제로는 모든 훈련 데이터들에 대해 동시에 계산을 수행한다. 식은 queries, keys, values의 훈련 데이터들에 대한 메트릭을 각각 $Q, K, V$라고 하면 식은 다음과 같다.
$$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V$$
3.2.2 Multi-Head Attention
단일의 attention mechaism을 사용하는 대신에, queries, keys, values를 각각 서로 다르게 학습된 파라미터로 선형 투영을 여러 번 수행한다. 그리고 각각 선형 투영된 queries, keys, values에 대해 attention을 병렬로 수행한다. 그리고 그림 2와 같이 각각의 결과를 이어붙이고(concatenate) 다시 한 번 선형 투영을 수행한다.

multi-head attention은 다른 위치에 대해 다르게 표현된 공간의 정보에 대해 공동으로(jointly) attention할 수 있도록 하며 식으로 표현하면 다음과 같다.
$$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W_O \quad $$
$$\text{where} \quad \text{head}_i = \text{Attention}(Q W^Q_i, K W^K_i, V W^V_i)$$
$ W^Q_i, W^K_i, W^V_i$는 각각 학습 가능한 파라미터이다.
3.2.3 Applications of Attention in our Model
Transformer는 세 가지 방법의 multi-head attetion을 사용한다.
- encoder-decoder attetion 레이어에서, queires는 이전 decoder 레이어에서 나오고 keys와 values는 encoder 출력에서 나온다. 이를 통해 decoder는 입력 시퀀스의 모든 정보에 대해 attetion을 할 수 있다.
- encoder에는 self-attention 레이어가 포함된다. self-attetion 레이어의 모든 keys, values, queries는 encoder의 이전 레이어의 출력으로부터 나온다. encoder는 이전 레이어에서 출력된 정보로 attention을 할 수 있다.
- decoder에서도 self-attention을 수행한다. auto-regressive 속성을 유지하기 위해 decoder에서 왼쪽으로 정보가 흐르는 것을 방지하기 위해 scaled dot-product attention 내부의 softmax에 입력되는 값을 마스킹한다.
3.3 Position-wise Feed-Forward Networks
추가적으로 encoder와 decoder의 각 레이어에는 fully connected feed-forward network도 포함되어 있으며, 이 네트워크는 attention과 달리 각 위치에 개별적으로 동일하게 적용된다. 이 네트워크는 두 개의 linear transformation과 그 사이에 ReLU activation으로 구성된다.
$$\text{FFN}(x) = \max(0, xW_1 + b_1)W_2 + b_2$$
3.4 Embeddings and Softmax
우리는 다른 시퀀스 변환 모델과 비슷하게 입력 데이터와 출력 데이터를 벡터로 변환하는 임베딩을 학습한다. 또한 decoder의 출력으로 다음 토큰 예측 확률을 생성하기 위한 linear transformation과 softmax function을 학습한다.
3.5 Positional Encoding
Transformer는 recurrence와 convolution이 없다. 시퀀스의 순서를 학습하기 위해 반드시 시퀀스의 각 토큰의 상대적이고 절대적인 위치에 대한 정보를 주입해야한다. 이를 위해 encode와 decoder의 입력 임베딩에 positional encodings를 추가한다. 본 논문에서는 서로 다른 frequencies를 가지는 sine과 cosine function을 사용하며 식은 다음과 같다.
$$\text{PE}(\text{pos}, 2i) = \sin\left(\frac{\text{pos}}{10000^{2i/d_{\text{model}}}}\right)$$
$$\text{PE}(\text{pos}, 2i+1) = \cos\left(\frac{\text{pos}}{10000^{(2i+1)/d_{\text{model}}}}\right)$$
pos는 단어의 위치로 0부터 텍스트 길이까지를 가지고, i는 위치 인코딩의 차원 인덱스로 0부터 $d_model/2-1$까지 가진다. wavelengths는 $2\pi$부터 $10000 \times 2\pi$ 까지 기하급수적으로 증가함으로써 모델은 위치 간의 상대적 차이를 더 명확히 인식할 수 있다. 즉 한 위치에서 다른 위치로의 상대적 이동이 수학적으로 간단한 함수로 표현될 수 있어, 모델이 상대적인 위치 관계를 학습하는데 유리하다.
4 Why Self-Attention
self-attention의 사용에 대한 동기부여를 위해 세 가지 필수 조건을 고려한다.
- total computational complexity per layer(레이어당 총 계산 복잡도)
- minimum number of sequential operations required(필요한 최소 시퀀스 연산 횟수)
- path length between long-range dependecies(장거리 종속성 사이의 경로 길이)
표 1을 확인해보면 self-attention은 한 번에 시퀀스의 모든 위치에 대해 계산할 수 있지만, recurrent는 시퀀스 길이 n만큼 순차적으로 연산을 수행해야한다. 또한 시퀀스 길이 n보다 representation demensionality d가 더 작으면 self-attention이 recurrent보다 빠르게 동작할 수 있다. 그리고 일반적으로 시퀀스 길이보다 d가 훨씬 크다.
매우 긴 시퀀스를 처리할 때 계산 성능을 개선하기 위해 시퀀스 각 위치의 주변의 크기 r만 고려할 수 있도록 제한할 수 있다. 이러한 경우 최대 시퀀스 길이가 $O(n/r)$로 증가한다.
convolutional의 경우 kernel 사이즈 k가 n보다 작으면, $O(n/k)$의 연산이 필요하며, dilated convolution의 경우 $O(\log_k(n))$의 연산이 필요하다. 일반적으로 convolutional은 recurrent보다 k배 더 높은 계산비용을 가진다.
