순환 신경망(RNN), LSTM(Long Short-Term Memory) 및 일반화된 회기 신경망(GRNN)은 특히 언어 모델링과 기계 번역과 같은 Sequence 모델링 및 변환 문제에서 최첨단 접근법으로 자리잡았습니다.
순환 모델은 일반적으로 입력과 출력 Sequence의 symbol position에 따라 계산을 분해합니다. 계산 시간의 단계에 맞춰 위치를 정렬하면서, hidden state ht-1 (이전 시점의 정보)와 위치 t의 입력을 기반으로 hidden state ht(현재 시점 t에서의 상태) 시퀀스를 생성합니다. 이러한 본질적인 순차적 특성은 훈련 예제 내에서 병렬 처리를 불가능하게 만들며, 이는 긴 시퀀스 길이에서 중요해집니다. 메모리 제약으로 인해 예제 간 배치 처리가 제한되기 때문입니다. 최근의 연구들은 분해 기법과 조건부 계산을 통해 계산 효울성을 크게 향상시켰으며, 후자의 경우 모델 성능도 개선되었습니다.
Attention 메커니즘은 다양한 작업에서 강력한 Sequence 모델링 및 변환 모델의 중요한 부분이 되어, 입력 또는 출력 Sequence에서 거리와 관계없이 의존성을 모델링할 수 있게 해줍니다. 그러나 몇 가지 예외를 제외하고 대부분의 경우 이러한 Attention 메커니즘은 순환 신경망과 함께 사용됩니다.
본 연구에서는 Transformer 모델 아키텍쳐를 제안합니다. 이 모델은 순환을 사용하지 않고 Attention 메커니즘만을 사용하여 입력과 출력 간의 글로벌 의존성을 모델링합니다. Transformer는 병렬화가 훨씬 용이하며, 8개의 P100 GPU에서 12시간 만에 번역 품질에서 새로운 성과를 달성할 수 있었습니다.

Q : 쿼리, 현재 처리중인 단어가 다른 단어와 얼마나 연관이 있는지 판단하는 역할입니다. Query로 다른 단어들과 비교할 때 사용됩니다.
K : Key는 각 단어의 특징을 나타냅니다. Query와 Key를 비교하여 단어들 간의 연관성을 나타낸다. 입력 Sequence에서 모든 단어에 대한 key 백터를 생성합니다.
V : Value는 입력 Sequence의 정보를 담고 있습니다. 최종적으로 가중치 합을 구할 때 사용됩니다.
scaling factor : Query Key의 내적 QKT 결과는 일반적으로 값이 커질 수 있습니다. 이로인해 Softmax 시에 기울기가 급격하게 학습이 불안정할 수 있습니다. 이를 방지하기 위해 Scaling 후 Softmax를 진행합니다.
dk는 키 백터의 차원이며 수식에서 루트화 된 dk로 나눠줌으로써 내적의 값 크기를 조절합니다.
Softmax : Softmax 함수는 𝑄𝐾𝑇로 계산된 유사도를 확률 분포 형태로 변환합니다. 이로써 각 단어의 연관도를 가중치(weight)로 바꿉니다.
가중합 : Softmax로 구한 가중치를 𝑉에 곱하여 최종적으로 가중합(weighted sum)을 구합니다. 이 가중합이 Self-Attention의 출력이 됩니다.
내적이란?
트랜스포머 논문에서 등장하는 내적은 두 vector간의 곱셈연산을 통해 scaler 값을 구하는 것입니다. 두 vector간의 유사도를 구할 때에 사용됩니다.
a = [a1, a2 ... an]
b = [b1, b2 ... bn]
ab = a1b1 + ... anbn
attention 구조를 그림과 함께 살펴보겠습니다.

만일 '나는 학생입니다.'라는 입력 시퀀스가 주어졌을 때에 각 Query는 Key값과 내적하여 유사도를 도출합니다.

