[ 논문 ] Attention is All you need
- 기존 Encoder-Decoder구조를 벗어난 Attention Mechanism만으로 구성된 Transformer 모델이 발표
- Transformer는 컴퓨터 비전분야에도 쓰이고 있으며 많은 변화를 가져온 모델
Sequence Modeling
- RNN과 LSTM 등
- 실제로 State-Of-The-Art의 성능을 보이고 있었습니다.
- Recurrent한 구조나 Encoder-Decoder 구조는 Memory와 Computation에서 많은 양을 요구하고 있어 한계

- RNN의 문제점은 긴 시퀀스를 다루는 데 한계가 있고, 각 단어의 정보를 이전에 보았던 정보만 고려하는 '근접성' 문제가 있음.
- 제안된 구조 중 하나가 Encoder-Decoder 모델인 Seq2Seq입니다.
- Encoder는 입력 시퀀스를 고정된 길이의 벡터로 변환하고, Decoder는 해당 벡터를 기반으로 출력 시퀀스를 생성.
- 입력과 출력 시퀀스의 길이나 구조적 차이를 보다 효과적

- Context Vector의 문제: 기존의 Encoder-Decoder 모델에서는 입력 시퀀스를 하나의 고정된 크기의 Context Vector로 압축, 시퀀스의 길이가 다를 때마다 입력되어야 하는 정보의 양이 다르기 때문에, 고정된 크기의 Context Vector로는 정보 손실이 발생
- Transformer의 등장: 이러한 문제를 극복하기 위해 Transformer가 등장했습니다. Transformer는 기존의 순차적인 처리가 아니라 Attention Mechanism을 사용하여 전체 시퀀스의 구조를 고려합니다. 이를 통해 정보의 손실 없이 전체 시퀀스의 구조를 파악
- Attention Mechanism의 역할: Attention Mechanism은 각 입력 단어가 출력에 얼마나 영향을 미치는지를 계산하여 가중치를 부여합니다. 이를 통해 모델은 입력의 각 부분에 집중하거나 중요한 부분을 더 많이 고려
- 혁신적인 성과: Transformer는 이러한 Attention Mechanism을 이용하여 기존 모델보다 뛰어난 성능을 보여주며, 이를 통해 기존에 도달하지 못했던 다양한 자연어 처리 작업에서 State-of-the-art의 결과를 달성
Model Architecture

- Encoder에는 주황색 박스가 두 개 있는데, 첫 번째 주황색 박스는 Multi-Head Encoder Self-Attention을 나타내고, 두 번째 주황색 박스는 단순한 Feed-Forward를 나타냅니다.
- Decoder에는 주황색 박스가 세 개 있는데, 첫 번째 주황색 박스는 Masked Multi-Head Decoder Self-Attention을 나타내고, 두 번째 주황색 박스는 Encoder에서의 출력으로 입력된 Multi-Head Encoder-Decoder Attention을 나타냅니다. 세 번째 주황색 박스는 마찬가지로 단순한 Feed-Forward를 나타냅니다.
- 파란색 박스는 모두 Feed-Forward를 나타냅니다.
이렇게 구성된 Transformer 모델은 각각의 Sub-Layer에서 Residual Connection과 Layer Normalization을 사용하여 정보의 흐름을 보존하고, N개의 동일한 층이 쌓여 전체 모델을 형성합니다. 이 모델은 입력과 출력의 차원을 512로 설정하여 사용되며, 여러 개의 층이 쌓여 레이어층이 깊게 만들어집니다.
어텐션(Attention)
Attention이란 같은 문장 내에서 단어들 간의 관계를 나타내며, 이 관계를 Query(Q), Key(K), Value(V) 3가지로 표현하여 하나의 출력결과를 내는 것
일반 딕셔너리는 일치하는 K값에 V값을 가져오는 것인데, Attention Mechanism은 Q, K의 유사한 만큼의 V를 가져온다고 보시면 될 것 같습니다. Q, K, V는 단순한 스칼라가 아니라 Vector이고, 출력도 마찬가지로 Vector

Scaled Dot-Product Attention


