데이터 분석 일지

[Paper Review] Transformer: Attention is All You Need 본문

Paper Review/Natural Language Processing

[Paper Review] Transformer: Attention is All You Need

-ˋˏ ♡ ˎˊ- 2024. 1. 27. 11:18
본 논문에서는 최초로 Attention Mechanism만 기반으로 하는 모델, Transformer를 제시했다. Transformer로 인하여 NLP 분야는 굉장히 발전하였고,  BERT와 GPT도 모두 Transformer의 encoder, decoder 구조를 사용한다. 

 

1. Introduction

 
이전까지는 Attention mechanism과 RNN 또는 CNN을 함께 사용하는 경우가 많았다. 하지만 이는 RNN의 순차 처리로 인하여 장기의존성 문제가 발생한다. RNN은 은닉층을 사용하는데, 이 은닉층의 output인 h_t는 h_(t - 1)와 input_t를 input으로 받아 함수를 적용하는 구조를 가지고 있다. 이때 구조 특성상 이전 정보인 h_(t - 1)를 모두 저장해야하기 때문에 메모리가 부족하게 되고 이로 인하여 은닉층의 과거 정보가 마지막까지 전달되지 못하는 문제를 장기의존성 문제라고 이야기 한다. 
 
factorization trick과 conditional computation으로 LSTM과 GRU로 장기의존성 문제를 개선해냈지만 RNN의 순차적인 특성으로 인하여 sequence가 길어질 경우에는 결국 장기의존성 문제가 발생하게 된다. 장기의존성 문제가 일어나는 가장 큰 이유는 RNN의 일괄 처리이다. 이 문제를 개선하기 위하여 병렬 처리가 가능한 Attention mechanism만 사용한 Transformer를 최초 제시한다.
 

2. Model Architecture

 
Transformer는 encoder와 decoder로 이루어져있고, 각각의 encoder와 decoder 속에는 stacked self-attention과 point-wise fully connected layers로 구성되어 있으며, 모든 layer에 대해서 auto-regressive하다. 아래의 Figure 1은 Transformer의 구조이다. 
 

Figure 1: The Transformer - model architecture

 
2. 1. Encoder and Decoder Stacks
 
Encoder: 인코더는 N = 6의 동일한 계층으로 쌓아져 있다. 각각의 layer는 2개 sub-layer로 이루어져 있는데, 첫 번째는 multi-head self-attention mechanism이고, 두 번째는 position-wise fully connected feed-forward network이다. 각각의 두 sub-layer를 거친 후에는 residual connection을 수행한다. 이는 Add & Norm 부분으로, 모든 레이어를 학습하면 gradient vanishing 문제가 나타날 수 있으므로 특정 레이어를 건너 뛰고 잔여 부분만 학습을 진행한다. Add에서는 각 sub-layer의 출력 값에 원래의 입력 값을 더해주는 계산을 진행하고, Norm에서는 뉴런의 평균 및 분산을 계산한다. 따라서 이는 LayerNorm(x + Sublayer(x))와 같이 계산한다. 이 residual connection을 유용하게 계산하기 위해 모든 계층의 출력 차원을 d_model = 512로 설정한다. 
 
Decoder: 디코더도 N = 6의 동일한 계층으로 쌓아져 있다. 인코더의 두 sub-layer에 이어 디코더의 세 번째 sub-layer masked multi-head attention은 인코더 스택의 출력을 입력으로 받는다. 디코더에서도 인코더와 마찬가지로 각 sub-layer 수행 후에 residual connection을 수행한다. 본 연구는 디코더의 self-attention을 masking을 이용하여 현재 위치 데이터보다 이후의 데이터는 사용하지 못하도록 변경하였다. 현재 데이터보다 이후의 데이터를 사용할 경우 정보 누수, overfitting, 불안정한 예측 등의 문제가 발생할 수 있기 때문이다. 
 
2. 2. Attention
 
