Title
- Sequence to Sequence Learning with Neural Networks(2014)
Abstract
- DNN은 어려운 학습 작업에서 잘 작동하지만, 시퀀스와 시퀀스를 mapping하는 학습에는 사용할 수 없다.
- 이 논문에서는 시퀀스 구조에 대한 가정을 최소화하고, 시퀀스 학습의 일반적인 end-to-end 접근법을 제안한다.
- LSTM을 사용하여 입력 시퀀스를 고정된 차원의 벡터에 mapping한 뒤, 또 다른 심층 LSTM을 사용하여 벡터에서 대상 시퀀스를 디코딩한다.
- 이 논문에서 사용될 데이터셋은 WMT' 14 dataset의 영어-프랑스어 번역이다.
- BLUE Score를 통해 모델 평가를 진행한다.
- 모든 소스 문장에서 단어의 순서를 바꾸면 (대상 문장은 제외) LSTM의 성능이 현저하게 향상되는 것을 발견했다.
- 단어 순서를 뒤집으면 input sequence와 target sequence 이 사이에 의존도로 인해 문제를 해결할 수 있다.
0. Background
NLP의 발전 흐름
출처: https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice
위의 그림은 NLP기법의 발전을 보여준다. context vector을 사용하는 Seq2Seq 발표 이후 개별 토큰이 아닌 sequence 전체에서 정보를 추출하는 방향으로 발전하고 있다.
Seq2seq이란?
- 시계열 데이터를 다른 시계열 데이터로 변환하는 모델
- RNN 기반의 두 모델을 연결한 모델이고, Encoder-Decoder 구조로 되어 있다. (LSTM, GRU도 포함)
- 여기서 h는 context vector라고 하며 임의 길이의 시계열 데이터를 고정 길이 벡터로 변환한다. 이때 h는 앞에서 입력값으로 받아 왔던 것들의 정보가 다 담겨져 있는 벡터라고 생각하면 된다.
- 기계 번역과 같은 Many-to-many task의 수행에도 적합
1. Introduction
1) DNNs
- 음성인식, 객체 인식과 같은 어려운 문제에서 탁월한 성능을 갖고 있는 모델이다.
- 2진법 크기의 숨겨진 Layer 2개만 사용하여 N-비트의 숫자를 정렬할 수 있다.
- 대규모 DNNs의 label된 데이터 셋의 네트워크의 파라미터를 지정하기에 충분한 정보가 있다면, 지도 역전파를 이용해 학습시킬 수 있다.
2) Sequential problems
- 유연성과 좋은 성능에도 불구하고, DNNS는 입력과 타켓이 고정된 차원의 벡터로 인코딩 될 수 있는 문제에만 적용할 수 있다는 문제점이 있다.
- 이 논문에서는 LSTM 아키텍처가 일반적인 sequence to sequence 문제를 해결할 수 있음을 보여준다.
3) LSTM
- 아래 모델은 입력 문장 "ABC"를 읽고 출력 문장으로 "WXYZ"를 생성한다.
- 입력 문장을 거꾸로 읽으면 데이터의 종속성으로 인해 최적화 문제가 훨씬 쉬워지기 때문에 입력 문장을 거꾸로 읽는다.
- LSTM의 유용한 특성은 가변 길이의 입력 문장을 고정 차원 벡터 표현으로 mapping 학습한다는 점이다.
LSTM의 Idea는 다음과 같다.
- 첫번째, 하나의 LSTM을 사용하여 입력 sequence를 읽고나서 고정 차원 벡터로 표현한다.
- 두번째, 다른 LSTM을 사용하여 해당 벡터에서 출력 sequence를 추출한다.
- 세번째, LSTM은 입력 sequence에 따라 조건이 지정된다는 점을 제외하면 기본적으로 RNN 언어 모델이다.
- 마지막으로, LSTM은 입력과 해당 출력 사이에 상당한 시간 지연이 있기 때문에 긴 범위의 일시적인 의존성을 학습한다.
이 작업의 주요 결과는 다음과 같다.
- 최근 아키텍처의 사용에도 불구하고, LSTM은 매우 긴 문장에서 잘 처리할 수 있었다. 아마도 원본 문장의 단어 순서는 바꼈지만, 훈련 & 테스트 셋의 문장은 바뀌지 않았기 때문 아닐까?
- 많은 단기 속성을 도입하여 최적화 문제를 더 단순하게 만들었고, SGD는 긴 문장에도 문제가 없는 LSTM을 학습시킬 수 있었다.
2. The model
1) RNN
- RNN은 입력과 출력 사이의 관계를 미리 알고 있는 경우 시퀀스를 시퀀스에 쉽게 mapping할 수 있다.
- 하지만 문제점은 입력과 출력 시퀀스의 길이가 서로 다르고 복잡한 관계인 방법에서는 명확하지 않다는 점이다.
- 일반적인 시퀀스 학습을 위한 가장 간단략 전략은 다음과 같다. 하나의 RNN을 사용하여 입력 시퀀스를 고정된 크기의 벡터로 mapping 한 이후 다른 RNN을 사용하여 이 벡터를 타켓 시퀀스로 매핑하는 것이다.
- 하지만 이 방법은 장기의존성 문제를 가진다.
- 장기의존성 문제 (Long-term dependency)
: 문장이 길어지면 시퀀스 앞쪽에 있는 단어의 영향이 거의 사라지게 되는데, 이는 1보다 작은 값을 반복적으로 곱하기 때문에 앞의 정보를 뒤까지 전달하기 어려워진다.
2) LSTM
- 장기 기억과 단기 기억, '잊어버림' 추가를 통해 기본 RNN의 장기 의존성 문제를 해결
- LSTM의 목표는 서로 다른 입력 시퀀스와 출력 시퀀스의 조건부확률을 추정하는 것이다.
- 각 p(y1, . . . , yT ′ |x1, . . . , xT ) 분포는 어휘의 모든 단어에 대해 softmax로 표현된다.
- 각 문장은 특수 문장 끝 기호인 <EOS">로 끝난다.
3) Seq2seq2 모델 특성
ㄱ. 입력 시퀀스와 출력 시퀀스에 각각 다른 두 개의 LSTM을 사용한다.
이유는?
: 모델 파라미터 수를 늘리고 여러 언어 쌍에 대해 동시에 LSTM을 훈련하는 것이 자연스럽기 때문이다.
ㄴ. Deep LSTM이 shallow LSTM보다 성능이 월등히 뛰어나다.
: 4계층으로 구성된 LSTM을 선택
ㄷ. 입력 문장의 단어 순서를 뒤집는 것이 매우 유용하다는 것을 발견한다.
- a, b, c : α, β, γ 문장을 c, b, a : α, β, γ로 매핑하도록 요청
- 이렇게하면 a는 α에 가깝고 b는 β에 가깝기 때문에 SGD가 입력과 출력 간에 communication을 쉽게 설정하여 LSTM의 성능을 크게 향상시켰다.
4) Seq2seq2 모델 구조
ㄱ. Encoder
- 임의적 & 시계열 데이터를 받아서 고정길이 벡터 h로 바꿔주는 것이라고 생각하면 된다.
- Enbedding된 input 값을 받아 RNN 계층을 통과
- 마지막 계층의 hidden state를 context vector인 h로 변환
즉, 임의 길이의 시계열 데이터를 고정 길이 벡터 h로 변환한다.
ㄴ. Decoder
- context vector인 h를 중간에서 이어 받아 sequence로 변환
즉, t시점의 출력값을 t+1 시점의 입력값으로 사용한다.
5) Seq2seq 문제점
ㄱ. 정보 손실 문제
: 고정 길이 벡터이므로 아무리 문장의 길이가 길어져도 항상 똑같은 길이의 벡터에 정보를 넣어야 되므로 정보 손실이 발생
ㄴ. 기울기 손실
: RNN의 고질적 문제인 기울기 손실 문제가 여전히 존재
3. Experiments
3.1 Dataset details
- 데이터셋: WMT' 14 English - French dataset (영어 -> 불어 기계번역)
- 3억 4,800만 개의 프랑스 단어와 3억 4,000만 개의 영어 단어로 구성된 1,200개만 개의 하위 집합에 대해 모델 학습
- 16만개의 소스 언어와 8만개의 타켓 언어를 사용해 단어 사전 구성
3.2 Decoding and Rescoring
- 실험의 핵심은 많은 문장 쌍에 대해 대규모 심층 LSTM 훈련
- 부분 가설을 유지하여 left-to-right 빔 서치 디코더를 사용하여 가장 가능성이 높은 번역을 검색한다.
- 각 단계에서 빔의 각 부분 가설을 어휘의 가능한 모든 단어로 확장한다.
- 확장된 가설 중 가장 가능성이 있는 번역이 log 확률에 따라 선택되며, 나머지는 버려진다.
- 빔 크기가 1인 경우일 때 잘 작동되며 빔 크기가 2인 경우에는 빔 서치의 대부분의 이점을 제공한다.
- 훈련이 완료되면, 가장 많은 LSTM에 따른 번역 가능성이 높다.
3.3 Reversing the Source Sentences
- 소스 문장을 뒤집을 때 long term dependency 문제를 해결할 수 있다. 즉, 입력 데이터를 반전하는 것만으로도 학습 속도가 개선시킬 수 있다.
- 이를 통해 test perplexity(낮을수록 좋음)가 5.8에서 4.7로 떨어지고, BLUE score(높을수록 좋음)는 25.9에서 30.6으로 증가하였다.
- 이 현상에 대한 완전한 설명은 없지만, dataset의 많은 단기 종속성이 도입되어 발생하는 것으로 추정된다.
- 입력 데이터를 반전시키면 입력 문장의 첫 부분과 그에 대응하는 변환 후의 단어 사이의 거리가 가까워지기 때문에 기울기 전파가 보다 원활하게 이루어져 학습 효율이 좋아지는 것으로 추정된다.
기존에는 minimal time lag 문제로 인해 소스 문장의 단어들이 그에 상응하는 타켓 문장의 단어와 거리가 멀었다.
하지만 소스 문장의 단어를 뒤집으면, 단어 사이의 평균 간격은 변하지 않지만 처음 몇 단어들이 타켓 문장의 단어와 매우 가깝기 때문에 minimal time lag 문제를 상당히 줄여줄 수 있다.
Seq2seq의 성능 개선 방안으로 위와 같이 입력 데이터 반전 말고도 엿보기
라는 것이 있다. 맨 처음에만 h를 전달 받는 것이 아니라 Decoder에 다른 계층에서도 여러번 h를 전달해준다. 즉, Decoder가 처리할 수 있는 유일한 정보가 모두 담긴 h를 더 많이 활용하기 위해 h를 다른 계층에도 전달해주는 것이다.
3.4 Training details
- 각 Layer에 1,000개의 셀과 1,000개의 차원 단어 Embedding이 있는 4개의 Layer와 160,000개의 입력 어휘와 80,000개의 출력 어휘가 있는 Deep LSTM을 사용
- LSTM 파라미터는 384만개이며, 이 중 64만개(Encoder: 32만개 / Decoder: 32만개) 순수 반복 연결이다.
상세한 부분은 생략하겠다.
3.5 Parallelization
- 8-GPU 머신을 사용하여 모델을 병렬화로 진행
- LSTM의 각 Layer는 서로 다른 GPU에서 실행되었고, 계산이 완료되는 즉시 다음 GPU/Layer에 전달
3.6 Experimental Results
- 결과는 위에 나타냈으며, 가장 좋은 결과는 random initinalizations와 random order of minibatches가 다른 LSTM Ensemble을 사용하여 얻은 것이다.
- 긴 문장에서도 LSTM이 잘 작동하고 성능이 좋다.
3.8 Model Analysis
- Seq2seq는 단어 시퀀스를 고정된 차원의 벡터로 변환할 수 있다는 것이 가장 큰 특징이다.
- 위의 그림은 구문을 처리한 후 LSTM hidden states의 2차원 PCA 투영을 보여준다. 구문은 의미에 따라 분류되고, 두 클러스터의 내부 구조가 비슷하다는 것을 알 수 있다.
- 왼쪽은 문장 길이의 함수로서 시스템의 성능을 보여주며, x축은 '길이별로 정렬된 테스트 문장'에 해당하고 실제 시퀀스 길이로 표시 되어 있다. 35단어 이전에는 성능이 오르다가 그 이후부터는 성능이 저하된다.
- 오른쪽은 점점 더 희귀한 단어가 포함된 문장에 대한 LSTM의 성능을 보여주며, x축은 '평균 단어 빈도 순위'에 따라 정렬된 테스트 문장에 해당된다.
-> 길이가 아무리 길어도 BLUE score가 계속 떨어짐으로 성능이 좋다.
- 입력 문장을 벡터로 mapping 한 다음 다시 문장으로 mapping한 최초의 연구인 Kalchbrenner와 Blunsom와 매우 비슷하다.
- 문장을 벡터로 mapping하고 다시 문장으로 mapping하는 데 LSTM과 유사한 RNN 아키텍처를 사용하였다.
5. Conclusion
- Seq2seq는
Encoder
와 Decoder
그리고 Context h
로 구성된다. 이때 Context h란 고정 길이 벡터
를 의미한다.
- Encoder에서는 임의적인 길이를 고정 길이 벡터 h로 변환하고 Decoder에서는 이를 입력 받아 sequence로 변환한다.
- 성능 개선 방안으로는 먼저,
입력 데이터 반전
이 있었는데, 입력 데이터를 반전시키면 입력 문장의 첫 부분과 그에 대응하는 변환 후의 단어 사이의 거리가 가까워져서 기울기 전파가 보다 원활하게 이루어져 학습 속도가 개선된다. 두번째는 엿보기
가 있었는데, Deocder가 처리할 수 있는 유일한 정보가 모두 담긴 h를 더 많이 활용하기 위해 h를 Decoder의 다른 계층에도 전달한다.
- Seq2seq의 문제점은 먼저,
정보 손실 문제
가 있었다. 고정 길이 벡터이므로 입력 문장의 길이에 관계 없이 항상 같은 길이의 벡터로 변환하였다. 그래서 아무리 문장의 길이가 길어져도 항상 같은 길이의 벡터에 정보를 넣어야 하기 때문에 정보 손실이 발생한다. 두번째는 기울기 소실 문제
가 있었다. RNN의 고질적인 문제가 여전히 존재한다. 그 이후 Attention, Transformer가 나타나게 된 배경이기도 하다.
🎯 Summary
Seq2seq는 자연어처리, 언어인공지능 등에서 많이 활용되는 기초 중의 기초 논문이라고 생각된다. Text-to-Speech (TTS), Speech-to-Text (ASR), Mel-to-Voice(Vocoder), Text-to-Mel(spectrogram) 등 Encoder와 Decoder를 활용하여 정말 많은 곳에서 사용되고 있다. 특히 이 논문은 다음 논문 리뷰인 Attention과 Transformer의 기반이 되기 때문에 논문 리뷰를 자세하게 뜯어봤던 거 같다.
얼마 전, 언어 인공지능 관련 세미나가 있었다. 언어를 텍스트로, 텍스트를 언어로 아니면 텍스트를 텍스트로 등 다양한 기법으로 활용될 수 있다는 점에서 엄청난 매력을 느꼈고, 언어 인공지능도 공부해보면 좋을 것 같다는 생각이 들었다. 추천시스템, CV쪽만 관심 있었는데 다른 분야도 공부하다 보니 더 깊게 공부하고 싶어진다.
다음 리뷰는 Attention과 Transformer이다. 악명 높은 Transformer를 건드려보고 BERT까지 무사히 리뷰할 수 있도록!!! 소망하며!! 오늘은 여기서 마무리하겠다!
📚 References
- (2014) Sequence to Sequence Learning with Neural Networks 논문