우리는 영어 지문을 번역할 때 모든 문장들을 다 읽고 나서 번역하지는 않는다. 번역하고자 하는 단어 하나 하나를 주의 깊게 보면서 번역을 진행하는 것이 일반적일 것이다. 신기하게도 기계번역에서도 마찬가지로 중요한 단어를 집중적으로 보면서 번역 Task를 수행했더니 더 좋은 성능을 얻었다. 오늘은 이와 같이 질문의 정답을 찾는 과정에서 중요한 단어에 집중하는 Attention Mechanism에 대해 정리하고자 한다.
Seq2Seq + Attention
전의 Seq2Seq에서는 입력 문장의 정보를 하나의 고정된 크기의 벡터인 컨텍스트 벡터(Context Vector)로 압축하여 디코더에게 전달했음 -> 문장이 길어질 경우, 정보가 다 압축되지 않아 정보 손실(Bottleneck) 문제 있고 RNN 계열 특유의 장기 의존성 문제 존재
Attention Function(Q,K,V)
- 어텐션 함수는 주어진 Query에 대해서 모든 Key와의 유사도를 구함
- 구해낸 유사도로 key와 맵핑되어있는 각각의 Value에 반영해줌
- 유사도가 반영된 값들을 모두 더한 어텐션 값(Attention Value)를 리턴해주는 것이 바로 이 Attention Function(Q,K,V)임
* Query,Key,Value에서 Key와 Value는 일반적으로 동일한 경우가 많음
Dot Product Attention
주어진 Query에 대해서 모든 Key와의 유사도를 구하는 다양한 방식 중 하나인 Dot Product Attention에 대해 알아보고자 함
- t번째 시점에서 단어를 예측하고자 할때, 디코더의 t번째 은닉 상태(Query)를 인코드의 모든 시점의 은닉 상태(Key)와 내적(Dot Product)을 수행
- 이렇게 구한 유사도 값을 어텐션 스코어(Attention Score)라고 함
- 어텐션 스코어 벡터를 소프트맥스 함수에 지나게 해서 인코더의 각 은닉 상태(Value)에 곱해주고 더한 것이 바로 어텐션 값(Attention Value)임. Seq2Seq+Attention에서는 이 값을 컨텍스트 벡터(Context Vector)라고 부름
- 디코더는 이 컨텍스트 벡터를 은닉 상태와 연결 후 하이퍼볼릭탄젠트 함수를 거치게 하여 이를 입력값으로 사용, 현재 시점의 예측단어인 Yt를 예측함
Bahdanau Attention
- 바다나우 어텐션은 루옹 어텐션과 달리 t시점의 예측을 위해서 t-1시점의 은닉 상태를 어텐션에 사용(예: 디코드의 세번 째 시점 예측을 위해 디코더의 두 번째 시점의 은닉 상태를 사용)
- 어텐션 스코어를 Key와 Query에 각각 가중치를 곱하고 더한 것에 tanh를 씌우고 다시 가중치를 곱하는 것으로 구함
- 구해진 컨텍스트 벡터를 이전 시점 예측 단어의 임베딩 벡터에 연결(concatenate)하여 현재 시점의 디코더 셀의 입력으로 사용
etc
- 어텐션 메커니즘의 제안 순서: 바다나우 어텐션(Concat) -> 루옹 어텐션(Dot Prodcut) -> 스케일드 닷 프로덕트 어텐션(Scaled Dot-Product Attention)