Attention is All You Need
Backgrounds
Layer Normalization
Layer Normalization (LayerNorm)은 한 샘플 내부에서 feature 차원 기준으로 정규화하는 기법이다. 배치 크기와 무관하게 동작하도록 설계되었다.
Transformer에서 한 토큰의 representation은 보통 이고, LayerNorm은 각 토큰마다 independently 적용된다. 이는 attention 출력의 scale 폭주를 방지하여 학습 안정성이 증가한다.
Recurrent Neural Network
RNN 은 단일 입력이 아닌 여러개의 입력 (시퀀스) 에서, 이전 상태와 현재 입력으로 새로운 상태를 만드는 순환 연산 블록이다.
길이가 인 시퀀스 가 있을 때, RNN 의 연산을 아래와 같이 정의된다.
여기서 같은 시간 스텝 에서는 같은 파리미터 () 를 공유한다.
hidden state 를 굳이 만드는 이유는 에서 ~ 범위의 데이터를 모두 참조하려면 계산 비용과 메모리를 많이 요구하기 때문이며 길이가 가변인 시퀀스를 고정 차원으로 처리하기 위한 구조적 장치로 사용하기 위함이다. 즉 이전의 상태를 하나의 벡터 로 표현하는 것이다.
각 시퀀스에서 계산된 를 사용하여 출력을 만들 수도 있다. 최종 상태 는 시퀀스 전체를 표현하는 벡터이며, 이를 이용해 출력을 하나만 만들 수도 있고, 중간 를 이용하여 출력을 시퀀스로 만들 수도 있다.
이러한 RNN 구조는 입력과 출력 시퀀스의 길이가 동일한 문제에는 자연스럽게 적용되지만, 기계 번역과 같이 입력 시퀀스의 길이 와 출력 시퀀스의 길이 가 다른 문제에는 직접 적용하기 어렵다. 이를 해결하기 위해 이후 Encoder–Decoder 구조가 제안되었다.
Encoder-Decoder
Encoder-Decoder 는 기계 번역, 요약, 질의 응답 등의 인 Task에서 단일 RNN 의 구조적 한계를 극복하기 위해 고안된 구조이다.
기본적으로 RNN 을 두개 사용하며, 입력 시퀀스를 하나의 표현 () 으로 인코딩하는 Encoder 와 그 표현을 조건으로 새로운 시퀀스를 디코딩하는 Decoder 로 나뉜다.
첫번쨰 RNN 이 모든 시퀀스를 전부 연산하였을 때, 해당 시퀀스는 로 요약된다.

디코더는 이 를 로 사용하여 다음 출력의 확률을 생성한다.

는 해당 출력 토큰의 embedding 값을 의미한다:
즉 디코더는 인코더가 요약한 정보 를 바탕으로 출력을 생성하는데, 언어 모델에서 출력 은 어휘 테이블 에서의 정수 토큰 인덱스를 의미한다.
는 또 다른 파라미터 와 곱해져 logit 을 만드는데, 이 logit 을 softmax 함수에 통과시키면 모든 토큰에 대한 확률 분포를 구할 수 있다. 추론 시에는 이 분포로부터 확률이 가장 높은 토큰을 선택하여 출력 를 결정한다.
Encoder–Decoder 구조는 Seq2Seq 문제를 가능하게 한 아키텍처이지만, 입력 시퀀스 를 단일 벡터 로 요약함으로써 과도한 정보 압축이 발생하는 한계를 가진다.
위 예시와 같이 입력 시퀀스 초반에 등장한 핵심 토큰에 대한 정보는 최종 hidden state 에 충분히 보존되기 어렵고, 이로 인해 디코더가 입력의 일부 의미를 제대로 반영하지 못한 출력을 생성할 수 있다.
이러한 한계를 해결하기 위해 Attention 메커니즘이 제안되었다.
Attention Mechanisms
Neural Machine Translation by Jointly Learning to Align and Translate
우선 “Neural Machine Translation by Jointly Learning to Align and Translate” 에서의 RNN 은 Bi-directional 구조이다. 양방향 RNN 이라는 뜻으로, 두개의 RNN 이 서로 다른 방향으로 진행한다:
즉 왼쪽 → 오른쪽은 과거의 context, 오른쪽 → 왼쪽은 미래의 문맥을 담당한다. 이는 입력 시퀀스를 서로 다른 방향으로 읽어 토큰별로 더 풍부한 표현이 가능하게 한다. 출력을 미리 예측할 수 없는 Encoder-Decoder 의 구조 상, 인코더에만 두개의 RNN 이 각 방향을 담당하며, 두 방향의 hidden states 를 concatenation 한 벡터를 annotation 으로 정의한다.
Attention 메커니즘은 Encoder-Decoder 의 입력 시퀀스가 단일 벡터로 요약된다는 단점을 보완하기 위해 고안되었으며, 핵심 아이디어는 출력 시점 마다 입력 시퀀스 전체를 다시 참조하는 것이다. 즉 디코더의 입력이 하나의 벡터에서, annotation 들의 집합이 된다.
Encoder RNN 이 만든 annotation 의 셋은 아래와 같이 정의된다.
디코더는 각 출력을 생성할 때 아래와 같은 과정을 거친다.
라는 작은 신경망을 사용하여, 현재 출력 시점 에 입력 annotation들에 대한 중요도를 확률 분포 형태 로 계산한다.
각 annotation을 attention weight로 가중합하여 context vector 를 만든다. 이 식을 풀어서 설명하면, 에서 는 번째 토큰의 annotation 이 얼마나 중요한지를 의미하고, 이 값은 상수이다. 는 차원 벡터이며, 는 이다.
이렇게 각 가 곱해진 벡터를 전부 방향으로 합한다.

