Transformer 가 나타나기 전, 주요 시퀀스 변환 모델로는 RNN 또는 CNN 이 Attention 기법을 활용하여 많이 사용되었다.
이때, Attention 기법을 최대한 사용하여 Recurrent 와 Convolution 기법을 모두 제외한 Transformer 을 고안하게 되었다.
Recurrent 모델은 보통 입력과 출력의 symbol position에 따라 계산을 수행하게 된다. 이때 symbol position 이란 input 과 output sequence 의 순서대로, 즉 단어의 순서에 기반한다는 것을 뜻하는 것 같다.
즉, 이전 hidden state 의 과, input position 에 대해서 현재 hidden state 인 를 생성해낸다.
이러한 본질적인 순차성, 즉 Recurrent 모델의 순차적인 계산방식인 이전 단계의 계산 결과에 의존하는 방식은, 여러 단계를 동시에 처리하지 못하여 병렬적인 처리가 불가능한 문제점이 있다. 특히, 시퀀스의 길이가 길어지면 길어질 수록, 이러한 병렬화가 불가능하다. 긴 시퀀스를 처리하기 위해서는 충분한 메모리가 필요한데, 이러한 메모리의 한계 때문에 자연스럽게 batch 사이즈를 줄이게 되고, batch 사이즈를 줄이면 훈련의 효율성이 낮아지게 된다.
"Attention mechanism 제시"
Attention mechanism은 입력과 출력 시퀀스 거리와 관계없이 의존성을 모델링할 수 있으나 거의 대부분의 경우 순환 네트워크와 함께 사용되고 있어 효율적인 병렬화 불가능
즉, 이 논문에서 순환없이 입력값과 출력값 간 전역 의존성을 모델링할 수 있는 Attention mechanism만을 사용한 모델 구조인 Transformer 제안
Extended Neural GPU, ByteNet, ConvS2S 에서도 연속적 연산을 줄이기 위한 연구가 이루어졌는데, 모두 CNN을 기본 구성 요소로 사용
Transformer의 장점
Self-attenion
Introduction 에서 설명했듯이, seq2seq 의 구조는 입력 시퀀스 을 연속적인 시퀀스인 으로 매핑한다. 그리고 인코더에서 전달된 를 사용하여 출력 시퀀스인 을 생성하게 된다. 즉, 다음을 생성할 때 이미 생성된 symbol (이 경우 이전 상태 hidden state)를 추가 입력으로 사용한다.

Encoder : 인코더는 으로 하는 동일한 Layer 를 쌓아서 만든다. 이때 각각의 Layer 에 두개의 하위 Layer 이 존재하는데, 이는 각각 multi-head self-attention mechanism, position-wise fully connected feed-forward network 이다. 이때 각각의 sublayer 를 실행한 이후 residual connection과, normalization 을 각각 실행한다. 즉, 각각의 sub-layer 의 출력값은 이다. 이때 의 경우 Layer Normalization, 의 경우 residual connection 을 각각 의미한다. 논문의 경우 Sub-layer의 입력과 출력의 차원이 동일해야 안정적인 학습이 가능하기 때문에, 의 출력 차원을 512 로 고정했다.
Decoder : 디코더 역시 으로 하는 동일한 Layer 를 쌓아서 만든다. 인코더의 두개의 sublayer (multi-head self-attention mechanism, position-wise fully connected feed-forward network) 이외의 세번째 서브 레이어를 삽입한다. 이 세번째 서브 레이어는, 현재 위치가 뒤의 문장의 값의 Attention을 기울이지 않도록 디코더 스택의 self-attention 레이어를 수정한다. 이 마스킹은 출력 임베딩이 하나의 위치만큼 오프셋된 사실과 결합되어, 위치 에 대한 예측은 보다 작은 위치의 알려진 출력에만 의존할 수 있음을 보장하게 만든다. (Masked Multi-Head Attention)
쿼리와 키-값 쌍의 집합을 출력으로 매핑하는 것으로 설명될 수 있으며, 쿼리, 키, 값 및 출력은 모두 벡터로 이루어져 있다. 이때 쿼리가 key-value 로 이루어져있는 hash table 를 접근하는 것으로 이해될 수 있다.

이때 쿼리는 키와 결합 (이 경우 Matrix Multiplication) 하고, Scaled (devided by 하고, Softmax 연산을 취한 후에 키 값과 매칭되는 Value 값을 Matrix Multiply 하여 Attention 값을 얻어낸다.
Additive attention 에 비해서, 값이 커지면 커질 수록 Scaled dot attention 이 더 강력하다. 그 이유로는, 쿼리와 키의 길이가 커질 수록, 내적값의 softmax 연산값의 기울기는 0에 수렴한다.즉, softmax 연산값의 기울기가 0에 수렴하지 못하도록, Scaling 하는 것이다.


Multi-Head Attention 의 경우, 모델이 다양한 관점에서 문장을 해석할 수 있도록 하는 역할을 한다. Single-Head Attention 의 경우, 평균을 내기 때문에 이러한 관점의 해석이 옅어지기 때문에, 논문에서는 로 split 하여 Multi-Head Attention 을 구현했다.
Transformer는 multi-head attention을 3가지 방법으로 사용하고 있음
Attention layer과 함께 fully connected feed-forward network가 사용된다. 인코더 및 디코더의 각 계층에 개별적으로 위치하게 된다(마지막 sublayer)
input과 output의 차원은 512, 은닉층의 차원은 2048로 하였다.
Transformer는 Recurrent model을 사용하지 않고 오직 Attention mechanism만을 사용하여 만들기 때문에 Sequence 정보를 담아낼 수가 없다.
따라서 별도로 이러한 sequence 정보를 데이터에 추가해주어야 하는데 이 역할을 하는 것이 바로 "positional encoding"이다.

이때 pos는 위치, i 는 차원이다. 위치 인코딩의 각 차원은 sin, cos 함수에 의해서 주기가 에서 로 늘어나게 된다. 즉, 일정한 간격 에 대해가 의 선형 함수로 표현될 수 있다고 보았다.
자세한 설명은
https://tigris-data-science.tistory.com/entry/%EC%B0%A8%EA%B7%BC%EC%B0%A8%EA%B7%BC-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-Transformer5-Positional-Encoding?category=1005740
에서 참고하면 좋을 것 같다.