arxiv: https://arxiv.org/abs/1706.03762
date: 05/23/2022
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30.
Abstract
- (논문 저술 시점) sequence 변환 모델, RNN/CNN 기반 모델
- (논문 저술 시점) 뛰어난 성능을 보이는 모델, encoder&decoder를 attention mechanism으로 연결한 것
→ 우리가 지금부터 소개하고자 하는 Transformer, attention mechanism만을 기반으로 한다! (RNN/CNN 일절 쓰지 않겠다!)
Transformer를 활용해서 기계번역 해봤는데 성능 좋았고(기계번역 외의 task에서도 좋은 성능), training data 양에 상관없이 좋은 성능을 보였고, 모델 훈련 시간도 상당히 감소했음
Introduction
→ 우리는 이와 완전히 다른, attention mechanism만으로 구성된 Transformer을 제안한다!
input과 output간의 global한 dependency 추출 위해 RNN에서 벗어난 모델 제안. Transformer, 유의미한 병렬화를 가능케하고 성능 개선 보장.
Background
- 기존 연구들
- sequential computation을 줄이기 위해서 여러 시도가 있어왔음(Extended Neural GPU, ByteNet, ConvS2S)
- 다만 이 연구들, 모든 input, output 포지션에서 병렬적으로 hidden representation을 계산하는 CNN을 기초 단위로 하여 모델을 구성
- 따라서 input과 output의 거리가 늘어날수록 계산도 마구 늘어남
- 거리가 멀어질수록 dependency 학습이 어려워진다
- Transformer
- 이 계산이 상수번으로 줄어든다
- attention 가중 position을 평균내는 과정에서 유효 해상도가 감소할 수 있으나, 이는 Multi-head Attention으로 상쇄 가능!
- Self-attention (intra-attention)
- 한 sequence의 representation 계산을 위해 해당 단일 sequence 내에서 서로 다른 위치에 있는 요소들을 관련시키는 attention mechanism
- +a
- end-to-end memory networks, sequence-aligned recurrence가 아닌 recurrent attention mechanism을 바탕으로 함. QnA / language modeling task에 좋은 성능을 보인다고 알려져있음
→ Transformer, sequence representation을 계산하기 위해 온전히 self-attention에만 의존하는 첫번째 transduction model. (RNN / CNN 안 쓴다!)
Model Architecture
-
기존 연구
- 가장 성능 좋았던 sequence transduction model(시퀀스 변환 모델) : encoder-decoder 구조를 가졌음
-
encoder : input sequence의 representation을 다른 연속적인 representation으로 매핑
-
decoder : 매핑된 결과를 바탕으로 output sequence를 생성 (한 timestep에 하나씩).
이 때 모델은 이전에 생성된 결과를 추가적 input으로 활용하기 때문에 auto-regressive함
-
Transformer
- encoder-decoder 구조를 사용하긴 하나, encoder-decoder 모두에서 self-attention과 point-wise, fully connected layers을 쌓아올려 사용
-
encoder과 decoder를 쌓아보자 ~
-
encoder
-
stack of N = 6 identical layers
-
각 레이어, 2개의 sub-layer을 가짐
- 1st sub-layer : multi-head self-attention mechanism
- 2nd sub-layer : simple, position-wise fully connected feed forward network
-
각 sub-layer, residual connection으로 연결 + layer normalization 뒤따름
- 각 sub-layer의 output,
LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))
-
Residual connection을 활성화시키기 위해서 모델의 모든 sub-layer과 embedding layer, dimension = 512인 결과값 도출 ( residual connection시 element-wise addition을 가능케 함 )
-
decoder
- stack of N = 6 identical layers
- 각 레이어, 3개의 sub-layer을 가짐 (기존 encoder의 두 sub-layer 사이에 추가적인 sub layer 추가)
- 1st sub-layer : multi-head self-attention mechanism
- 3rd sub-layer : encoder stack의 output에 대해 multi-head attention 수행
- 2nd sub-layer : simple, position-wise fully connected feed forward network
- 각 sub-layer, residual connection으로 연결 + layer normalization 뒤따름
- decoder stack의 self-attention layer 수정 (Multi-head Attention → Masked Multi-head Attention)
- masking, prediction 시 미래의 위치를 참고하지 못하게끔 함 (i 위치의 예측이 i 전의 위치의 output들만 참고하게끔-)
Attention
-
Attention function
- query, key, value, output이 모두 벡터일 때, query와 key-value 쌍의 집합을 output에 mapping하는 것
- output = query와 그에 대응되는 key의 compatibility function에 의해 계산된 weights들을 활용해 value를 가중합한 결과
-
Scaled Dot-Product Attention
- input : queries and keys of dimention dk, and values of dimension of dv
- process : 모든 query와 key를 내적 → 각각을 dk^1/2로 나눔 → apply softmax function (value들의 가중치를 얻기 위함)
→ 실제로는 queries를 하나의 행렬 Q로 보고 한꺼번에 계산. key와 value도 각각 행렬 K와 V로 봄.
- output
- 왜 Scaled Dot-Product Attention을 고안했는가?
- 실질적으로 가장 흔히 쓰이는 attention function = additive attention , dot-product(multiplicative) attention
- dot product attention, Scaled Dot-Product Attention과 유사하나 dk^1/2로 나누지 않는다는 점에서 차이가 있음
- additive attention, 하나의 hidden layer으로 구성된 feed-forward network을 이용해 compatibility function 계산
- 둘다 이론적으로 비슷한 복잡도를 가지지만, dot-product attention이 고도로 최적화된 행렬곱 코드로 구현될 수 있기에 좀 더 빠르고 공간효율적
- dk가 작은 경우 두 function이 비슷한 성능을 보이나, dk가 큰 경우 additive attention의 성능이 좋음
- dot product attention의 case에서 dk가 클수록 내적이 커지고, 큰 값이 softmax function을 거치면서 gradient가 매우 작아지는 결과가 초래되기에 성능이 저하되는게 아닐까?
→ 기존의 dot product attention에 dk^1/2로 scale하는 부분을 추가해 이런 현상을 방지 !
-
Multi-Head Attention
- 왜 Multi-Head Attention을 고안했는가?
- dmodel 차원의 key, value, query들을 가지고 single attention function을 수행하는 대신, query, key, value에 대해 linear projection를 h번 진행해서 각각을 dk, dk, dv 차원으로 변환하는 것이 더 낫다는 것을 발견 → 그렇게 변환한 것에 대해 병렬적으로 attention을 적용하는 것이 더 낫다!
- 각각의 projected version들로부터 서로 다른 h개의 dv차원의 결과들을 얻고, 그 결과들을 concat한 후 한번 더 linear projection하여 최종 결과 도출
- Multi-Head Attention, 모델이 서로 다른 domain들의 서로 다른 representation subspace들로부터 결합적으로 정보에 접근하도록 함. (single attention head의 경우에는 averaging으로 인해 그렇게 할 수 없음)
- 본 연구에서는 h = 8의 parallel attention layers(heads) 상정
- 각 head에 대해 dk = dv = dmodel/h = 64
- 각 head의 차원이 감소되었기에, single head attention w/ full dimensionality와 computational cost 유사
-
Applications of Attention in our Model
-
Position-wise Feed-Forward Networks
-
encoder-decoder에 attention sub-layers 말고도 fully connected feed-forward network 존재 (encoder-decoder 각각의 position에 대해 독립적으로, 동등하게 적용)
-
두 개의 linear transformation, ReLU activation in between
-
linear transformation이 다른 position들에 대해 동일하게 적용되는 한편, 층 별로 서로 다른 파라미터(W1, W2)를 사용
-
input 차원 = output 차원 = 512, FFN 내부의 hidden layer는 2048 차원을 가짐
-
Embeddings and Softmax
- 다른 sequence transduction 모델처럼, input token과 output token을 dmodel 차원의 벡터로 변환하기 위해 learned embedding 활용
- decoder의 output으로 다음 토큰의 확률을 예측하기 위해 일반적인 learned linear transformation과 softmax function 사용
- 이 때, 두 embedding 층과 softmax 전의 선형변환에 동일한 가중치 행렬을 공유(다만, embedding layer들에서는 가중치에 dmodel1/2를 곱한 값을 사용)
-
Positional Encoding
- Transformer가 어떠한 recurrence / convolution도 포함하지 않기 때문에 모델이 sequence 내 토큰들의 상대적/절대적 위치를 반영할 수 있도록 순서에 대한 정보를 주입해야만 함
- 이를 위해 encoder와 decoder 최 하단에 위치한 input embeddings에 positional encodings를 더함
- positional embedding, 다른 embedding과 같이 dmodel의 차원을 가짐(더하기 용이하게끔 !)
- Transformer, 다양한 positional encoding 선택지 중 다른 주기의 since, cosine 함수들을 사용
- 다른 positional encoding 선택지도 사용해보았으나, 해당 방식이 더 긴 sequence에 대해서 확장성이 좋았음
( pos = 토큰의 위치 인덱스, i = 벡터의 차원 인덱스)
Why Self-Attention
Training
- Regularization
- Residual Dropout
- 각 sub-layer output에 대해 dropout 적용(sub-layer input으로 들어가고 normalize되기 전에)
- encoder와 decoder의 sums of embeddings / positional encodings에 dropout 적용
- cf. dropout rate = 0.1
- Label Smoothing
- label smoothing of value = 0.1
- 모호성이 증대되는 대신, 정확도와 BLEU score 개선
Results
Conclusion
- Attention만으로 이루어진 첫 sequence transduction model, Transformer의 고안
- encoder-decoder 구조에서 가장 많이 쓰였던 recurrent layers를 multi-headed self-attention으로 대체
- 기존 recurrent layer를 활용한 모델에 비해 번역 task에 대해서 training 속도가 굉장히 빨랐음
- Transformer의 활용분야, text를 넘어 이미지, 오디오, 비디오 등 대규모 input, output을 다루는 task에 대해서도 확장할 예정이라고 함 !
Reference
- Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30.
- https://yjjo.tistory.com/35
- https://velog.io/@changdaeoh/Transformer-%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0