[논문 리뷰] Attention Is All You Need

JMM·2025년 7월 1일

논문

목록 보기
1/6
post-thumbnail

개요

이 글은 AI 분야에서 가장 영향력 있는 논문 중 하나인 "Attention is All You Need"의 핵심 내용을 정리한 것이다.
하계 인턴 중 Transformer 구조와 관련된 개념적 이해를 보완하기 위해 논문을 직접 읽고 주요 내용을 단계적으로 요약하였다.
전체 구조, 주요 모듈 설명, 실험 세팅 및 결과를 포괄적으로 정리하여 나중에 참고하기 쉽게 구성하였다.


Abstract

현재까지 시퀀스 변환 작업은 복잡한 RNN 또는 CNN 기반의 encoder-deconder 구조에 의존해왔다. 하지만 2017년, RNN과 CNN 없이 오직 attention 매커니즘만으로 구성된 Transformer가 등장하며 새로운 패러다임을 제시하였다.

Transformer는 기존 모델보다 학습 속도가 빠르고 병렬화에 유리하며, 품질 또한 뛰어나다. 본 문서에서는 Transformer의 구조적 특징과 동작 원리를 단계적으로 정리하고자 한다.


1. Instruction

기존 RNN,LSTM, GRU와 같은 순환 신경망이 주로 Language Modeling과 Machine Translation에 사용되었다.

그러나 RNN은 각 time step마다 순차적으로 hidden state(h_t)를 계산하므로 병렬화가 어렵고, sequence length가 길어질수록 메모리 소모 증가하며, 배치 크기 제한과 학습 속도 저하 문제가 발생한다.

최근에는 factorization tricks나 conditional computation과 같은 기법으로 효율을 개선하려는 시도가 있었지만, RNN의 순차 처리 구조로 인한 근본적인 한계는 여전히 존재했다.

한편 Attention 매커니즘은 입력과 출력 시퀀스 간의 거리에 상관 없이 의존성을 효과적으로 모델링을 할 수 있지만, 이전까지는 RNN을 보완하는 보조 수단으로만 활용되었다.

이에 따라 이 논문에서는 RNN을 완전히 제거하고 입력과 출력간의 의존성을 attention만으로 학습 ("relying entirely on an attention mechanism to draw global dependencies between input and output")하는 구조를 제안한다.

이를 통해 병렬 처리가 가능해지고, 짧은 시간 내에도 높은 성능을 달성할 수 있게 되었다.


2. Background

기존 CNN 기반 모델들(Extended Neural GPU, ByteNet, ConvS2S)도 sequential computation을 줄이기 위해 다양한 시도를 해왔다. 하지만 CNN은 local context에만 주로 집중하기 때문에, 멀리 떨어진 단어까지의 의존성을 학습하는 부분에 있어 한계가 있었고, 이러한 거리 기반의 문제가 여전히 해결되지 않았다.

이를 Transformer는 self-attention 매커니즘을 통해 상수 시간에 해결하였고, 또한 Multi-Head Attention을 통해 해상도 손실 문제를 완화하였다.

여기서 self-attention(intra-attention)은 하나의 sequence 내에서 단어들간의 관계를 계산하는 방법으로, 모델이 문맥을 보다 유연하게 이해할 수 있도록 한다.

한편 End-to-end memory networks는 전통적인 RNN 순차구조를 따르지 않고, recurrent attention 기반으로 시퀀스를 처리하고자 하였다. 이는 attention 메커니즘을 중심으로 한 계산 구조의 가능성을 보여주었고, 이후 Transformer 모델의 설계에도 많은 영향을 미쳤다.

결과적으로 Transformer는 RNN과 CNN을 모두 배제하고, 오직 self-attention만을 이용하여 입력과 출력을 처리하는 최적화된 시퀀스 변환 모델로 자리잡게 되었다.


3. Model Architecture

기존 시퀀스 변환 모델은 encoder-decoder 구조를 따른다.
encoder는 입력 시퀀스 x를 연속적인 벡터 표현(z)으로 변환하고,
decoder는 이 벡터를 기반으로 auto-regressive 방식으로 y1~y_n을 생성한다.
(*auto regressive : 이전 생성한 y1~y_t-1을 통해 y_t 생성하는 방식)

