트렌스포머는 이와같은 문제들을 해결한다.
위의 이미지는 하나의 단어 'I'에 대해서 어떻게 self-attention이 이루어 지는지 보여준다.
이러한 계산을 하나의 단어에서 확장하여 모든 단어에 대해서 적용하게 되면
이러한 수식을 얻을수 있다.
여기서 차원이 커짐에따라 분산값이 커지는것을 막고자 스케일링을 추가하면
라는 최종 수식을 얻게 된다.
이러한 self-attention을 여러번 사용하는 기법이 바로 Multi-Head Attention이다.
Attention을 통해 얻은 값들을 concat후에 선형변환 함으로써 Multi-Head Attention 값을 얻을수 있다.
이후 Residual Connection, Layer Normalization등을 통한후, FC layer를 통과한후 다시 Residual Connection, Layer Normalization을 한다.
Self-Attention이 각 벡터들에 대한 순서정보를 가지지 못하기 때문에 이를 해결하고자 사용하는 방법이다.
Sine, Cosine함수를 이용해서 각 벡터의 고유 위치정보를 갖게금 한다.
이와같이 Attention모듈들을 깊게 쌓는 방법을 사용할수 있다.
이러한 attention사용의 이점중 하나가 바로 해당 모델의 작동을 시각화 할수 있다는데 있다.
디코더의 작동은 인코더와 거의 유사하다.
차이점은
훈련시에 디코더에서 모델이 아직 생성되지 않은 단어에대한 참조를 수행하지 못하게 하기 위해서 사용한다.
이는 Query, Key의 내적 수행후 softmax시에 아직 생성되지 않은 값들에 대한 확률값을 0으로 만듬으로써 수행한다.
번역에 있어서 기존의 모델들보다 더 좋은 성능을 낸다.