여러방면으로 이용되는 Transformer
구조의 바탕이 되는 Sequence to Sequence란 무엇일까? 해당논문을 바탕으로 정리해보았다.
<EOS>
토큰을 넣어주게 된다. 그 신호를 받은 디코더에서 예측을 순차적으로 진행하고 끝이나면 <EOS>
가 붙는 구조이다. 이와 같은 구조 때문에 input, output의 차원이 달라도 되는 것이다.LSTM
을 각 인코더/디코더에 사용한다.RNN(Recurrent Neural Network) *vanilla RNN
RNN에서 장기의존성이라는 문제가 발생하는데, 그 이유는 그림에서 보이는 tanh
를 활성화 함수로 사용하기 때문이다.
장기의존성(long term dependency)
은닉층의 과거의 정보가 마지막까지 전달되지 못하는 현상
-tanh(hyperbolic tangent)
http://taewan.kim/post/tanh_diff/
→ 함수는 (-1~1)의 출력 값을 가지고 있어 1보다 작은 값이 계속 곱해지므로 긴 문장일수록 앞의 정보를 충분히 전달하기 어렵다.
[LSTM]
RNN의 장기의존성 문제를 해결하고자 고안되었고, Memory-Cell이라는 것이 추가되었다.
[GRU]
LSTM의 구조가 복잡하고 연산량이 많아 시간이 오래걸리는 것을 개선하고자 단순화했다.
과거의 은닉정보를 얼마나 무시할지 결정
은닉층에 정보갱신 (update gate)
*여러개의 LSTM을 조합했을 때, beam size가 작은 경우에도 높은 성능을 보임
왼쪽에서 오른쪽으로 진행되며 가능성이 높은 k개를 찾는 Beam Search Decoder 를 사용했고, beam size(k)가 1인 경우(=Greedy Search)에도 좋은 성능을 보였다.
problem
👉 a b c → α β γ
.
training
👉 c b a → α β γ
a b c 와 α β γ 를 매핑 하고자 할 때 a b c의 순서를 바꾸어 c b a 로 학습시킨다.
이 경우에 시작 하는 단어인 a
와 타겟인 α
의 거리가 가까워 지며 source 문장과 target문장에 각 단어가 멀리 떨어져 있는 minimal time lag 문제를 해결한다.
이와 같이 source sentences를 역순으로 뒤집는 방법을 통해 성능을 향상시켰다.
1. Learning Phrase Representations using RNN Encoder–Decoder
for Statistical Machine Translation (2014)와의 차이점? LSTM?
Encoder-Decoder Long Short-Term Memory Networks - Machine Learning Mastery
> Encoder-Decoder LSTM Architecture 부분 참고
→ Seq2Seq 모델의 바탕이 된 구조(인코더와 디코더 연결). RNN을 이용함.
알고있는 개념이라고 생각했지만 누군가에게 알려주기 위한 목적, 또는 이후에 내가 다시 읽어볼 목적으로 정리하는 것은 쉬운 일이 아니구나...
정리하면서 정확하게 개념을 확립하는 계기가 되었다. 어떻게 정리하고 구성하는 것이 좋을지 고민해보아야 겠다.
https://github.com/microsoft/CNTK/blob/master/Tutorials/CNTK_204_Sequence_To_Sequence.ipynb
http://dprogrammer.org/rnn-lstm-gru