Encoder는 의 동일한 layer로 구성되어 있고, 각 layer는 두 개의 sub-layer로 구성되어 있다.
- 첫 번째는 multi-head self-attention 메커니즘이고 두 번째는 position-wise fully connected feedforward-network이다.
- 또한, sub-layer들에 residual connection을 적용하였고, 그 뒤로 layer normalization이 이어지도록 했다.
- 즉, 각 sub-layer들의 output은 의 형태를 띄게 된다.
- 이러한 residual connection의 적용 과정에서 편의를 위해 embedding layer를 포함한 모델의 모든 sub-layer들은 의 output을 출력한다.
Decoder역시 Encoder와 마찬가지로 의 동일한 layer들을 stack한 형태로 구성되어 있다.
- Encoder의 두 개의 sub-layer에 더해 Decoder에는 encoder stack의 output에 대해 multi-head attention을 수행하는 세 번째 sub-layer를 추가한다.
- 또한 Decoder stack의 self-attention sub-layer부분이 연산 과정에서 앞쪽 position을 참조하지 못하도록 masking을 추가하였다.
- Transformer에서는 Scaled Dot-product Attention이라는 attention 기법을 사용한다.
- 해당 attention의 input은 차원의 query와 key, 그리고 차원의 value로 구성되어 있다.
- dot product 연산은 query와 모든 key에 대해 수행하며 이를 로 나눠준다. 그리고 각 value에 대한 weight를 얻기 위해 softmax 함수를 적용한다.
- 실제 연산 과정에서는, query의 집합을 행렬 로 묶어서 한번에 계산한다.
- 기존의 Dot-Product Attention은 key벡터의 차원 가 클 경우 additive attention에 비해 성능이 떨어지는 단점이 있다.
- 이러한 문제점이 발생하는 이유는 가 클 경우, dot product를 수행하였을때 그 결과값 역시 커지게 되고 이에 따라 softmax를 수행하였을 때 gradient 값이 극도로 작아지게 때문이다. 이러한 현상을 방지하기 위해서 dot product를 로 scaling한다.
- softmax의 binary 버전인 sigmoid 함수를 고려해보면, input의 크기가 커질수록 1로 saturate되는 것을 확인할 수 있다. 따라서 softmax역시 이와 마찬가지로 값이 커질수록 gradient 값이 0에 가까워지는 것임.
- query와 key의 각 원소가 mean 0, var 1인 independent random variable이라고 가정하면, 그들의 dot product인 는 mean 0, var 가 되는 것을 확인할 수 있다. 이러한 이유로 가 커질수록 dot product 값 역시 커지게 된다.
값의 변동성이 커진다는 표현이 더 적절해 보인다.
- 차원의 key, value와 query에 대한 single-attention을 수행하는 대신, 각기 다른 학습가능한 h개의 linear projection을 수행하여 차원으로 변환한 후 attention을 병렬적으로 수행하여 차원의 output을 뽑아내는 방식을 사용한다.
- 이렇게 뽑혀져 나온 결과는 concatenate된 후 다시 projection을 시켜주게 된다.
- 이렇게 Multi-Head Attention을 이용하게 되면 각기 다른 position의 representation subspace으로부터 정보를 jointly하게 접근할 수 있게 된다. Single-Head일 경우 averaging 때문에 이러한 접근이 제한된다.
where )- projection은 학습 가능한 행렬 그리고 을 통하여 수행된다.
- 해당 논문에서는 의 병렬적인 attention layer(head)를 적용하였다.
- 이들 head에는 를 적용하였으며, 이러한 차원 축소 덕분에 computational cost는 fully dimensionality의 single-head attention과 비슷하다.
- decoder의 "encoder-decoder attention"layer에서의 query는 이전 decoder layer로부터 계산되며, key와 value는 encoder의 출력에 해당한다.
이러한 점으로 인해, decoder의 모든 포지션에 있는 값들이 input sequence의 모든 값들을 참조할 수 있게 된다. 이는 sequence-to-sequence 모델들의 encoder-decoder attention mechanism을 모방했다고 할 수 있다.- encoder는 self-attention layer를 포함하며, 모든 key, value, 그리고 query는 이전 encoder layer의 output이라는 동일한 input sequence로부터 추출한다. encoder의 각 position들은 이전 encoder layer의 모든 position을 참조할 수 있다.
- decoder의 self attention layer 역시 비슷하게, decoder의 각각의 position들이 해당 position까지의 모든 position을 참조할 수 있도록 한다. 이 때, decoder에서의 leftward information flow를 막음으로써, auto-regressive한 성질을 보존하도록 해야 한다(미래 시점에 해당하는 position을 참조하지 못하도록 해야 함). 이러한 문제는 scaled dot-product attention부분에서 illegal connection에 해당하는 softmax input들을 로 masking out하도록 구현함으로써 해결한다.