1. Introduction
기존 RNN, LSTM, GRU 같은 recurrent 구조는 언어 모델링과 번역 등 시퀀스 모델링/변환 작업에서 SOTA를 기록해왔습니다. 하지만 순차 연산은 병렬 처리가 어렵고 학습 속도가 느리며, 긴 시퀀스에 대한 학습에서 메모리와 연산 효율에 한계가 있습니다. Attention은 RNN과 함께 사용되고, 독립적으로 사용하는 경우는 드물었습니다. 본 논문에서 RNN이나 CNN 없이 오직 Attention에만 의존한 Transformer 모델을 제안합니다. Transformer는 병렬화가 뛰어나고, 기계 번역에서 새로운 SOTA를 달성했습니다.
한 마디로 Transformer는 입력 전체의 관계를 병렬로 계산하는 Self-Attention 기반 모델로, 장기 의존성과 확장성을 모두 갖춘 딥러닝의 핵심 구조입니다.
2. Background
Transformer가 발표되기 이전의 CNN 기반 모델은 병렬 처리는 되지만 먼 위치 연결이 비효율적인 한계가 있었습니다. Transformer는 연산량을 줄이면서도 Multi-head로 정보 손실을 보완합니다. Self-attention은 하나의 시퀀스 내에서 서로 다른 위치들 간의 관계를 학습하여, 그 시퀀스의 표현을 계산하는 어텐션 매커니즘입니다. Self-attention은 이미 다양한 작업에 효과적으로 쓰여 왔습니다.
3. Model Architecture

모델 구조 그림에서 왼쪽 회색 박스가 Encoder, 오른쪽 회색 박스가 Decoder입니다.
Encoder
본 논문에서는 레이어 개수 N=6, 출력차원=512로 구성했습니다. 각 레이어는 다음 두 가지 sub-layer를 포함합니다:
1. Multi-head self-attention
2. Position-wise fully connected Feed-Forward Network
각 sub-layer에는 잔차 연결로 입력을 그대로 더해주어 gradient vanishing을 방지하고 학습 안정화를 유지하합니다. 잔차 연결을 수월하게 하기 위해 출력 차원을 고정합니다. 그후 Layer Norm을 적용해 출력값들의 분포를 각 토큰 단위로 정규화합니다. 쉽게 말해서 한 토큰의 벡터 내부에서 계산하여 단어 하나하나를 독립적으로 처리합니다. 문장 전체보다 각 토큰이 문맥 속에서 어떻게 쓰이는지가 중요하기 때문입니다. 토큰마다 평균 0, 분산 1로 맞추어 모든 토큰이 비슷한 스케일을 가지도록 균일화합니다. 스케일 차이로 인한 학습 편향을 줄이고, 동일한 스케일에서 의미 일관성을 유지하며 다른 토큰과 상호작용하게 됩니다.
BatchNorm 대신 LayerNorm을 사용하는 이유는 Transformer가 각 토큰을 독립적으로 처리하기 때문에 토큰 단위로 정규화하는 LN에 잘 맞습니다. 또한 배치 크기에 상관없이 안정적인 학습이 가능해야하고, 배치 크기가 1인 추론 상황에서도 일관된 성능을 유지할 수 있어야 합니다. 하지만 BatchNrom은 배치사이즈가 작은 경우 분산 추정이 불안정해지며, 단어별 의미 구조가 유지되지 않고 일관성을 상실합니다. 주로 BatchNorm을 쓰는 CNN은 이런 문제가 안생길까요?
다시 말하자면 BatchNorm은 각 채널마다 평균과 분산을 계산합니다. CNN은 한 채널안에 HxW 만큼의 픽셀값이 있어서 배치가 작더라도 샘플 수가 많습니다. 또한 국소적 특징과 반복적인 패턴을 잘 학습하기 때문에 정규화가 조금 부정확하더라도 비교적 학습 성능이 크게 흔들리지 않습니다.
Decoder
Encoder 레이어와 유사하게, 다음 세 가지 sub-layer로 이루어져 있습니다:
1. Masked Multi-head self-attention
2. Encoder-decoder attention (query는 디코더에서, key/value는 인코더에서 가져옴)
3. Position-wise Feed-Forward Network
여기도 마찬가지로 잔차 연결과 Layer Norm이 적용됩니다. Auto-regressive 특성을 유지하기 위해 디코더에서는 현재 위치보다 이전 위치 정보들에만 의존하고, 현재 위치 이후 정보는 보지 못하도록 마스킹 처리를 합니다. 실제 시퀀스 생성 태스크에서는 보통 왼쪽에서 오른쪽으로 순차적으로 생성합니다. 훈련 시에도 이 조건을 지켜서 진행하여 훈련과 테스트 조건이 일치하도록 학습합니다.
Attention이란, Query와 Key의 내적을 통해 유사도를 계산하고, 그 값으로 Value를 가중합하는 메커니즘입니다. Q, K, V는 스칼라가 아닌 벡터값입니다. 단어 간 관계를 다차원 벡터값으로 표현해야 복잡한 관계를 파악할 수 있습니다. 따라서 벡터 간 유사도와 방향성까지 고려하게 됩니다. V는 Q와 K의 유사성에 따라 선택되는 값입니다.

