[Advanced ML & DL Week2] Sequence to Sequence Learning with Neural Networks
작성자: 15기 우명진
논문: Sequence to Sequence Learning with Neural Networks
저자: Ilya Sutskever, Oriol Vinyals, Quoc V. Le
목표: WMT-14 데이터셋에서 영어를 프랑스어로 번역하기
모델: multilayered Long-Short Term Memory(LSTM)
방법: 한 LSTM을 이용하여 input sequence를 하나의 고정된 차원을 가진 벡터로 출력, 다른 LSTM을 이용하여 decoder에서 target sequence 나오도록 함
1. LSTM이 SMT 보다 좋은 성능을 보였다
2. LSTM은 긴 문장 번역에도 어려움이 없었음
+) SMT + LSTM은 더 좋은 성능을 보임
3. 문장의 단어들의 순서를 바꿔주면 성능이 향상됨
Sequence
:순서가 있는 데이터
ex) text - 문맥이라는 순서
시계열 - 시간이라는 순서
영상, 음성 모두 순서와 함께 흘러가는 데이터
LSTM(Long- Short Term Memory)
기존의 RNN 문제를 해결한 LSTM
: 오래된 정보도 기억할 수 있는 long-term dependencies를 가지고 있음
-RNN과 차이를 보이는 부분은 'state' 단계
LSTM의 state는 RNN과 달리 hidden state과 cell state를 가지고 있음
'cell state'는 이전의 정보를 기억하는 역할을 수행
SMT: Statistical Machine Translation
- 확률로 번역을 하는 모델
- 번역 모델과 언어 모델로 각각 나누어서 번역 수행
- 번역 모델: 번역 할 단어와 번역 될 단어의 번역 모델을 만드는 것
- 언어 모델: 문장의 확률을 예측하는 모델을 만드는 것
단점:
- phrase를 넘어서는 즉, 문장에 대한 관계를 표현하지 못함
- 어순이 다른 언어들에서는 낮은 성능을 보임
Deep Neural Network(DNNs)의 장점
- back propagation을 통해 복잡한 함수도 해결 가능
한계: input과 output의 차원이 고정되어 있지 않은 경우
"sequences pose a challenge for DNNS because they require that the dimensionality of the inputs and outputs is known and fixed."
ex) speech recognition, machine translation -> sequence to sequence problem
-> LSTM으로 sequence to sequence 해당 문제 해결
HOW?
1) 하나의 LSTM을 이용하여 input sequence를 큰 크기의 context vector로 출력함 (encoding)
2) 다른 하나의 LSTM을 이용하여 출력 sequence (decoder)
-본질적으로 RNN 자연어 모델이지만, input sequence에 conditioned 되었다는 점이 다름
- 입력값: ABC / 출력값: WXYZ / <EOS>가 나오면 모델 stop
-실제로는 A-B-C가 아닌 C-B-A로 넣는 것이 더 우수한 성능
<결과>
1. 5 deep LSTMs ensemble : BLEU 34.81
(large neural networks 중에서 direct translation에서 가장 뛰어난 성능)
<-> SMT : BLEU 33.30
2. SMT + LSTM: BLEU 36.5 (비록 state-of-art 보다는 살짝 낮지만)
3. 긴 문장에서도 좋은 성능(단어의 순서를 바꾸면서 task의 난이도 하락)
<LSTM의 useful property>
variable length를 가진 input sentence를 fixed-dimensional vector representation으로 바꾸는 점
-> 번역 task이기 때문에 문장 중에서 의미를 대표하는 representations들을 찾고 비슷한 의미를 지닌 문장들끼리 가깝게 됨
Standard Recurrent Neural Network(RNN)
- input sequence: T개 만큼의 단어, x는 다 다른 단어를 의미
- output sequence: T개 만큼의 단어 생성
- 현재 hidden state: 이전 hidden state까지의 결과 + 현재 단어의 정보를 조합, sigmoid 적용 후 hidden state update
- 문제점: input과 output의 길이가 다를 때
-> 해결방법: input에 대한 RNN을 사용하여 하나의 고정된 vector 생성, output에 대한 RNN
-> 한계: long-term dependencies 존재
* long-term dependencies 문제: 과거의 hidden state 정보가 마지막까지 전달되지 못하는 경우
-> LSTM으로 문제 해결! (LSTM은 long range temporal dependencies를 가진 문제들을 해결하기 때문)
LSTM
- input sequence가 주어졌을 때의 output sequence 조건부 확률을 구하는 문제
- LSTM의 마지막 Hidden state에서 context vector 'v' 출력(고정된 차원을 가짐)
- v가 input sequence를 대표하기 때문에, 나머지 y의 확률만 계산
실제 모델 과정
1. 서로 다른 두 개의 LSTM 모델 사용(input / output)
계산 가능한 parameter의 개수, 여러 개의 언어에 대해서 학습이 자연스러워짐
2. LSTM with four layers으로 성능 개선
3. Input sentence의 단어 순서를 바꾸는 것이 성능 개선
a, b, c가 아닌 c, b, a의 순서로 바꾸는 것이 성능 개선에 우수한 성능을 보임
(a, b, c)와 (α, β, γ) 보다 (c, b, a)와 (α, β, γ)으로 바꾸는 것이 (a, α), (b, β) (c, γ)의 거리들이 각각 더 가까워지기 때문
*(a,b,c)의 번역 결과가 (α, β, γ)
WMT' 14 English to French dataset
[학습 단계]
S: Source(Training)
T: Target
- 어떤 source sentence가 주어지면, target sentence 하나가 출력
- log를 붙여서 확률이 높아지는 방향으로 학습
[Test 단계]
- target sentences 중에서 확률이 가장 높은 하나의 값을 출력
Beam Search Decoder
: 단순하게 확률이 높은 값을 선택하는 것이 아니라 더 깊이 들어가서 결과적으로 확률이 더 높은 문장 출력
-beam size 1일 때도 좋은 성능
-beam size 2일 때 가장 좋은 성능
Beam Search Decoder
기존의 greedy decoding은 가장 높은 확률 하나의 값에만 관심이 있음.
그렇기 때문에 만약 한번이라도 예측이 틀린다면, 최종 정확도에 치명적일 수 있음
그렇기 때문에 beam search decoder는 각 스텝에서 탐색의 영역을 k개의 가장 가능도가 높은 토큰들을 유지하여 다음 단계를 탐색함.
k는 사용자가 지정하는 hyper-parameter
문장의 순서를 바꾸었을 때
왜?
short term dependency 때문이다
순서를 바꾸지 않았을 때 주로 source sentence와 target sentence 사이의 거리가 멀다는 문제점이 있음
따라서 'mininal time lag' 발생함
문장의 순서를 바꿔주게 되면 source sentence의 단어와 target sentence의 단어 사이의 평균적인 거리가 감소하게 됨
(c, b, a)와 (α, β, γ)
따라서 optimization 문제를 더욱 쉽게 만들었다
특히나, 가장 앞쪽의 단어들 사이의 거리가 많이 감소하게 되어서 minimal time lag가 많이 줄어들게 됨
backpropagation이 'establishing communication'하기에 더 수월해짐 -> 전반적인 성능 개선
그러나, 앞쪽 단어에서만 성능이 크게 향상되고 뒤쪽 단어에서 성능이 떨어질 수는 있겠으나,
전반적으로 문장의 순서를 바꾼 LSTM이 좋은 성능을 보였음
perplexity(PPL)
언어 모델을 평가하기 위한 지표
'얼마나 헷갈리느냐'
낮을수록 좋은 성능을 의미함
BLEU Score: Bilingual Evaluation Understudy Score
자연어 처리에서 기계 번역의 성능이 얼마나 뛰어난지 측정하기 위해 사용되는 대표적인 방법
-> 기계의 번역 결과와 사람의 번역 결과가 얼마나 유사한지 비교하는 방법
높을수록 좋은 성능
장점:
-언어에 구애를 받지 않음
-계산 속도가 빠름
- 4 layer LSTMs / 1000 cells at each layer / 1000 차원 임베딩
- input 단어: 16만개, ouput 단어: 8만개
- LSTM parameter: -0.08부터 0.08까지의 정규 분포
- momentum 없이 stochastic gradient descent를 사용함, 5 epochs마다 학습률을 줄여나갔음 (왜?!*)
*참고: 최적점 근처에서 손실함수의 기울기는 감소하기 때문에 최적점을 지나치지 않고 곧바로 수렴하기 위해서 학습률을 감소시키는 것이 좋다
- 128 batch size(forward 학습 과정에서 사용하는 문장의 개수가 128개)
- 단순히 random하게 batch를 구성하게 된다면 한 batch 안에 들어있는 문장들의 길이가 많이 상이할 수 있음
-> 문장의 길이들을 맞추어 주느라 padding이 진행될 수 있어서 결론적으로 필요없는 계산과정이 진행됨
-> 최대한 minibatch 안에 들어있는 문장들의 길이가 유사할 수 있도록 하여 padding이 적게 들어가서 학습 속도를 높일 수 있었음
- 8- GPU machine을 사용하여 parellezied 진행
- 128 minibatch 마다 매초 6,300 단어 학습
parellelization
-대용량 데이터를 다룰 때는 병렬처리가 필수
-multiprocessing의 pool과 process 함수를 이용해서 병렬구조 연산 가능
-언제 사용하면 좋은가?
1) for 문으로 시간이 오래 걸릴 때
2) 활용 가능한 CPU 개수가 많을 때
해당 task에 대해서 가장 높은 성능을 보인 것은 아니지만, 상당히 높은 성능을 보여주었음
구절로 번역하는 통계 기반 SMT에 비해서 딥러닝 기반 Method의 가능성을 잘 보여주었다는 점에서 의의
긴 문장에 대해서도 높은 성능을 보였음
*마지막 그림 참고
- 같은 그룹에 있는 문장들끼리 유사한 의미를 지니고 있음
왼쪽 표: performance of our system as a function of sentence length
x축: test sentences sorted by their length
오른쪽 표: LSTM’s performance on sentences with progressively more rare words
x축: test sentences sorted by average word frequency rank
정리 : input 문장을 넣은 후, encoder를 거쳐서 하나의 context vector가 나오게 된다.
그리고 LSTM 기반의 decoder를 거쳐서 번역을 하게 된다.
1. 한정된 단어를 사용하는 LSTM이 제한 없는 단어를 사용하는 SMT에 비해서 좋은 성능을 보인다.
2. 단어의 순서를 바꾸는 것이 성능을 개선한다.
- standard RNN도 단어의 순서를 바꾸게 된다면, easily trainable해지지 않을까?
3. 예측과 달리 긴 문장에 대해서도 좋은 성능을 보여주었다.
- 한정된 메모리 문제와 비슷한 모델들의 긴 문장에 대한 좋지 않은 성능으로 긴 문장에 대한 좋은 성능을 기대하기 어려웠는데, 예측과 달리 좋은 성능을 보임
참고 영상:
https://www.youtube.com/watch?v=4DzKM0vgG1Y
참고 링크:
https://warm-uk.tistory.com/54
https://littlefoxdiary.tistory.com/4
https://blog.naver.com/PostView.naver?blogId=sooftware&logNo=221809101199
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bcj1210&logNo=221581535580
댓글 영역