Transformer는 이러한 기본 구조는 유지하면서도,
RNN/CNN을 전혀 사용하지 않고, 대신 Self-Attention과 Fully-Connected Layer만으로 Encoder와 Decoder를 구성하였다.
덕분에 병렬 처리가 가능하며, 긴 의존 관계도 효과적으로 학습할 수 있는 새로운 구조를 보여준다.


Encoder

동일한 구조의 layer 6개를 순차적으로 쌓은 구조이다.

각 layer는 두 개의 sub layer로 구성된다.

  1. Multi-Head Self-Attention
  2. Position-wise Fully-Connected Feed-Forward Network

각 sub layer에는 Residual Connection과 Layer Normalization이 적용된다.

출력은 다음과 같이 계산된다.
Output = LayerNorm(x + SubLayer(x))

그리고 모든 출력차원 벡터 차원은 512로 고정되어 있으며, Residual 연결을 위해 입출력 shape 일치가 필수이다.


Decoder

Decoder 역시 동일한 구조의 layer 6개를 순차적으로 쌓은 구조이다.

각 layer는 세 개의 sub layer로 구성된다.

  1. Masked Multi-Head Attention
  2. Encoder-Decoder Attention
  3. Position-wise Feed Forward Network

각 서브 레이어에는 Residual Connection과 Layer Normalization이 적용된다.

Masked Self-Attention

Decoder는 Auto-regressive 방식으로 작동하기 때문에,
현재 시점의 단어는 미래 단어를 보지 못하도록 masking된다.

예를 들자면, "I love you" 문장에서 "love"를 예측할 때 "you"를 참고하지 못하게 막는다.

이는 triangular matrix masking을 통해 구현되며, softmax 입력값 일부를 -∞로 설정해 무시하게 한다.

Shifted Input

Decoder의 입력은 항상 한 칸씩 오른쪽으로 shift되어 들어간다.

이유는, 학습 시 Decoder가 이전 토큰만으로 현재 토큰을 예측해야 하기 때문이다.

예:
입력 → (sos) I love
출력 → I love you


Attention

Attention 매커니즘은 하나의 Query 벡터, 여러 개 Key/Value 벡터를 입력으로 받아 하나의 Output 벡터를 만들어낸다.
출력은 벡터는 여러 Value 벡터들의 가중합이고, 각 Value에 할당되는 가중치는 Q와 K의 사이의 유사도로 계산한다.

Scaled Dot-Product Attention

Transformer에서는 Scaled Dot-Product Attention을 사용한다.
이는 효율성과 성능을 모두 고려한 방식이다.

입력:

  • Query (Q): shape = (…, dₖ)
  • Key (K): shape = (…, dₖ)
  • Value (V): shape = (…, dᵥ)

계산 과정 :

  1. 유사도 계산:
    Q와 K를 내적하여 유사도 스코어 행렬 QKTQK^T 계산

  2. 스케일링:
    스코어 행렬을 dk\sqrt{d_k}로 나누어 스케일 조정

  3. 정규화:
    Softmax 함수로 attention weight 산출

  4. 출력 생성:
    가중치를 V에 곱해서 최종 결과 계산

기존 Attention 방식은 크게 Additive Attention과 Dot-Product Attention으로 나뉜다.

Additive Attention

Additive Attention은 Query와 Key를 MLP에 통과시켜 유사도를 계산하는 방식이다. 이 방식은 상대적으로 정확도가 높지만, 연산 복잡도가 크고 속도가 느리며 병렬화가 어렵다는 단점이 있다.

Dot-Product Attention

반면, Dot-Product Attention은 Query와 Key의 내적을 통해 유사도를 계산한다. 이는 연산이 간단하고 병렬화가 가능해 속도 면에서 매우 유리하지만, 차원이 커질수록 내적 값이 커지면서 softmax의 gradient가 매우 작아지거나 폭발할 위험이 생긴다.

이러한 문제를 해결하기 위해 Transformer에서는 Scaled Dot-Product Attention을 도입했다. 이는 Dot-Product 방식에 dk\sqrt{d_k}로 나누는 스케일링 과정을 추가함으로써 softmax의 안정성을 확보한다. 결과적으로 Dot-Product의 속도와 병렬화 장점은 유지하면서도 학습 안정성을 개선한 방식이다.

Scaling이 필요한 이유

