- seq2seq
: 문장을 이루는 단어들을 token이라고 하는데, 이 토큰들이 모여 만든 문장을 sequence라고하고 seq2seq는 즉, 문장 to 문장이라고 해석할 수 있다. A 나라의 언어를 B 나라의 언어로 바꿔주는 것이라고 생각하면 된다.
입력 값을 받아 encoder가 정보를 취합한 context vector를 생성하고 context vector를 가지고 item by item으로 출력하는 decoder로 이루어져 있다.
** seq2seq 모델의 한계 **
1. 입력 시퀀스의 모든 정보를 context vector에 다 압축하여 요약하다 보니 정보 손실이 일어날 수 밖에 없다. 특히 시퀀스 길이가 길다면 정보 손실은 더 커진다.
2. RNN 구조로 만들어진 모델이다 보니, gradient exploding/vanishing 현상이 발생한다.
- Attention 매커니즘
: 모델이 각각의 input sequences 중에서 현재 output item이 주목해야 하는 part를 다이렉트로 가중치를 주어서 해당하는 파트의 정보들을 조금 더 잘 활용할 수 있도록 해준다. 즉 context vector와 encoding에 입력되는 input 정보들을 좀 더 사용하겠다는 목적을 가진다. 쉽게 말하면 현재 시점 예측에서 입력의 특정 부분에 보다 집중할 수 있도록 설계되어 있다.
단어들이 encoder를 거쳐서 context vector가 생성되어 decoder에 전달이 된다. 위 그림을 보면 I am a student가 je suis로 번역되어 바로 LSTM의 encoder의 hidden state와 합쳐지는 것처럼 보이는데 실제로는 fully connected layer를 거쳐서 나온 값들이 key와 합쳐져 내적을 취한다.
내적을 취한다는 것은 유사도를 보는 것이다. vector의 내적은 길이와 각도에 cos 값을 곱한 값이다. 내적 값이 클수록 유사도가 크다는 것을 의미한다. 즉, 내적으로 decoder의 hidden state와 encoder의 hidden state의 유사도를 확인할 수 있다. 내적의 값은 attention score로 쓰이는데 각 hidden state의 내적의 vector 값이 다르기 때문에 합을 1로 만드는 어떠한 정규화가 필요하다. softmax가 attention score를 1로 만드는 역할을 해주고 softmax를 거친 attention score들은 가중치로 쓰일 수 있다. 이 가중치들을 encoder의 hidden state들과 각각 곱해 더해준 후(weight sum) fully connected layer로 전달한다. 이때 가중치와 hidden state의 곱들 중 가장 큰 값이 마지막 suis를 예측할 때 좀 더 신경을 써야 된다는 것을 알 수 있다.
그럼 fully connected layer에는 원래 encoder에서 decoder 거친 hidden state와(forawrd) attention 매커니즘이 적용된 hidden state가(backward) 합쳐진 상태로 존재하게 된다. (vector가 2개)
decorder에서 ‘이 부분을 해석할거야’ 라는 backward 요청을 보내는 것을 Query라고 하고, 비교할 대상들을(encoder hidden states) Key라고 하고, Weight sum한 것들을 Value라고 한다.
- 내적 종류
1. dot
: Attention에서 쓰인 내적이 dot 내적이다.
2. scaled dot
3. weighted Dot product