Q와 K로 Attention Score를 구하고 Q, K, V Dimension( 𝑑𝑘 )(여기서 k는 head의 개수)의 루트만큼 나누어 softmax를 취해주고 이 확률값에 V를 곱함.

Linear 연산을 통해 위 그림과 같이 각각 Q, K, V를 얻어 Q와 K의 내적으로 Attention Score를 얻고,
Attention Score는 두 단어들 간의 유사도를 의미

이후 Attention Score를 𝑑𝑘의 루트로 나누어 Softmax의 확률값을 취함.
여기서 𝑑𝑘의 루트로 나누어 주는 이유는 𝑑𝑘 값이 너무 커지게 되면 행렬의 연산의 값도 커지면서 softmax함수가 극도로 작은 기울기를 갖는 영역을 가질 것으로 추측되어 모두 0에 가까운 값으로 정규화

마지막으로 Softmax로 구한 확률값에 V값을 곱하여 Attention 과정을 마무리
Multi-Head Attention

Input Embedding + Positional Encoding의 차원이 d라고 가정해 봅시다. Attention 구조를 한번 실행시켜도 되지만 굳이 h개로 나누어 d / h의 차원으로 쪼개 병렬연산하여 h개를 학습하고 다시 Concat 하고 Linear Layer에 입력이 되었습니다.

Attention이 Encoder-Decoder Attention, Encoder Self-Attention, Decoder Self-Attention 총 3가지 종류가 있고 모두 동작방식이 하나하나 다르기 때문에 동작 방식에 대한 설명을 하도록 하겠습니다.
어탠션(Attention)의 종류
- Encoder Self-Attention: Encoder에서 사용되는 self-attention은 Query, Key, Value 모두 Encoder로부터 가져옵니다. Encoder의 각 Layer들은 이전 Layer의 출력을 입력으로 받아 이전 Layer에 있는 모든 Position에 대응이 가능하고, 같은 Place의 Query마다 같은 Place의 Key, Value들로 Attention값을 구합니다. 예시를 들면 I love her이라는 문장에서 I 가 Query일 때 각 I, love, her 이 Key로 대응되고 마찬가지로 love, her이 Query일 때 각각 Attention값을 구합니다.
- Masked Decoder Self-Attention: 전반적인 목표는 Encoder와 같지만 Encoder는 입력이 Decoder는 출력값이 들어옵니다. Decoder에서는 Sequence model의 Auto-Regressive property 보존을 위해 이후에 나올 단어들은 참조하지 않습니다. 예시를 들면 Q=I, K=I, Q=love, K=[I, love], Q=you, K=[I, love, you]
(Decoder는 인코더와 달리 출력단이므로 이후 단어들을 참조하는 것은 정답을 알려주는 것과 같은 일종의 치팅)
또한, <PAD>와 같은 학습하고 싶지 않은 토큰 등이 있으면 유사도를 구하지 않도록 -∞ 로 세팅하여 마스킹(Masking)을 합니다. - Encoder-Decoder Attention: Encoder의 마지막 Layer층에서 출력된 Query, Key, Value 중 Key, Value만 사용하고 이전 Decoder에서 Query를 사용합니다. 이렇게 하면 Decoder의 Sequence들이 Encoder의 Sequence들과 어떠한 연관을 가지는지 학습합니다.
Position-wise Feed-Forward Networks
Encoder와 Decoder모두 attention의 sub-layers로 Fully Connected Feed-Forward network가 포함되어 있었습니다(위에 Transformer Architecture에서 파란색 부분입니다). 이 부분은 2개의 Linear Layer가 이어져있고, 사이에는 ReLU Activation을 사용하였습니다. 모델의 input과 output은 동일하게 𝑑𝑚𝑜𝑑𝑒𝑙=512 차원이고, 중간 Inner-Layer의 차원은 𝑑𝑓𝑓=2048 로 설정하였습니다.
Embeddings and Softmax