이후 이전 시점의 디코더 출력 , 디코더 상태 , 그리고 입력 시퀀스 전체에 대한 attention 정보가 담긴 를 이용해 다음 시점의 디코더 상태를 계산한다.
즉, 모든 출력 시점 마다 입력 시퀀스를 요약하는 를 새로 만들어서, 출력 시 사용하게 된다.
Adam Optimizer
Adam(Adaptive Moment Estimation)은 loss를 감소시키는 gradient의 방향을 1차 모멘트 추정을 통해 관성적으로 유지하고, 동시에 gradient 크기의 변동성을 2차 모멘트 추정을 통해 추적함으로써, 파라미터별로 신뢰도에 기반한 업데이트 크기를 조절하는 최적화 알고리즘이다.
모든 파라미터에 대해 동일한 learning rate를 적용하여 와 같이 업데이트가 이루어진다. 이는 파라미터별 gradient scale이나 변동성을 고려하지 않기 때문에, gradient noise가 크거나 파라미터 간 스케일 차이가 큰 경우 학습이 불안정해질 수 있다.
Adam에서는 시점 에서의 파라미터와 gradient를 다음과 같이 정의한다.
지수 가중 평균을 이용하여 기울기의 방향을 누적시킨다. 이는 gradient의 평균 방향을 누적하여 추정하는 항으로, noise를 완화하고 일관된 하강 방향을 유지하는 역할을 한다. 이 0.9 일 경우 약 10개의 최근 값들의 평균을 근사한다.
여기서 는 element-wise square이다.
는 gradient 크기의 변동성을 추적하는 항으로, gradient가 얼마나 크게 흔들리는지를 나타내는 지표이며, 해당 방향에 대한 업데이트 크기를 조절하는 데 사용된다. 이는 gradient 방향의 옳고 그름을 판단하기보다는, 해당 방향의 신뢰도를 스케일링하기 위한 정보이다.
와 모두 지수가중 평균을 사용하므로 가 0에 가까우면 0에 대한 편향이 생긴다. 의 승을 사용하여 학습 초반에는 거의 의 값이 사용되다가, 학습이 진행되며 편향에 대한 보정이 자연스럽게 사라지게 된다.
최종적으로 Adam의 파라미터 업데이트는 다음과 같이 이루어진다:
방향은 평균적으로 이쪽인 것 같긴 한데 step마다 너무 요동친다 → 진짜 경사인지 확신 못 하겠다 → 그러면 조금만 움직이자
Introduction
RNN은 언어 모델링과 기계 번역과 같은 시퀀스 모델링 및 변환 문제에서 효과적인 방법론으로 자리를 잡아왔고, Recurrent 언어 모델과 Encoder-Decoder 구조의 한계를 확장하려는 연구들이 이루어지고 있다.
Recurrent 모델은 일반적으로 시퀀스의 입력 순서에 따라 계산을 나눈다. 위치를 계산 시점으로 간주하므로써, 이전 입력에 대한 hidden state 와 현재 입력 시점 의 입력을 받는 를 생성한다. →
더 나아가 Attention 메커니즘이 등장하고 시퀀스 모델의 핵심 구성요소가 되었다. 이는 기존 순환 모델이 가지고 있던 long-term dependency 표현력 문제를 어느정도 해결했으며, RNN 과 함께 사용되어 성과를 냈다.
하지만 RNN 은 본질적으로 순차적인 특성을 가지며, 이는 내부에서 연산을 병렬화할 수 없음을 의미한다. 또한 역전파 시 시퀀스 전체의 hidden state 을 모두 저장해야 하므로 메모리 사용량은 시퀀스 길이에 비례하게 되고, GPU 의 메모리는 한정되어 있으므로 무작정 배치 크기를 키울 수 없다.
저자는 이를 해결하기 위해 Recurrence 를 완전히 버리고, Attention 만으로 입-출력 간 관계, 모든 포지션의 관계, 거리에 상관 없는 연결 표현하는 새로운 모델 Transformer 를 제안한다.
Transformer 는 recurrence 기반 sequence modeling 이 아니므로 모든 포지션을 동시에 계산할 수 있어 sequence 내부 병렬화가 가능하고 GPU 친화적으로 연산이 최적화 된다고 주장한다.
또한 Transformer 는 BLEU 기준 SOTA 를 달성하였으며 타 모델에 비해 학습시간을 획기적으로 단축한다.
Related Works
CNN Based Sequence Models
Recurrent 계산을 줄이려는 목표는 Transformer 만의 것이 아니다. CNN 을 기본 블럭으로 사용한 Extended Neural GPU, ByteNet, ConvS2S 와 같은 연구들이 있었고, 1D convolution 연산을 통해 RNN 의 순차성을 제거하고 sequence 내부 병렬화를 목표로 했다.
위와 같은 입력 시퀀스에서 kernel size가 3인 1d convolution 연산은 (경계 처리를 단순화하여 표현하였다):
이고, 의미적으로 현재 토큰 은 주변 토큰들과 context 를 형성하여 를 만들게 되고, 레이어를 쌓으며 한 토큰의 표현이 점점 더 넓은 범위의 시퀀스 정보에 의존하게 된다.
하지만 CNN 기반 모델의 한계는 두 포지션 와 사이의 정보가 서로 영향을 주려면 여러개의 레이어를 필수적으로 거쳐야 하며, 거리가 멀수록 연산 단계 수(computational path length)가 증가한다는 점이다.
두 포지션 간 정보 전달에 필요한 연산 단계 수를 으로 표기한다면, ConvS2S 에서는 이고, ByteNet 은 Dilated 1D convolution 사용, dilation 을 지수적으로 증가시켜 이 된다.
이처럼 정보 간의 연결이 거리에 따라 비례하게 되는 단점이 있고, 이는 장거리 의존성 학습을 어렵게 만들며, 모델의 최적화 난이도를 증가시킨다. Transformer 에서는 두 포지션간 정보를 연결하는데 필요한 연산 단계 수는 상수로 줄이는 것을 목표로 한다.
Self-attention
Self-attention(=intra-attention) 은 하나의 시퀀스 내부에서 서로 다른 포지션들 간 관계를 계산해 그 결과로 토큰별 representation 을 만드는 attention 매커니즘이다. 즉 encoder–decoder attention처럼 입력–출력 간 hidden state 참조를 모델링하는 것이 아니라, 시퀀스 내부에서 각 토큰의 관계를 표현하는 방식이다.
Self-Attention 은 Transformer 이전에도 다양한 NLP 태스크에서 성공적으로 사용되어 왔으며, reading comprehension, textual entailment, sentence representation 처럼 문장 내 내부 관계가 중요하고 토큰 간 전역적 상호작용이 중요한 문제에서 특히 좋은 성능을 보였다.
그러나 대부분 입력 시퀀스로부터 하나의 표현을 얻거나 분류를 수행하는 데에 초점이 맞추어져 있었고, 입력 시퀀스를 출력 시퀀스로 변환하는 일반적인 Seq2Seq(transduction) 문제를 직접적으로 다루지는 못했다. 특히 출력이 가변 길이의 시퀀스이며 이전 출력이 이후 출력에 영향을 미치는 생성 구조를 포함하지 않았다는 점에서, 기계 번역과 같은 문제에 일반적으로 적용하기에는 한계가 있었다.
End-to-end Memory Networks
End-to-end 메모리 네트워크는 시퀀스 위치에 맞춰 반복되는 recurrent 가 아니라 attention 을 반복 적용하는 구조를 기반으로 한다. 즉 입력을 순서대로 읽지 않고, 같은 입력 전체에 대해 attention 만 여러번 적용한다.
이런 구조는 단순한 언어 Q/A, 언어 모델링에서는 좋은 성능을 낸다는 것이 증명되었다.
하지만 이러한 모델들은 attention을 여러 번 적용하는 추론 구조를 사용함에도 불구하고, 입력과 출력 시퀀스 간의 일반적인 변환을 수행하는 완전한 Seq2Seq 프레임워크로 확장되지는 않았다. 또한 attention 반복 횟수(hop 수)가 하이퍼파라미터로 고정되어 있으며, 입력과 출력 간의 명시적인 위치 정렬이나 출력 시점별 조건부 생성 구조가 부족하다는 점에서, 복잡한 시퀀스 변환 문제를 해결하는 데에는 제약이 있었다.
Transformer Architecture
현재 성능이 잘 나오는 Seq2Seq 모델들은 대부분 Encoder–Decoder 구조를 사용한다. 여기서 Encoder 는 입력 시퀀스 에 대한 annotation 으로 매핑한다. Decoder 는 주어진 에 대해 출력 시퀀스 를 한번에 하나씩 생성한다. 각 단계에서 모델은 auto-regressive 하며, 다음 기호 생성할 때 이전에 생성된 기호들을 추가 입력을 사용한다.
Transformer 는 이 전체적인 구조를 따르며, Encoder 와 Decoder 모두에서 여러 층으로 쌓인 self-attention 과 point-wise, FC 레이어들을 사용한다.

