Sequence-to-sequence model
`Seq2Seq` 모델은 words, letters, features of images 등의 sequence data를 Inputs으로 사용하며 Outputs 또한 또다른 sequence data이다. 여기서 입력에 사용하는 sequence에 해당하는 item의 개수와 출력의 sequence에 해당하는 item의 개수가 동일할 필요는 없다. 이러한 sequence-to-sequence 모델은 번역 머신으로 사용되며 이 경우 sequence는 단어들로 구성되며, output 또한 마찬가지로 단어들로 구성된다.
Encoder-Decoder
Seq2Seq 모델은 `Encoder`와 `Decoder`로 구성된다. 각각의 역할은 다음과 같다.
- Encoder : input sequece의 각 item을 처리하고 정보를 압축하여 `context` vector를 생성해 Decoder에 전달
- Decoder : Encoder로부터 전달받은 압축된 정보를 포함한 context를 통해 출력 생성
`RNN`은 Encoder-Decoder 구조를 표현하기 위한 가장 고전적인 방식이다. Encoder와 Decoder 모두 RNN 셀로 구성된다. 먼저 Encoder를 살펴보면, 입력 문장은 단어 토큰화를 통해 단어 단위로 쪼개지고 이는 각각 RNN 셀의 각 시점의 입력이 된다. 이후 각각의 입력이 들어갈 때마다 hidden state가 한 번씩 업데이트되고, 최종적으로 모든 input이 다 들어온 후 가장 마지막의 hidden state가 context vector가 되어 Decoder로 전달된다. 이 context vector는 Decoder RNN 셀의 첫번째 hidden state가 되어 output을 생성한다.
Decoder에서는 초기 입력으로 문장의 시작을 의미하는 <sos>가 input으로 사용된다. 해당 input과 Encoder에서 전달받은 context vector를 통해 t 시점의 예측 값을 생성하고, 이후 이 예측 값을 다음 셀의 input 값으로 활용한다. 이후 두 번째 RNN 셀, 즉 t+1 시점의 RNN 셀에서는 이 input 값과 t 시점에서의 hidden state를 통해 t+1 시점에서의 예측 값을 생성한다. 이 과정을 문장의 끝을 의미하는 <eos>가 다음 단어로 예측될 때까지 반복한다.
Attention in Seq2Seq Learning
RNN에서 Context vector는 bottleneck이기 때문에 long sequences를 처리하는데 어려움을 갖는 `Long-term dependency` 문제가 있었다. `LSTM`, `GRU`는 이를 완화했지만 완전히 해결하지는 못했다. `Attention`은 모델이 각각의 input sequences들 중에서 현재 output item이 주목해야하는 파트들을 가중치를 주어 더 잘 활용할 수 있게 했다. Attention에는 두 가지가 있다.
- `Bahadanau attention` : Attention Score 자체를 학습하는 Neural Network 모델이 존재
- `Luong attention` : Attention Score를 따로 학습하진 않으며, current hidden state와 과거 hidden state들의 유사도 측정
- 두 attention은 성능적으로 큰 차이가 없으며, 실용적인 면에서 Luong attention이 우위
Attention 모델은 클래식한 Seq2Seq 모델에 비교하여 2가지의 차이점이 있다. 첫 번째는 Encoder가 가장 마지막 hidden state만 전달하는 것이 아닌 모든 hidden state를 전달하기 때문에 더 많은 정보를 전달하며, Decoder는 모두 다른 hiddens state를 서로 다른 가중치로 활용한다는 것이다.
두 번째는 Decoder가 output을 생성하기 전 몇 가지 과정을 거친다는 것이다. 먼저 Encoder에서 전달받은 각 hidden state들은 각 input의 정보와 가장 연관되어 있다. 따라서 이 hidden state들을 통해 `Attention score`를 계산한다. 이 score 값이 클수록 현재 디코딩 관점에서 중요하다고 볼 수 있다.
Woking mechanism of attention process
- Encoding이 완료된 후 h1, h2, h3 3개의 hidden state들이 Deocoder에 전달
- Decoder는 <END> 토큰과 initial decoder hidden state를 통해 새로운 hidden state vector(h4) 생성
- 앞서 전달 받은 Encoder hidden states들과 h4 vector의 attention score을 계산하여 context vector(C4) 생성
- h4와 C4를 concatenate(옆으로 붙임)하여 하나의 vector 생성 → 전체 size = h4 size + C4 size
- 해당 vector를 `feedforward neural network`에 전달
- feedforward neural netowrk의 output이 해당 time step에서 가장 그럴듯한 output을 생성
- 이 output이 다음 time stamp의 입력값으로 전달되어 같은 step을 반복
- 이전 time step의 hidden state와 output을 통해 현재 time step의 hidden state 생성
- 현재 time step와 Encoder의 hidden state의 attention score 계산 및 C5 생성
- h5와 C5를 concatenate한 후 feedforward neural network에 전달한 후 output 생성
이 포스팅은 다음을 공부하며 작성한 글입니다.
DSBA 유튜브 Unstructured Data Analysis(Text Analytics)의 Seq2Seq Learning 강의