Attention을 이해하기 위해선 RNN, LSTM, Seq2Seq에 대한 이해가 필요하다.
기존 Seq2Seq에 Attention기능을 추가해서 Attention이 된 것이고
Seq2Seq은 RNN 혹은 lstm으로 encoder와 decoder 구조를 짠 것이고
lstm은 일종의 RNN이다
input xt를 받아 hidden state A로 전송한다
hidden state(t)에서 가중치와 합성곱을 이루고 활성화를 통해 얻은 값을 다음 hidden state(t + 1)로 전송한다
다음 hidden state는 hidden state(t-1), 이전 히든스테이트의 값을 반영하여 새로운 인풋과 함께 또 새로운 값을 출력한다.
모델을 더 자세히 살펴보면 이렇다
지난 h(t-1) (t가 현재, -1은 지난 히든스테이트다)
와 현재 hidden state (hh)를 곱한다
새로운 인풋 xt를 곱해서 바이어스와 함께 더해준다
그리고 이 값을 활성화 함수 tanh로 통과시켜 나온 값이이 ht의 값이 된다
인코더 디코더 사이 매개역할을 해주는 context vector을 가진 것이 seq2seq 혹은 rnn encoder-decoder 이라 부른다.
각 encoder, decoder는 rnn 혹은 lstm으로 구성된 모듈이다.
불어-영어 번역을 한다고 가정했을 때
encoder는 불어 문장을 인풋으로 받고 각 문장의 단어가 하나의 인풋 x 값으로 입력된다
rnn을 통해 불어 문장의 정보를 요약해서 context vector에다 저장을 한다.
이러한 context vector는 고정된 길이의 벡터(fixed-length vector)이라 한다.
decoder는 이 context vector에 저장된 인코더의 정보를 참고하며 단어마다 영어번역을 출력해준다.
Attention은 흔히 attention mechanism, 기능이라 불린다.
이유는 기존 rnn encoder-decoder, seq2seq 모델에 attention이란 메카니즘, 기능을 추가한 것이다. Attention과 Rnn encoder-decoder는 완전히 다른 모델이라 보기 힘들다. Attention mechanism은 기존 RNN encoder-decoder 모델의 한계를 극복하기 위해 추가한 기능이다. 논문에서는 context vector의 fixed-length vector를 attention mechanism으로 대체한 RNN encoder-decoder를 RNNSearch라 부른다.