Sequence Modeling으로 Sota 성능을 내는 모델은 RNN, LSTM, GRU과 같은 recurrent model이다.
하지만 이른 recurrent model은 계산의 병렬화가 어렵다는 문제가 있다. 왜냐하면 recurrent model은 sequence를 순차적으로 처리한다. 이런 특성은 하나의 학습 예제 내에서 병렬 처리를 불가능하게 하며, 이는 시퀀스 길이가 길어질수록 중요한 문제가 되는데, 그 이유는 메모리 제약으로 인해 여러 예제를 동시에 배치(batch) 처리하는 데 한계가 있기 때문이다.
Attention 은 입력 길이와 상관없이 유연하게 의존성을 포착할 수 있어 매우 유용하지만 대부분의 경우 여전히 recurrent network와 함께 사용한다.
본 논문에서는 Transformer라는 recurrence를 없애고 attention mechanism만을 사용하여 input과 output간의 전체 관계를 파악할 수 있는 model architecture를 소개한다.
Transformer의 장점
1. parallelization
2. 적은 시간과 적은 GPU (eight P100 GPUs)로 SOTA 성능을 낼 수 있다.
2. Background
3. Model Architecture
Encoder-Decoder structure
Encoder: input sequence (x1,...,xn)을 어떤 연속적인 representation z = (z1,...,zn)으로 변환
Decoder: 각 z를 하나씩 순서대로 output sequence (y1,...,yn)으로 변환
여기서는 내적을 사용해 attention을 계산했지만 자주 사용하는 또 다른 방법은 additive attention이 있다. Compatability function으로 single hidden layer로 구성된 feed-forward network를 사용한다. 이는 이론적으로 내적을 사용한 attention과 계산 복잡도는 같지만 실제 사용에서는 내적했을 때 더 계산이 빠르고 공간을 더 효율적으로 사용할 수 있어 내적 attention을 사용한다.
3.2.2 Multi-Head Attention
하나의 attention function만을 사용하지 않고 총 h개의 attention head를 사용해 효과를 극대화할 수 있다.
각 queries, keys, values를 h번의 다른 dk, dk, dv 차원으로 linear projection 해주면 된다.
선형 변환 행렬 WQ, WK, WV를 통해 dq,dk,dv 차원으로 투영(projection)한다.
Query, key, value의 투영된 버전 각각에 대해, 어텐션 함수(attention function)를 병렬적으로 수행한다.
이 과정에서 출력값들은 dv 차원을 가지게 됩니다.
이렇게 얻은 출력값들을 하나로 이어붙인(concatenate) 후, 한 번 더 linear projection을 거쳐 최종 출력값(final values)을 생성한다.
장점:
각 어텐션 헤드가 입력을 서로 다른 방식으로 바라보는 관점이 다르다. 각 헤드는 입력에 대해 서로 다른 투영(Projection)을 하기 때문에, 다양한 특성을 추출할 수 있다는 장점이 있다.
(+multi-head일 때 dk, dv의 차원을 줄여 전체 연산량이 너무 커지는 것을 방지했다.)
3.2.3 Applications of Attention in our Model
Transformer의 3가지 multi-head attention:
1. 🔄 Encoder-Decoder Attention
쿼리(Query)는 디코더의 이전 레이어에서 온다
키(Key)와 값(Value)는 인코더의 출력에서 온다
즉, 디코더의 각 위치가 입력 전체(인코더 출력)를 참조할 수 있게 해준다. 이는 기존의 sequence-to-sequence 모델의 인코더-디코더 attention과 유사하다.
🔁 Self-Attention in the Encoder
쿼리, 키, 값이 모두 인코더 내의 같은 레이어 출력에서 나옵니다.
따라서 인코더의 각 위치는 전체 입력 시퀀스의 모든 위치에 주의를 기울일 수 있음.
🔁 Self-Attention in the Decoder
디코더에서도 마찬가지로 self-attention 사용.
하지만! 오른쪽(미래 위치) 정보를 보지 않도록 제한해야 함 → auto-regressive 특성 유지.
이를 위해 softmax 전에 마스킹(masking)을 적용해서, 자기보다 뒤의 위치는 볼 수 없도록 처리. 이렇게 하면 디코더는 이전 토큰들만 보고 다음 토큰을 생성할 수 있음.
3.3 Position-wise Feed-Forward Networks
각 인코더 및 디코더 레이어는 어텐션 서브레이어 외에 하나의 피드포워드 신경망(FFN) 서브레이어를 포함함
이 FFN은 입력 시퀀스의 각 위치에 독립적으로(position-wise) 동일하게 적용됨
3.4 Embeddings and Softmax
개념
1. Transformer 모델은 입력과 출력을 벡터로 바꾸기 위해 학습된 임베딩(embedding) 레이어를 사용함
2. 디코더의 출력은 학습된 선형 변환 + softmax 함수를 거쳐 다음 토큰에 대한 확률로 변환됨
구성 요소
설명
입력 임베딩
입력 토큰을 d_model 차원의 벡터로 변환
출력 임베딩
출력 토큰(디코더 입력)을 d_model 차원의 벡터로 변환
softmax 이전 선형 변환
디코더의 출력 벡터를 어휘(vocab) 차원으로 투영
softmax
다음에 나올 토큰의 확률 분포 계산
가중치 공유 (Weight Sharing)
1. 입력 임베딩, 출력 임베딩, softmax 이전의 선형 변환 → 이 세 곳에서 동일한 weight matrix를 공유함.
2. 즉, 하나의 weight matrix를 재사용해서 파라미터 수를 줄이고 성능을 향상시킴.
🧮 보정 스케일링:
임베딩을 사용할 때, 가중치에 dmodel을 곱해줌.
이유: 초기화된 임베딩의 분산이 너무 작거나 커지는 걸 방지해서 학습을 안정화시킴.
Positional Encoding
왜 필요한가?
Transformer는 순환(RNN)도 없고 합성곱(CNN)도 없기 때문에, 토큰의 순서 정보(sequence order)를 자연스럽게 인식하지 못함.
따라서 입력에 위치 정보를 인위적으로 주입해야 함 → Positional Encoding 사용
어떻게 주입하는가?
각 입력 임베딩 벡터에 위치 인코딩 벡터(positional encoding)를 더함(summed)
위치 인코딩은 임베딩과 같은 차원(d_model)을 가지므로 덧셈이 가능
위치 인코딩 방식
고정된(sinusoidal) 위치 인코딩 사용 (학습 없이 계산)
여기서:
pos: 시퀀스 내 위치 (0, 1, 2, ...)
i: 벡터 차원 인덱스 (0, 1, 2, ...)
즉, 위치에 따라 각 차원이 다른 주기의 사인/코사인 값을 가짐
왜 사인/코사인인가?
상대적 위치 정보를 표현하기 쉽기 때문
학습 기반 인코딩과의 비교
논문에서는 학습된 위치 임베딩(learned positional embeddings)도 실험했음
결과적으로는 사인/코사인 방식과 거의 비슷한 성능을 보임
하지만 사인/코사인 방식은:
- 훈련 중 보지 못한 길이의 시퀀스에도 일반화(extrapolate)할 수 있음
- 그래서 최종적으로는 고정된 사인/코사인 위치 인코딩을 채택함
→ 이로 인해 모델이 상대적 위치 기반으로 어텐션을 학습하는 데 유리함
Why Self-Attention
Recurrent/Convolution layer과 self-attention layer를 세가지 과점에서 비교했다.
layer별 전체 계산 복잡도
병렬화할 수 있는 연산량 (필요한 최소한의 순차 연산 횟수로 측정)
long range dependencies를 처리하는 path의 길이
- long range dependencies를 학습하는 능력에 주요한 역할을 하는 요소는 network를 횡단하는 forward/backward path의 길이이다
- 이 path의 길이가 짧을수록 (input과 output의 어떤 position 조합으로든), long range dependencies를 배우기 쉽다
→ 두 layer type의 input과 output의 모든 position과의 길이 중 maximum끼리 비교하겠다.
📕결론적으로 본 논문에서 제안한 Transformer라는 새로운 구조를 통해 attention mechanism만을 사용해 input과 output간의 전체 관계를 파악할 수 있게 되었다.