- Scaled dot-product attention( = self-attention )
- Q와 K의 내적 결과를 √d_k로 나눠 스케일링한 뒤, Softmax를 거쳐 Value(V)를 가중합
- Q와 K가 유사할수록 V가 더 크게 반영
- d_k가 커질수록 gradient가 작아지는 현상을 방지하기 위해 스케일링 필요
- dot-product attention이 additive attention보다 계산이 더 빠르고 효율적 -> 병렬 연산에 최적
* additive attention은 FFN 기반, dot-product는 행렬곱(내적) 기반

- Multi-head attention
- 하나의 attention을 여러개 d차원 multi-head로 나누어 병렬 수행
- 각 head는 입력을 독립적으로 Q, K, V로 투영 후 attention을 수행하며, concat한 뒤 다시 투영
- 쉽게 말해서 각 head 마다 문법 중심, 의미 중심, 위치 중심 등 다른 관점으로 attention 수행
- 다양한 표현 정보를 결합할 수 있어 표현력 향상에 기여하며, 논문에서는 8개의 head를 사용
- 계산량은 하나의 attention과 유사
Self-attention의 동작 방식
- Encoder-Decoder cross-attention : Q는 이전 디코더에서, K와 V는 인코더의 출력에서 가져옵니다. 디코더가 인코더의 전체 출력을 참조하고 어디를 집중할지 계산합니다. 이 구조로 입력 전체를 문맥으로 참고하면서 점진적으로 출력을 생성할 수 있습니다. 즉, 입력-출력 간 의미 매핑(연결)을 학습합니다.
- Encoder의 self-attention : Q, K, V는 모두 같은 인코더의 출력에서 가져옵니다. 인코더의 모든 위치에서 서로 참조할 수 있습니다.
- Decoder의 self-attention : Auto-regressive 특성을 유지하기 위해 학습 중 디코더에서 좌측 방향으로 정보가 흐르는 것을 막아야 합니다. 이전 위치부터 현재 위치의 정보까지만 집중하도록 마스킹을 적용해 미래 정보에 대한 유사도를 구하지 않도록 합니다.
Transformer 구조를 처음 공부할 때, Masked attention 뒤에 Cross attention을 지나면 디코더가 결국 미래 정보를 다 보게 되는 것 아닐까? 하는 의문이 들었습니다. Masked attention에서 이전 디코더 출력들만 보고 미래 토큰을 마스킹합니다. 그 후 cross attention에서 디코더의 전체 출력을 보는 것이 아닙니다. 인코더의 전체 출력과 디코더의 출력만 상호작용하므로 디코더의 미래 출력 토큰을 보게 되는 일은 없습니다.
Cross-attention과 Self-attention의 차이점을 정리하자면, Cross는 두 시퀀스 간 관계를 학습하는 것이고, Self는 시퀀스 내 토큰끼리 관계를 학습하여 문맥을 이해하는 역할입니다.
Position-wise Feed-Forward Networks (Position-wise FFN)
Self-attention은 단어들 간의 상호작용 관계만 볼 뿐, 각 토큰의 내부 표현을 강화하지 못합니다. Attention에서 구한 관계성 및 유사성 정보를 바탕으로 FFN에서 중요한 단어 벡터를 더 복잡하고 풍부한 표현으로 변환합니다. 인코더와 디코더 각각 독립적으로, 동일하게 FFN을 적용합니다. 즉, 각 단어마다 따로 적용하고 모든 단어에 똑같은 방식으로 적용합니다. 선형 변환은 위치마다 동일하게 적용되지만, 레이어마다 서로 다른 파라미터를 사용하여 더 복잡하고 추상적인 표현을 학습합니다. 이 구조는 커널 크기 1인 컨볼루션 2개를 쌓은 구조와 같습니다. 입력 차원 512 -> 은닉층 레이어 2048 -> 출력 차원 512 으로 구성됩니다.

