transformer는 2017년 google의 논문인 attention is all you need에서 처음 나온 모델로, 기존에 제안된 encoder-decoder 의 구조를 채용하였으면서도 seqtoseq이나 glu 등에서 고안된 RNN 구조 없이 오로지 attention만으로 구현한 모델이다. 이 모델은 단순히 attention을 계산하는 encoder-decoder 구조만으로도 RNN 기반 모델보다 우월한 성능을 내었다.
기존 논문에서 attetion의 역할은 단순히 현재 시점 벡터와의 유사도를 이전 encoder의 모든 상태에서 계산한 후, 이를 이용해 가장 확률이 높은 단어를 선택하게 하거나, 이를 보정하기 위한 역할로 제한되었다. 하지만 이제부터는 attention만 사용하여 encoder, decoder를 만들 것이다.
transformer의 hyperparameter에 대해 간략히 정리한다. 일단 model의 입력과 출력 크기이다. 이는 embeding vector의 차원에도 영향을 주고, 각각의 encoder와 decoder로 값을 전송할 때에도 같은 차원을 유지한다. 논문에서는 d_model = 512였다.
다음은 하나의 encoder-decoder pair를 층으로 생각하였을 때, transformer 내부에서 encoder-decoder pair가 몇 층으로 이루어져 있는지 나타내는 값이다. 이를 num_layers라고 하며 논문에서는 6으로 설정하였다.
이전의 seqtoseq과는 다르게, transformer에서는 attention을 구하는 과정을 병렬적으로 생각하여 동시에 다른 시점에서 attention을 계산할 수 있게 하였다. 이를 num_heads라고 하며, 논문에서는 8로 설정하였다.
transformer model 내부에는 ff layer가 존재하고, 이것의 크기를 설정해 주어야 한다. ff network의 input layer, output layer size는 d_model이며, 여기서는 hidden layer size를 의미한다. 논문에서는 d_ff = 2048로 설정하였다.
transformer는 RNN 구조만 없다시피 하고, encoder에서 sequence를 입력받고, decoder에서 sequence를 출력하는 encoder-decoder 구조를 따르고 있다. 다만 seq2seq에서는 encoder와 decoder가 각각 하나의 RNN이 t 개의 time step을 가지는 구조였다면 transformer는 여러 개의 encoder, decoder를 사용한다. 여기서는 6개를 사용하였다.