Seq2Seq
Seq2seq는 크게 인코더와 디코더 두 개로 구성된 아키텍처로 인코더는 입력 시퀀스(Sequence)를 순차적으로 입력 받아 순환신경망을 통해 입력 시퀀스의 특징을 반영하는 값을 추출하여 하나의 벡터로 만든다. 이 하나의 벡터를 context Vector라고 한다. 디코더에서는 인코더에서 압축한 context vector를 전송받아 순환신경망의 초기 상태(Initial State)로 활용하여 순차적으로 시퀀스를 출력한다.
디코더의 순환신경망 첫 번째 초기 입력으로 시퀀스의 시작을 의미하는 <sos>를 받고 인코더로부터 넘어온 context vector를 첫 번째 셀의 hidden state로 사용하여 다음에 등장할 확률이 높은 단어를 예측한다. 이 예측된 단어는 다음 시점인 두 번째 셀의 입력 값이 되고 또 다시 다음에 등장할 단어를 예측하게 된다.
한편 인코더의 길이가 길어지면 인코더가 압축하는 context vector가 입력 시쿼스의 정보를 제대로 압축하기 어려워지는 병목현상이 발생한다. 이를 해결하기 위해 Attention 기반 Seq2seq 모델이 연구되었다.
Seq2seq with Attetion
기본적인 Seq2seq 모델이 디코딩과정에서 context vector만으로 모든 출력을 생성했다면 Attention기반 Seq2seq는 디코딩 과정에서 각 시퀀스마다 서로 다른 context vector를 사용한다. 먼저 인코더에서 시퀀스를 순차적으로 입력받아 순환신경망을 거쳐 Attention layer로 전달한다. Attention layer에서는 입력 시퀀스의 어떤 단어에 집중할지에 대하여 가중치를 조정하는 방식으로 Context vector를 만들어 디코더에 전달하게 되고, 디코더는 Context vector의 정보를 각 step에서 활용하여 시퀀스를 출력한다.
Attention layer에 앞서 순환신경망의 인코더의 각 step의 hidden state(hEt)와 디코더의 hidden state(hDt, 처음에는 인코더의 마지막 hidden state hEj값을 사용)를 통해 Attention score를 계산하고 Softmax함수를 통해 정규화하여 Attension wight를 만든다. 다음으로 인코더의 hidden sate와 Attention weights의 가중 합을 계산하여 가중치가 적용된 context vector를 만든다. 마지막으로 디코더에서 Context vector와 디코더의 hidden state 그리고 이전 디코더의 출력값을 이용해 디코더의 다음 hidden state를 출력한다.
i = 디코더의 현재 출력 인덱스
j = 인코더의 현재 입력 인덱스
에너지(Energy)
$$ e_{ij}=v_{a}^{T}tanh(W_{a}h_{i-1}^{D}+U_{a}h_{j}^{E}) $$
가중치(Weight)
$$ a_{ij}=\frac{exp(e_{ij})}{\sum_{k}exp(e_{ik})} $$
Context Vector
$$ c_{i}=\sum_{j}a_{ij}h_{j}^{E} $$
구체적인 과정을 살펴보면, 에너지를 구하기 위하여 인코더의 각 스텝의 모든 hidden state hEj를 Fully Connected layer에 통과시킨다 (Ua*hEj). 다음으로 디코더의 현재 step의 hidden sate를 가져오는데, 초기에는 디코더에서 출력한 값이 없으므로 인코더의 마지막 셀의 hidden state(hETx)를 가져와 Fully Connected layer에 통과시킨다 (Wa*h_i-1). 그 다음 두 값을 더한 후 하이퍼블릭 탄젠트 활성화함수를 통과시키고 다시 Fully Connected layer에 통과 시킨다 (vT*tanh(Wa*h_i-1 + Ua*hEj)). 이렇게 구한 에너지 eij를 softmax 함수를 통해 정규화하여 attention score aij를 구한다. 최종적으로 인코더의 hidden state에 attention score를 곱해 context vector ci를 만들게 된다.
Attention의 context vector는 이처럼 시퀀스에서 더 중요한 부분이라고 생각되는 state에 더 높은 가중치를 주게 되어 예측할 때 더 중요한 부분에 집중하게 된다.
'NLP' 카테고리의 다른 글
Transformer (0) | 2021.06.30 |
---|