이 수식에서 max(0, X)인 활성화 함수는 RELU를 사용합니다. 원래 Transformer는 대부분 선형 연산이라 비선형 함수인 활성화 함수를 도입하여 모델의 표현력을 증가시킵니다. 활성화 함수가 선형 변환 식 안에 있으면 원본 입력 특징을 잃게 됩니다. 출력은 선형 변환으로 유지돼야 잔차 연결에 문제가 없습니다. 선형 변환에서는 공간 변환만 수행하고 정보 구조를 유지해야 합니다. 비선형 함수는 가장 바깥에서 한 번만 수행해도 충분히 표현력을 가집니다.
Embeddings and softmax
입력과 출력 토큰을 d_model 차원 벡터로 변환하기 위해 학습된 임베딩을 사용합니다. 디코더의 출력은 선형 변환과 Softmax를 거쳐 다음에 올 토큰 확률 분포를 생성합니다. Transformer는 입력 임베딩 레이어, 출력 임베딩 레이어, Softmax 이전의 선형 변환에서 동일한 가중치 행렬을 공유합니다. 여기서 핵심인 가중치 공유를 통해 파라미터 수를 줄이고 일반화를 유도합니다.
Positional Encoding
Transformer에서는 recurrent 구조나 convolution 구조가 없어서 입력 시퀀스의 단어 순서를 반영하지 못합니다. 따라서 각 단어의 위치 정보를 수치화한 벡터를 제공해야 합니다. 인코더와 디코더의 아래 부분에서 입력 임베딩에 Positional encoding을 더해서 사용합니다. 임베딩 벡터 차원과 같은 차원을 가져서 임베딩 벡터와 Positional encoding을 더할 수 있습니다. 본 논문에서는 sin/cos 함수 기반의 위치 인코딩을 사용하는 방법을 제시합니다. sin/cos 함수를 사용하는 이유가 뭘까요?
첫번째, 위치 간 상대적 차이를 선형적으로 표현할 수 있기 때문입니다.

Positional encoding은 위치(pos)와 차원(i)마다 서로 다른 주기의 sin/cos 파형을 적용합니다. 이때 사용하는 파장은 2π부터 10000*2π까지 기하급수적으로 증가합니다. 고정된 거리 k만큼 떨어진 위치의 인코딩(PE(pos+k))가 현재 위치의 인코딩(PE(pos))의 선형함수로 표현될 수 있습니다. 상대적인 거리를 쉽게 계산 가능하고, 수치적으로 안정적이면서 미분도 잘 되어 역전파도 무리없이 계산이 가능합니다. 따라서 모델이 상대적인 위치 정보를 학습하기 쉬워집니다. 또한 위치값이 너무 커져버리면 단어간 의미 정보를 표현하는 값이 상대적으로 작아질 수 있습니다. sin/cos 함수는 -1 ~ 1 사이 값을 가져서 커지지 않습니다.
두번째, 주기성과 주파수의 조합을 통해 다양한 범위의 위치 표현이 가능합니다. sin/cos 함수는 주기함수로, 멀리 떨어진 단어와 가까운 단어를 구분하는 데 모두 유용합니다. 아래 그래프에서 보듯이, 파란색 차원은 저주파로 매우 빠르게 진동하여 가까운 위치 차이에 민감하고, 초록색과 빨간색 차원은 고주파로 점점 느리게 진동하여 멀리 떨어진 위치도 구분이 가능합니다.

