seq2seq 모델의 문제 2가지
앞서 배운 seq2seq 모델에는 문제점이 있었습니다.
첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생합니다.
둘째, RNN의 고질적인 문제인 기울기 소실(vanishing gradient) 문제가 존재합니다.
seq2seq의 대안 어텐션 메커니즘
어텐션 메커니즘의 아이디어는 다음과 같습니다.
디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 체크를 해줍니다.
이때 해당 time step에서 예측해야할 단어와 가장 연관성이 높은 입력 단어를 더 집중(attention)해서 봅니다.
아래 그림을 통해서 전체적인 어텐션 메커니즘을 이해해봅시다.
i am a student → je suis étudiant 로 번역
디코더의 세 번째 LSTM 셀에서 출력 단어를 예측할 때, 어텐션 메커니즘이 동작하는 과정입니다.
세 번째 디코더에서 출력할 단어를 예측하기 위해서 입력 문장을 다시 한 번씩 체크합니다.
아까 위에서 연관성이 높은 단어를 더 집중해서 본다고 언급했습니다. 이 연관성을 알아내기 위해서 입력 단어가 예측에 도움이 되는 정도를 softmax로 수치화를 시킵니다. 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 하나의 정보로 담아서 디코더로 다시 전송됩니다. 위 그림의 초록색 세모가 이에 해당합니다.
1) 어텐션 스코어 구하기
이전에 seq2seq에서 t 시점의 디코더는 입력값으로 t-1 시점의 은닉 상태와 t-1 시점에서 나온 출력 단어, 이렇게 2개를 입력 받았었습니다. 그러나 어텐션 메커니즘에서는 출력을 위해 앞에 2개와 함께 어텐션 값(Attention value)을 추가로 받아야합니다. 이 어텐션 값을 알아보기 이전에 어텐션 스코어를 먼저 알아보겠습니다,
어텐션 스코어(Attention score)는 t 시점의 출력 단어를 예측하기 위해서 인코더의 모든 은닉 상태가 디코더의 t 시점의 은닉 상태와 얼마나 유사한지에 대한 스코어 값입니다.
참고로 현재 설명하는 어텐션 메커니즘은 닷-프로덕트 어텐션입니다. 해당 어텐션 메커니즘에서는 어텐션 스코어값을 구하기 위해 내적(dot product)을 수행합니다.
우선 아래 사진과 같이 인코더와 디코더의 은닉 상태 벡터들이 있다고 합시다.
여기서 예측 단어를 출력하려는 디코더의 은닉 상태와 모든 인코더의 은닉 상태와 내적을 진행해줍니다.
내적은 아래와 같이 디코더의 벡터를 전치(transpose)시킨 후에 내적을 진행해주면 됩니다.
어텐션 스코어의 함수 식은 아래와 같습니다.
이제 디코더의 은닉 상태와의 인코더의 모든 은닉 상태의 어텐션 스코어 모음값을 아래와 같이 정리합시다.
2) softmax 함수를 통해 어텐션 분포 구하기
e^t에 소프트맥스 함수를 적용하면 모든 값을 합쳐서 1이 되는 분포를 얻어냅니다.
이때 나오는 분포를 어텐션 분포라고 하며, 각각의 값을 어텐션 가중치(Attention Weight)라고 합니다.
3) 어텐션 값 구하기
이제 인코더의 각 은닉 상태를 어텐션 가중치와 곱해준 후, 모두 더해줍니다.
이렇게 구해진 어텐션 값은 인코더의 문맥을 담고 있다고하여 컨텍스트 벡터(context vector) 라고도 불립니다.
seq2seq에서의 컨텍스트 벡터와는 다르다는 것을 알 수 있습니다.
4) 어텐션 값과 디코더 t 시점의 은닉 상태를 연결하자
어텐션 값을 t 시점의 은닉 상태와 결합을 하여 하나의 벡터로 만듭니다. 그리고 인코더로부터 얻은 이 벡터를 예측에 활용함으로써 더 잘 예측할 수 있게 됩니다. 이것이 바로 어텐션 메커니즘의 핵심입니다.
5) 출력층 연산의 입력
어텐션 메커니즘은 위에서 구한 벡터를 바로 예측에 활용하는 것이 아니라 신경망 연산을 한 번 거치고 갑니다.
가중치 행렬과 곱한 후 하어퍼볼릭탄젠트 함수를 지나서 새로운 벡터를 얻게 되는 겁니다.
최종적으로 아래와 같이 예측 벡터를 얻습니다.
참고로 어텐션 메커니즘의 종류는 아래와 같이 다양합니다.
어텐션 메커니즘에 대해서 알아봤습니다. 어텐션은 처음에는 RNN 기반의 seq2seq의 성능을 보정하기 위한 목적으로 소개되었지만, 현재에 이르러서는 어텐션 스스로가 기존의 seq2seq를 대체하는 방법이 되어가고 있다고 합니다.