Attention 함수는 query와 key-value를 output에 매핑하는 것이라고 생각할 수 있다. 이때 query, key, value와 output 모두 벡터이다. output은 값의 가중합으로 계산되고, 이때의 각 가중치는 query와 key를 호환성 함수에 입력하여 얻은 출력으로 이루어진다. 
 
2. 2. 1. Scaled Dot-Product Attention
 
Scaled Dot-Product Attention의 입력은 query,  d_k 차원의 key와 d_v 차원의 value로 구성된다. value의 가중치를 얻기 위해 query와 key를 내적한 값에 sqrt(d_k)로 나누어주고 이를 softmax 함수에 적용시킨다. 본 연구에서는 query와 key와 value를 각각 Q, K, V의 행렬로 합쳐서 계산한다. 수식은 아래와 같다. 
 
$$Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V$$
 
가장 보편적으로 사용되는 Attention 기법에는 Additive Attention과 Dot-Product Attention이 있다. 두 함수는 이론적으로 비슷하지만 dot-product attention이 더 빠르고 공간효율적이기 때문에 dot-product attention을 사용한다. 또한 d_k 값이 작을 경우에는 두 함수가 비슷하게 수행되었지만 d_k 값이 큰 경우에는 additive attention은 스케일링 없이 좋은 성능을 보였고, dot-product attention은 1/sqrt(d_k)로 스케일링을 진행해줘서 gradient vanishing 문제를 막는다. Q와 K의 내적 값이 커질 때 스케일링 없이 softmax 함수를 취해버리면 gradient vanishing 문제가 나타나게 된다. 따라서 QK^T와 비례한 d_k로 스케일링을 진행하는 것이다. 
 
2. 2. 2. Multi-Head Attention
 
d_model 차원의 query, key, value를 입력 받아 하나의 attention을 수행하는 것보다, 각 값을 각 차원에 대해 learned linear projection하고, d_k와 d_v로 차원 변환한 후 h 번의 attention을 수행하는 것이 모델 성능이 더 좋다는 것을 발견하였다. 출력된 값들은 concat 후에 다시 한 번 더 linear projection을 수행하고 최종 output을 얻게 된다. 이 구조는 아래의 Figure 2와 같다. 
 

Figure 2: (left) Scaled Dot-Product Attention (right) Multi-Head Attention consists of several attention layers running in parallel

 
multi-head attention을 여러 번 수행할 경우 서로 다른 위치에 있는 값에 공동으로 주의를 기울일 수 있기 때문에 본 연구에서는 h = 8로 multi-head attention을 병렬로 8번 수행한다. 각 헤드는 병렬로 수행한 뒤 concat되고 이를 output 행렬과 곱하면된다. 이는 아래의 수식과 같다. 
 
$$ MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O$$ $$where head_i = Attention(QW{^Q_i}, KW{^K_i}, VW{^V_i})$$
 
각 헤드 모두 차원을 축소하기 때문에 single attention을 사용하나, multi-head attention을 여러 번 수행하나 computational cost는 비슷하다. 
 
2. 2. 3. Applications of Attention in our Model
 
Transformer에서는 multi-head attention을 세 가지 방으로 사용한다. 
 

  • encoder - decoder attention: query는 이전 decoder에서, key-value는 encoder의 출력에서 온다. 
  • self-attention in encoder: query와 key, value 모두 이전 encoder의 출력에서 온다. 
  • masked self-attention in decoder: 디코더에서의 auto-regressive한 형식을 사용하기 위하여 왼쪽에서의 정보 흐름을 모두 막는다. masking을 이용하여 현재 위치보다 이후 위치의 정보에 대한 유사도를 -∞으로 만든다. 

2. 3. Position-Wise Feed-Forward Networks
 
인코더와 디코더 모두 이 네트워크를 포함하고 있다. 이 네트워크는 아래의 수식과 같이 두 개의 선형 변환 사이에 ReLU 함수가 있다. 위치에 따라서 선형 변환은 같은 방식으로 진행되지만 각 가중치 값은 다르게 작용하며, 입력과 출력 차원은 d_model = 512이고, 은닉층의 차원은 d_ff = 2048이다. 
 
