AI

Attention is all you need

JungGwig 2020. 6. 16. 16:19

Long-term dependency problem

- Sequence data를 처리하기 위해 이전까지 많이 쓰던 모델은 Recurrent model이었다. Recurrent model은 t번째에 대한 output을 만들기 위해서 t번째 input과 t-1번째 hidden state를 이용했다. 이러한 방식은 문장의 순차적인 특성을 유지할 수 있도록 해준다. 

- 이러한 Recurrent model은 long-term dependency에 취약하다는 단점이 있다. long-term dependency problem이란 두 단어 사이의 거리가 멀다면 해당 정보를 이용하지 못한다는 문제이다. 

- transformer에서는 이러한 문제를 해결하기 위해 attention mechanism만을 사용한 input과 output의 dependency를 찾아냈다.

 

Model Architecture

- Encoder는 input Sequence(X)에 대해 representation Z를 생성하게 된다.

- Decoder는 Z를 받아 output Sequence(Y)를 만들어냅니다.

- 각각의 step에서 다음 symbol을 만들 때 이전에 만들어진 output을 이용합니다. 이런 특성을 auto-regressive라고 한다.

 

 

Encoder and Decoder Stacks

Encoder 

- N개의 동일한 layer로 구성되어 있으며 input Embeding가 가장 아래 layer에 들어가게 되고, layer(x)가 다시 layer에 들어가는 구조이다.

- 각각의 layer는 두 개의 sub-layer ( multi-head self-attention mechanism과 position-wise fully connected feed-forward network )로 구성되어 있다.

- 이때 두 개의 sub-layer에 residual connection을 이용하게 되며, 이를 위해 sub-layer의 output 차원은 embedding 차원과 일치시켜야 한다. 그 후에 layer normalization을 적용하게 됩니다.

Decoder

- Encoder와 동일하게 N개의 동일한 layer로 이루어져 있으며 encoder와 달리 Masked multi-head attention을 수행할 sub-layer가 추가되었다.

- Masked multi-head attention을 추가한 이유는 decoder는 encoder와 달리 순차적으로 결과를 만들어내야하기 때문에다. masking을 통해, position i보다 이후에 있는 symbol에 attention을 주지 못하게 한다. 즉, i번째 symbol에 대한 예측은 미리 알고 있는 output들에만 의존하는 것이다.

- Encoder와 마찬가지로 residual connection을 사용한 뒤, layer normalization을 해준다.

 

Embeddings and Softmax

- Word2Vec과 Glove와 같이 고정된 Embedding을 사용하지 않고 learned embedding을 사용하였으며, input과 output은 같은 embedding layer를 사용한다.

- Decoder output을 다음 token의 확률로 바꾸기 위해 learning linear transformation과 softmax function을 사용하였다. learned linear transformation을 사용하는 것은 decoder output에 weight matrix W를 곱해주는데, 이때 W가 학습되게 된다.

 

 

Attention

Scaled Dot-Product Attention

수식은 다음과 같다

$$ Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V $$

$$ d_k : query\ \&\ key\ dimenstion $$

$$ d_v : value\ dimension $$

- 이때 모든 query와 key에 대한 dot-product를 계산하고 각각을 root(d_k)로 나누어준다. root(d_k)로 scaling을 해주기 때문에 Scaled Dot-Product Attention이라고 한다. Scaling 이후 softmax를 적용해 value들에 대한 weights를 얻어낸다.

- key와 value는 attention이 이루어지는 위치에 상관없이 같은 값을 갖게 된다. 이 때 query와 key에 대한 dot-product를 계산하면 각각의 query와 key 사이의 유사도를 구할 수 있게 된다. 

- Scaling을 해주는 이유는 dot-products의 값이 커질수록 softmax 함수에서 기울기의 변화가 거의 없는 부분으로 가기 때문이다.

- Softmax를 거친 값을 value에 곱해준다면, query와 유사한 value일수록, 즉 중요한 value일수록 더 높은 값을 가지게 된다는 것이다.

 

Multi-Head Attention

$$ MultiHead(Q, K, V)\ =\ Concat(head_1,...,head_h)W^O $$

$$ head_i\ =\ Attention(Q{W_i}^Q, K{W_i}^K,V{W_i}V) $$

 

Self-Attention

- Key, Value, Query들은 모두 encoder의 이전 layer의 output에서 온다. 따라서 이전 layer의 모든 position에 attention을 줄 수 있다. 만약 첫번째 layer라면 positional encoding이 더해진 input embedding이 된다.