Seq2Seq 모델에는 여전히 부족한 점이 존재
만약 입력 시퀀스 길이가 길어지면 한정된 길이의 context vector에 모든 입력 시퀀스의 정보를 담기가 상당히 어려워짐
이 문제를 해결하기 위해 등장한 것이 바로 attention 메커니즘
Attention 메커니즘은 디코더가 출력 시퀀스의 각 단어를 생성할 때, 입력 시퀀스의 어떤 부분이 중요한지를 “주목”하게 만드는 알고리즘
다음과 같이 입력 시퀀스가 들어온다고 가정하면, 입력 단어에 대한 각각의 은닉 상태(hidden state)들을 따로 저장
그런 다음 Seq2Seq 떄와 마찬가지로 context vector를 만들고 디코더에 넣어서 디코더의 은닉상태와 출력값을 다음과 같이 구할 수 있음
Attention 메커니즘의 핵심은 현재 디코더 은닉상태와 가장 관련이 있는 것으로 추정되는 입력과의 관계성을 찾는 것
여기서 두 은닉상태의 관계성을 결정 짓는 척도는 두 벡터간의 유사성
벡터간의 유사성을 계산하는 attention 점수 계산법은 크게 3가지 정도로 나누어 볼 수 있음
다음과 같이 출력 시퀀스의 hidden state와 각 입력 시퀀스 간에 attention score를 dot product를 사용해 계산
그 다음 각 attention score들의 softmax 값을 구함
Softmax를 하는 이유는, 각 attention score들을 확률분포로 바꾸어주고, 정규화해서 학습을 더 효과적으로 하기 위함
그 다음 각 attention score들과 기존의 입력 시퀀스의 hidden state들과 곱함
이렇게 곱해주는 이유는, 각 attention score들은 간단한 스칼라값이기 때문에, 곱셈을 통해서 기존의 입력 시퀀스의 hidden state들에게 attention 가중치를 증폭해주는 효과
Attention score가 가미된 입력 시퀀스의 hidden state들을, 다 더하여 새로운 context vector를 만들면 됨
새로운 context vector는 다음번 디코더 LSTM의 hidden state로 입력하고, 차례로 필요한 값들을 입력하면, 다음 번 hidden state를 구할 수 있고, 똑같은 방식으로 그 다음 턴의 attention context vector를 구할 수 있음
물론 디코더의 출력이 EOS이기 때문에, Attention을 더 이상 계산할 필요는 없음