Encoder and Decoder
Encoder
Encoder는 개의 동일한 레이어를 쌓아올린 구조로 구성되며, 각 레이어는 두개의 서브 레이어를 가진다.
첫번째 서브 레이어는 Multi head self-attention 매커니즘이고, 두번째는 간단한 position-wise fully connected feed-forward 네트워크이다.
두 서브 레이어 각각에 대해 residual connection 을 적용하고 layer nomalization 을 적용한다. 즉 각 서브 레이어의 출력은 아래와 같다.
residual connection 을 가능하게 하기 위해 모델 내 모든 서브레이어와 임베딩 레이어는 의 출력을 생성한다.
Decoder
Decoder 는 Encoder 와 마찬가지로 개의 동일한 레이어를 쌓은 구조로 구성된다. Encoder 의 한 레이어 출력에 대해 multi-head attention 을 수행하는 세번째 서브 레이어가 존재한다.
마찬가지로 각 서브레이어는 residual connection 을 사용하고 그 뒤에 Layer Normalization 을 적용한다.
또한 Encoder 와는 다르게 첫번째 서브 레이어는 Masked Multi-Head Attention 을 수행하는데, 이는 학습 시 각 위치가 자기보다 이후의 위치를 참조할 수 없도록 Masking 하는 것을 뜻한다. ****즉 위치 에 대한 예측이 오직 보다 작은 위치의 이미 알려진 출력들에만 의존하도록 보장한다.
Attention
attention 함수는 하나의 Query 와 Key-Value 쌍들의 집합을 입력으로 받아 하나의 출력 벡터로 매핑하는 함수로 설명할 수 있고, Query, Key, Value, 그리고 출력은 모두 벡터이다.
출력은 Value 들의 Weighted sum 으로 계산되며 각 Value 에 할당되는 가중치는 해당 Value 에 대응되는 Key 와 Query 사이의 compatibility function 에 의해 계산된다.
Scaled Dot-Product Attention