$$ FFN(x) = max(0, xW_1 + b_1)W_2 + b_2$$
 
2. 4. Embedding and Softmax
 
embedding은 주어진 token을 실수 벡터 공간에 매핑하는 것을 의미한다. 다른 sequence transduction model과 비슷하게 Transformer도 input과 output의 token을 고차원(본 연구에서는 d_model 차원) 벡터로 변환하기 위하여 learned embedding을 사용한다. input과 output embedding 모두 같은 가중치를 사용한다. 
 
2. 5. Positional Encoding
 
Transformer는 Recurrent Model을 사용하지 않아서 각 데이터의 순차적인 정보를 알 수 없다. 따라서 positional encoding은 위치 정보를 얻기 위한 중요한 기법이다. 본 연구에서는 sine 함수와 cosine 함수를 사용한다. 아래의 수식에서 pos는 위치이고 i는 차원을 의미한다.
 
$$ PE(pos,2i) = sin(pos/10000^{\frac{2i}{d_model}})$$ $$PE(pos,2i+1) = cos(pos/10000^{\frac{2i}{d_model}})$$
 
PE_(pos + k)를 PE_pos의 linear function으로 표현할 수 있기 때문에 모델이 쉽게 상대적인 위치를 참조할 수 있다고 이야기한다. 본 연구에서는 learned positional embedding이나 sinusoidal version이나 결과의 차이는 없지만 모델이 훈련 중 경험하지 못한 (긴) 길이의 sequence에 대해서도 성능이 좋은 sinusoid를 선택하였다. 
 

3. Why Self-Attention
 

다른 모델보다 Self-Attention이 성능이 더 좋은 이유를 세 가지로 나누어 설명하고 있다. 이는 아래의 표를 참고하여 설명한다. 아래 표의 n은 sequence의 길이를 나타내고, d는 representation dimension을 의미하며, k는 convolution의 커널 크기를 나타내고, r은 restricted self-attention의 neighborhood의 길이를 나타낸다. 
 

Table 1: Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types

 
첫 번째로 대부분 n > d이기 때문에 self-attention이 RNN보다 complexity가 더 작다. 위의 표에서 conplexity에 대하여 self-attention은 O(n^2 · d)이고 recurrent는 O(n · d^2)이다. self-attention의 n은 1이고, 각각  레이어의 차원은 모두 d = 512이다. 따라서 self-attention이 recurrent보다 complexity가 더 작아 더 간단하게 계산할 수 있다. 
 
두 번째로 self-attention은 병렬 처리하기 때문에 계산 효율이 더 높다. recurret는 순차적으로 데이터를 입력 받고 순차적으로 계산하며 이전 hidden state를 통해 현재 hidden state를 계산한다. 따라서 계산 시간 복잡도가 각각 O(n)이 될텐데 self-attention의 n = 1이므로 O(1)로, 상수 시간 만큼 계산 효율이 올라간다. 
 
세 번째로 path length가 짧을 수록 장기의존성을 학습하기 쉽다. maximum path length은 제일 멀리 떨어져있는 token 사이의 거리로, encoder sequence length + decoder sequence length로 나타낼 수 있다. self-attention은 병렬 처리를 하기 때문에 maximum path length가 O(1)고, recurrent와 convolution은 순차 처리를 하기 때문에 O(n)이다. 
 
참고로 표의 restricted self-attention은 r만큼의 neighborhood끼리 학습하는 self-attention을 의미한다. 따라서 maximum path length가 O(n / r)이 된다. 본 연구에서 restricted self-attention에 대해서는 향후 연구에서 조사할 계획이다. 
 
