Attention mechanism만을 사용해 인코더와 디코더를 구성한 새로운 network
특징
- CNN과 RNN을 완전히 제거하여 간단하고 병렬화가 용이하며, 훈련 시간도 크게 단축됨.
- Attention Mechanism만을 사용해 입력/출력 간 global dependencies 학습.
- 큰/한정된 데이터셋에서 모두 우수한 성능을 보임.
Multi-Head Attention
동일한 데이터에 여러 개의 어텐션 메커니즘을 병렬로 적용
- 모델은 데이터의 다양한 측면을 동시에 고려
- 서로 다른 의미적/구문적 관계 학습 가능.
다양한 의존성 동시 고려 - 더 풍부하고 다차원적인 데이터 표현 수집/분석
Self-Attention
같은 문장 내에서 단어들 간의 관계 고려
- Q, K, V가 모두 동일한 embedding vector에서 도출됨.
- 시퀀스의 서로 다른 위치 간의 관계를 학습하여 해당 시퀀스의 표현 계산.
- 단일 입력 데이터의 모든 요소들 간의 관계 포괄적 이해.
- 계산 효율성
- 시퀀스 길이 $n$이 표현 차원 $d$보다 작을 때 계산이 효율적. → 레이어 당 $O(n^2 ⋅d)$ - Parallelization
- 모든 위치를 동시에 연결하여 병렬화에 용이하고, 순차적 계산이 $O(1)$로 최소화
- 토큰 간 의존성을 빠르게 학습 가능 - Long-term Dependency 해결
- 모든 입력 간의 상호작용을 병렬로 처리
- 경로 길이를 최소화 - 다양한 형식의 데이터에 적용 가능
- encoder-decoder attention은 입출력이 명확히 구분되는 번역, 생성 같은 작업에 유용
Positional Encoding
단어의 위치 정보를 얻기 위한 방식
시퀀스의 각 요소 위치에 대한 정보를 임베딩 벡터에 추가해 모델이 단어의 순서를 인식하도록 함.
- 위치 정보 t가 주어졌을 때, 해당 위치에 대응하는 임베딩 벡터 E 반환.
- sin & cos 함수를 사용하여 각 위치에 고유한 값 할당.
- 모델이 위치 정보를 효율적으로 모델에 통합할 수 있는 장점.
기존 모델
- Recurrent Models: 이전 결과를 입력으로 받는 순차적 특성으로 인한 병렬 처리의 어려움
- Gradient Vanishing/Exploding
- Long-term Dependency: 시퀀스의 앞/뒷부분 연관성 효과적 학습 어려움 - Attention Mechanism: 입력 or 출력 sequence distance와 무관하게 dependencies 모델링 가능하도록 함. → 이전까지 순환 신경망과 함께 사용되었음.
- 모델이 입력 시퀀스의 중요 부분에 ‘집중’하여 필요한 정보를 선택적으로 추출하는 방법을 제공
- 전체 시퀀스를 일괄적으로 처리하는 대신 관련성이 높은 정보에 집중하여 효율적으로 처리 - End-to-end memory network: recurrent attention mechanism 사용.
Model Architecture
Encoder
- N = 6개의 동일한 레이어로 구성된 스택 구조 (사진은 그 중 하나)
- 각 레이어는 2개의 sub-layer로 구성
- Multi-head self-attention
- feed-forward network - 각 sub-layer:
- residual connection
- layer normalization - $\text {LayerNorm}(x+ \text{Sublayer}(x))$
- 해당 서브 레이어가 구현하는 함수.
- 동일 배치에 있는 시점의 sequence를 모아서 정규화.
-Multi-Head Attention or Feed Forward 이후.
Decoder
- N = 6개의 동일한 레이어로 구성된 스택 구조 (사진은 그 중 하나)
- 각 레이어는 3개의 sub-layer로 구성.
- Masked Multi-head self-attention
- Multi-head encoder-decoder attention
- feed-forward network - 각 sub-layer:
- residual connection
- layer normalization
Attention
같은 문장 내에서 단어들 간의 연관성을 파악할 수 있음.
- $Q$: Query. 현재 내가 보고 있는 단어의 표현 - “내가 무엇을 찾고 있는가?”
- $K$: Key. 찾는 대상 - “이 정보는 내가 찾는 것과 얼마나 관련이 있는가?”
- $V$: Value. 실제 값 - 입력 자체의 정보, 실제 반환 데이터. $Q, K$에 의해 가중치가 부여됨.
- → Q와 K를 비교해서 Q와 가장 관련있는 V 반환.
Scaled Dot-Product Attention
$\text{Attention}(Q,K,V) = \text{softmax}\bigg(\cfrac{QK^T}{\sqrt {d_k}} \bigg)V$
- Query와 모든 Key의 dot product를 통해 유사도를 계산하고 $\sqrt {d_k}$를 나눈 값에 softmax 적용.
- 이 유사도를 가중치로 하여 (softmax) 키와 맵핑된 각각의 Value에 반영.
- 다수의 Query에 대해 동시에 계산하고, 이를 행렬 Q에 묶어서 처리함. K, V도 마찬가지.
Scaling
$\sqrt {d_k}$로 나누는 과정
- Scaling을 하지 않으면 additive attention보다 성능이 대폭 감소.
- softmax가 0 근처에서는 gradient가 높고, 매우 크고 작은 값들에 대해서는 매우 낮은 gradient를 가지기 때문에 학습이 잘 되지 않는 문제
- scaling을 통해 모든 값들이 0 근처에 오도록 만들어주어 해결.
- 넓게 퍼진 값을 0 근처로 모아준다 생각하면 좋을듯.
- Additive attention: 단일 hidden layer의 feed-forward 네트워크를 사용하여 호환성 함수를 계산한다. $d_k$가 작을 때 성능이 더 좋다.
- Dot-product attention: $d_k$가 더 클 때는 빠른 행렬곱 알고리즘에 힘입어 더 빠르고 더 공간 효율적이다.
Multi-Head Attention
$d_{model}$-dimension의 Q, K, V에 대해 작업하면 대신 각각을 $d_k, d_k, d_v$ dimension으로 linear projection하는 것에 이점이 있음.
- 따로 계산된 h쌍의 d_v차원 출력은 concat 후 한 번 더 선형 함수에 project시켜 최종 출력값이 됨.
- num_heads의 차원을 가지는 Q, K, V에 대해 num_heads개의 병렬 attention 수행.
- 각 attention값 행렬을 attention head라고 부름.
- 각 가중치 행렬의 값은 8개의 attention head마다 전부 다름.
- 어텐션을 병렬로 수행하여 다른 시각으로 정보를 수집하기 위함.
$\text {MultiHead}(Q, K, V ) = \text{Concat}(\text{head}_1, ..., \text {head}_h)W^O$ $\text {where head}_i = \text {Attention}(QW_i^Q, KW_i^ K, VW_i^V )$
- $W^Q_i ∈ \mathbb R^{d_{model}×d_q}$
- $W^K_i ∈ \mathbb R^{d_{model}×d_k}$
- $W^V_i ∈ \mathbb R^{d_{model}×d_v}$
- $W^O ∈ \mathbb R^{hd_v×d_{model}}$
- 논문에서 $h=8,d_k=d_v=d_{model}/h=64$
- 각 헤드마다 64개의 결과가 출력되고 8개의 헤드가 있으므로 8x64개의 벡터 출력.
Applications
encoder-decoder attention
- Decoder의 두 번째 attention.
- query는 이전 디코더 layer에서 오며 memory key와 value는 encoder의 출력에서 온다.
- 디코더가 입력의 모든 위치(원소)를 고려할 수 있도록 한다.
Masked Attention
- auto-regressive 속성을 보존하기 위해 디코더는 출력을 생성할 시 다음 출력을 고려해서는 안 된다. 즉 이전에 설명한 masking을 통해 이전 원소는 참조할 수 없도록 한다.
- 이 masking은 dot-product를 수행할 때 −∞로 설정함으로써 masking out시킨다.
- 이렇게 설정되면 softmax를 통과할 때 0이 되므로 masking의 목적이 달성된다.
Position-wise Feed-Forward Networks
encoder와 decoder에 포함된 FC feed-forward network.
- ReLU activation function과 2개의 선형변환 포함.
$\text{FFN}(x) = \max(0, xW_1+b_1)W_2 +b_2$
- 논문에서, $d_{model} = 512, d_{ff}=2048$
Positional Encoding
sequence에 있는 원소들의 위치에 대한 정보를 넣어주기 위한 방법.
$PE_{(pos, 2i)} = \sin(pos/10000^{2i/d_{model}})$
$PE_{(pos, 2i+1)} = \cos(pos/10000^{2i/d_{model}})$
- $pos$: 입력 문장에서 embedding vector 위치
- $i$: embedding vector 내 dimension index
- encoder와 decoder 밑부분에 추가.
- embedding과 같은 $d_{model}$ 차원을 가져 더할 수 있다.
- 학습 때보다 긴 sequence를 만나도 추정이 가능하기 때문에 sin함수 선택.
각 차원에서 서로 다른 주기를 가진 sin&cos 동시에 사용
sin&cos 동시 사용
- 동일한 값에 대해 서로 다른 주파수 패턴 적용
- 위치 정보를 더 풍부하게 표현
- 하나가 겹쳐도 다른 하나가 달라 겹치지 않음.
주기
- 주기를 서로 다르게 하여 위치가 다른 단어의 positional embedding이 겹치지 않음.
- ex) $[\sin\left(\frac{\text{pos}}{10000^{0/4}}\right), \cos\left(\frac{\text{pos}}{10000^{1/4}}\right), \sin\left(\frac{\text{pos}}{10000^{2/4}}\right), \cos\left(\frac{\text{pos}}{10000^{3/4}}\right)$
- i가 커질수록 k값이 작아져 더 긴 주기를 생성함.
Training
- 영-독 번역: WMT 2014 데이터셋 (450만 문장 쌍), Byte-Pair Encoding(BPE) 사용, 공유 어휘 크기 약 37,000개.
- 영-프 번역: WMT 2014 데이터셋 (3,600만 문장), WordPiece 어휘 크기 32,000개.
- 문장 쌍은 시퀀스 길이에 따라 배치. 배치 크기는 약 25,000개의 소스 및 타겟 토큰 포함.
Settings
Hardware
- 기본 모델(Base):
- NVIDIA P100 GPU 8대 사용, 100,000 steps (약 12시간 소요).
- step당 0.4초 소요. - 대형 모델(Big):
- 300,000 steps (약 3.5일 소요), step 당 1.0초 소요.
Optimizer
- Adam 옵티마이저: $β_1=0.9, β_2=0.98, ϵ=10^{−9}.$
- Learning rate schedule: $lrate = d_{model}^{-0.5} \cdot \min(step^{-0.5}, step \cdot warmup\_steps^{-1.5})$
- $warmup\_steps=4000$ 설정.
Regularization
- 드롭아웃: 서브 레이어와 임베딩에 드롭아웃 $P_{drop} = 0.1$ 적용.
- Label Smoothing: $\epsilon_{ls} = 0.1$ 사용
Result
기계 번역
- 영-독 번역:
- Transformer (Big): BLEU 28.4, 기존 최고 성능보다 2.0 이상 향상.
- Base 모델: BLEU 27.3, 비용 대비 성능 우수.
- 영-프 번역:
- Transformer (Big): BLEU 41.0, 기존 최고 단일 모델을 초과.
모델 변형 실험
- 헤드 수: 1개는 성능 저하(BLEU 24.9), 너무 많아도 성능 하락.
- 모델 크기: 모델 크기 증가 시 성능 향상(BLEU 26.2).
- 드롭아웃: 드롭아웃이 과적합 방지에 효과적.
- 위치 임베딩: 기존의 사인파 방식과 유사한 성능.
영어 구성 구문 분석
- Wall Street Journal(WSJ) 데이터셋에서 실험.
- 결과:
- WSJ 데이터만 사용한 경우: F1 91.3 (최고 모델에 근접).
- 반-지도 학습(semi-supervised) 설정: F1 92.7 (기존 최고 성능 초과).
References
- https://arxiv.org/pdf/1706.03762
- https://jalammar.github.io/illustrated-transformer/
- https://wikidocs.net/31379
- https://greeksharifa.github.io/nlp(natural language processing) / rnns/2019/08/17/Attention-Is-All-You-Need/
- https://medium.com/@hugmanskj/transformer의-큰-그림-이해-기술적-복잡함-없이-핵심-아이디어-파악하기-5e182a40459d
- https://www.blossominkyung.com/deeplearning/transfomer-positional-encoding
- https://velog.io/@tobigs-nlp/Attention-is-All-You-Need-Transformer
- https://velog.io/@nayeon_p00/딥러닝-모델-트랜스포머-Transformer
- https://aistudy9314.tistory.com/63
- https://lcyking.tistory.com/entry/논문리뷰-Attention-is-All-you-need의-이해
- https://skyjwoo.tistory.com/entry/positional-encoding이란-무엇인가
- https://yeong-jin-data-blog.tistory.com/entry/Tranfomer
'Paper' 카테고리의 다른 글
[Paper] ViT - Vision Transformer (0) | 2025.01.19 |
---|