각 Query '나는', '학생', '입니다'가 Key들과 내적되는 그림 예시입니다.
Self-Attention 메커니즘은 단일 시퀀스의 서로 다른 위치를 연관시켜 시퀀스의 표현을 계산하는 Attention 매커니즘입니다. Self-Attention은 독해, 요약, 텍스트의 함축적인 의미 추론 및 독립적인 문장 표현 학습 등 다양한 작업에서 성공적으로 사용되었습니다.
End-to-end memory networks는 순차적으로 정렬된 RNN이나 Convolution을 사용하지 않고 순환 Attention 메커니즘을 기반으로 하여 간단한 언어의 질문 응답 및 언어 모델링 작업에서 좋은 성과를 보였습니다.
하지만 Transformer는 입력과 출력의 표현을 계산하는 것에 있어서 완전히 Self-Attention에 의존하는 첫 번째 변환 모델로, 순차적 정렬 RNN이나 Convolution을 사용하지 않는 모델입니다.

<그림1 : Transformer 모델 아키텍쳐>
첫 번째 서브레이어는 Multi-Head Self-Attention이고 두 번째 서브 레이어는 Position-wise Fully connected Feed-Forward Network입니다. Transformer는 각 서브레이어에 대하여 Residual connection을 사용하고 그 후 Layer Normalization을 적용합니다. 즉, 각 서브레이어의 출력은 x + Sublayer(x) 형식으로 계산됩니다. 이러한 residual connection을 지원하기 위해 모델은 모든 서브 레이어와 임베딩 레이어는 dmodel = 512의 출력 차원을 생성합니다.
또한 디코더 스택에서 Self-Attention 서브레이러를 수정하여 각 위치가 이후 위치를 attend하지 않도록 하는데 이를 마스킹 기법이라고 합니다.

우리는 우리의 특정 주의를 '스케일된 점곱 주의'라고 부릅니다.

가장 일반적으로 사용되는 두 가지 주의 함수는 가산적 주의(additive attention)와 dot-product Attention(점곱, 내적)입니다.
점곱 주의는 알고리즘과 동일하지만, 루트화된 dk의 스케일링 계수만 다릅니다.
additive attention은 feed forward network를 사용하여 호환성 함수를 계산합니다. dk 값이 작을 때 두 메커니즘은 유사하게 작동하지만, dk가 커질수록 가산적 주의가 dot-product Attention보다 성능이 뛰어납니다. 다만 dk가 클 수록 점곱이 커져 softmax함수가 gradient vanishing이 발생할 수 있습니다. 따라서 루트화된 dk 스케일링을 진행합니다.
Multi-Head Attention의 수식은 하기와 같습니다.

수식에 대한 뜻은 다음과 같습니다.
멀티헤드 어텐션은 head의 값들을 Concat하여 가중치를 곱해준 것입니다.
여기서 head는 선형변환된 QW, KW, VW의 값을 Attention한 값입니다.
이들을 Concat을 함으로써 병렬로 어텐션을 수행합니다.
이에 따라 dv 차원의 출력 값을 얻습니다.
논문에서는 8개의 병렬 attention head를 사용하기 때문에 각 head에 대하여 512의 차원이 64개의 차원으로 줄어들게 됩니다.
Transformer는 세 가지 방식으로 Multi-Head Attention을 사용합니다.
인코더-디코더 attention, 레이어에서는 쿼리가 이전 디코더 레이어에서 오고, 메모리 키와 값은 인코더의 출력에서 옵니다. 이를 통해 디코더의 각 위치는 입력 시퀀스의 모든 위치를 참조할 수 있습니다. 이는 Sequence to Sequence 모델에서의 전형적인 인코더-디코더 주의 메커니즘을 모방합니다.
인코더는 Self-Attention Layer를 포함합니다. Self-Attention 레이어에서는 모든 키, 값, 쿼리가 같은 곳에서 오며, 이 경우는 인코더의 이전 레이어를 출력합니다. 인코더의 각 위치는 인코더의 이전 레이어에 있는 모든 위치를 참조할 수 있습니다.
디코더의 Self-Attention 레이어는 디코더의 각 위치가 자신과 그 이전의 모든 위치를 참조할 수 있게 합니다. 여기서 중요한 점은, 디코더에서의 좌측 정보 흐름을 방지해야 한다는 것입니다. 이는 자동 회귀 특성을 유지하기 위함입니다. 이를 위해 스케일된 점곱 주의 내에서 Softmax 입력에 대해 연관성이 없는 값들을 −∞로 마스킹 처리합니다.