초기 머신러닝은 대부분 입력을 받아 하나의 출력으로 내보내는 문제(스팸인지 아닌지 구분)만 풀 수 있었다. 그러나 현실의 언어 문제(번역, 챗봇, 음성인식 등)는 그런 방식으로 풀 수 없는 문제들이었다. 언어 문제는 보통 입력도 시퀀스, 출력도 시퀀스여야 했는데, 여기서 시퀀스(sequence)란 데이터가 하나의 값이 아니라 '순서가 있는 여러 개의 요소'로 이루어져 있다는 것이다. 이러한 언어 문제를 다루는 데이터를 처리하기 위한 모델로 Seq2Seq 모델이 고안되었다.
입력 -> [Encoder] -> context vector -> [Decoder] -> 출력
Seq2Seq 모델은 입력 시퀀스를 출력 시퀀스로 변환하는 모델로, Encoder와 Decoder 구조를 가지는 것을 기본으로 한다. Encoder는 보통 RNN/LSTM/GRU로 구성되어 입력 시퀀스의 표현 학습을 담당한다. 그 결과로서 입력 문장을 하나의 context vector로 압축하고, Decoder가 그 벡터를 가지고 출력 문장을 생성하는 것이다.
여기서 Seq2Seq 모델의 한계가 드러난다. 모든 정보를 하나의 벡터로 압축해야 하기에 정보 손실이 필연적으로 발생할 수 밖에 없고, 문장이 길어질수록 성능이 급락하는 문제가 발생한다.
이 문제를 해결하기 위해 Attention 매커니즘이 고안되었다. Attention 매커니즘은 Encoder의 모든 hidden state를 저장해놓고, Decoder가 Encoder의 모든 hidden state와의 비교를 통해 단어를 생성한다. 이 과정에서 계산된 중요도(weight)를 합산한 것이 attention weight이다. Attention 매커니즘을 통해 모델이 필요한 순간에 필요한 부분만 다시 봄으로써 성능 향상을 이끌어내는 것이다.
Transformer 모델은 여기서 더 나아가 RNN(LSTM)없이 Attention으로만 만든 모델로, 순서대로 데이터를 처리하지 않고 전체 문장을 병렬로 처리한다.
Input -> Embedding -> Self-Attention -> Feed Forward -> Output

Transformer 모델은 기본적으로 Encoder + Decoder 구조는 유지하되, 내부 Layer를 전부 Attention Layer로 구성하여 recurrence와 convolution을 완전히 제거한다. 이로써 Transformer 모델은 더 높은 성능, 더 빠른 학습, 더 높은 병렬화 가능성을 가진다.
기존 Seq2Seq 모델이 RNN의 시간 흐름을 기반으로 데이터를 처리하였다면, Transformer 모델은 관계를 기반으로 데이터를 처리한다. Attention의 핵심 수식은 Query와 Key의 유사도를 계산하고 이를 softmax로 정규화하여 Value를 가중합하는 것이다.
또한, 하나의 Attention만으로는 모든 요소들을 계산할 수 없으므로, Multi-Head Attention 구조로 설계해 각각의 head가 이해한 관점들을 합쳐 문법, 의미, 관계 등을 동시에 파악한다. 여기에 더해 Transformer 모델은 recurrence와 convolution을 완전히 제거하였기 때문에 Positional Encoding을 따로 진행하여 위치 정보를 추가로 넣어주어야 한다.