[논문 리뷰] Sequence to Sequence Learning with Neural Networks
인트로 / seq2seq은 어텐션 모델의 시초의 시초로 평가받습니다. 어텐션과 트랜스포머를 잘 이해하기 위해 이 논문을 읽어보았습니다.
핵심 단어 / 어텐션(리뷰를 한 목적과는 달리 기본 seq2seq에선 나오지 않습니다. 이에 대해서는 [2014]Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation 혹은 [2015] Neural Machine Translation by Jointly Learning to Align and Translate(https://arxiv.org/abs/1409.0473) 혹은 [2017] Attention Is All You Need(https://arxiv.org/abs/1706.03762)을 읽으면 좋을 것 같습니다.), 빔 서치, 버케팅(문장의 길이를 맞춰줍니다), 뒤집기, eos 토큰의 도입
느낀 점 / 논문은 쉽게 읽혔으나 강의와는 달리 정보량이 부족하다는 느낌을 받았습니다. 다양한 학습 루트와 paperswithcode의 중요성을 체감했습니다.
0. 요약
DNN은 강력하지만 길이가 다른 시퀀스에는 동작하지 않습니다. 우리는 lstm 2개를 사용한 모델을 제안하고 성능이 좋았음을 밝힙니다.
1. 인트로
심층 신경망은 매우 강력한 모델입니다. 라벨이 붙은 데이터셋으로 학습을 하면 더욱 그렇습니다. 문제는 dnn은 고정된 차원으로 적절히 인코딩되는 인풋&타겟에만 적용될 수 있다는 점입니다. 대부분의 문제는 길이를 모르는 시퀀스로 주어지기 때문에 더욱 그렇습니다.
이 논문에서 제시하는 해결책은 lstm 하나를 써서 인풋을 읽고, lstm 하나를 써서 아웃풋을 출력하는 것입니다. (유사연구 주석 18, 5, 10, 2, 11)
lstm이 rnn보다 장기의존이 가능하기 때문에 lstm을 썼습니다. WMT 14 영어-불어 번역 과제에서 34.81 블루 스코어를 받았고 신경망을 활용한 점수 중 최고입니다. 베이스라인 smt(statistical machine translation)이 만든 1000개의 후보군을 재채점한 것을 활용한 결과는 36.5로 sota에 근접한 결과를 받았습니다.
타겟이 아닌 소스 문장을 뒤집어서 넣음으로써 긴 문장도 잘 학습할 수 있었습니다.
lstm을 씀으로써 고정된 벡터로 변환할 수 있었습니다.
2. 모델
rnn은 입력 시퀀스와 출력 시퀀스를 잘 연결시킬 수 있지만 서로 길이가 다르면 어려움을 겪습니다. (rnn 블럭이 있기 때문에 인풋 벡터의 개수와 동일 개수의 아웃풋 벡터를 출력함) 또한 장기의존 문제도 겪습니다.
그에 비해 lstm은 길이가 다르더라도 인풋 시퀀스를 고정된 차원의 벡터로 변환 후 이것의 마지막 time step의 히든 스테이트를 다른 lstm에 넘겨준 후 계산할 수 있습니다.(히든 스테이트만 넘어온다면 디코더 lstm의 블럭은 계속해서 늘릴 수 있음. 자기 자신의 전 타임의 출력을 현재 타임의 입력으로 받아서.)
중요 차이점은 3가지입니다. 인풋과 아웃풋에 lstm을 각각 하나씩 썼다는 점, 깊은 4층의 lstm을 썼다는 점, 인풋의 순서를 뒤집었다는 점.
3. 실험
3.1 데이터셋 디테일
wmt14 영어-불어는 이것을 활용한 공개 결과가 많기 때문에 사용했습니다.
3.2 디코딩과 rescoring
lstm의 훈련 방법은 log prob을 최대화하는 것입니다. 이 과정에서 빔서치 k=2가 활용됐습니다. 또한 smt 베이스라인의 1000개 후보군을 재채점해서 활용했습니다.
3.3 소스 문장 뒤집기
뒤집었더니 성과가 좋아졌습니다. 추측은 다음과 같습니다. 'a b c d', 'A B C D'가 있으면 aA, bB, cC, dD의 거리는 평균4, 최소4가 됩니다. 그러나 뒤집으면 1, 3, 5, 7로 평균은 동일하지만 최소 거리는 줄어들고 단기의존 덕에 첫 단어들은 잘 예측할 수 있게 됩니다. 또한 더 나은 기억 활용의 덕인지 연구진의 예상과 달리 마지막 단어들도 잘 예측을 합니다.
3.4 트레이닝 디테일
lstm을 4레이어, 1000셀, 1000 워드 임베딩, 인풋 보캡 160000, 아웃풋 보캡 80000으로 설정했습니다. 파라미터 초기화는 균등분포, sgd without momentum, 기울기 폭발을 막기 위해 기울기 norm에 hard constraint를 사용, 문장들의 길이가 다르기 때문에 1개의 배치 속에서는 문장의 길이가 엇비슷하게 해서 속도 증가(버케팅).
3.5 병렬화
레이어 4개에 대해 gpu 8개 사용했고 총 시간은 10일 걸렸습니다.
3.6 실험 결과
성적이 신경망 중에서는 가장 좋습니다. smt 베이스라인을 활용하면 더 좋아져서 sota에 근접합니다.
3.7 긴 문장에 대한 퍼포먼스
베이스라인과 비교했을 때 퍼포먼스가 좋습니다.
3.8 모델 분석
히든 스테이트 벡터들의 pca 이후 2d 투영을 해본 결과 비슷한 의미의 문장이 비슷한 좌표에 위치합니다. 우리는 문장을 고정된 벡터로 잘 변환할 수 있습니다. 수동태, 능동태도 잘 인식합니다.
4. 관련 작업물
신경망을 기계번역에 활용하는 작업물이 많습니다.
5. 결론
최적화가 안 되었는데도 번역에서 좋은 성과를 보였고 다른 과제에서도 좋은 성과를 보일 것 같습니다(여기서 최적화란, 번역&감정분석&빈칸채우기&이진분류 등의 다양한 과제에 대체하기 위해서 모델을 살짝 바꾸는 행위를 뜻함. bert처럼. 지금은 딱히 번역을 위해 모델을 바꾸진 않았지만 성적이 좋다.)
문장 순서를 뒤집는 것의 성능 향상에 대해 놀랐습니다.
lstm이 긴 문장도 잘 번역을 하는 것에 놀랐습니다. 뒤집어서 그런지 잘 했습니다.
6. 감사의 말