저자는 제안하는 attention 메커니즘을 Scaled Dot-Product Attention 이라고 부른다.
입력은 차원이 인 Query와 Key, 그리고 차원이 인 Value 로 구성된다. 즉, 일 수 있다. 저자는 Query 와 모든 Key 의 내적을 계산한 뒤 각각 로 나누고 softmax 함수로 각 Value 들에 대한 가중치를 얻는다.
실제로는 여러개의 Query 에 대해 Attention 을 동시에 계산하며, 전체 쿼리를 행렬 로 묶는다. Key 와 Value 도 마찬가지로 행렬 와 로 묶는다.
Attention Mechanisms 에서의 구조로 비유하자면, 현재 디코더의 상태 에서, 인코더의 모든 annotation 에 대한 중요도를 알기 위해 범위에서 를 수행했고, 확률 분포로 변환되어 가중합을 계산하였다.
즉 찾고자 하는 것 () 은 이고, 그것과 비교할 대상() 은 이 된다. 기존 Attentio n 메커니즘 에서는 비교할 대상과 가지고 오는 값이 같았다면 (), Transformer는 와 의 유사도를 기반으로 들을 가중합하여 관련 정보를 추출한다.
위 식에서 는 각 query 벡터와 모든 key 벡터 간의 내적을 계산한 것으로, 벡터들이 서로 얼마나 유사한 방향을 가리키는지를 나타낸다. query와 방향이 유사한 key일수록 더 큰 값을 가지며, 이를 softmax 함수에 통과시켜 각 key에 대한 중요도 분포를 얻는다. 이후 이 가중치를 value 벡터들에 적용해 가중합을 계산함으로써, query에 가장 관련된 정보를 효과적으로 추출한다.
저자는 여기에서 softmax 함수에 넣기 전에 내적 값을 로 나누어 정규화 하는데, 이는 가 커질수록 내적값의 분산이 증가하여 softmax 출력이 지나치게 뾰족해지기 때문이다. 가 작은 경우에는 두 어텐션 메커니즘이 유사한 성능을 보이지만 가 커질수록 스케일링이 없는 dot-product attention 은 additive attention 보다 성능이 떨어진다고 주장하며, 가 클 때 내적 값의 크기가 커져서 softmax 함수가 그래디언트가 극도로 작은 영역으로 밀려난다고 추측한다.
Multi-head Attention

저자는 차원의 key, value, query 로 하나의 어텐션만 수행하는 대신, 서로 다른 학습된 선형 변환으로 번 투영하여 각각 차원으로 만드는 것이 더 효과적이라고 주장한다.
투영된 각 query, key, value 쌍에 대해 병렬로 attention 을 여러번 수행하여 차원의 출력을 얻는 것이다. 이 출력들을 concat 한 후 다시 한번 선형 변환하여 최종 출력을 얻는다. 이런 방법을 Multi-Head Attention 이라고 한다.
저자가 주장하는 기존 방법론 (single head-attention) 의 문제점은, 중요도의 관계가 평균화 된다는 것이다.
위와같은 번역 입/출력 시퀀스가 있을 때, 출력 시점을 stern 을 star 로 번역해야 하는 타이밍으로 가정한다. single head attention 같은 경우, 중요도 분포는 아래와 비슷할 것이다.
| 1 | 0.10 | FC |
| 2 | 0.10 | Bayern |
| 3 | 0.20 | München |
| 4 | 0.05 | , |
| 5 | 0.25 | stern |
| 6 | 0.05 | des |
| 7 | 0.15 | südens |
그리고 이걸 가중합 해서 하나의 context 벡터를 만들게 되는데, 이때 서로 다른 역할의 단어들이 하나의 attention 분포로 평균된다는 것이다. 즉, 주어, 동사, 부사, 목적어 등의 정보를 하나로 묶어서 요약하게 된다.
Multi-head Attention에서는 이 과정을 개의 head에 대해 병렬로 수행함으로써, 모델이 서로 다른 선형 투영 공간에서 다양한 관계를 분리해 학습할 수 있도록 한다. 즉 head 는 서로 다른 선형 투영을 통해 관계를 분리해 학습할 수 있는 독립적인 attention 공간을 의미한다. 이렇게 개의 head 출력을 concatenate한 뒤, 다시 선형 변환을 적용하여 최종 출력 표현을 만든다.
입력 표현은 항상 차원이며, 각 head 는 더 작은 차원으로 투영한다. 가 head 별로 각각 다른 가중치를 통해 선형 투영되기 때문에, 서로 다른 subspace 를 가지게 된다.
개의 차원을 concat 하면 차원이므로, 의 입력 차원은 이고 출력 차원을 로 하여 다시 기존 차원을 복구한다. 이는 언급했던 Residual Connection 을 위해서이다.
저자는 로, 로 설정하였다. 이렇게 하면 head 수는 1에서 로 증가하였지만, head 의 차원을 로 나눔으로써 어텐션을 여러번 해도 연산량이 single-head attention 과 유사하다고 설명한다.
Applications of Attention in Transformer
Transformer 는 아래 3가지의 서로 다른 방식으로 multi-head attention 을 사용한다.
- encoder–decoder attention 층에서는, query는 이전 디코더 레이어의 출력에서 나오고, key와 value는 인코더의 출력에서 나온다. 이를 통해 디코더의 각 위치는 입력 시퀀스의 모든 위치에 대해 attention을 수행할 수 있다. 이는 Seq2Seq 모델에서 사용되던 전형적인 encoder–decoder attention 메커니즘을 모방한 것이다.
- 인코더는 self-attention 레이어를 포함한다. self-attention 레이어에서는 key, value, query가 모두 동일한 출처에서 나오며, 여기서는 인코더의 이전 레이어 출력이다. 인코더의 각 위치는 이전 인코더 레이어의 모든 위치에 대해 attention을 수행할 수 있다. 즉 Encoder self-attention에서는 입력 시퀀스의 각 위치가 동일한 시퀀스 내 모든 다른 위치와의 관계를 모델링함으로써, 전역적인 문맥 표현을 학습한다.
- 마찬가지로, 디코더의 self-attention 레이어는 디코더의 각 위치가 자기 자신을 포함하여 그 위치까지의 모든 위치에 대해 attention을 수행할 수 있도록 한다. auto-regressive 특성을 유지하기 위해, 디코더에서는 미래 방향(왼쪽이 아닌 오른쪽)으로부터의 정보 흐름을 차단해야 한다. 저자는 이를 scaled dot-product attention 내부에서 구현하는데, softmax의 입력 중 허용되지 않는 연결에 해당하는 값들을 로 설정하여 마스킹한다.
이므로, 내적값이 softmax 를 지나면 0으로 처리되어 마스킹된다.
Position-wise Feed-forward
Attention 서브레이어에 더해, 인코더와 디코더의 각 레이어는 feed-forward 네트워크를 포함한다. 이 네트워크는 각 위치에 대해 독립적으로, 그리고 동일하게 적용된다.
선형 변환은 서로 다른 위치들에 대해 동일하게 적용되지만, 레이어가 바뀔 때마다 서로 다른 파라미터를 사용한다. 이를 다른 방식으로 표현하면, 커널 크기가 1인 두 개의 convolution 연산으로 볼 수 있다.
입력과 출력의 차원은 이며, 내부 레이어의 차원은 이다.
Position-wise FFN은 각 토큰 위치에 대해 동일한 비선형 변환을 독립적으로 적용함으로써, attention을 통해 수집된 정보를 토큰 단위에서 재해석하고 정제하는 역할을 한다. 이 과정에서 입력 차원 을 더 큰 중간 차원 로 확장한 뒤 다시 원래 차원으로 축소함으로써, 모델은 더 높은 표현력을 가진 비선형 변환을 학습할 수 있다. 이는 토큰 간 상호작용을 담당하는 attention과 달리, 토큰 내부 표현을 깊게 만드는 역할을 수행한다.
Embedding and Softmax
Transformer는 다른 시퀀스 변환 모델들과 마찬가지로, 입력 토큰과 출력 토큰을 차원의 벡터로 변환하기 위해 임베딩 레이어의 파라미터 를 학습한다.
또한 디코더의 출력을 다음 토큰의 확률 분포로 변환하기 위해 선형 변환과 softmax 함수를 적용한다. 저자는 Transformer 에서 입력 임베딩, 출력 임베딩, 그리고 softmax 이전 선형 변환이 동일한 가중치 행렬 을 공유하도록 설계하였으며, 이는 기존 연구와 유사한 방식이다.
이때 임베딩 레이어에서는 해당 가중치 에 스케일링을 적용한다. embedding 은 값의 분산이 작으므로 크기를 키워 attention 출력과 스케일을 맞춘다.
-
입력 토큰 시퀀스에 대한 사용:
- 출력 임베딩에 대한 사용:
- Softmax 이전 선형 변환에서의 $$$E$ 사용:
Transformer는 모델 정의 상 입력 임베딩, 출력 임베딩, 그리고 softmax 이전 선형 변환에서 동일한 가중치 행렬 를 공유하며, 이 공유된 파라미터는 학습 과정 전반에 걸쳐 업데이트된다.
Positional Encoding
Transformer 는 순환 구조도 없고, convolution 연산도 없기 때문에 모델이 시퀀스의 순서 정보를 활용할 수 있도록 토큰들의 상대적 혹은 절대적 위치에 대한 정보를 주입하여야 한다. 이를 위해 입력 입베딩 시 Positional Encoding 을 더한다.
Positional Encoding 은 임베딩과 동일한 차원이며, 두 벡터를 덧셈으로 결합할 수 있다.
저자는 인코딩에 두가지 방법론이 있다고 설명하는데, 학습 가능한 방식과 고정된 방식이 있다. 본 논문에서는 서로 다른 주파수를 갖는 sine, cosine 함수를 사용한다.

