Seq2Seq Model
Seq2Seq 모델은 어제 보았던 RNN의 종류 중 many-to-many, 그 중에서도 첫번째 유형에 해당하는 모델이다. 먼저 input을 모두 받아온 후 이를 기반으로 output을 내보내는 형태이다.
위 구조에서 입력 문장을 읽어내는 RNN 모델을 Encoder
라고 부르고,문장을 한 단어씩 출력하는 RNN 모델을 Decoder
라고 한다. 그리고 RNN 모델로는 LSTM
을 사용했다.
RNN기반의 모델 구조 이기 때문에 hidden state의 dim이 고정된 상태로 계속해서 정보를 누적한다. 길이가 짧을 때는 괜찮지만 길어지게 되면 앞부분의 정보를 잃을 수 있다. 이러한 문제를 해결하기위해 Attention
모듈을 사용한다.
Attention
모듈은 decoder의 hidden state 하나와 encoder의 각 time step의 hideen state를 입력으로 받아 현재 decoder에서 어떤 time step의 encoder hidden state를 어느정도 사용할지 결정한다.
Attention in Seq2Seq
Encoder의 입력에 Decoder 값을 사용 한다. Decoder의 hidden state와 Encoder의 각 time step의 hidden state의 유사도(Attention scores)를 구한다.
이후 softmax를 통해 각 hidden state를 사용하는 비율을 구하고, 이 비율을 나타내는 벡터를 Attention Vector
라고 한다.
Attention Score(유사도)를 구하는 방법
- 단순히 두 vector의 내적으로 계산
- $score(h_t, \bar{h_s})=h_t^T\bar{h_s}$
- 단순한 내적을 구하는 것이 아닌 학습 가능한 가중치 행렬을 추가하는 방법
- $score(h_t,\bar{h}_s)=h_t^TW_a\bar{h_s}$
- 두 hidden state를 concat하여 FC_layer의 입력으로 넣어 유사도를 구하는 방법
- $score(h_t, \bar{h_s})=v_a^Ttanh(W_a[h_t;\bar{h_s}])$
Teacher forcing
- decoder에 input 데이터를 넣을 때 이전 step에서 잘못된 단어를 예측하더라도 올바른 단어를 다음 decoder에 넣어주면서 학습
Attention 구조의 특징
번역 성능의 향상
- Attention 구조에서는 Encoder의 hidden state vector에 가중 평균을 가하여 구한 벡터를 output을 출력하는데에 활용한다. 이에 따라 우리는 우리가 원하는 특정 단어에 포커스를 맞추어 보다 중요한 단어를 확실히 번역할 수 있다는 이점을 가져올 수 있다.
Bottleneck problem 해결
- 앞서 앞 부분 단어에 대한 정보가 뒷부분까지 잘 전달되지 않을 수 있는 문제를 해결하였다.
- 따라서 긴 문장 번역이 보다 수월 해진다.
Backpropagation에서의 이점
- 기존 Encoder-Decoder만 사용하던 구조에서는 Decoder에서 도출되는 loss를 역전파시키기 위해 Decoder sequence에 Encoder sequence를 더한 길이 만큼의 역전파를 전달해야 했다. 이렇게 되면 문장이 조금만 길어져도 긴 timestep를 다 거쳐야 해서 아무리 LSTM/GRU를 도입했어도 맨 앞단에서는 역전파의 vanishing 현상이 일어날 수 있다.
- 하지만 attention 구조에서는 역전파 시 긴 sequence를 거칠 필요 없이 attetion output을 통해 들어가 맨 앞단에서도 direct 하게 역전파를 전달받을 수 있다는 장점이 있다.
모델의 해석 가능성(interpretability)를 제시
- AI system에서 해석 가능성이 존재한다는 점이 매우 큰 강점이 될 수 있는데, 모델의 개선 가능성 및 디버깅이 훨씬 수월해지기 때문이다.
- 해석 가능성이란 모델이 내놓는 output이나 학습 과정에서 사용되는 파라미터 등이 어떤 식으로 변화하는지, 그래서 최종적으로 왜 모델이 이러한 output을 내놓는지를 사람이 이해할 수 있는 가능성을 말한다.
- 우리는 Attention 단에서 가중 평균이 어떤 식으로 계산되었는지(어느 벡터에 더 가중치가 부여 되었는지)를 관찰함으로써 Decoder가 각 timestep에서 어데어 포커시앟엿는지를 쉽게 알 수 있다.
- 또한 softmax loss만으로 내부 모듈이 학습되기 때문에 신경망이 언제 어떤 단어를 더 잘 보아야하는지 스스로 학습할 수 있게 된다.