그리고 Dot-Product Attention은 Q와 K를 내적해 스코어를 계산한다. 그런데 Q, K의 차원이 크면 스코어 값도 커져서 softmax를 거치면 확률 분포가 매우 극단적으로 변한다. 이러면 대부분의 값이 0에 가까워져서 학습이 잘 안 되거나 gradient가 터질 위험이 있다.

그래서 Transformer는 이 스코어를 dk\sqrt{d_k}로 나눠서 값을 줄이고, 확률 분포를 부드럽게 만들었다. 덕분에 gradient가 안정적으로 유지되고 학습도 잘 된다.

Multi-Head Attention

기존의 단일 Attention은 Q, K, V 모두 512차원 공간에서 작동하기 때문에, 단 하나의 시점(관점)으로만 연관성을 계산하게 된다. 이렇게 되면 문장의 다양한 의미 구조나 관계를 충분히 포착하기 어렵다.

이를 해결하기 위해 Transformer는 여러 개의 head를 도입한다.

각 head는 서로 다른 선형 변환 가중치를 사용하여 Q, K, V를 각기 다른 하위 공간으로 매핑하고, 변환된 QiQ_i, KiK_i, ViV_i를 사용해 Attention 연산을 병렬로 수행한다.
이후 모든 Attention 결과들을 concat한 후, 다시 선형 변환을 거쳐 최종 출력을 만든다.

이렇게 하면, 여러 Head를 통해 문장의 다양한 시점과 의미 차원에 동시에 주의를 집중할 수 있고, 각 Head가 사용하는 차원 수를 줄였기 때문에 전체 계산량은 단일 Attention과 거의 동일하게 유지된다.


Application of Attention in our Model

Transformer가 Multi-Head Attention을 세 가지 다른 방식으로 사용한다.

1) Encoder-Decoder Attention

  • Query (Q): Decoder의 이전 레이어 출력
  • Key (K), Value (V): Encoder의 출력

=> Decoder가 입력 문장 전체를 자유롭게 참조하여 번역에 필요한 정보를 추출할 수 있도록 한다.

2) Encoder self-attention

  • Q, K, V : 모두 Encoder의 입력에서 생성됨

=> 입력 문장 내 단어들 간의 의미 관계를 파악
(한 문장 전체에서 단어들끼리 서로를 알아봄)

3) Decoder self-attention

  • Q, K, V : 모두 Decoder의 입력에서 생성

=> Auto-regressive property 보장
(한 토큰 씩 순차적으로 생성 + masking)

Position-wise-Feed-Forward Networks

Transformer 각 En/Decoder Layer에는 Feed-Forward Network가 존재한다.

이 FFN은 단어 위치마다 독립적이고 동일한 방식으로 적용되고, 이는 비선형성을 강화하고 표현력을 증가시키는 역할을 한다.

Embeddings and softmax

입출력 단어는 모두 d_modeld\_{model} 차원의 임베딩 벡터로 변환된다.

Transformer는 파라미터 수를 줄이고, 입출력 간 일관된 의미 공간을 유지하기 위하기 위해, 입력 임베딩, 출력 임베딩, 그리고 Softmax 직전의 projection layer에 동일한 weight matrix를 공유한다.

Decoder는 매 step마다 지금까지 생성한 단어들을 기반으로 다음에 올 단어의 확률을 예측한다. 이를 위해 먼저 현재 출력 벡터를 vocabulary size 차원으로 확장하는 선형 변환(Linear layer)을 적용하고, 그 결과에 softmax 함수를 적용하여 각 단어가 다음 위치에 올 확률 분포를 계산한다.

Positional Encoding

Transformer는 RNN이나 CNN처럼 순차적인 구조가 아니기 때문에, 입력 시퀀스 내 토큰들의 위치 정보를 자연스럽게 반영할 수 없다. 이를 보완하기 위해 Positional Encoding을 도입하여, 입력 임베딩에 더해져 모델이 단어의 위치를 학습할 수 있도록 돕는다.

이 방식은 구조가 간단하면서도 별도의 학습 없이 위치 정보를 줄 수 있다는 게 장점이다. 덕분에 Transformer는 병렬 처리를 유지하면서도 문장 안에서 단어 순서나 문맥을 어느 정도 이해할 수 있게 된다.

