No Story, No Ecstasy

Attention 메커니즘 본문

Data Science Series

Attention 메커니즘

heave_17 2021. 5. 30. 21:13

Attention 메커니즘이란?

  . 딥러닝 모델이 특정 벡터에 주목하게 만들어 모델의 성능을 높이는 기법

  . RNN에서 인코더가 입력을 벡터로 압축시 일부 정보가 손실되는 것을 보정하는 용도로 활용

  . Transformer에서는 인코더와 디코더를 만드는데 직접적으로 사용됨

Attention 개발 동기

  . 기계번역을 위한 Sequence-to-sequence 모델에서, 모델의 정확도를 높이기 위해 제안됨

  . 소스 랭귀지와 타겟 랭귀지의 길이가 길어질수록 모델의 성능이 나빠진다.

  . 모델로 하여금 '중요한 부분만 집중하게 만들자'가 어텐션 메커니즘의 핵심 아이디어

Attention 핵심 아이디어

  . 기본 가정: 인코더가 만든 벡터와 디코더가 예측시 사용하는 벡터가 유사할 것이다.

  . Q (query), K (key), V (value) 3개의 벡터를 입력으로 받아 query와 key-value 쌍을 출력에 맵핑한다.

  . 각 값에 할당된 가중치는 해당 key에 대응되는 query에 대한 유사도로 계산된다.

  . 자주 사용되는 유사도 계산 함수에는 dot product, splice, detector 등이 있다.

  . 얻은 가중치는 softmax 함수를 통해 정규화되고, V에 대응하는 가중치들에 가중을 더해 최종 attention을 얻는다.

    . Self-attention 모델에서는 Q=K=V

    . Encoder-decoder-attention 모델에서는 Q = decoder hidden state, K, V = encoder hidden state

 

Self-Attention

  . 입력 문장 내 다른 위치에 있는 단어들을 보고 거기서 힌트를 받아 현재 타겟 위치의 단어를 더 잘 encoding한다.

  . 과정

    1. 입력된 벡터에게서부터 3개의 벡터를 만들어낸다. Q, K, V

    2. 입력 문장 속의 다른 모든 단어들에 대해서 각각 점수를 계산한다.

      . 현재 단어의 query vector와 다른 위치의 단어의 key vector의 내적으로 계산된다.

    3. 각 단어들의 value 벡터에 softmax 함수를 적용한 점수를 곱한다.

    4. 나온 결과 벡터를 feed-forward 신경망으로 보낸다.

Multi-head Attention

  . Attention head를 여러 개를 갖는 것을 뜻한다.

  . 각 Attention head는 다른 Q, K, V 가중치 행렬들을 갖고, Q, K, V 행렬들을 결과로 갖는 어텐션을 계산한다.

  . 계산된 Z를 모두 모아서(concat) 가중치 행렬과 곱해서 레이어의 최종 출력 값을 만든다.

  . 하나의 위치에만 크게 집중하는 것이 아니라, 그 집중을 분산시켜서 2, 3번째 중요한 위치를 효과적으로 학습한다.

    1. 입력된 벡터에게서부터 3개의 벡터를 만들어낸다. Q, K, V

Transformer에서 Attention의 사용

  . Encoder Self-Attention

    1. Multi-head Attention

    2. Query = Key = Value

    - 모든 K, V는 이전 레이어의 출력에서 가져온다.

 

  . Decoder Self-Attention

    1. Masked Multi-head Attention

    2. Query = Key = Value

    - Auto-regressive 속성을 유지하기 위해서 디코더에서 왼쪽으로 흐르는 정보를 막는다.

    - 허용되지 않은 연결에 대응하는 softmax 입력에서 모든 값을 마스킹 아웃하여 scaled dot-product 어텐션 구현

    - Masked인 이유: Decoder에서는 이전 값은 출력이 아닌 정답으로부터 가져오도록 하기 때문

 

  . Encoder-decoder Attention

    1. Multi-head Attention

    2. Encoder Self Attention = Key = Value

    3. Decoder Self Attention = Query

    - Q는 이전 디코더 레이어에서, K, V는 인코더 출력에서 오므로, 디코더의 모든 위치가 입력의 모든 위치를 Attend

 

  .  Positional Encoding

    . RNN 구조가 아니기에 position 정보를 이해하기 위한 새로운 개념이 필요하다.

    . 이를 위해 encoder-decoder 맨 아래 input embedding에 positional encoding을 추가한다.

 

  .  The Residuals

    . Encoder의 각 sub-layer는 residual connection으로 연결되었고, 그 후에는 layer-normalization 과정을 거친다.