Transformer는 Attention이라는 가중치로 인하여 token들 간의 대응 관계를 확인할 수 있다. 이전의 RNN이나 CNN과 같은 모델들은 인간이 학습 과정에서 어떤 형식으로 가중치를 부여하는지 어떤 파라미터에 더 집중하는 지 알 수 없었지만 Transformer는 attention mechanism만 사용함으로써 이를 확인할 수 있게 한다. 
 

4. Training

 

4. 1. Training Detail

 

본 연구는 WMT 2014 English-German dataset의 450만개의 sentence pairs(37,000 tokens)를 Transformer를 학습시키는데 기준으로 사용한다. 또한 WMT 2014 English-French dataset에서는 360만개의 sentence pairs(32,000 tokens)를 사용한다. 

 

모델 학습은 8개의 NVIDIA P100 GPU로 이루어졌다. base 모델은 12시간 동안 100,000 step를 학습시켰고, big 모델은 3.5일 동안 300,000 step을 학습시켰다. 

 

Optimizer는 Adam Optimizer를 사용하였다. 본 연구의 학습에서는 warm-up을 통해 초기 4,000 step까지는 선형적으로 learning rate 값을 증가시키고, 이후에는 학습 단계에 반비례하게 감소시켜, 모델의 안정성을 높였다. learning rate는 아래의 수식에 따라 결정한다. 

 

$$lrate = d{^{−0.5}_{model}} · min(step\_num^{−0.5}, step\_num · warmup\_steps^{−1.5})$$

 

본 연구의 학습에서는 세 가지 regularization을 사용한다. 첫 번째는 각 sub-layer의 출력에 residual dropout을 적용하는 것이고, 두 번째는 각 encoder와 decoder stack에 있는 embedding과 positional encoding의 합에 residual dropout을 적용하는 것이다. residual dropout은 residual connection과 dropout을 함께 적용하는 기법으로, drop out은 학습 과정 중 일부 뉴런을 비활성화하여 일반화 성능을 향상시키고 과적합을 줄이는 역할을 한다. 본 학습 과정에서는 P_drop = 0.1로 설정하여 dropout되는 뉴런의 비율을 0.1로 설정하였다. 마지막으로는 학습 중에 label smoothing을 적용하는 방법이다. label smoothing은 파라미터 값을 설정하여 실제 정답 클라스에 대한 확률을 1 - ε로 설정하여 학습 과정을 일반화시킨다. 본 학습 과정에서는 파라미터를 ε = 0.1로 설정하였다. 

 

4. 2. Training Results

 

4. 2. 1. Machine Translation

 

Transformer 모델이 다른 모델에 비해 성능이 높고 비용이 낮게 들었으며, WMT 2014 English-to-German translation, English-to-French translation에서 SOTA를 달성하였다. English-to-German을 big 모델에 적용하였을 때  BLEU 값은 28.4로 모든 모델에 비해 우수한 성적을 달성하였고, English-to-French를 big 모델에 적용하였을 때 BLEU 값은 41.0으로 전의 single 모델들보다 향상되었으며 비용을 1/4이나 절약할 수 있었다. 

 

4. 2. 2. Model Variations

 

model variations은 모델의 여러 조건을 변경해가며 성능에 어떤 영향을 끼치는지 실험하는 것이다. d_k가 작아지면 모델 성능은 나빠졌고, d_model이 커지면 모델 성능은 좋아졌다.  또한 residual dropout과 label smoothing을 사용하였을 때의 모델 성능이 더 향상되었다. 이는 regularization이 과적합을 피할 수 있다는 것을 증명한다. sinusoid 대신에 positional embedding을 사용했을 때의 모델 성능은 비슷하였다. 

 

5. Conclusion

 

본 연구에서는 attention mechanism만을 사용한 Transformer 모델을 최초로 제시하였고 이에 대한 실험 결과는 성공적이였다. RNN과 CNN과 달리 데이터를 병렬로 처리하여 장기의존성 문제를 개선할 수 있었고, 각 token 사이의 중요도와 관계를 수치화하여 계산하므로 모델의 가중치 부여 과정을 해석할 수 있다.