학습 기록/논문 리뷰

[논문 리뷰] Attention is All You Need

hyunzzzzzz 2022. 3. 9. 20:51

Attention is All You Need

Transformer 구조를 처음 소개한 논문이다. 향후에 BERT, GPT등 Transformer 구조를 활용한 새로운 SOTA 모델들이 나오기 때문에 기본이 되는 Transformer에 대한 이해가 필요하다.

 

Abstract 

* 초록색 표시 - 과거 모델 관련 정보 (e.g. 과거 모델의 한계)
* 노란색 표시 - 논문에서 소개하는 모델 관련 정보 (e.g. 과거 모델의 어떤 한계를 어떻게 극복했는가)

기존에 우세한 시퀀스 변환 모델들은 복잡한 recurrent 또는 인코더와 디코더를 포함한 Convolution neural network를 활용했었다. 이 모델들은 또한 인코더와 디코더를 Attention 매커니즘을 통해 연결했다고 한다. 이와 다르게 Transformer는 기존의 recurrence와 convolution에 전혀 기대지 않고, 오직 Attention 매커니즘만을 활용한다.  English-to-German/ English-to-French 기계 번역 task 실험에서 Transformer는 우수한 번역 품질과 더불어 병렬처리 가능성 현저하게 줄어든 모델의 학습 속도를 보여줬다. 


Introduction : 기존 모델들의 한계점

RNN(Recurrent neural networks), LSTM(long short-term memory), GRU(Gated Recurrent Unit)등과 같은 모델들은 언어 모델과 기계 번역같은 변환 문제와 시퀀스 모델링에 최신 기법으로서 자리잡아 왔다.

그러나 Recurrent 모델들은 일련의 학습 과정에서 현(t) 단계의 hidden state(h(t))를 output으로 내보내기 위해서 이전(t-1) 단계의 hidden state(h(t-1))와 현 단계의 input data(x(t))를 받아와야 한다.  이전 학습 단계의 output을 다음 단계의 input으로 넣어줘야하는 학습 과정은 본질적으로 순차적인 특징(sequential)을 띄게 된다. 순차적인 특징 병렬처리를 불가능하게 만들며, 모델에 넣어주는 *sequence의 길이가 길어질수록 매우 취약하다. 

Transformer는 Attention 매커니즘만을 사용하여 input과 output간의 전반적인 의존성을 끌어내고, 병렬처리를 가능하게 만들며,  8개의 P100 GPU에서 불과 12시간만에 학습한 후, 번역 퀄리티 부분에서 SOTA를 달성할 수 있다.

* 앞에서 뒤로 정보를 전달하는데, 결국 마지막에는 맨 앞의 정보는 희미해질 수 밖에 없다. 기울기 소실 문제 발생


 

Model Architecture : Transformer의 구조

가장 경쟁력 있는 신경망 기반 시퀀스 변형 모델들은 Encoder-Decoder구조를 가지고 있다. Encoder는 input 시퀀스의 연속적인 표현(representation)인 (x1, ..., xn)을 다른 연속적인 표현들인 시퀀스 z = (z1, ...zn)으로 맵핑한다. 해당 z를 통해 decoder는 각 time step마다 하나의 element씩 output 시퀀스인  (y1, ... ym)을 생성한다. 이 때 각 time step에서 다음 symbol을 생성할 때, 모델은 이전에 생성된 symbol을 추가적인 input으로 사용하는 Auto Regressive한 특성을 갖는다. Transformer는 전반적인 Encoder-Decoder 구조를 취하는데, self-attention과 point-wise fully connected layer들을 encoder와 decoder에 각각 쌓아올린 구조를 갖고 있다.

Transformer의 Encoder-Decoder 구조


 

Encoder & Decoder Stacks

Encoder

6개의 동일한 layer를 쌓아올려 구성되었다. 각각의 layer들은 2개의 sub-layer들로 구성되는데, 첫 번째는 multi-hear self-attention 메커니즘이고 두 번째는 단순 position-wise Fully Connected feed-forward 네트워크다.

각 sub-layer마다 residual connection을 차용하였고, 이후 layer normalization이 뒤따르도록 구성되어 있다. 즉, 각각의 sub-layer의 output이 LayerNorm( x + Sublayer(x) )를 따르는 것이다.  residual connection의 적용에 편의를 위해 임베딩 층을 포함한 모든 sub-layer들이 output 차원으로 를 갖도록 통일했다. 

  • Residual connection (Skip connection)
plane layer vs. residual connection block