는 토큰이 문장에서 몇번째 위치인지, 는 벡터 안에서 몇번째 차원인지를 의미한다. 포지셔널 인코딩의 각 차원은 하나의 사인/코사인 파형에 해당한다.
식에서 삼각함수의 파장은 부터 까지 지수적으로 증가한다.
positional encoding 벡터는 여러 주파수 성분으로 구성되어 있으며, 저차원에서는 짧은 파장, 고차원에서는 긴 파장의 신호가 사용된다.
저자는 이 함수를 선택하게 된 것이 모델이 상대적 위치에 기반한 attention 을 쉽게 학습할 것이라고 가정했기 때문이라고 설명하며, 실제로 positional embedding 을 학습시켜보았으나 성능은 거의 같았다고 주장한다. 또한 학습시키는 positional embedding 을 사용할 때 보다 삼각함수로 구현할 때의 이점은 학습 때보다 더 긴 문장에도 적용될 가능성이 있기 때문이다.
어떤 고정된 거리 (position 상 거리를 의미한다.) 에 대해, 는 의 선형 함수로 표현할 수 있다. 이것을 증명하기 위해 512 차원이 아니라 2 차원의 경우를 예로 들어 보자면:
이고, 의 Positional Encoding 은:
에서, 삼각함수 덧셈 공식에 의해:
이다. 즉 이고, 는 오직 offset 와 주파수 에만 의존한다. 곧 이 성질로 인해 self-attention과 같은 선형 연산 기반 구조에서 상대적 위치 관계를 쉽게 학습할 수 있다.
Model Formula
-
주의:
수식의 가독성을 위해 인코더와 디코더의 각 레이어 에 대해 와 같이 표기하지 않고 통일하여 등으로 표기한다. 그러나 실제 모델에서는 인코더/디코더의 각 레이어 및 각 서브 레이어 (Self-Attention, Cross-Attention, FFN)의 파라미터는 모두 서로 독립적이며, 임베딩 파라미터 만이 공유된다.
또한 수식은 학습용 수식을 전제로 작성했고, 학습 시에는 고정된 길이의 타깃 시퀀스를 병렬 처리하므로 미래 토큰을 차단하기 위한 causal mask가 필요하다. 반면 추론 시에는 디코더 입력이 현재까지 생성된 토큰만 포함하므로 마스크는 전부 0이거나 생략될 수 있다.
- Set-up
- Input Embedding
- Positional Encoding
- Encoder Self-Attention
- Residual Connection + LayerNorm
- Position Wise Feed-Forward Network
- Residual Connection + LayerNorm
- repeat times
- Output Embedding
- Positional Encoding
- Masked Self-Attention
- Residual Connection + LayerNorm
- Cross Attention
- Residual Connection + LayerNorm
- Position Wise Feed-Forward Network
- Residual Connection + LayerNorm
- repeat times
- Embedding and softmax
Why Self-Attention
저자는 이 절에서 시퀀스 를 동일한 길이의 또 다른 시퀀스 로 변환하는 데 일반적으로 사용되는 순환(recurrent) 레이어와 합성곱(convolutional) 레이어를 self-attention 레이어의 여러 측면과 비교한다. (여기서, )
Self-Attention 이 다른 방법론과 비교하여 크게 세가지 이점이 있는데, 하나는 레이어 당 연산 복잡도의 우위이고, 또 하나는 병렬화 될 수 있는 계산의 양으로, 이는 필요한 최소 순차 연산의 개수로 측정한다. 즉 선행되어야하는 연산이 얼마나 있는가가 병렬화 가능성을 의미한다.
마지막 세번째는 장거리 의존성을 연결하는 경로의 길이이다. 장거리 의존성을 학습하는 것은 많은 시퀀스 변환 문제에서 핵심적인 어려움이며, 순전파 및 역전파 신호가 네트워크를 통해 이동해야 하는 경로의 길이를 의미하기 때문이다. 입력과 출력 시퀀스의 어떤 위치 쌍에 대해서든, 이 경로가 짧을수록 장거리 의존성을 학습하기가 더 쉬워진다.
따라서 저자는 서로 다른 레이어 타입(RNN, CNN, self-attention)으로 구성된 네트워크에서, 임의의 두 입력/출력 위치 사이의 최대 경로 길이를 비교한다.
vs. RNN
self-attention 레이어는 모든 위치를 상수 개수의 순차 연산으로 연결하는 반면, recurrent 레이어는 개의 순차 연산이 필요하다. 계산 복잡도 측면에서 보면, 시퀀스 길이 이 표현 차원 보다 작을 때 self-attention 레이어는 recurrent 레이어보다 빠르다.
RNN 에서 hidden state 를 계산하기 위해 를 계산하는데, 여기서 이므로, 계산 복잡도는 이며, 스텝을 계산해야하므로 RNN 의 계산 복잡도는 이다.
Self-Attention 은 에서 이다. 즉 행렬 곱에서 각 원소 계산 비용은 이고 원소는 이므로 이다. 곧:
이기 때문에, 에서 Self-Attention 이 RNN 보다 계산 복잡도가 낮다.
아주 긴 시퀀스를 다루는 작업의 계산 성능을 개선하기 위해 self-attention을 출력 위치를 중심으로 한 크기 의 이웃 영역만 고려하도록 제한할 수도 있다. 이렇게 하면 최대 경로 길이는 로 증가하는데, 이 접근법은 본 논문에서는 더 연구되지는 않는다.
vs. CNN
커널 폭이 인 단일 convolution 레이어는 입력과 출력 위치의 모든 쌍을 연결하지 못한다. 이를 달성하려면 연속된 커널을 사용하는 경우 )개의 합성곱 레이어를 쌓아야 한다. 혹은 dilated convolution의 경우에는 개의 레이어가 필요하다. 또한 동일한 표현 차원에서, 커널 폭이 인 convolution은 한 시점당 개의 입력을 처리하므로 순환 레이어보다 일반적으로 배 많은 연산을 요구한다.
하지만 separable convolution 로 계산 복잡도를 상당히 줄일 수 있는데, 먼저 각 채널을 독립적으로 로 convolution 한다. 이는 에서 각 채널 에 대해 에 대해서만 convolution 하는 것을 의미한다. 즉 요소 갯수 개 에서, 각 요소마다 곱셈 회 이므로 ),
이후 kernel size 1의 point wise convolution을 적용하여 채널 방향으로 선형 결합한다. 선형 결합은 를 의미하는데, 이므로, 원소 갯수 , 원소 당 연산 개이므로, .
결론적으로 separable convolution 의 계산 복잡도는 . 그러나 인 경우에 분리 합성곱의 계산 복잡도는 self-attention 레이어와 point wise feed-forward 레이어를 결합한 것과 동일하다.
즉 CNN 으로 Self-Attention 의 path length 에 도달하려면 이어야 하며, 이 경우 계산 복잡도는 self-attention + point-wise feed forward 와 동일하다는 것이다.
Side Benefit
부수적인 이점으로, self-attention은 더 해석하기 쉽다. 저자는 모델에서 나온 attention 분포를 분석하였고, 개별 attention head 들이 서로 다른 역할을 학습한다는 점을 시각화를 통해 관찰하였고 많은 head들이 문장의 syntactic 및 semantic 구조와 관련된 행동이 보인다고 주장한다.
즉 Self-attention은 단순히 성능이 좋은 구조일 뿐 아니라, attention weight를 통해 모델이 무엇을 보고 판단하는지 비교적 명확하게 해석할 수 있는 구조다.