각 차원은 sin/cos 기반 함수 하나에 대응되도록 설계되었다.
이처럼 구성한 이유는, 모델이 단어들의 절대 위치뿐만 아니라 상대 위치 정보도 쉽게 파악할 수 있도록 하기 위해서다. 실제로 PEpos+kPE_{pos+k}PEposPE_{pos}와의 선형적인 관계로 표현될 수 있기 때문에, 모델은 두 위치 사이의 거리를 수학적으로 추론할 수 있으며, 이는 문장 내의 상대적 구조 이해하는데 큰 도움이 된다.

4. Why Self-Attention?

Transformer는 RNN/CNN대신 self-attention을 선택하였다. 그 이유는 계산 효율성, 병렬화 가능성, path length 측면에서 이점이 존재하기 때문이다.


1) computational complexity

  • RNN은 입력을 순차적으로 처리하기 때문에, 각 토큰마다 이전 결과에 의존해야 하는 단점이 존재한다. 이로 인해 시간 복잡도는 O(n)이다.
  • CNN은 한 위치에서 k개의 이웃 정보를 동시에 처리한다. 커널 크기에 따라 연산량이 증가한다는 한계가 있다.
  • self-attention은 모든 위치를 단 한 스텝에 연결 가능하다. (O(1))
    특히 n < d 일 때 self-attention은 RNN보다 계산 효율이 더 좋다!
    (n : 시퀀스 길이, d : 임베딩 차원)

2) parallelized 가능성

  • RNN: 시간 순서를 따르기 때문에 순차 계산이 필수적이고, 병렬적으로 처리하기에 어려움이 있다.

  • CNN: 병렬화는 가능하지만 멀리 떨어진 단어 연결은 여러 layer를 거쳐야 한다는 한계가 존재한다.

  • Self-Attention: 모든 토큰 간 관계를 한 번에 병렬 계산 가능하다!


3) path length (멀리 떨어진 단어들 간 의존성 연결하는 경로 길이)

멀리 떨어진 두 단어 사이의 정보를 연결하는 최대 경로 길이(path length)는 학습 난이도와 직결된다.

RNN: O(n) (n번 순차 계산 필요)

CNN: O(logₖn) (k는 커널 크기)

Self-Attention: O(1) — 한 스텝에 모든 위치 간 연결 가능

경로가 짧을수록 long-distance dependency 학습이 훨씬 쉬워진다.


Self-Attention (restricted)

long sequence를 다룰 때 계산 속도를 향상시키기 위해 Self-Attention은 주변 r개만 보도록 제한할 수 있다. 이렇게 하면 전체 계산 복잡도는 O(n·r)로 줄어들고, Path Length는 O(n/r)이 되어 long-distance dependency 학습에는 다소 불리해질 수 있지만 효율은 향상된다.


CNN 자체 성능 < RNN

CNN는 매 포지션마다 k개의 이웃을 동시에 봐야하므로, 멀리 떨어진 단어의 관계 학습에는 여러 계층이 필요하다. 이로 인해 Path Length가 길어지고, long-range dependency 학습이 비효율적이다. 이를 해결하기 위해 Separable convolution을 적용할 수 있다. (총 2단계를 거친다.)

  1. 채널별로 따로 convolution
  2. 다시 1*1 convolution으로 통합

이 방식은 계산 효율을 높이지만, 여전히 Self-Attention에 비해 멀리 떨어진 단어 간 연결이 비효율적이라는 단점이 존재한다.


Interpretable Model

self-attention은 interpretable(해석 가능한) model을 만드는데 유리하다.
각 Attention Head가 서로 다른 역할을 학습하게 되고, 가중치 시각화만으로도 모델이 어떤 의미 구조를 이해하고 있는지 확인이 가능하다.

ex) she put the book on the table and then read it

예문에서 it이 book에 높은 attention weight를 주면 모델은 it=book이라는 coreference 관계를 학습한 것처럼 보인다.

이처럼 Attention 가중치는 모델이 어떤 의미론적 연결을 학습하고 있는지 직관적으로 보여주는 역할을 한다!


5. Training

Transformer는 두 가지 대규모 번역 데이터셋을 이용해 학습되었다:

  1. English - German (데이터 크기 : 4.5M 문장쌍, 토크나이징 방식 : BPE)
  2. English - French (데이터 크기 : 36M 문장쌍, 토크나이징 방식 : WordPiece)

학습 효율을 위해 비슷한 길이의 문장쌍끼리 배치로 묶었으며,
각 배치는 약 25,000개의 source token과 25,000개의 target token을 포함하였다.

