Attention is All You Need
📚 Transformer 논문 리뷰 Transformer는 딥러닝 역사상 가장 영향력 있는 구조 중 하나로 ChatGPT를 포함한 오늘날의 생성형 AI 대부분의 기반이 된다. 이 리뷰에서는 그 시작점이 된 논문 'Attention is All You Need'를 풀어보려 한다.
논문 요약
Transformer 구조 제안 및 병렬 처리와 long-range dependency 처리의 혁신
핵심만 정리하면
- Transformer는 순환 구조를 attention으로 대체하여 순차적 계산 없이 병렬 학습과 장거리 의존성 학습을 가능하게 한 구조이다.
- 핵심 구성 요소는 scaled dot-product attention, multi-head attention, position-wise feed-forward network, 사인·코사인 기반 positional encoding이다.
- Encoder에서는 self-attention을 통해 모든 토큰이 서로를 참조하고, Decoder에서는 미래 토큰을 마스킹한 self-attention으로 auto-regressive 생성을 유지하며 encoder-decoder attention으로 입력 전체와 연결된다.
- 전체 구조는 residual connection과 layer normalization을 결합한 encoder/decoder 스택을 통해 안정적이고 확장 가능한 학습을 가능하게 한다.
- WMT 2014 영어-독일어 및 영어-프랑스어 번역 실험에서 Base와 Big 모델 모두 당시 최첨단 BLEU 성능을 기록하며, 효율적인 학습 대비 높은 품질을 입증했다.
기존 모델의 한계 및 문제 정의
RNN, LSTM, GRN 여전히 좋은 모델들이지만 병렬화하면 여러 제약이 생긴다. 그 중 메모리의 제약으로 배치 처리에 한계가 존재한다. 이에 따라 factorization tricks, conditional computation이 제안되었지만 여전히 순차적 연산이라는 기본적이 제약이 남아있다.
이를 해결하기위해 저자는 Transformer라는 새로운 구조를 통해 반복을 피하고 Attention mechanism을 통해 입력과 출력간의 글로벌 의존성을 도출한다.
순환 모델
RNN을 포함한 순환 모델의 순차적인 계산 방식에는 아래와 같이 진행된다.
- 입력 및 출력 시퀀스의 기호 위치 (symbol positions)를 따라 계산을 분해
- 계산 시간의 단계와 위치를 일치시키면서 이런 hidden state ()와 현재 위치 ()의 입력을 함수로 사용하면서 현재의 hidden state ()를 생성한다.
-> hidden state ()란 이전 단어에서 학습한 정보를 잠시 저장하는 기억 장치 같은 개념이다.
이 방식의 제약 사항은 크게 두가지가 존재한다.
첫 번째는 training examples 내에서 병렬화 불가능하다는 점이다. 시퀀스의 길이가 길어질 수록 더 중요해지는데 시퀀스가 길어질 수록 장거리 의존성 (long-range dependencies)을 학습하는데 어려움이 있다.
두 번째는 메머리 제약으로 인해 여러 examples에 걸처 batching에 한계가 발생한다.
핵심 제안
이 논문에서는 크게 세 가지 기법을 소개한다. 첫 번째는 Attention, 두 번째는 position-wise Feed-Forward networks, 마지막으로 positional encoding이다.
Attention
Transformer에 어떻게, 어떤 attention이 적용되었는지 살펴보기전에 attention이 어떻게 작동하는지와 두 가지 attention을 간략하게 알아보자.
보통 attention은 query와 한 쌍의 key-value 쌍을 입력으로 받아서 출력을 매핑한다. 여기서 query, key-value, 출력은 벡터이다.
출력은 values의 가중 합으로 계산되고, 각 value에 할당되는 가중치는 query와 해당 key 사이의 compatibility function을 통해 계산된다.
Attention은 각 단어가 모든 단어를 바라볼 수 있다는 것은 회의에서 모두가 동시에 서로의 발언을 참고하며 의견을 정리하는 것과 비슷하다.
Scaled dot-product Attention
Transformer에서 사용되는 특정 attention이다. 입력은 Query (q), key (k), value(v)로 구성되어있다. 각각 차원의 query와 key, 차원의 value이다. 여러 query, key, value가 행렬 형태로 묶여서 처리가 된다.
계산 단계:
| 단계 | 설명 |
|---|---|
| 1. dot product | q와 모든 k 간의 dot product로 계산되고 로 표현된다. |
| 2. Scaling | 계산된 각 dot product 값을 로 나눈다. 이 scaling은 값이 클 때 dot product의 크기가 너무 커져서 softmax 함수가 매우 작은 gradient 영역으로 가는 것을 방지하기 위해 수행된다. |
| 3. Softmax | Scaling 된 결과에 softmax 함수를 적용하여 각 값에 대한 가중치를 얻는다. |
| 4. Weighted sum | 얻어진 가중치를 v에 곱한 후 합산하여 최종 출력을 계산 한다. |
이 attention의 장점은 dot product attention은 하나의 hidden layer를 가진 Feed-Forward Network를 사용하는 additive attention과 이론적 복잡도는 유사하지만 고도로 최적화된 행렬 곱셈 코드를 사용하여 구현될 수 있기에 실제로 훨씬 빠르고 공간 효율적이다.
Multi-head Attention
단일 attention 함수를 차원의 k, v, Q로 수행하는 대신 Q, k, v를 h번 각각 다른 학습된 linear projection을 통해 , , 차원으로 선형적으로 투영된다. 각 투영된 Q, k, v 버전에 대해 attention 함수를 병렬로 수행하여 차원의 출력 값을 얻는다. 이렇게 얻은 h개의 출력 값들을 concatenated 한 다음 다시 한번 선형 투영하여 최종값을 얻는다.
이 attention의 목적은 모델이 서로 다른 표현 부분 공간 (different representation subspaces)에서 다른 위치의 정보에 동시에 집중할 수 있도록 한다. 단일 attention head의 경우 평균화로 인해 이러한 능력이 제한 될 수 있기때문이다.
- 이 논문에서는 개의 병렬 attention layer를 사용하고 각 head에 대해 를 사용한다. 각 head의 차원이 줄어들기 때문에 전체 계산 비용은 전체 차원을 가진 단일 head attention과 유사하다.
Multi-head attention은 마치 한 사람이 여러 명의 역할 (디자이너, 개발자, 세무사)을 동시에 맡아서 다양한 관점으로 문제를 바라보는 것과 같다.
그럼 Transformer 내 attention을 어떻게 적용했을까?
- Encoder-Decoder attention
Decoder는 이전 decoder layer의 Q를 사용하고, encoder 출력에서 메모리 k와 v를 가져와 decoder의 모든 위치가 입력 시퀀스의 모든 위치에 집중할 수 있도록 한다. - Encoder self-attention
Encoder 내의 self-attention layer에서는 k, v, Q 모두 이전 encoder layer의 출력에서 나온다. 이를 통해서 encoder의 각 위치가 이전 layer의 모든 위치에 집중 할 수 있다. - Decoder self-attention Decoder의 self-attention layer에서는 decoder의 각 위치가 해당 위치를 포함하여 decoder내의 모든 이전 위치에 집중할 수 있다. 이는 auto-regression 속성을 보존하기 위해 미래 위치로의 정보 흐름을 마스킹하여 방지한다.
이러한 attention mechanism의 작동 방식은 Transformer가 순환이나 convolution 없이 입력 및 출력 시퀀스 내에서 기호들 간의 거리에 관계없이 의존성을 모델링할 수 있게 하며 이는 기존 순환 모델의 한계인 순차적 계산 및 병렬화 불가 문제를 극복하고 훈련 시간 단축 및 번역 품질 향상으로 이어지는 핵심적인 요소가 된다.
Transformer 내에서의 Encoder-Decoder
Encoder stack of Transformer
개의 동일한 layer로 이루어진 스택으로 구성되어있다. 각 layer는 두 개의 sub-layer로 이루어져있다. 첫 sub-layer는 multi-head self-attnetion mechanism이고 두 번째 sub-layer는 간단한 위치별 완전히 연결된 Feed-Forward 네트워크이다. 각 두 개의 sub-layer는 residual connection을 적용한 후에 layer normalization을 진행한다. 즉 각 sub-layer의 출력은 로 표현된다. 여기서 는 sub-layer 자체에 의해서 구현된 함수이다. 출력 차원은 이러한 residual connection을 용이하게 하기 위해 모델의 모든 sub-layer와 embedding layer는 차원의 출력을 생성한다.
- Residual connection은 힌트를 기반으로 문제를 푸는 것과 비슷하다. 학생이 수학 문제를 풀다가 막혔을때 선생님이 정답을 알려주는게 아니라 학생이 지금까지 푼 과정 (기존 입력)을 유지한 채 부족한 부분만 힌트 (추가 계산)를 준다. 이처럼 Transformer의 각 레이어는 이전의 계산 결과를 그대로 이어받아 여기에 약간의 보정만 추가하고 나아가는 방식으로 학습의 효율성과 안정성을 높인다.
이것이 바로 residual connection: 기존 정보 + 새롭게 학습된 변화량
Decoder stack of Transformer
Encoder stack과 마찬가지로 개의 동일한 layer로 이루어진 스택으로 구성되어있다. Decoder는 각 encoder layer에 있는 두 개의 sub-layer 외에도 세 번째 sub-layer를 삽입한다. 이 세 번째 sub-layer는 encoder stack의 출력에 대해 multi-head attention을 수행한다. Encoder stack과 비슷하게 각 sub-layer 주변에 residual connection을 사용한 다음 layer normalization을 진행한다.
Decoder stack 내의 self-attention sub-layer는 미래 위치에 대한 정보 흐름을 방지하도록 수정 된다. 이를 마스킹 (masking)이라 한다. 이는 auto-regressive property를 보존하기 위해서이다. 즉 위치 의 예측은 보다 작은 위치의 알려진 출력에만 의존 할 수 있다. 이는 scaled dot-product attention내에서 불법적인 연결에 해당하는 softmax 입력의 모든 값들을 마스킹 (음의 무한대로 설정)을 구현한다.
이러한 구조가 순차적 계산의 근본적인 제약, 병렬화 불가를 제거하고 훨씬 더 많은 병렬화를 가능하게 하여 훈련 시간을 단축하면서도 뛰어난 번역 품질을 달성하는 핵심적인 역할을 한다.
Encoder는 전체 문장을 요악하는 역할, Decoder는 이 정보를 기반으로 단어를 생성하는 역할을 한다. 각각 6개의 레이어가 쌓여 있으며 정보 흐름을 조정하는 필터와 정제 장치가 있다.
왜 self-attention 일까? (Table 1 참고)
-
레이어당 총 계산 복잡성
Layer 설명 Self-attention 시퀀스의 길이 ()이 representation 차원 ()보다 작을때 recurrent layer보다 빠르다. 특정 상황 ()에서 의 복잡도를 가짐 Recurrent layer 복잡도 Convolutional layer kernel 크기 ()에 따라 복잡도 이 논문에서는 매우 긴 시퀀스의 경우 self-attention을 인접한 크기의 영역으로 제한하여 로 복잡도를 줄일 수 있다고 한다. 또한, 경우 separable convolution의 복잡도 는 self-attention layer와 positional Feed-Forward layer의 조합과 유사하다고 설명한다.
-
병렬화 가능한 계산량
Layer 설명 Self-attention 의 최대 경로 길이. 이는 모든 위치가 상수적인 수의 순차 연산으로 연결된다는 것을 의미. 높은 병렬화를 가능하게 함 Recurrent layer 의 순차 연산 요구. 본질적으로 순차적인 특성을 가짐. 이는 학습 예시 내에서 병렬화를 어렵게 하고 긴 시퀀스 길이에서 특히 문제 Convolutional layer 의 순차 연산으로 계산되지만 모든 입력과 출력 위치를 연결하려면 여러 layer를 쌓아야 함 -
장거리 종속성 간의 경로 길이
Layer 설명 Self-attention 의 최대 경로 길이. 이는 시퀀스 내의 모든 위치가 상수적인 수의 연산을 통해 직접적으로 연결될 수 있음을 의미. 장거리 의존성 학습을 더 쉽게 함 Recurrent layer 의 최대 경로 길이 Convolutional layer 연속 kernel의 경우 , dilated convolutions의 경우 의 경로 길이를 가짐. 모든 위치를 연결하기 위해 여러 layer를 쌓아야 하므로 경로 길이가 길어짐
한 표로 요약하면
| 항목 | Self-Attention | RNN | CNN |
|---|---|---|---|
| 계산 복잡도 | |||
| 병렬화 가능성 | 매우 높음 () | 낮음 () | 보통 () |
| 장거리 의존성 경로 | - |
- Side Benefit: Self-attention은 더 interpretable 모델을 만들 수 있다. 개별 attention heads가 다른 작업을 수행하도록 학습되고 많은 head가 문장의 구문적 및 의미적 구조와 관련된 행동을 보인다.
이러한 self-attention의 이점을 활용하여 Transformer는 기존 모델보다 훨씬 빠르게 훈련될 수 있고 더 높은 번역 품질을 달성할 수 있다.
Position-wise Feed-Forward Networks
Encoder와 decoder의 sub-layer마다 완전히 연결된 Feed-Forward 네트워크를 포함한다. 이는 각 위치에 독립적이고 동일하게 적용된다. 이 네트워크는 두 개의 linear transformation과 그 사이에 ReLU activation function으로 구성되어 있다.
Linear transformation은 서로 다른 위치에서 동일하지만 layer마다 다른 parameter를 사용한다. 이를 kernel 크가기 1인 두 개의 convolution으로 설명할 수도 있다. 입력과 출력의 차원은 모델의 차원과 같은 이고 inner-layer의 차원은 이다. 여기서 inner-layer의 차원이 2048인 이유가 언급되지는 않았지만 더 큰 차원일 수록 더 나은 모델 퍼포먼스가 나왔다. 일때 BLEU 값은 25.8, 일때 BLEU 값은 25.4, 일때 BLEU 값은 26.2으로 나왔다. (Table 3 참고)
- Feed-Forward 네트워크는 각 단어가 문맥에 맞게 의미를 조정하는 '필터링 장치' 역할을 한다고 볼 수 있다.
Positional Encoding
이 논문은 Transformer가 순환 (recurrence)과 컨볼루션 (convolution)이 없으므로 시퀀스 내 토큰의 상대적 또는 절대적 위치에 대한 정보를 주입하는 'positional embeddings'를 소개합니다. 저자는 positional encoding을 인코더와 디코더 스택의 가장 아래층에 있는 입력 임베딩에 추가합니다. Positional encoding의 차원은 다른 embedding과 더할 수 있게 같은 차원이다.
구현 방식
- 사인, 코사인 함수를 사용합니다.
- -> 짝수 차원에서 사용
- -> 홀수 차원에서 사용
- 문장 내에서 절대적 위치 (pos)를 파악하고 이 위치를 위 사인, 코사인 함수에 대입한다.
-> 수식이 복잡해 보이지만 단어의 위치에 따라 고유한 패턴을 입히는 방식이다. 일종의 단어 '좌표'를 수학적으로 만들어주는 셈이다.
=> 이유: 어떤 고정된 오프셋 (offset) k에 대해서도 가 의 선형 함수로 표현될 수 있어 모델이 상대적 위치에 의해 attention하는 것을 쉽게 학습할 수 있을 것이라는 가설 때문이다. 또한 훈련시 접하는 시퀀스보다 더 긴 시퀀스 길이에도 모델이 extrapolate할 수 있도록 허용한다.
Positional encoding은 Transformer가 단어의 순서를 인지하게 하는 내비게이터와 같다. 각 단어 임베딩에 고유한 좌표를 부여하여 모델이 단어의 의미뿐만 아니라 시퀀스 내에서의 위치 관계까지 이해하도록 돕는다. 마치 책을 읽을 때 내용 (임베딩)뿐만 아니라 몇 번째 페이지 (positional encoding)에 있는지 알아야 전체 흐름을 파악할 수 있는 것과 유사하다.
예를 들어 "그는 돌아왔다"는 문장이 소설의 초반과 마지막에 등장할 때 그 문장의 해석은 완전히 달라진다.
Transformer는 반복 구조가 없기 때문에 단어 순서를 직접 알지 못한다. 그래서 각 단어에 "페이지 번호"같은 위치 정보 (좌표) 를 사인/코사인 패턴으로 부여한다. 이 위치 정보 덕분에 모델은 "누가 누구를 수식하는지", "문장 흐름이 어떻게 이어지는지" 같은 순서 기반 의미를 이해할 수 있다. 마치 단어에 지도 위의 GPS 좌표를 찍어주는 것과 같다.
훈련
데이터
이 논문에서는 두 가지의 데이터셋으로 모델을 훈련했다. 하나는 약 450만 개의 문장 쌍으로 구성된 표준 WMT 2014 영어-독일어이고 다른 하나는 3,600만 문장으로 구성된 훨씬 더 큰 WMT 2014 영어-프랑스어 데이터셋이다.
WMT 2014 영어-독일어에는 약 37,000개의 토큰으로 구성된 소스-타켓 공유 어휘를 사용했고 바이트 쌍 인코딩 (byte-pair encoding, BPE)를 사용하여 문장을 인코딩했다.
WMT 2014 영어-프랑스어는 32,000개의 워드 피스 (word-piece) 어휘로 토큰을 분할했다.
배치 처리 및 일정
문장 쌍은 대략적인 시퀀스 길이별로 함께 배치되었다. 각 훈련 배치는 대략 25,000개의 소스 토큰과 25,000개의 타겟 토큰을 포함했다. 모델은 8개의 NVIDIA P100 GPU를 사용해서 훈련되었다. Base 모델은 총 1000,000 스텝 (약 12시간)동안 훈련되었고 각 훈련 스텝은 약 0.4초가 소요되었다. Big 모델은 300,000 스텁 (3.5일) 동안 훈련되었고 스텝당 시간은 1.0초였다.
최적화 및 정규화
- 옵티마이저: , , 를 사용하는 Adam 옵티마이저를 사용했다.
- 학습률: 훈련 과정 동안 학습률을 변화시켰으며 warmup_steps = 4000 동안 선형적으로 증가한 다음 스텝 수의 역제곱근에 비례하여 감소시켰다.
- 정규화: 잔차 드롭아웃 (Residual Dropout, Base 모델의 경우 )과 라벨 스무딩 (Label Smoothing, )이 사용되었다.
결과
Transformer 모델은 기계 번역 및 영어 구성 구문 분석 task에서 우수한 성능을 입증했다.
- 기계 번역 결과
| 모델 | EN-DE BLEU | EN-FR BLEU | 훈련 비용 (FLOPs) | 비고 |
|---|---|---|---|---|
| Transformer (Base model) | 27.3 | 38.1 | (EN-DE) | 이전의 경쟁 모델들보다 적은 훈련 비용으로 기존 모델들을 능가함 |
| Transformer (Big model) | 28.4 | 41.8 | (EN-DE) | 두 task 모두에서 새로운 최첨단 (state-of-the-art) 결과를 달성 |
- WMT 2014 영어-독일어:
- Big Transformer 모델은 28.4 BLEU를 달성하여 이전의 최상 성능 모델 (앙상블 포함)보다 2.0 BLEU 이상 높은 성능을 보이며 새로운 최첨단 BLEU 점수를 확립했다.
- Base 모델도 경쟁 모델들의 훈련 비용의 일부만으로도 이전에 발표된 모든 모델과 앙상블을 능가했다.
- WMT 2014 영어-프랑스어:
- Big Transformer 모델은 41.8 BLEU 점수를 달성하여 새로운 단일 모델 최첨단 기록을 세웠다. 이는 기존 문헌에서 보고된 최고의 모델들의 훈련 비용의 작은 일부만으로 달성되었다.
- 모델 구성 요소 중요도 평가 (Model Variations)
개발 데이터셋 (newstest2013)에서 Transformer 구조의 다양한 구성 요소의 중요도를 평가했다.
- Multi-head attention: 단일 head attention은 최적 설정보다 0.9 BLEU만큼 성능이 낮았으며 헤드가 너무 많아도 품질이 저하되었다.
- 키 크기 (): Attention 키 크기를 줄이면 모델 품질이 저하되었다.
- 규모: 예상대로 모델 크기가 클수록 성능이 좋았고 드롭아웃은 과적합을 방지하는데 매우 도움이 되었다.
- Positional encoding: 사인 함수 기반의 positional encoding을 학습된 positional embedding으로 대체했을 때 거의 동일한 결과를 보였다. 정현파 (sinusoidal) 버전을 선택한 이유는 모델이 훈련 시 접한 것보다 더 긴 시퀀스 길이로 extrapolate할 수 있도록 허용할 수 있기 때문이다.
- 영어 구성 구문 분석 (English Constituency Parsing)
Transformer는 영어 구성 구문 분석에도 성공적으로 적용되어 다른 작업에도 잘 일반화됨을 보였다.
- WSJ (Wall Street Journal) 훈련 셋 (약 4만 문장)만 사용했을 때 91.3 F1을 달성했다.
- 대규모 데이터 (약 1,700만 문장)를 사용한 준지도 학습 설정에서는 92.7 F1을 달성했다. 이는 Recurrent Neural Network Grammar를 제외하고 이전에 보고된 모든 모델보다 더 나은 결과 이다.
- RNN sequence-to-sequence 모델과 달리 Transformer는 WSJ 훈련 셋만으로 훈련했을 때도 Berkeley-Parser보다 뛰어난 성능을 보였다.
결론
이 논문에서 제시된 Transformer는 재귀 계층 (recurrent layers)을 multi-headed self-attention으로 완전히 대체한 최초의 시퀀스 변환 모델이다.
핵심 결론:
- 성능 우위: Transformer는 WMT 2014 영어-독일어 및 영어-프랑스어 번역 task 모두에서 새로운 최첨단 성능을 달성했다. 특히 영어-독일어 task에서 최고의 모델은 이전에 보고된 모든 앙상블 모델까지 능가했다.
- 효율성: Transformer는 재귀적 또는 합성곱 계층 기반 아키텍처보다 훨씬 빠르게 훈련될 수 있다.
- 병렬화: 순환 (recurrence) 및 합성곱 (convolution)을 완전히 제거하고 오직 attention mechanism에 의존함으로써 Transformer는 훨씬 더 많은 병렬화를 허용한다.
마무리
Transformer는 RNN의 한계를 극복하고 병렬처리와 장거리 의존성 학습 모두를 가능하게 한 혁신적인 구조였다. 이후 등장한 GPT, BERT, T5, Gemini 등 현대 생성형 AI 모델은 모두 이 논문의 아이디어에서 출발했다. 논문의 제목처럼 이 구조의 본질은 "Attention is All You Need"였다.
namdarine은 이처럼 중요한 기술을 보다 쉽게 이해하고 활용할 수 있는 콘텐츠를 계속해서 만들어갑니다.
📌 namdarine's AI Review는 누구나 AI의 핵심 기술을 이해할 수 있도록 논문, 알고리즘, 구조를 쉽게 풀어주는 시리즈입니다.
Let's build it like it's already happened.
→ 다음 리뷰에서 만나요!