🧐 RNN (RecurrentNeuralNetwork) 일반적으로 i의 단어는 그 이전에 발생한 i-1개 단어와 상호작용한다.
RNN
🧐 Long Term Dependency과 LSTM(LongShort-Term-Memory)
Long Range Dependency: RNN은 시간을 처리할 수 있는 능력을 갖추지만 길이가 긴 sample에는 한계가 있다. hi는 1, 2, ..., i 순간에 발생하는 단어의 정보가 혼합되기에 오래된 단어의 정보는 희미해진다. 즉, 앞쪽단어와 멀리있는 단어가 밀접하게 상호작용하는 long-range dependency를 제대로 처리하지 못하는 문제가 발생한다.
LSTM: RNN을 개조해 long-term dependency를 처리하는 능력을 강화한다. input과 output을 열거나 막는 gate를 두어 선별적으로 기억하는 기능으로 여닫는 정도를 조절한다. 이때, 여닫는 정도는 학습으로 알아낸 가중치로 결정된다.
ex) 한국어→영어로 번역 시, 둘의 문장길이가 달라 seq2seq model이 필요하다.- 학습 시 Decoder의 input부분과 output부분이 모두 동작한다. 즉, 정답에 해당하는 출력을 알려주는 교사강요(teacher forcing)방법을 사용한다.
- 예측 시 정답을 모르기 때문에 위의 회색표시한 input 부분을 제외하고 자기회귀(auto-regressive) 방식으로 동작한다. 자기회귀에서 <SOS>가 입력되면 첫 단어 'That'을 출력하고 'That'을 보고 그 다음 둘째 단어 'can't'를 출력한다. 즉, 이전에 출력된 단어를 보고 현재단어를 출력하는 일을 반복하며, 문장끝을 나타내는 <EOS>가 발생하면 멈춘다.
- 한계 : 가장 큰 문제는encoder의 마지막 hidden state만 decoder에 전달한다는 점이다. 그림에서 보면h5만 decoder로 전달된다. 따라서 encoder는마지막 hidden state에 모든 정보를 압축해야하는 부담이 존재한다.
[query-key-value로 계산하는attention] _ NLP
🧐 query-key-value
QKV: attention을 계산하는 방법을 여러가지인데, 최근에는 query가 key와 유사한 정도를 측정하고 유사성 정보를 가중치로 사용해 value를 가중합하는 방법을 주로 사용한다.
벡터의 차원을d라 하면,q는 1xd행렬이고K와V는nxd행렬이다. 이때,n은 key와 value가 갖는 벡터의 개수이다.
[seq2seq withAttention] _ NLP
seq2seq는 입력문장의 모든 정보를 encoder의 마지막 hidden stateh5에 압축해 넣어야하는 부담이 있다. Bahdanau는 아래 식의 attention을 이용해 decoder가 encoder의 모든 state(h1,h2, ... ,h5)에 접근할 수 있게 허용하여 성능을 향상한다.[Bahdanau2014;https://arxiv.org/abs/1409.0473]
🧐Bahdanau Attention 위의 seq2seq의 경우, decoder는 i=6일 때, encoder가 i=2일 때, 단어 '저절로'에 주목해야 'itself'라는 단어를 제대로 생성할 수 있다. decoder가 i=6일 때, (.01 .9 .02 .03 .04)처럼 2번째 원소값이 큰 attention vectora를 생성하면 encoder의 두번째 단어 '저절로'에 더 주목할 수 있어 성능이 향상될 수 있다.
- 이에 대해 query, key, value가 무엇이 되어야 위와 같이 될 수 있는지 살펴보자.