About me
home
Portfolio
home
📢

Attention 정리

기존 Seq2Seq의 문제점:

1.
인코더와 디코더가 완전히 분리되어 있으므로 입출력의 연관 관계가 너무 떨어져 있으므로, backpropagation할때 Gradient Vanishing 문제가 생긴다.
2.
위 그림과 같이 1개의 context vector 안에 입력 N개의 단어들의 embedding vector의 정보를 모두 함축하려 하기 때문에 정보 손실이 발생할 수 있다.

Attention 메카니즘 등장!

핵심 아이디어: Decoder에서 출력 단어를 예측하는 매 시점마다, Encoder에서의 전체 입력 문장을 다시 한번 참고한다. 이때 예측해야할 단어와 연관있는 입력 단어 부분을 좀 더 집중해서 보게 된다.
Decoder의 현재 시점의 hidden state가 Query이다.
Encoder의 모든 시점의 hidden state들을 KeyValue로 사용한다. (대부분의 Attention Network에서는 KeyValue의 값을 같게 한다.)
Attention Score (energy) : 현 시점에서 단어를 예측할 때, Encoder의 모든 hidden state들이 현 시점 Decoder hidden state(si1s_{i-1})와 얼마나 유사한지를 판단하는 스코어값. 아직 softmax하기 전. Encoder의 h1,h2,h3h_1, h_2, h_3이전 step에서 si1s_{i-1}를 각각 함수 a 계산하여 (즉 QueryKey의 유사도를 계산) 각 hidden state의 중요도를 부여한다.
* 이때 함수 a는 dot, scaling dot, general, concat 등 다양하게 쓰인다. 가장 유명한 함수 a는 dot product 내적이다. (Transformer에서도 dot product Attention을 쓴다.) 여기에서 함수 a의 v, V, W 등은 어텐션을 적용하기 위한 학습 파라미터이다.
Attention Weights : energy를 Softmax해준 값. 총 합이 1이 된다.
Attention Value (context vector) : Encoder의 h1, h2, h3 에 유사도를 곱한다(중요한 hidden state는 짙게, 안 중요한 hidden state는 옅게). 그러고 난 후, 투명도가 변한 hidden state들을 다 더해준 최종 하나의 벡터가 된다.
context vectorsi1s_{i-1}는 concatenate하여 Decoder의 입력 셀이 되고 이를 통해 현 시점의 Decoder hidden state인 sis_{i}를 만들게 된다.
결국 Attention을 통해 Decoder에서 출력 단어를 예측할 때, Encoder에서의 중요 단어들을 참고하게 된다.