Training
Tokenizers
Byte-Pair Encodoing
BPE는 단어를 문자 단위에서 시작해, 가장 자주 함께 등장하는 문자(또는 서브워드) 쌍을 반복적으로 병합하여 서브워드 어휘를 만드는 빈도 기반 토크나이징 기법이다.
학습 과정은 단순히 말뭉치에서 가장 빈번한 쌍을 찾고 이를 하나의 토큰으로 합치는 작업을 정해진 횟수만큼 반복하는 방식이며, 이로써 어휘 크기를 제한하면서도 희귀 단어를 여러 서브워드의 조합으로 표현할 수 있다. BPE는 계산이 간단하고 데이터 규모가 크지 않아도 안정적으로 동작하기 때문에, WMT 영어–독일어 번역과 같이 비교적 중간 규모 데이터에서 표준적으로 사용되어 왔다.
playing, played, player, plays
의 예시에서, p + l, pl + a, pla + y 같이 자주 같이 등장하는 문자쌍 위주로 병합하는 방식이다.
WordPiece
WordPiece는 단어를 서브워드 단위로 분해한다는 점에서는 BPE와 유사하지만, 병합 기준으로 단순 빈도가 아니라 언어 모델의 확률( likelihood)을 가장 크게 개선하는 쌍을 선택하는 확률 기반 토크나이징 기법이다.
즉, 두 토큰을 합쳤을 때 문장 전체의 생성 확률이 얼마나 좋아지는지를 기준으로 병합을 결정한다. 이 때문에 WordPiece는 이론적으로 더 정교한 기준을 사용하지만, 충분한 데이터가 있을 때 효과적이며 학습 비용은 BPE보다 다소 높다.
playing, played, player, plays
의 예시에서, play + (ing, ed, er) 일 때 모델이 likelihood 를 최대로 만드므로, play라는 서브워드를 만들었을 때 전체 문장 확률이 올라가면, 그 병합을 채택한다.
Training Data and Batching
WMT 2014 번역 벤치마크에서 저자는 두 가지 데이터셋으로 Transformer를 학습했다. 영어-독일어는 약 450만 개의 문장 쌍으로 구성된 표준 WMT14 데이터를 사용했고, 영어-프랑스어는 훨씬 규모가 큰 3,600만 문장 쌍의 WMT14 데이터를 사용했다. 두 실험 모두 단어를 그대로 쓰지 않고, 희귀 단어를 더 작은 단위로 쪼개는 서브워드 토크나이징을 적용했다. 영어-독일어에서는 Byte-Pair Encoding(BPE)을 사용해 소스와 타깃이 공유하는 약 37,000개 토큰 어휘를 만들었고, 영어-프랑스어에서는 word-piece 방식으로 약 32,000개 토큰 어휘를 사용했다. 이런 서브워드 기반 어휘를 쓰면 OOV(어휘 밖 단어) 문제가 줄고, 언어 간 형태 변화가 큰 단어도 조합적으로 표현할 수 있다.
BPE 는 빈도 기반이므로, 데이터가 아주 크지 않아도 안정적으로 동작한다. 병합 기준이 단순하기 때문이다. 반면 WordPiece 는 확률 기반이므로, 충분히 큰 말뭉치가 있어야 병합 판단이 의미있다. 즉 데이터가 적으면 불안정 할 수 있다. 그래서 불어에 비해 데이터가 적은 독일어 쪽에 BPE 를 사용했다고 해석된다.
저자는 배치 구성 방식도 Transformer 특성에 맞춰 설계했다. 문장 수를 고정해서 배치를 만드는 대신, 문장 쌍을 대략 비슷한 길이끼리 묶은 뒤 한 배치가 포함하는 토큰 수를 거의 일정하게 맞췄다. 구체적으로는 한 배치가 대략 소스 토큰 25,000개와 타깃 토큰 25,000개를 포함하도록 문장 쌍을 모았다. 이렇게 하면 길이가 제각각인 문장을 무작정 섞었을 때 발생하는 과도한 padding 낭비가 줄어들고, 특히 시퀀스 길이에 따라 비용이 커지는 self-attention(대략 )을 더 효율적으로 학습할 수 있다.
Hardware and Schedule
저자는 8개의 P100 GPU 환경에서 Transformer를 학습했으며, base 모델은 약 12시간, big 모델은 약 3.5일이 소요되었다. 이는 Transformer가 병렬화에는 유리하지만, 대규모 연산 자원을 전제로 한 모델임을 보여준다.
Optimizer
저자는 Adam 옵티마이저를 사용했으며, 1차 모멘트 계수는 , 2차 모멘트 계수는 , 수치 안정화를 위한 상수는 로 설정했다.
보편적으로 사용하는 를 사용하지 않은 것이 포인트인데, 은 훨씬 빠른 분산 반응을 보인다. 이는 Transformer 에서 attention score 분포가 step 마다 크게 변하기 때문이며, 특정 head, token 에 몰렸다가 사라져 과거의 분산 정보가 금방 쓸모없어지기 때문이다.
또한 학습 과정 전체에 걸쳐 학습률을 변화시켰다.
Transformer는 학습 초반 불안정을 막기 위해 처음 4000 step 동안 학습률을 step에 비례해 선형적으로 증가시키고, 이후에는 step 수의 역제곱근에 비례하도록 감소시키는 learning rate schedule을 사용한다.

