논문리뷰

[논문 리뷰] Attention Is All You Need(Transformer)

씨주 2024. 9. 22. 11:43

Attention Is All You Need

https://arxiv.org/pdf/1706.03762

 

0. Abstract

당시 주요한 sequence 변환 모델들은 complex recurrent 이나 인코더와 디코더를 포함한 convolutional neural network를 기반으로 한다. 또한 최신 성능의 모델들은 attention 메커니즘을 통해 인코더와 디코더가 연결되어 있다. 저자들은 Transformer라고 하는 recurrence와 convolution 전체를 배제한 오직 attention 메커니즘을 기반으로 한 새로운 네트워크 아키텍처를 제시한다. 2개의 기계번역을 대상으로 한 실험은 이 모델들의 품질이 우수함과 동시에 더 병렬 처리가 좋고 학습에 적은 시간을 필요로 한다는 것을 보여준다. 저자들은 Transformer가 크고 제한된 학습데이터에서도 English 구문 분석도 성공적으로 달성하면서 다른 task에도 일반화가 잘 이루어진다는 것을 보여준다.

 

1. Introduction

Recurrent 모델은 특히 입력, 출력 시퀀스의 symbol position을 따라 계산을 고려한다. 계산 시간의 단계에 맞게 position를 정렬하면, 이전의 hidden state(h_t-1)와 position t의 입력에 대한 함수로 hidden state(h_t)가 생성된다. 이런 고유의 sequential 본성은 메모리제약으로 인해 예제간 배치가 제한되므로 더 긴 시퀀스 길이에서 중요한 학습 예제 안에서 병렬화가 불가능하다. 

Attention 메커니즘은 compelling sequence modeling과 transduction model에서 필수적인 요소가 되어가고 있다. 이는 입출력 시퀀스의 거리에 상관없이 의존성을 모델링한다. 하지만 여전히 attention 메커니즘은 RNN과 함께 사용된다.

Transformer에서는 RNN 대신 전적으로 attention 메커니즘에 의존한 모델로 입출력 사이에 전체 종속성을 이끈다. Transformer는 병렬화가 잘 되며, 번역에서 최신 성능에 도달한다.

 

2. Background

sequential 계산을 줄이기 위해 모든 입출력 position의 hidden representation을 병렬로 계산하는 convolutional neural network을 basic building으로 사용하는 Extended Neural GPU, ByteNet, ConvS2S의 기반이 형성되었다. 이 모델들은 먼 거리의 종속성을 학습하기는 어렵다. Transformer의 경우, attention-weighted position의 평균을 사용하여 연산수를 줄이지만 유효한 resolution을 줄인다. 이를 Multi-Head Attention으로 완화하였다.

Self-attention(intra-attention)은 sequence의 representation을 계산하기 위해 single sequence의 서로 다른 position과 연관된 attention 메커니즘이다. Self-attention은 성공적으로 다양한 task에서 사용되었다.

end-to-end memory network는 sequence-aligned 반복을 대신하여 recurrent attention 메커니즘을 기반으로 하여 간단한 언어 질문 답변, 언어모델링 task를 잘 수행하였다.

Transformer는 sequence-aligned RNN이나 convolution을 사용하지 않고 입출력 표현을 계산하는 전체적으로 self-attention에 의존한 첫번째 transduction 모델이다.

 

3. Model Architecture

encoder은 (x1, ... xn)의 input sequence를 z = (z1, ..., zn)에 매핑한다. z가 주어지면 decoder는 한번에 하나의 요소로 구성된  output sequence(y1, ..., ym)를 생성한다. 각각의 스텝에서 모델은 자동회귀방식으로, 다음 symbol을 생성할 때 이전에 생성된 symbol을 추가 input로 사용한다.

Figure 1.

 

3.1. Encoder and Decoder Stacks

Encoder :

encoder는 N=6인 동일한 레이어의 스택으로 구성되어있다. 각 layer는 2개의 sub-layer를 가지고 있다. 첫번째는 multi-head self-attention이고 두번째는 position-wise fully connected feed-forward network이다. 각각 2개의 sub-layer주변에 residual connection 다음 layer normalization을 사용했다. 각각 sub-layer의 출력값은 LayerNorm(x + Sublayer(x))이다. Sublayer(x)는 sub-layer 그 자체에서 구현되는 함수이다. residual connection을 활성화하기 위해서, 모든 sub-layer와 embedding layer는 dimension 512으로 출력된다.

 

