
RNN, LSTM, Seq2Seq의 경우 고정된 크기의 context vector를 사용했다. 소스 문장을 고정된 크기로 압축해야 하여 병목현상이 발생했기에 성능에 한계가 있었다.
이에 Attention 메커니즘 제안 이후 최신 고성능 모델들은 Transformer 아키텍처를 기반으로 하게 되었다.

다음과 같이 각 6개(꼭 6개가 아니어도 됨)의 encoder, decoder를 가진다.

- encoder
각 encoder는 구조가 같지만, weight는 공유되지 않는다. encoder 구조는 다음과 같다.

- decoder
decoder도 encoder과 유사한 구조를 갖지만 Encoder-Decoder Attention 레이어를 사이에 추가적으로 갖는다. 이는 decoder가 input 문장에서의 관련 부분에 집중할 수 있게 돕는다.
각 입력 단어를 벡터로 변환 (임베딩)

encoder

이 때 Feed Forward 레이어의 경우 병렬적으로 실행될 수 있다. (Self-Attention은 x)
2-1. Self-Attention Layer
Self-Attention에 관해서는 아래 게시글 참고.
https://velog.io/@jelly9999/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0-Self-Attention
Transformer 논문에서는 Self-Attention에 "Multi-headed" 특성을 추가하여 Attention 레이어의 성능을 향상시켰다.
Multi-headed를 통해 같은 X에 대해 z값이 여러개 나오게 된다.

뒤에 이루어질 Feed Forward를 위해 이 8개의 행렬을 단일 행렬로 압축해야 한다. 따라서 행렬을 모두 concat한 뒤 weight matrix와 곱한다.

전체적인 self-attention 메커니즘은 다음과 같다.

2-2. Positional Encoding Vector
encoder의 입력 시퀀스에서 단어의 순서를 설명하기 위해 각 입력 임베딩에 positional encoding vector가 추가된다.

임베딩의 차원이 4라고 하면 positional encoding vector는 다음과 같다.

2-3. 각 Self-Attention, Feed Forward 레이어 후에는 residual connection과 normalization 과정이 있다.

2번의 encoder 과정은 decoder에서도 유사하게 적용된다.

Final Linear & Softmax 레이어
decoder의 결과값은 float으로 이루어진 vector이다. 그렇다면 이것을 단어로 변환하기 위해서는 마지막 과정을 거쳐야 한다.
train과정에서 모델이 알게 된 모든 단어를 담은 logits vector에 decoder의 결과값을 project한 뒤 softmax layer는 이 score들을 합이 1인 확률값들로 만든다.
최대 확률을 가지는 한 단어가 이 time step의 결과가 된다.

Auto-Regressive: 생성된 output은 다음 생성 과정에서 추가적인 입력으로 사용된다.

ViT 논문을 읽기 위해 그 기반인 Transformer 논문을 정리하게 되었다. 얼마 전 Transformer를 배울 때 너무 어려웠던 기억이 있는데, 이렇게 한 번 정리하니 훨씬 개념이 잡힌다.
https://jalammar.github.io/illustrated-transformer/
블로그 정리가 매우 잘 되어있다. 사진도 모두 이 블로그에서 가져왔다.