- 아래 빨간 부분에 Input Embedding과 Output Embedding은 Embedding layer를 거치고, 차원은 𝑑𝑚𝑜𝑑𝑒𝑙=512로 사용합니다. 또한, weights에 𝑑𝑚𝑜𝑑𝑒𝑙를 곱합니다.
- 위 빨간 부분은 Decoder 단 출력에서 Linear transformation을 거치고, softmax function을 취해 다음 토큰들의 확률값을 계산합니다.
- 두 개의 임베딩은 Linear transformation으로 동일한 weight matrix를 공유합니다.
#어느 블로그에서 훔침
Positional Encoding
Transformer는 LSTM, RNN기반의 모델처럼 시간의 연속성을 다루지 않음.
RNN기반 모델은 모델 구조자체가 이전 hidden state로부터 순차적인 정보와 입력데이터를 결합하여 출력을 산출하기 때문에 자동적으로 시간의 연속성을 보장
하지만 Transformer 모델은 Attention 함수 기반으로, Q를 기준 다른 K들의 연관성만 따지기 때문에 Sequence에 대한 정보가 존재하지 않습니다.
도입된 기술이 Positional Encoding인데 이 부분은 그렇게 어렵지 않음.
본 논문에서는 sin곡선의 상대적인 위치에 대한 정보를 Embedding과 동일한 차원에 위치시키는 것입니다. 간단하게 이야기하자면 Embedding 차원 𝑑𝑚𝑜𝑑𝑒𝑙과 동일한 차원만큼의 sin 그래프를 가져와 단순하게 더해주면 됩니다.

범위는 2π부터 2π * 10000까지, 𝑝𝑜𝑠는 postion의 위치이고 𝑖는 hidden dimension의 위치입니다.

결론적으로 Input Embedding, Output Embedding에 위의 -1~1 사이의 값을 더해주는 것입니다.
Self-Attention을 사용한 이유

1. Total computational complexity per layer
representation dimension으로 표현하려면 256, 512,.. 등 높은 차원이 주어져야 continuous 하게 잘 표현이 잘됨.
2. The amount of computation
RNN의 경우 레이어마다 모든 토큰들이 input을 순차적으로 총 n개의 Sequence만큼 입력을 받아 O(n)를 가지지만 Self-Attention은 모든 potision들의 Attention Score값들을 한 번에 처리할 수 있기 때문에 사실상 O(1)을 가져 더 빠르게 parallel system에서 유리하게 적용
3. Path length between long-range dependencies

의존성을 학습하는 능력에 영향을 미치는 한 가지 핵심요소는 forward, backward signals 간의 path length입니다.
Input sequence와 Output sequence의 이 path length가 짧을수록 long-range dependencies를 쉽게 학습
최대 개수를 Maximum Path Length 라 하고 RNN은 한 토큰에 하나씩 layer가 붙어 총 O(n)의 길이이고, Transformer는 self-attention이 layer를 쌓아 올려 token끼리의 연산을 하는 것이 아니라, 하나의 self-attention의 각 토큰들이 모든 토큰들과 참조하여 연관성을 구하기 때문에 O(1)입니다.
WHY SELF ATTENTION
- 하나의 레이어 당 전체 연산 복잡도 감소
: RNN 계열에서는 하지 못했던 병렬 처리 연산의 양을 대폭 늘려 자연스레 학습 시간 감소 - Long term dependency의 문제점 해결
: 트랜스포머 모델은 대응관계가 있는 토큰들 간의 물리적인 거리값들 중 최댓값이 다른 모델에 비해 매우 짧아 '장기간 의존성'을 잘 학습할 수 있고 시퀀스 변환 문제도 잘 해결할 수 있음 - 해석 가능한 모델
: 'Attention' 이라는 가중치를 시각화하여 토큰들 간의 대응관계를 눈으로 직접 확인 가능
👉🏻 즉, 다른 모델에 비해 트랜스포머는 모델이 내뱉은 결과를 해석할 수 있다는 장점
결론

기존 RNN, Encoder-Decoder구조를 모두 Multi-Head Self-Attention으로 변경
Translation tasks에서 기존 모델들보다 상당히 빠르고 이전 최고의 모델을 능가하는 state of the art의 성능