Regularization
Residual Dropout
Transformer에서는 각 서브레이어의 출력에 dropout을 적용한 뒤 residual connection과 layer normalization을 수행하는 residual dropout을 사용한다. 이는 identity path의 안정성을 유지하면서 서브레이어 출력에만 정규화를 가하기 위함이다.
또한 입력 단계에서 token embedding과 positional encoding의 합에도 dropout을 적용하여 위치 정보에 대한 과도한 의존을 방지한다. Base 모델에서는 dropout 비율로 0.1을 사용한다.
Label Smoothing
퍼플렉시티(perplexity)는 언어 모델이 정답 토큰을 얼마나 “확신하지 못하는지”를 나타내는 지표로, 각 시점에서 정답 단어에 할당한 로그 확률의 평균을 지수화한 값이다. 직관적으로는 모델이 다음 단어를 예측할 때 평균적으로 몇 개의 후보 앞에서 망설이고 있는지를 의미하며, 값이 낮을수록 모델이 정답에 높은 확률을 부여하고 있음을 뜻한다.
라벨 스무딩(label smoothing)은 학습 시 정답 레이블을 one-hot 벡터로 두지 않고, 정답 클래스의 확률을 1보다 작게 낮추고 나머지 확률을 다른 클래스들에 소량 분산시키는 정규화 기법이다. 이로 인해 모델은 특정 토큰에 대해 100% 확신을 갖도록 강제되지 않으며, 출력 분포가 지나치게 뾰족해지는 것을 방지한다. 결과적으로 모델은 “정답일 가능성이 가장 높다”는 정보는 유지하되, 대안 토큰들에 대해서도 일정 수준의 확률을 할당하도록 학습된다. 이는 over-confidence를 줄이고, softmax 출력의 포화를 방지하는 역할을 하며, 출력 분포 자체에 작용하는 regularization으로 볼 수 있다.
저자는 학습 과정에서 라벨 스무딩()을 적용하였으며, 이로 인해 퍼플렉시티는 오히려 악화되지만 정확도와 BLEU 점수는 향상된다고 보고한다. 이는 라벨 스무딩이 정답 토큰의 확률을 의도적으로 낮추기 때문에 퍼플렉시티 기준에서는 손해처럼 보이지만, 번역 과제에서 중요한 것은 단일 토큰의 확률 최대화가 아니라 문장 전체의 상대적 품질이기 때문이다.
Results
Machine Translation
저자는 Transformer 논문에서 저자들은 WMT 2014 영어–독일어와 영어–프랑스어 번역 과제를 통해 모델의 성능과 효율성을 평가하였다. 영어–독일어 번역에서는 약 450만 문장 쌍으로 구성된 데이터셋을 사용했으며, Transformer(big) 모델은 BLEU 28.4를 기록해 기존 최고 성능 모델들(앙상블 포함)을 2 BLEU 이상 앞지르며 새로운 최고 성능을 달성했다. 영어–프랑스어 번역에서는 3,600만 문장으로 이루어진 훨씬 더 큰 데이터셋을 사용했으며, Transformer(big)은 BLEU 41.0을 기록해 기존 모든 단일 모델을 능가했고, 이전 최고 성능 모델 대비 훈련 비용은 1/4 이하에 불과했다. 심지어 base 모델조차도 기존의 모든 단일 모델과 앙상블을 뛰어넘는 성능을 훨씬 적은 계산 비용으로 달성했다.
base 모델과 대부분의 실험에서는 dropout 비율 0.1을 적용했다. 반면 Transformer(big)은 기본적으로 파라미터 수가 많아 과적합 위험이 크기 때문에 dropout 0.3을 사용했지만, 데이터 규모가 매우 큰 영어–프랑스어 번역 실험에서는 과도한 정규화를 피하기 위해 dropout을 0.1로 낮췄다. 이는 모델 크기뿐 아니라 데이터 규모에 따라 적절한 정규화 강도가 달라져야 함을 보여준다.
Model Variations