Decoder :

decoder는 또한 N=6인 동일한 레이어의 스택으로 구성되어있다. encoder layer의 2개의 sub-layer에 추가로, encoder stack의 출력에 대해 multi-head attention을 수행하는 3번째 sub-layer를 추가한다. encoder와 비슷하게, 각 sub-layer 주변에 residual connection 다음 layer normalization을 사용했다. 또한 self-attention sub-layer를 수정했는데, 출력 embedding이 position i에 대한 예측이 알려져있는 i보다 작은 position의 출력에만 의존할 수 있도록 보장한다. (i보다 큰 position의 출력이 반영되면 안되기 때문이다.)

 

3.2. Attention

attention 함수는 출력에 query, key-value 쌍을 매핑하는 것이며, query, key, value, output 모두 벡터이다. 출력은 연관된 key와 query의 호환성 함수에 의해 계산된 각 value에 할당된 가중치의 합이다.

 

3.2.1. Scaled Dot-Product Attention

Figure 2.

입력은 dimension d_k의 query, key와 dimension d_v의 value로 구성된다. query와 모든 key를 dot product하고 각 √ d_k로 나누어 value의 weight를 구할 수 있는 softmax 함수를 적용한다. d_k의 값이 큰 경우, dot product가 커져 softmax 함수가 매우 작은 기울기를 가진 영역으로 밀려날 것으로 예상된다. 이를 해결하기 위해 dot product를 1/√ d_k로 계산한다. (Q(query set, K(key set), V(value set))

 

3.2.2. Multi-Head Attention

key, value, query를 d_model dimensional의 single attention function으로 수행하는 것보다 각각 d_k, d_k, d_v로 서로다른 선형 투영으로 h번 선형 투영하는 것이 더 유익하다는 것을 발견했다. 각각의 예측된 query, key, value에 대해 attention 함수는 병렬적으로 수행하여 d_v dimensional 출력값을 생성한다. 이것들은 concat하고 한번 더 투영하여 Figure 2처럼 최종값이 결과로 나온다. 

Multi-head attention은 모델이 다른 position에 있는 다른 representation subspace로부터 얻은 정보에 집중 한다. attention head가 하나만 있으면 평균치가 이를 억제한다.

 

3.2.3. Applications of Attention in our Model

Transformer는 3가지 방법으로 multi-head attention을 사용한다.

- encoder-decoder attention layer에서, query는 이전 decoder layer에서 생성되었고 key, value는 encoder의 출력에서 온다. 이는 decoder 각각의 모든 position이 input sequence의 전체 position을 참고한다. (이 덕에 decoder는 입력 문장의 중요한 단어를 선택적으로 attention할 수 있다.)

- encoder는 self-attention layer를 포함한다. self-attention layer에서 모든 key, value, query는 encoder의 이전 layer 출력값에서 온다. encoder의 각 position은 encoder의 이전의 layer에 있는 모든 position을 참고한다.

- 비슷하게, decoder의 self-attention layer는 decoder의 각 position이 decoder의 모든 position(본인을 포함한 그 이상의 position까지를 포함)을 참고한다. auto-regressive property를 보존하려면 decoder의 leftward information flow를 막아야 한다.  (나는 고양이를 좋아한다. 라는 문장을 번역할 때 고양이를 번역하기 위해 전체 문장이 아닌 나는 고양이까지만 참고하여 번역해야 한다.) 이를 위해 illegal 연결에 해당하는 softmax의 입력값의 모든 value를 -inf로 만들면서 scaled dot-product attention을 구현한다. (를 좋아한다. 에 해당하는 벡터를 모두 -inf로 만들어 softmax를 취했을 때 0이 되도록 만들어 번역에 참고하지 않도록 처리한다.)

 

3.3. Position-wise Feed-Forward Networks

attention sub-layer와 더불어, encoder, decoder의 layer는 각 position에 동일하게 fully connected feed-forward network (FFN)를 적용한다. 이는 ReLU activation 사이에 두고 2개의 linear transformation로 구성된다.

linear transformation는 position에 따라 동일하지만, layer마다 다른 parameter를 사용했다.(모든 position에 동일한 transformation을 했지만 각 layer마다 다른 weight와 bias를 가져 다른 정보를 학습한다.) 이를 위해 커널 사이즈 1인 2개의 convolution을 사용했다.

 

입력과 출력의 차원은 d_model = 512이고 inner-layer는 차원 d_ff = 2048이다.(내부 차원을 크게 설정하여 더 복잡한 패턴을 학습할 수 있도록 하였다.)

 

3.4. Embeddings and Softmax

sequence transduction 모델들과 동일하게, d_model차원의 벡터 입출력을 토큰으로 변환하는 embedding을 사용했다. 또한 평범한 linear transformation과 softmax함수를 사용하여 다음 token의 확률을 예측한다. 2개의 embedding layer(입력토큰을 벡터로 변환, 벡터를 출력토큰으로 변환)와 pre-softmax linear transformation 사이에서 같은 가중치행렬을 공유하여 사용한다. (2개의 독립적인 가중치 행렬을 학습하지 않아 모델의 크기가 줄어든다. 같은 가중치를 사용하기 때문에 학습 효율이 증가한다.) embedding layer에서 가중치에 √ d_model를 곱한다. (3.2.1에서 설명한 바와 같이 큰 값으로 인해 임베딩 벡터값이 너무 크거나 작아지는 것을 방지한다.)

 

3.5. Positional Encoding

transformer는 recurrence, convolution이 없기 때문에, model을 sequence하게 만들기 위해서 position에 대해 정보를 줘야한다. 이를 위해 입력 embedding에 positional encoding을 추가한다. positional encoding은 embedding과 d_model 동일한 차원을 가지기 때문에 2개를 합칠 수 있다. 저자들은 positional encoding방법으로 다른 주파수의 sin, cos함수를 사용하였다. 여기서 pos는 position, i는 dimension이다.

positional encoding의 각각의 차원은 정현파에 해당한다. 이 함수를 선택한 이유는 offset k에 대해 PE_pos+k와 PE_pos의 position은 선형적으로 표현될 수 있기 때문에 모델의 relative position를 쉽게 학습할 수 있다고 가정했기 때문이다. (sin, cos의 주기적 성질로 단순한 선형관계로 표현될 수 있다. 각 토큰이 얼마나 떨어져있든 항상 일정한 규칙을 따르기 때문에 상대적 위치차이를 학습하면 먼 거리에 대해서도 동일한 패턴을 인식할 수 있다. the cat sat에서 cat에 대해 the와 sat의 상대적 거리를 동일한 방식으로 인코딩할 수 있다.)

또한 저자들은 학습한 positional embedding을 사용하여 비교해본 결과 동일한 결과를 만든다는 것을 발견했다. 모델을 학습시킬 때보다 긴 sequence length를 입력해도 잘 작동하기 때문에 정현파(sin, cos)를 사용했다.

 

4. Why Self-Attention

self-attention을 사용하는데는 3가지 고려사항이 있다.

첫번째는 layer마다의 계산복잡성의 합이다. 두번째는 필요로 하는 sequential 수행을 측정할 때 병렬화할 수 있는 계산양이다.

세번째는 장거리 종속성 사이에서 path length이다. 이런 종속성을 학습하는데 영향을 끼치는 핵심요소 중 하나는 forward, backward가 통과해야 하는 path의 길이이다. 입출력 position 사이의 짧으면 장거리 종속성을 학습하는 것이 쉬워진다. (해당 내용에 대해 recurrent와 self-attention을 비교한 table1을 참고하면 된다.)

Table 1.

 

5. Training

training data, hardware, optimizer 등 학습에 사용한 요소들을 언급하였으니 논문을 참고하면 된다.

 

6. Results

Table 2.
Table 3.

다른 모델들과 비교하여 최신 성능을 달성하였음을 Table 2와 3을 통해 보여준다.

 

7. Conclusion

저자들은 전체적으로 attention을 기반으로한 첫번째 sequence transduction model인 Transformer를 선보였다. 이는 encoder-decoder 아키텍처에서 최근 흔히 사용하는 recurrent layer를 multi-headed self-attention으로 대체한 모델이다. 

번역에서 Transformer는 RNN, CNN 기반 아키텍처보다 훨씬 빠르고 정확한 성능을 보였다.

마지막으로 저자들은 Transformer를 text 이외의 image, video와 같은 더 큰 입출력을 다루도록 확장할 계획이라고 언급하였다. (이것이 ViT)

 

참고 강의 : https://youtu.be/6s69XY025MU?si=1wVGZS-LQ44p00IT