research notes

시퀸스-투-시퀸스 및 어텐션 매커니즘 본문

GPT/개념정의

시퀸스-투-시퀸스 및 어텐션 매커니즘

forest62590 2022. 2. 17. 22:22
728x90

1. Sequence-to-Sequence 모델 정의

하나의 RNN을 인코더 또 다른 하나의 RNN을 디코더라는 모듈로 명명하고 두 개의 RNN을 연결해서 사용하는 인코더-디코더 구조 시퀀스-투-시퀀스(Sequence-to-Sequence, seq2seq)로 정의한다.

이러한 인코더-디코더 구조는 주로 입력 문장과 출력 문장의 길이가 다를 경우에 사용하는데, 대표적인 분야가 번역기나 텍스트 요약과 같은 경우가 있다. 영어 문장을 한국어 문장으로 번역한다고 하였을 때 입력 문장인 영어 문장과 번역된 결과인 한국어 문장의 길이는 똑같을 필요가 없다.

2. 컨텍스트 벡터(Context vector)

seq2seq는 크게 인코더와 디코더라는 두 개의 모듈로 구성된다. 인코더 RNN 셀은 모든 단어를 입력받은 뒤에 인코더 RNN 셀의 마지막 시점의 은닉 상태를 디코더 RNN 셀로 넘겨주는데 이를 컨텍스트 벡터(Context vector)*라고 한다.

  • 컨텍스트 벡터는 은닉층의 과거의 정보가 마지막까지 전달되지 못하는 장기의존성 문제(The problems of long-term dependencies)를 가지는데 이러한 문제를 해결하기 위해 어텐션(Attention) 매커니즘이 개발 되었다.

컨텍스트 벡터는 디코더 RNN 셀의 첫번째 은닉 상태에 사용된다. 입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송한다. 디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력한다.
 
컨텍스트 벡터는 사실 인코더에서의 마지막 RNN 셀의 은닉 상태값을 말하는 것이며, 이는 입력 문장의 모든 단어 토큰들의 정보를 요약해서 담고있다고 할 수 있다.
 

3. 시퀸스-투-시퀸스 모델 학습

seq2seq는 훈련 과정과 테스트 과정(또는 실제 번역기를 사람이 쓸 때)의 작동 방식이 조금 다르다. 디코더는 초기 입력으로 문장의 시작을 의미하는 심볼 <sos>가 들어간다. 디코더는 <sos>가 입력되면, 다음에 등장할 확률이 높은 단어를 예측한다. 첫번째 시점(time step)의 디코더 RNN 셀은 다음에 등장할 단어로 je를 예측하였다.
 
첫번째 시점의 디코더 RNN 셀은 예측된 단어 je를 다음 시점의 RNN 셀의 입력으로 입력한다. 그리고 두번째 시점의 디코더 RNN 셀은 입력된 단어 je로부터 다시 다음에 올 단어인 suis를 예측하고, 또 다시 이것을 다음 시점의 RNN 셀의 입력으로 보낸다. 디코더는 이런 식으로 기본적으로 다음에 올 단어를 예측하고, 그 예측한 단어를 다음 시점의 RNN 셀의 입력으로 넣는 행위를 반복한다. 이 행위는 문장의 끝을 의미하는 심볼인 <eos>가 다음 단어로 예측될 때까지 반복된다. 
 
훈련 과정에서는 디코더에게 인코더가 보낸 컨텍스트 벡터와 실제 정답인 상황인 <sos> je suis étudiant를 입력 받았을 때, je suis étudiant <eos>가 나와야 된다고 정답을 알려주면서 훈련한다.

seq2seq 구조 및 context vector(size=4)

seq2seq에서 사용되는 모든 단어들은 임베딩 벡터로 변환 후 입력으로 사용된다. 아래 그림은 단어에 대해서 임베딩 과정을 거치게 하는 단계인 임베딩 층(embedding layer)의 모습을 보여준다.
 

출력 단어로 나올 수 있는 단어들은 다양한 단어들이 있다. seq2seq 모델은 선택될 수 있는 모든 단어들로부터 하나의 단어를 골라서 예측해야 한다. 이를 예측하기 위해서 쓸 수 있는 함수로 소프트맥스 함수가 있다. 디코더에서 각 시점(time step)의 RNN 셀에서 출력 벡터가 나오면, 해당 벡터는 소프트맥스 함수를 통해 출력 시퀀스의 각 단어별 확률값을 반환하고, 디코더는 출력 단어를 결정한다.

4. 어텐션 매커니즘(Attention Mechanism)

어텐션 매커니즘은 기존의 RNN 및 LSTM과 같은 자연어 처리 모델에서 주로 발생하는 장기의존성 문제를 해결하기 위해 고안 되었다. 어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 것이다.

 

단, 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측 해야할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(attention)해서 보게 된다.

  1. Look at the set of encoder hidden states it received – each encoder hidden state is most associated with a certain word in the input sentence.
  2. Give each hidden state a score.
  3. Multiply each hidden state by its softmaxed score, thus amplifying hidden states with high scores, and drowning out hidden states with low scores.


References:

[1] https://wikidocs.net/24996, 위키독스, 딥러닝을 이용한 자연어처리 입문
[2] https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/

728x90
Comments