Plane layer
layer의 input x에 대한 output을 feature vector y라고 할 때, direct로 학습하는 왼쪽 그림은  y = f(x) 수식을 갖는다. 기존에 학습한 정보(x)를 보존하지 않고 변형시켜 새롭게 생성(y)하는 정보라고 볼 수 있다. 이 경우, 신경망의 층이 깊어질수록 한 번에 학습해야할 mapping이 너무 많아져 학습이 어려워진다.
ex) 오픈북이 불가능한 시험 : 시험의 범위가 많아질수록(=층이 깊어지고 한번에 학습할 mapping이 많은 경우) 공부가 어렵다.

Residual connection block
residual connection block은 y = f(x) + x의 수식을 갖는다. 여기서는 layer의 output인 y가 기존에 학습한 input인 x의 정보도 그대로 보존하면서 추가적으로 학습으로 새롭게 생성된 정보도 갖고 있다. output에 이전 레이어에서 학습했던 정보를 그대로 가져와 연결하면서 해당 층에서 추가적으로 학습해야할 정보만을 mapping 학습하게 된다.
ex) 오픈북이 가능한 시험 : 이미 배웠던 내용(x)가 제공되기 때문에 추가적으로 학습해야할 정보만을 공부할 것.

 

  • Layer normalization 연산 과정  visualization
더보기

 

 

 

 

 

Decoder

encoder와 동일하게 6개의 동일한 layer를 쌓아올려 구성되었다. 다만 encoder와 동일한 두 sub-layer 사이에 encoder의 output에 대해 multi-head attention을 수행하는 sub-layer를 추가로 삽입하였다. 따라서 decoder의 sub-layer는 총 3개로 구성되어 있다.

decoder도 각 sub-layer 마다 layer normalization이 뒤따르는 residual connection을 사용하였다. 또한 decoder stack 내의 self-attention layer를 수정하였는데, 어떤 i번째 위치에서 prediction을 진행할 때, 미래의 위치들에 있는 target token에 접근하는 것을 불가능하게하고 해당 위치 i와 그 이전의 위치들에 대해서만 의존하도록 masking 기법을 이용하였다.


 

  •  

Attention

  • Attention의 역할
더보기

input으로 받은 데이터 중에 어떤 부분에 말 그대로 'Attention(주목)' 해야하는지  알려주는 filter의 역할을 한다. 아래 그림을 예시로 들었을 때, 이미지를 input 데이터로 받고, 해당 attention layer는 인물에 attention을 주어 주변 배경의 주목도를 확 줄여버리는 역할을 한다고 볼 수 있다.

어텐션 함수는 query, key, value, output들이 모두 벡터일 때, query와 key-value 쌍의 집합을 output에 맵핑하는 것이다. (1)query와 그에 대응되는 key의 compatibility function에 의해 계산된 어텐션 가중치들로 (2)value들을 weighted sum하여 어텐션 output이 계산된다.

 

Scaled Dot-Product Attention

Scaled Dot-Product Attention의 input은 차원의 query와 key 그리고 차원의 value 벡터들로 구성된다. 모든 query와 key를 dot product하고 각각을 루트 로 나눈 뒤 value들에 대한 weight를 얻기 위해 softmax 함수를 적용한다.

실제로는 모든 쿼리들이 하나의 행렬 Q로써, 키와 밸류들은 행렬 K와 V로써 packed 되어 동시에 어텐션 함수가 계산된다. 어텐션 output 또한 V와 shape가 동일한 행렬이 되며 아래와 같이 계산된다.

흔히 사용되는 어텐션 함수는 additive attention과 dot-product attention인데, dot-product attention의 경우 scaling factor로써의 1/루트 를 제외하면 본 연구의 제안 알고리즘과 동일하다. additive attention은 단일 은닉층의 feed-forward network를 이용해 compatibility function를 계산한다. 두 방법이 이론상 동일한 복잡도를 갖는 반면, 실무에서는 dot-product attention이 고도로 최적화된 행렬곱 code로 구현될 수 있어 더 빠르고 더 공간효율적이다.

쿼리와 키 벡터의 차원 가 작은 값일 떄는 additive attention과 dot-product attention이 유사한 퍼포먼스를 보이는 반면, 가 클 때 scaling을 적용하지 않으면 additive attention이 dot-product attention의 성능을 앞질렀다.

 

Multi Head Attention

차원의 key, value, query들을 가지고 단일 어텐션을 수행하는 대신 query, key, value를 각각  차원으로 변환하는 서로 다른 h개 attention head들이 학습 가능한 선형 사영(linear projection)을 진행한 뒤, 각각의 다른 projected version에 대해 병렬적으로 어텐션을 진행하는 것이 더 이롭다는 사실을 확인하였다. 각 사영 버전들로부터 서로 다른 h개의 차원 결과들을 얻고 그 결과들을 concat 한 뒤 한번 더 linear projection하여 최종 결과 벡터를 얻는다.

