마지막으로 디코더의 은닉 상태를 구해야 합니다. 디코더의 은닉 상태를 구하기 위해서는 컨텍스트 벡터와 디코더 이전 시점의 은닉 상태와 출력이 필요합니다. 다음과 같이 어텐션이 적용된 인코더-디코더의 수식에서는 컨텍스트 벡터(ci)가 계속 변하고 있는 반면에 어텐션이 적용되지 않은 인코더-디코더 수식에서는 컨텍스트 벡터(c)가 고정되어 있습니다. 이전 시점의 은닉 상태 값을 구하는 공식은 다음과 같습니다.
(어텐션 적용) 이전 시점의 은닉 상태 값을 구하는 수식:
(어텐션 미적용) 이전 시점의 은닉 상태 값을 구하는 수식:
이 모든 과정을 순전파 과정을 통해 정리하면 다음과 같습니다.
‘They are cats’라는 입력 시퀀스에 대해 현 시점의 디코더 은닉 상태인 s2와 그 출력인 y2를 계산하기 위해 먼저 s1과 모든 인코더 은닉 상태에 대한 어텐션 스코어를 계산합니다. e21, e22, e23처럼 어텐션 스코어를 구했으면 소프트맥스 함수를 적용하여 시간의 가중치(a21, a22, a23)를 구합니다. 이후 ‘시간의 가중치’와 인코더의 은닉 상태 값들을 이용하여 가중합을 계산함으로써 컨텍스트 벡터(c2)를 구합니다.
최종적으로 앞에서 구한 컨텍스트 벡터와 디코더 이전 시점의 은닉 상태와 출력을 이용하여 최종적으로 다음 디코더의 은닉 상태(y2)를 출력합니다.
▲ 그림 10-13 어텐션 메커니즘 예시
자세한 구현 방법은 이어서 seq2seq, 버트(BERT)에서 예제로 알아보겠습니다.