2가지 기계 번역 태스크에서 RNN, CNN 보다 성능이 우수하고 학습 속도가 빠른 실험을 진행
Introduction
RNN, LSTM, GRU와 같은 recurrent 모델은 좋은 성능을 보여주었으나, seq2seq 모델의 근본적인 문제를 해결하지 못함
문제
병렬 처리 불가 -> 성능 하락
- 매번 단어가 입력될 때마다 hidden state 값을 갱신하고, 순차적으로 처리해 마지막 단어의 hidden state 값은 소스 문장 전체를 대표하는 하나의 context vector로 사용할 수 있는 형태 - 이 context vector는 사이즈가 고정되어 있기에 소스 문장 (입력 시퀀스)이 길어질 경우 성능이 하락하는 문제가 발생함
RNN 구조
이를 해결할 수 있는 방법으로 Attention Mechanism이 제안됨
-> hidden state를 순차적으로 갱신하는 것이 아닌, 각각의 단어에 대한 출력값 전부를 특정 행렬에 기록해두었다가, 소스 문장에 대한 전반적인 내용들을 출력할 때 마다 반영해보자. -> Attention Mechanism 은 순환없이 input sequence, outpue sequence 거리에 상관없이 의존성을 모델링할 수 있도록 함
Background
CNN을 기본 요소로 사용하는 등 여전히 Attention mechanism을 recurrent model과 함께 사용하는 사례가 많았음 (연속 연산 줄이려고) ->RNN, CNN 사용X Attention만 사용하는 Transformer 모델 제안 (Multi-head attention으로 해결)
Model Architecture
경쟁력 있는 neural sequence transduction 모델은 대부분 인코더-디코더 구조(=seq2seq)를 취함, Transformer도 역시 인코더-디코더 구조를 취함
3.1. Encoder and Decoder Stacks
인코더와 디코더 모두에 대해 Self-Attention과 point-wise FC layer를 쌓아올려 사용, 여러개의 동일 레이어로 이루어져 있으나 서로 parameter 다르며 입력 dim=출력 dim
인코더 : 6개의 동일한 레이어로 이루어져 있으며 하나의 인코더는 Self-Attention layer와 Feed Forward Neural Network라는 두 개의 Sub Layer로 구성됨. 각 Sub Layer는 residual connection 사용, normalization 수행
디코더 : 6개의 동일한 레이어, 각 레이어는 인코더가 Sub layer로 가진 Self-Attention layer (각 단어간 관계)와 Feed Forward Neural Network, 인코더의 출력을 입력으로 사용되는 Multi-Head Attention Layer(안코더 출력 정보/소스 와 출력하는 단어 간 관계) 존재
디코더의 self-attention layer에서는 앞쪽 단어에 대해서만 참고할 수 있도록 하는 masking 수행
encoder의 self-attention은 각각 단어가 서로 어떤 연관성이 있는지 문맥에 대한 정보를 잘 학습시키는 과정이다.
3.2 Attention
1. Multi-head attention
모델이 다양한 관점에서 문장을 해석할 수 있게 하며, 여러개의 scaled dot-product attention을 concat 하며 구성된다. 이를 이해하기 위해 scaled dot-product attention이 무엇인지 살펴보자. scaled dot-product attention은 최종적으로 attention 값을 도출하는 과정이며, 다음과 같은 방법으로 구할 수 있다.
Query 물어보는 주체 (영향 받는 벡터) Key 물어보는 대상 (영향 주는 벡터) Value 주는 영향의 가중치 벡터
QxK 로 Score를 구하고, 숫자로 나온 값을 확률 개념으로 바꾸기 위해 softmax 연산을 해준다. key 벡터 차원수가 증가할 수록 score가 증대되는 문제를 보완하기 위해 이에 key 차원값의 루트값을 나누어주고, 이를 Value와 곱해 이 값을 모두 더해준다. 이를 통해 key 값 단어가 현재 단어에 얼마나 연관성이 있는지를 나타내는 최종 벡터를 구할 수 있다.
예를 들어, 단어 I의 쿼리 벡터에 대해서 I, am, a, student 각 단어의 key 벡터를 곱하고 일련의 연산 과정을 거쳐, 해당 단어 I 가 단순한 단어 I가 아닌, I가 지닌 전체적인 의미를 가진 벡터로 거듭나게 만드는 과정인 것이다.
-> Multi-head=여러개의 관점=여러 h
3.3 Applications of Attention in our Model
Transformer는 multi-head attention을 3가지 방법으로 사용하고 있다.
1) Encoder-decoder attention : Query는 이전 decoder / Key, Value는 encoder의 출력이 되는 어텐션 - decoder가 모든 위치에서 input sequence 모든 위치 참조
2) Self-attention in encoder : 각 단어가 서로에게 어떤 연관을 가지는지, 각 위치들은 이전 레이어의 모든 위치들을 참조할 수 있음
3) Masked Self-attention in decoder : decoder 내 자신 뒤쪽 내용은 참조할 수 없게 함 (앞쪽만 참조할 수 있도록)
3.3 Position-wise Feed-Forward Networks
Transformer는 Recurrent model을 사용하지 않고 오직 Attention mechanism만을 사용하여 만들기 때문에 Sequence 정보 (위치, 단어 순서) 를 담아낼 수가 없기에 positional encoding으로 이를 해결하고자 함.