멀티헤드 어텐션은 모델이 서로다른 domain들의 서로다른 representation 부분공간(subspace)들로부터 결합적으로 정보에 접근하도록 한다. 단일 어텐션 헤드에서는, averaging 때문에 이러한 부분 공간들로부터의 joint한 정보 접근이 억제된다.

해당 논문에서는 h = 8의 parallel attention head를 사용하였고, 각 헤드마다  =  =  / h = 64의 차원을 설정하였다. 각 헤드에서 감소된 차원 덕분에 단일 헤드로 full 차원 어텐션을 진행할 때와 전체적인 계산 cost가 동일하다.

  • 벡터 연산 visualization
더보기

 

 

 

 

 

 

 

 

 

 

 

 

 

 

각 attention head들은 서로 다른 표현을 잡아내 학습한다. (ex. 사진의 인물 / 사진의 구름 / 사진의 식물)

 

 


 

Position-wise Feed-Forward Networks

어텐션 sub-layer에 더하여, 우리의 encoder와 decoder는 각각의 position에 대해 독립적으로, 동등하게 적용되는 fully connected feed-forward network를 포함한다. position-wise feed-forward networks에서는 두 번의 선형변환(linear transformation)과 그 사이에 ReLU activation을 포함한다. 

선형변환이 다른 position들에 대해 동일하게 적용되는 반면, 층간(layer to layer)에는 서로 다른 파라미터()를 사용한다. 이는 커널사이즈가 1인 convolution을 두 번 진행하는 것으로도 생각할 수 있다. input과 output의 차원은 동일하게  이고, Feed Forward network 내부의 hidden layer는 2048의 차원을 갖는다. (d_model = 512 → 2048  → 512)


 

Embeddings and Softmax

다른 시퀀스 변환 모델들과 마찬가지로 input과 output 토큰들을  차원 벡터로 변환하기 위해 학습가능한 임베딩을 사용하였다. 또한, decoder의 output으로 next-token 확률을 예측하기위해 학습가능한 선형변환과 소프트맥스 함수를 사용했다. 이 때, 두 임베딩 층과 softmax 이전의 선형변환에 동일한 가중치행렬을 공유하여 사용하였다. 임베딩 층들에서는 그 가중치들에 를 곱하여 사용하였다.


 

Positional Encoding

Transformer 모델은 어떠한 recurrence나 convolution도 포함하지 않기 때문에, 순차적 입력으로 sequence에 대한 순서 정보를 전달할 수 없었다. 따라서 모델이 시퀀스의 순서를 반영 및 사용할 수 있도록 시퀀스 내의 토큰들의 상대적/절대적 위치에 관한 정보들을 주입해야한다. 이를 위해 우리는 encoder와 decoder의 최 하단에 위치한 input embedding에 positional encodings를 더하였다. positional encoding은 임베딩과 마찬가지로  차원을 갖게하였고 그렇게해서 두 벡터가 더해질 수 있게하였다. 학습 가능한, 혹은 고정된 positional encoding의 선택지는 매우 다양하다. 해당 논문에서는 다른 주기의 sin과 cosine 함수를 사용했다.  저자들은 성능차이는 그다지 없었지만, 학습에서 미처 접하지 못한 길이의 Sequence가 들어왔을 때도 적절히 처리가 가능한 Sinusoidal 방식을 채택하였다.

pos = 토큰 위치 인덱스, i = 벡터 차원 인덱스


 

Result

BLEU 벤치마크 뿐만 아니라, Machine Translation, English Constituency Parsing 등 General Task에 대해서도 좋은 결과를 나타냈다.


 

Conclusion

  • 해당 논문은 기존과 다르게  Attention만을 사용한 Architecture인 Transformer를 제안
  • Attention 방식과 효율적인 병렬 연산을 통해 계산량을 크게 감소시켰으며, 학습시간을 단축하면서 정확도는 기존 SOTA를 뛰어넘는 결과를 얻어냈다. (심지어 여태까지 발표된 모든 방식을 Ensemble한 것 보다도 높은 성능이다.)
  • 특정 Task에 종속적이지 않고 General하게 이곳저곳 적용이 가능하다는 것 또한 실험을 통해 입증하였다.

 

 


 

 

Reference

[논문] Attention is All You Need

(7) ResNet (Residual connection)

Visual Guide to Transformer Neural Networks

The Annotated Transformer

  • Transformer 논문 코드 적용