가중치는 Adam 사용하였고, 초기에는 warmup 단계(4000 step) 동안 선형 증가하다가, 이후에는 step0.5\text{step}^{-0.5} 비율로 점차 감소하였다. 이러한 방식을 통해 빠른 수렴과 과적합 방지를 동시에 달성하도록 하였다.

또한 각 sub layer output에 Dropout을 적용하였고 Embedding + Positional Encoding 합에도 Dropout을 적용하였다.

그리고 Label Smoothing을 통해 정보에 확신 100%를 주는 대신 약간의 불확실성을 추가하였고 이를 통해 더 일반화된 분포를 학습하도록 하였다. 결과적으로 BLEU Score이 개선되었다.


Results


1. English-German 번역 성능

Transformer 모델은 WMT 2014 English-German 테스트셋에서 BLEU score가 28.4를 기록하며 기존 최고 단일 모델 대비 성능이 우수한 모습을 보여주었다. (outperforming)


2. English-French 번역 성능

마찬가지로 English-French 번역에서도 동일하게 기존 최고 단일 모델 대비 성능이 우수하였고, training cost은 1/4 수준으로 절감되었다.


실험 결과 요약


Attention Head 수와 성능 관계

Head 수가 무조건 많다고 좋은 건 아니며, 최적의 Head 수(8)에서 가장 높은 BLEU를 기록했다.

Head가 너무 적거나 많으면 오히려 성능 저하가 발생한다.


dkd_k (query-key 차원)의 중요성

dkd_k가 줄어들수록 BLEU score가 낮아진다.

이는 dot-product 기반 유사도 계산에서 복잡한 의미 관계를 표현하는 데 부족함이 생기기 때문이다.


모델 크기와 성능 관계

모델 크기가 클수록 BLEU 성능이 꾸준히 향상됨을 확인할 수 있는데, 계산 자원이 충분하다면 큰 모델이 일반적으로 더 좋은 성능을 낸다는 점을 알 수 있다.


Dropout의 중요성

Dropout을 제거했을 경우 BLEU가 낮아지는 점을 보아, 과적합 방지 측면에서 Dropout이 매우 유의미하다.


Positional Encoding 방식

sin/cos 기반 positional encoding은 학습된 positional embedding과 비교해도 성능 차이가 거의 없었다.

따라서 기본값으로 사용해도 충분히 성능이 보장된다.


English Constituency Parsing

Transformer가 구조 예측에도 효과적인지를 검증하기 위해 두 가지 설정으로 실험을 진행했다.

  • WSJ only : 약 40k 문장만 사용한 소규모 학습
  • Semi-Supervised : 여기에 17M 문장 추가한 대규모 학습

결과적으로 Transformer는 소규모 데이터 환경에서도 기존 RNN 기반 모델들과 유사하거나 더 나은 성능을 보였고, 대규모 데이터에서는 더욱 강력한 성능을 발휘했다.

이 실험을 통해 Transformer는 RNN없이도 구조 예측 잘 수행 가능하고, 출력이 입력보다 길어져도 효과적이며, 구문적/의미적 구조를 잘 반영한다는 점을 알 수 있다.


7. Conclusion

Transformer는 RNN이나 CNN을 전혀 사용하지 않고, 오직 Self-Attention과 Feed-Forward Network만으로 구성된 순수 Attention 기반의 모델이다. 이로 인해 병렬화에 유리하고, 전체 학습 속도 또한 기존 RNN/CNN 기반 구조보다 훨씬 빠르다는 장점이 있다.

실제로 WMT 2014 기준의 EN-DE 및 EN-FR 번역 과제에서, Transformer는 기존 최고 단일 모델보다 더 높은 BLEU 점수를 기록하며 성능을 입증했고, 학습 비용 역시 기존 모델 대비 크게 절감되었다.

즉, Transformer는 속도, 성능, 비용 측면에서 모두 우수한 시퀀스 변환 모델이라는 점을 명확히 보여준다.

추가적으로

이번 정리는 Transformer에 대한 전반적인 구조와 동작 원리를 빠르게 회고하기 위한 목적으로 작성되었다. 인턴 기간 동안 AI 관련 논문도 많이 읽으면서 많은 걸 얻어 가고 싶다.
다음 논문 리뷰는 BERT이다!

0개의 댓글