https://www.youtube.com/watch?v=GUxh-_AO1Rw&list=PL0E_1UqNACXDlqJLNLK8IwzVV_EK3Kffj&index=12
- LSTM이나 GRU를 쓰더라도 아주 긴 문장을 처리하는데는 문제가 있다. 이를 해결해 주는게 Attention Model
- Hidden State의 크기는 몇 Dimension이라고 고정되어 있는데, 거기에 계속 문장을 집어 넣다보면 나중에 그걸 다 기억 못하는 문제가 발생할 수 있음. 이건 물리적인 한계이다.
- Attention의 아이디어는 Decoder가 Encoder의 마지막 state 뿐만 아니라 그 앞의 모든 hidden state에 대한 access를 가지고 Decoding 하자는 것이다.
- 앞의 hidden state 중에 어느 hidden state를 보는 게 좋을지를 학습하게 하는게 attention
- 어느 state에 attention 하게 할지를 학습하는 것
- Attention 함수는 Query, Key, Value로 구성됨. 이것들을 합쳐서 Attention Value를 만든다.
- 예컨대 ‘나는 학생입니다’를 영어로 번역하는데 현재 ‘I am a’ 까지 번역이 되었다고 치면 그 다음 단어는 ‘학생’이라는 state에 집중해서 student라는 단어를 만들어 내게 된다. 왜냐하면 ‘나는’, ‘입니다’는 이미 ‘I am’를 만드는데 사용되었기 때문. 이미 생성된 것은 버린다.
- 고로 현재 맥락(query)을 따져서 input(reference)들에 가중치(weighted average)를 준 value를 구해서 attention value로 정의한다.
- Q는 현재 주어진 상황(context)
- K는 Reference들의 대표자
- Value는 Reference 본인
- Q와 K는 유사도를 계산하는데 사용된다. 따라서 같은 Dimension을 가져야 함.
- V와 Attention Value도 같은 Dimension을 가져야 함.
- 대부분의 경우 굳이 다르게 할 필요 없어서 4개를 같은 것을 사용한다.
- 현재 사용하려는 모델에 대해
- Q는 현재 시점의 Decoder의 State가 된다. —앞선 이미지의 예에서 $s$ 스테이트
- K는 Encoder의 Hidden State가 된다.
- V도 여기서는 K와 같다.