저자는 Transformer의 각 구성 요소가 성능에 미치는 영향을 분석하기 위해, base 모델을 다양한 방식으로 변형하는 테스트를 수행하였다. 평가는 영어–독일어 번역 개발셋(newstest2013)에서 이루어졌으며, beam search는 사용하되 checkpoint averaging은 적용하지 않았다.
- multi-head attention의 중요성이 확인되었다. 단일 head attention은 최적 설정 대비 약 0.9 BLEU 낮은 성능을 보였으며, 이는 여러 head를 통해 서로 다른 관계를 병렬적으로 학습하는 구조가 번역 성능에 실질적으로 기여함을 의미한다. 다만 head 수를 지나치게 늘릴 경우 각 head의 차원이 너무 작아져 성능이 다시 저하되었다.
- attention key 차원 은 모델 성능에 중요한 요소였다. 를 줄이면 번역 품질이 감소했는데, 이는 query–key 간의 유사도를 판단하는 문제가 단순하지 않으며 충분한 표현 공간이 필요함을 시사한다.
- 모델 크기와 정규화의 효과도 명확히 나타났다. 모델을 크게 만들수록 성능은 향상되었고, dropout은 과적합을 방지하는 데 매우 중요한 역할을 했다. 특히 Transformer처럼 파라미터 수가 많은 모델에서는 dropout이 없을 경우 성능이 크게 악화되었다.
- positional encoding 방식에 대한 실험에서는 사인-코사인 기반 고정 positional encoding과 학습 가능한 positional embedding 사이에 성능 차이가 거의 없었다. 이는 Transformer가 고정된 위치 인코딩만으로도 충분히 위치 정보를 활용할 수 있음을 보여준다.
English Constituency Parsing
저자는 Transformer가 기계 번역을 넘어 다른 시퀀스 변환 문제에도 일반화될 수 있는지를 검증하기 위해 영어 구문 분석(constituency parsing) 실험을 수행하였다. 구문 분석은 출력이 강한 구조적 제약을 따르고 출력 시퀀스가 입력보다 훨씬 길어지는 어려운 과제로, 모델의 장거리 의존성 처리 능력과 구조적 표현력을 평가하기에 적합하다.
실험 결과, Transformer는 과제 특화된 구조나 복잡한 튜닝 없이도 매우 우수한 성능을 보였으며, 기존 RNN 기반 sequence-to-sequence 모델들을 모두 능가하였다. 특히 데이터 규모가 작은 환경에서도 전통적인 구문 분석 모델인 Berkeley Parser보다 더 나은 성능을 기록하였다. 이는 self-attention 기반 Transformer가 장거리 의존성과 전역적 구조를 효과적으로 모델링할 수 있음을 보여주며, Transformer가 번역을 넘어 다양한 구조적 시퀀스 변환 문제에서도 강한 일반화 성능을 갖는다는 점을 입증한다.
Conclusion
저자는 본 논문에서 Transformer를 제안하였다. Transformer는 기존 encoder–decoder 구조에서 널리 사용되던 순환(recurrent) 레이어를 완전히 제거하고, multi-head self-attention만으로 구성된 최초의 시퀀스 변환 모델이다.
기계 번역 실험에서 Transformer는 RNN이나 CNN 기반 모델들에 비해 훨씬 빠르게 학습될 수 있었으며, WMT 2014 영어–독일어 및 영어–프랑스어 번역 과제 모두에서 SOTA를 달성하였다. 특히 영어–독일어 번역에서는 기존의 모든 앙상블 모델들까지도 능가하는 성능을 기록하였다.
저자들은 이러한 결과를 바탕으로 attention 기반 모델의 잠재력에 큰 기대를 표하며, 향후 Transformer를 텍스트를 넘어 이미지, 오디오, 비디오와 같은 다양한 입력·출력 모달리티로 확장할 계획임을 밝힌다. 또한 매우 큰 입력과 출력을 효율적으로 처리하기 위해 국소적(local) 또는 제한된 attention 메커니즘을 연구하고, 생성 과정의 순차성을 더욱 줄이는 방향도 중요한 향후 연구 과제로 제시한다.