S2S로 진행되는 RNN에서 인코더는 컨텍스트 벡터를 사용해 입력 시퀀스를 하나의 고정된 크기의 벡터로 압축하고, 디코더는 컨텍스트 벡터를 사용해 원하는 형태의 출력 시퀀스를 만들어 내었습니다.
하지만 이러한 RNN에 기반한 S2S는 진행될수록 이전의 Gradient를 소실하여 문맥 전체를 파악하기 힘들게 된다는 단점과 고정된 크기의 컨텍스트 벡터에 데이터를 압축하려고 하면서 생기는 정보 손실이라는 단점이 발생하였습니다.
이러한 문제는 결국 전체적으로 보았을 때 문자열의 길이가 길수록 오류가 생긴다는 치명적인 약점을 발생시켰고, 다른 대안을 찾도록 제시되었습니다. → Attention의 등장
Q : Query, t 시점에 디코더 셀에서의 은닉
K : key, 모든 시점의 인코더 셀의 은닉 상태들
V : Value, 모든 시점의 인코더 셀의 은닉 상태들
위에서 Attention Value란 주어진 Q와 Key의 유사도를 계산하여 각 Value에 연산하여주고, 연산된 Value들을 모두 더해서 리턴하는 값을 의미합니다.
Attention에는 다양한 값이 존재한다고 합니다. 하지만 메커니즘은 거의 유사한채로 중간에 사용되어지는 수식들에서 차이가 보인다고 합니다. 이 부분은 어텐션을 적용해서 입력 벡터와 유사성을 검증하여 점수를 메기는 곳에서 차이를 보입니다.
아래는 Attention을 적용해서 값을 도출하는 것에 대해 도식화한 내용 이미지 입니다.