이렇게 여러 주기의 함수를 동시에 사용하고 각 차원마다 다른 주기를 주기 때문에 어떤 위치든 고유한 인코딩 벡터를 만들 수 있습니다. 또한 sin 함수는 수식으로 정의되므로 훈련 중 보지 못한 더 긴 시퀀스에도 대응이 가능하고 확장성 측면에서 유리합니다.
sin/cos 함수를 사용했을 때 위치가 겹치는 경우가 없는지 궁금했습니다. 하나의 위치 벡터가 512차원이면, 각 요소마다 다른 주기를 갖기 때문에 겹치지 않습니다. i와 d에 의해서 sin과 cos를 번갈아 계산하여 다양한 주기로 섞입니다. pos가 같더라도 차원 i가 달라지면 각 벡터 요소들은 서로 다른 sin or cos 값을 가져 전체 Positional encoding 벡터는 겹치지 않습니다. 서로 다른 주기를 가진 sin/cos 함수의 조합은 거의 모든 위치에 대해 고유한 벡터로 표현이 됩니다. positional encoding은 여러 개의 sin/cos 함수를 동시에 사용하여 '다양한 주기'로 섞이는 것입니다.
Why Self-attention
Self-attention과 RNN/CNN를 비교해봅시다. 비교 기준은 병렬 처리 가능성, 장기 의존성 학습 용이성, 전체 계산량 3가지입니다.
| 모델 | 병렬화 | 최대 경로 길이 | 계산량 |
| RNN | X | O(n) | O(n) |
| CNN | O | O(logₖ n) | 큼 |
| Transformer | OOO | O(1) | 작음(n이 짧을수록 더 유리) |
장기 의존성 학습 용이성에 영향을 주는 요인 중 하나는 순방향 및 역방향 신호가 네트워크 내에서 이동해야 하는 경로의 길이입니다. 입력과 출력 시퀀스 내 임의의 위치 쌍 사이의 경로가 짧을수록 모델이 장기 의존성을 학습하기 쉬워집니다. 따라서 서로 다른 레이어 유형으로 구성된 네트워크에서 임의의 두 입력 및 출력 위치의 최대 경로 길이를 비교합니다.
쉽게 말해서, RNN처럼 순차적인 구조에서는 첫 단어에서 마지막 단어까지 신호 처리가 오래 걸려 경로 길이가 깁니다. 반면 Self-attention은 모든 위치가 one by one으로 한 번에 연결되기 때문에 경로 길이가 짧습니다. 하지만, 문장이 엄청 길어지면 Self-attention도 느려집니다. 그래서 모든 단어를 다 비교하지 않고 이웃 단어 r개만 보도록 제한할 수 있습니다. 그러면 연산량이 줄어들고 성능이 개선됩니다. 계산 복잡도 관점에서 Self-attention 레이어는 모든 연산을 병렬로 동시에 처리할 수 있어 O(1)의 순차 연산이 필요하지만, recurrent 레이어는 한글자씩 순서대로 처리해야 해서 O(n)의 순차 연산이 필요합니다. 계산 복잡도는 문장 길이보다 벡터 차원에 더 영향을 받습니다. 그래서 짧은 문장일수록 self-attention이 더 빠릅니다.
CNN에서 커널 크기 k가 문장 길이 n보다 작으면, Convolution 레이어는 모든 입출력 위치 쌍을 연결하지 못합니다. 가능하게 하려면 연속 커널을 사용하는 경우 O(n/k)개의 합성곱 레이어를 쌓아야 하고, dilated conv(커널이 겹치지 않게 간격을 둔 conv) 레이어 경우 O(lon_k(n))개의 레이어가 필요합니다. 이는 네트워크 내 임의의 두 위치 사이의 최대 경로 길이를 증가시켜 장기 의존성 학습이 어렵습니다.
Convolution 레이어는 recurrent 레이어보다 k배 정도 더 계산 비용이 큽니다. 다만 separable Conv를 사용하면 계산 복잡도를 줄일 수 있습니다. 공간 연산에서 O(k*n*d), 채널 연산에서 O(n*d^2)으로, O(k*n*d + n*d^2)로 줄일 수 있습니다. 이렇게 효율은 개선이 되지만, self-attention + FFN 조합과 동일한 수준의 복잡도를 갖습니다.
* Dilated Conv는 커널이 겹치지 않게 입력 간격을 둔 방식입니다.
* Separable Conv는 일반 Conv보다 공간 연산과 채널 연산을 분리해서 계산량을 줄인 방식입니다.
4. Results

본 논문에서 여러 실험을 진행했습니다. 다음은 각 실험 결과입니다.
(A) Attention head 수 및 차원 변경 : head 수가 1이면 BLEU 감소 -> multi-head 구조 효과 입증. head 수가 너무 적거나 많아도 성능 저하
(B) Attention Key 차원 축소 : key 차원이 너무 작으면 유사도 계산 정확도 감소 -> dot-product 유사도 계산의 한계
(C) 모델 크기 확장 : 파라미터 수가 가장 많은 모델 성능의 PPL이 가장 높음 -> 모델 크기 커질수록 성능 향상
(D) Dropout 적용 여부 : Dropout을 쓰지 않으면 과적합 발생 -> 과적합 방지 중요
(E) sin/cos positional encoding 대신 학습된 positional embedding 사용 : 두 방식 성능이 비슷. sin/cos은 extrapolation 장점
5. Conclusion

Transformer는 완전히 attention에 기반한 시퀀스 변환 모델로, RNN구조를 multi-head self-attention 기반 구조로 대체했습니다. WMT 2014 영어 -> 독일어 영어 -> 프랑스어 번역 태스크에서는 SOTA를 달성했습니다.
본 논문은 attention이 모델의 중심이 될 수 있다는 새로운 관점을 제시했습니다. Transformer가 발표된 지 수년이 지났음에도 여전히 자연어처리 분야의 핵심 구조로 자리잡고 있으며, GPT, BERT 등 후속 모델의 기반이 되었다는 점에서 그 영향력을 볼 수 있습니다. 그러나 이 모델 또한 긴 시퀀스에서 계산량이 급격히 증가하기 때문에 병목 현상이 발생할 수 있습니다. 이후 등장한 Longformer, Performer, FlashAttention 등의 후속 연구들은 이러한 한계를 극복하기 위해 Transformer 구조의 실용성과 확장성을 개선하는 방향으로 발전하고 있습니다.
출처 : https://arxiv.org/abs/1706.03762
Attention Is All You Need
The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new
arxiv.org