번역기나 텍스트 요약과 같이 입력과 출력 문장의 길이가 다른 경우에 사용
입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송합니다. 디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력합니다.
⇒ 문장이 길면 번역 품질이 떨어짐
⇒ 입력 시퀀스가 길때 출력 시퀀스의 정확도가 떨어지는 것을 보정하기 위한 어텐션
Attention(Q, K, V) = Attention Value
주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구함
구해낸 유사도를 키와 매핑된 각각의 '값(Value)'에 반영
유사도가 반영된 '값(Value)'을 모두 더해서 리턴 ⇒ 어텐션 값이라고 함
seq2seq + 어텐션 모델에서 Q, K, V
Q = Query : t 시점의 디코더 셀에서의 은닉 상태
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
V = Values : 모든 시점의 인코더 셀의 은닉 상태들
인코더 시점 1,2,,,N
h1,h2,,,hN : 인코더 은닉상태
St : 디코더 은닉상태
디코더의 현재 시점 t에서 필요한 입력값
: 시점 t에서 출력 단어를 예측하기 위한 디코더의 셀은 두개의 입력값을 필요로 함 ⇒ t-1의 은닉상태와 t-1에서 나온 출력 단어
⇒ 어텐션 메커니즘은 출력 단어 예측에 Attention Value값도 필요함
어텐션 값 at : t번째 단어를 예측하기 위한 어텐션 값
(at가 현재 시점 t에서 출력 예측에 어떻게 반영되는지)
at = 현재 디코더의 시점 t에서 단어를 예측하기 위해 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 st와 얼마나 유사한지를 판단하는 스코어 값
ex) 닷 프로덕트 어텐션에서 at 구하기
st를 전치하고 각 은닉 상태와 내적을 수행 → 모든 어텐션 스코어 값은 스칼라
→ st와 인코더 i번째의 은닉 상태의 어텐션 스코어 계산
et의 수식 :
#hi는 T시점마다 다른건가???
et에 소프트맥스 함수를 적용, 모든 값을 합하면 1이 되는 확률 분포를 얻음 ⇒ 어텐션 분포라고 함
⇒ 각각의 값은 어텐션 가중치라고 함
I, am, a, student의 어텐션 가중치⇒ 각각 0.1, 0.4, 0.1, 0.4 가 됨(합 1)
디코더의 시점 t에서의 어텐션 가중치의 모음값인 어텐션 분포를 αt
이라고 할 때,
αt=softmax(et)
컨텍스트 벡터라고도 불림
⇒ vt를 yhat의 예측 연산의 입력으로 사용해 인코더로부터 얻은 정보를 활용해 더 정확한 예측 가능
st를 출력층의 입력으로 사용해 예측 벡터를 얻음
Reference : 딥 러닝을 이용한 자연어 처리 입문