Seq2Seq모델은 인코더로부터 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터로 압축하고, 디코더는 컨텍스트 벡터를 입력받아 출력 시퀀스를 출력한다
RNN은 다음과 같은 문제를 갖는다
1. 하나의 고정된 크기 벡터에 모든 정보를 압축하려 하니 정보 손실이 발생한다
2. RNN의 고질적인 문제, 기울기 소실 vanishing gradient가 발생한다
어텐션의 아이디어
디코더가 출력 단어를 예측하는 매 시점time step마다 인코더의 전체 입력문장을 다시 한번 참고하는것에 있다
![[attention_process.mp4]]
- 단 전체 입력을 모두 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야 할 단어와 연관이 있는 단어부분을 좀 더 집중attention 한다
dot-product 어텐션
인코더의 은닉상태 h1,h2,⋯,hN 을 구한다
디코더의 현재시점t에서의 은닉상태 st 를 구한다
인코더의 은닉상태와 디코더의 은닉상태가 같다고 가정하자
어텐션 스코어를 계산한다
dot-product attention에선 scorei=⟨st,hi⟩ 로 계산된다
즉 어텐션 스코어 벡터 et=[⟨st,h1⟩,⟨st,h2⟩,⋯,⟨st,hN⟩] 으로 계산되는 것이다
소프트맥스 함수에 어텐션 스코어 벡터 et 를 입력한다. 출력한 결과는 어텐션의 가중치attention weightα로 해석한다
어텐션 값을 최종적으로 계산한다. 어텐션 값at은 인코더의 문맥을 포함한다 하여 컨텍스트 벡터라고 불리기도 한다(이는 인코더의 마지막 은닉 상태만을 컨텍스트 벡터라 불리는 seq2seq와 대조 됨)
at=i=1∑Nαihi
어텐션 값at과 디코더 t 시점의 은닉상태 st 를 연결한다
가중치 행렬과 행렬곱을 지난다
s~t=tanh(W[at;st])
최종적으로 소프트맥스 함수에 입력하여, 분류 확률을 계산한다
y~t=softmax(Wys~t)
스코어 함수에 따른 어텐션 종류의 차이
dot-product
- score(si,hi)=⟨st,hi⟩
scaled-product
- score(si,hi)=n⟨si,hi⟩
general
- score(st,hi)=sitWhi
바다나우 어텐션 Bahdanau Attention
어텐션 스코어 계산방법
1. 은코더의 은닉상태 h1,h2,⋯,hN 을 계산한다
2. 디코더의 은닉상태 st 를 계산한다
3. 스코어를 다음과 같이 계산한다
- score(st−1,hi)=Wattanh(Wbst−1+Wchi)
- 여기서 Wa,Wb,Wc 는 학습 가능한 가중치 행렬
- 은닉상태 h1,h2,⋯,hN 을 쌓은 행렬 H 가 있다하자
- et=Wattanh(Wbst−1+WcH)
4. 소프트맥스 함수에 어텐션 스코어 벡터 et 를 입력한다. 출력한 결과는 어텐션의 가중치attention weightα로 해석한다
5. 어텐션 값을 최종적으로 계산한다.
- at=i=1∑Nαihi
6. st 를 계산한다
7. 어텐션 값at과 디코더 t 시점의 은닉상태 st 를 연결한다
8. 가중치 행렬과 행렬곱을 지난다
- s~t=tanh(W[at;st])
9. 최종적으로 소프트맥스 함수에 입력하여, 분류 확률을 계산한다
- y~t=softmax(Wys~t)