본문 바로가기
딥러닝(Deep Learning)/논문 paper 리뷰

[X:AI] Seq2Seq 논문 이해하기

by rahites 2022. 6. 30.

『Sequence to Sequence Learning with Neural Networks. 2014. 』

 

0. Abstract

- 기존의 DNN은 레이블이 지정된 큰 훈련 세트에서는 잘 작동이 되지만 시퀀스에 매핑할 때 사용할 수 없다.

(매핑하다 : 하나의 값을 다른 값으로 대응시킨다)

- 다층 LSTM(Long Short-Term Memory)을 사용하여 입력 시퀀스를 고정 차원 벡터에 매핑하고 다른 deep LSTM을 이용하여 해당 벡터에서 target 시퀀스를 decode하는 방법을 제시할 것이다.

- WMT`14 dataset을 이용해 영어에서 프랑스어로 번역 하는 작업을 수행하였고 LSTM을 이용할 때의 BLEU 점수는 34.8, SMT를 이용할 때의 점수는 33.3점이었다.

- LSTM은 어순에 민감한 문장들과 상대적으로 능동태와 수동태일 때 변화가 없는 문장들로 학습하였다.

- target 문장이 아닌 다른 모든 소스 문장들에서 단어의 순서를 반대로 했을 경우 LSTM의 성능이 현저히 높아진다는 것을 발견하였다. (소스와 target 문장 사이에 많은 short-term dependency가 도입되어 최적화 문제가 더 쉬워지기 때문에)

 

### BLEU Score ###

: 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교하여 번역에 대한 성능을 측정하는 방법 (n-gram 기반) 

https://wikidocs.net/31695

 

3) BLEU Score(Bilingual Evaluation Understudy Score)

앞서 언어 모델(Language Model)의 성능 측정을 위한 평가 방법으로 펄플렉서티(perplexity, PPL)를 소개한 바 있습니다. 기계 번역기에도 PPL을 평가 ...

wikidocs.net

1. Introduction

- DNN의 우수성 (2개의 hidden layer만 사용하여 NxN-bit numbers 를 정렬하는 것, supervised backpropagation로 훈련 가능)

- 하지만 DNN은 input과 target이 고정 차원의 벡터로 encoding되는 문제에만 적용이 가능하다. 많은 중요한 문제들이 사전에 알려지지 않은 시퀀스로 표현되기 때문에 이는 큰 문제가 된다. (음성 인식과 기계 번역, Q&A의 예시)

- 일반적인 sequence to sequence 문제를 해결하기 위한 아이디어는 하나의 LSTM을 이용하여 input sequence를 읽고  큰 고정 차원 벡터를 얻은 후 다른 LSTM으로 해당 벡터에서의 output sequence를 추출하는 것이다. 입력과 출력 사이의 상당한 시간 지연이 존재하는 LSTM의 특징으로 장거리 시간 종속성을 가진 데이터에 강한 모습을 보이기 때문에 이 애플리케이션에 잘 어울린다.

Figure 1 : LSTM Architecture

- 모델은 input 문장 'ABC'를 읽고 'WXYZ'라는 output 문장을 생성한다. 모델은 문장 끝에 있는 token을 출력한 뒤 예측을 중지한다. 최적화 문제를 더 쉽게 만드는 데이터에 많은 단기 종속성을 도입시키기 위해 LSTM은 입력 문장을 반대로 읽는다.

- 작업은 Abstract에서 언급했듯이 WMT`14 dataset을 이용해 영어를 프랑스어로 번역하는 것으로 진행되었고, 왼쪽에서 오른쪽으로의 beam search decoder를 사용한 5개의 심층 LSTM의 앙상블에서 번역 직접 추출한 결과 34.81이라는 BLEU 점수를 얻었다.

- 동일 데이터 세트에 대한 SMT baseline의 BLEU 점수는 33.30으로 상대적으로 최적화되지 않은 small-vocabulary 신경망 아키텍처가 phrase 기반의 SMT 시스템보다 우수한 성능을 보인다는 것을 확인할 수 있다.

- 마지막으로 LSTM을 사용하여 공개적으로 사용가능한 1000개의 SMT baseline을 재채점 하여 36.5라는 BLEU 점수를 얻었다.

  (이전에 발표된 최고 결과 37.0보다 0.5 정도 낮지만 간단한 LSTM 구조가 최적화된 SMT 구조와 비슷한 성능을 낸다는 점에 주목)

- LSTM의 놀라운 점은 매우 긴 문장에도 어려움을 겪지 않는다는 것이다. training과 test set에서 target sentence가 아닌 source sentence의 단어 순서만 뒤집었기 때문에 긴 문장에서도 좋은 성능을 낼 수 있었다. (많은 단기 종속성을 도입할 수 있기 때문)

- LSTM의 유용한 속성은 가변 길이의 입력 문장을 고정 차원의 벡터로 매핑하는 방법을 학습한다는 것이다.  translation이 source sentence를 paraphrase하는 경향이 있기 때문에 번역의 목표는 LSTM이 의미를 포착하는 문장 표현을 찾도록 만든다.

 

2. The model

- RNN(Recurrent Neural Network)은 feedforward neural network를 sequence로 자연스럽게 일반화한 것이다. input sequence가 주어지면 표준 RNN은 아래의 방정식을 반복하여 output sequence를 계산한다.

- RNN은 input과 output간의 정렬이 미리 알려질 때마다 sequence를 sequence에 쉽게 매핑할 수 있지만, input sequence와 output sequence의 길이가 다른 문제에 RNN을 적용하는 것은 좋지 않다.

- 하나의 RNN을 사용하여 input sequence를 고정 크기 벡터에 매핑하고 다른 RNN을 이용하여 해당 벡터를 target sequence에 매핑하는 것이 일반적인 sequence 학습에 사용되는 간단한 전략인데, 이 때 장기 종속성으로 인해 RNN 대신 LSTM을 사용하는 것이 이 세팅에서 성공할 수 있었다.

- LSTM의 목표는 input으로 받은 $x_1,  ... , x_r$를 마지막 hidden state를 거쳐 예측한 $y_1, ... , y_r$의 조건부 확률을 최대화 하는 것이다.

- 위의 방정식에서 $P(y_t|v, y_1, ... , y_{t-1})$의 분포는 모든 단어의 softmax로 표현된다. 

- 각 문장은 특별한 문장 끝 기호인 <EOS>로 끝나야 하며, 이 기호를 사용하면 모델이 가능한 모든 길이의 시퀀스에 대한 분포를 정의할 수 있다. Figure 1에서 볼 수 있듯이 A, B, C, <EOS>로 W, X, Y, Z, <EOS>의 확률을 계산하는 구조이다.

 

* 최종적으로 논문의 저자가 사용한 실제 모델

1. 2가지의 다른 LSTM을 사용, 하나는 input sequence 용도이고 다른 하나는 output sequence 용도이다. 

2. 4-layer의 deep LSTM을 사용하였다. (deep LSTM의 성능이 shallow LSTM의 성능보다 훨씬 좋았기 때문)

3. input sentence의 순서를 반대로 하는 것이 매우 가치 있음을 발견하였다. 예를 들어 문장 a, b, c를 mapping하는 것이 아니라 c, b, a를 mapping하는 것이다.

 

3. Experiments

3.1. Dataset Details

- WMT`14 English to French dataset을 사용해 3억 4800만개의 프랑스어 단어와 3억 400만개의 영어 단어로 구성된 1200만개의 문장들의 부분 집합으로 모델을 훈련하였다. 가장 많이 나오는 단어 중 16만개를 source language에, 8만개를 target language에 사용하였다. 어휘에 없는 단어는 UNK 토큰으로 대체하였다.

 

3.2. Decoding and Rescoring

- 실험의 핵심은 많은 문장 쌍에 대해 large deep LSTM을 훈련하는 것으로 source sentence S가 주어졌을 때 정확한 번역 T의 로그 확률을 최대화 하여 훈련시켰다. T는 correct translation, S는 source sentence(training set)로 training이 끝나면 LSTM에 따라 가장 가능성이 높은 번역을 찾아 생성한다. ( argmax )

training objective

- beam search decoder를 사용하여 가장 가능성이 높은 번역을 탐색하고, 각 단계에서 vocabulary에서 가능한 모든 단어로 beam의 부분 가설을 확장한다. 이는 가설의 수를 크게 증가시키기 때문에 모델의 log probability에 따라 가능성이 가장 높은 B를 제외한 모든 가설들을 버린다. 이 때 <EOS> 기호가 가설에 추가되면 즉시 beam에서 제거되고 완전한 가설에 추가한다. 이 시스템은 beam의 크기가 1인 경우에도 잘 수행되고 크기가 2인 경우에는 대부분의 beam 검색 이점을 제공한다. 

- 또한 LSTM을 사용하여 baseline 시스템에서 생성된 1000개의 best  list들을 재채점 하였고 모든 가설의 로그 확률을 계산, 해당 점수와 LSTM의 점수로 even average를 취하였다.

 

### Beam Search ### 

: 자연어 생성을 할 때 모델은 전체 단어 사전에 대한 확률 분포를 예측하는데 이 분포를 decode하기 위해서는 예측한 확률 분포에 따라 가능한 모든 output sequence의 조합을 Search해야 한다. 기본적인 Seq2Seq 모델에서는 Greedy Decoding 방식을 따르는데 이 방식은 단순히 생성된 확률 분포에서 가장 값이 높은 토큰을 선택하는 방식이다. 직관적이고 시간이 적게 걸리는 방법이지만 가장 높은 값만을 고려하기 때문에 두 번째로 값이 높은 토큰과 차이가 적어도 이를 고려하지 않는 문제 등이 존재한다. 

 

: Beam Search는 이러한 Greedy Decoding의 단점을 극복해 각 스텝마다 가장 확률이 높은 k개의 토큰을 선택하는 방식이다. step 1에서 높은 확률을 가지는 상위 k개의 토큰(beam)을 선택하고, 각각의 토큰에서 다음 예측 값의 확률이 높은 상위 k개의 토큰을 선택한다. 이 때 만들어진 k$^2$개의 자식 토큰 중 누적 확률(확률의 곱) 순으로 다시 상위 k개를 뽑아주고, 뽑힌 상위 k개의 자식 토큰을 기준으로 다시 다음 예측 값에서 상위 k개의 토큰을 뽑는다. 이 과정을 <eos> 를 만난 빔이 k개가 될 때 까지 반복해주고, 하나의 빔이 <eos>를 만날 경우 해당 빔을 최종 선택 후보에 올리고 다음 k+1위 였던 빔을 활성화 시켜 계속 k개의 빔을 유지한다. 

 

: Beam Search는 누적 확률을 기준으로 계산되는데 이로인해 곱할 수록 크기가 작아지게 된다. 따라서 빔의 길이가 길어질 수록 누적 곱의 값이 작아지게 되는 데 이에 대한 Lengh Penalty를 고려하여 확률 값에 자연로그를 취해 사용해 준다. 

https://littlefoxdiary.tistory.com/4

 

자연어 생성에서의 Beam Search / 파이썬으로 Beam Search 구현하기

자연어 생성 모델 자연어 생성은 단어들의 시퀀스를 아웃풋으로 예측해내는 태스크이다. 일반적으로 생성 모델은 각각의 디코딩 타임 스텝에서 전체 단어 사전에 대한 확률 분포를 예측한다.

littlefoxdiary.tistory.com

https://blog.naver.com/PostView.nhn?blogId=sooftware&logNo=221809101199&from=search&redirect=Log&widgetTypeCall=true&directAccess=false 

 

[Sooftware 머신러닝] Beam Search (빔서치)

Machine Learning: Beam Search (+ Implementation by PyTorch) "Sooftware" 이 글은 제...

blog.naver.com

3.3. Reversing the Source Sentences

- 장기 종속성 문제를 해결할 수 있는 LSTM을 사용해 source sentence를 뒤집어서 학습할 때 test perplexity는 5.8에서 4.7로 떨어졌고 test BLEU 점수는 25.9에서 30.6으로 높아졌다.

- 이는 데이터 세트에 많은 short term dependency가 도입되었기 때문이다. 일반적으로 source sentence와 target sentence를 연결할 때 각각의 source sentence의 단어는 target sentence의 단어와 멀리 떨어져 있고, source sentence의 문장을 뒤집더라도 source language와 target language 사이의 평균 거리는 변경되지 않는다. 하지만 이 때 source language의 처음 몇 단어는 target language의 처음 몇 단어에 매우 가깝기 때문에 역전파 과정에서 source sentence와 target sentence간의 communication을 더 쉽게 설정할 수 있어 전반적인 성능이 크게 향상된다. (Gradient가 더 잘 전달된다)

 

3.4. Training details

- 4 layers deep LSTM을 사용하였고 각 layer에는 1000개의 cell, 1000차원의 단어 임베딩, 16만개의 input 어휘, 8만개의 output 어휘가 있다. deep LSTM이 shallow LSTM보다 좋은 성능을 보였고 각각의 추가 layer는 perplexity를 10%가량 감소시켰다. 각 output에서 8만 단어가 넘는 naive softmax 함수를 사용하였다.

 

1. -0.08 ~ 0.08 사이로 parameter 초기화

2. learning rate가 0.7인 stochastic gradient descent 사용. 5 epoch 이후 epoch의 절반마다 학습률을 절반으로 줄여 총 7.5 epoch동안 모델을 훈련

3. batch size = 128

4. exploding gradient가 일어날 수 있어 기울기의 규범이 임계값을 초과할 때 엄격한 제약을 적용

 

3.5. Parallelization

- 단일 GPU를 사용할 경우 너무 느리기 때문에 8-GPU를 사용하여 모델을 병렬화 하였다.

- 128개의 미니 배치 크기로 초당 6300단어를 처리하였고 교육에 약 10일 정도가 걸렸다.

 

3.6. Experimental Results

- 랜덤 초기화와 미니 배치의 랜덤 순서가 다른 LSTM 앙상블에서 가장 좋은 결과를 얻을 수 있었다. 최고의 WMT`14 시스템의 성능을 넘지는 못하지만 pure neural translation system이 대규모 MT 작업에서 phrase기반의 SMT baseline을 상당한 차이로 넘는 것이 처음이다. LSTM은 1000-best list를 rescoring하는 데 사용되는 경우 SOTA 모델과 0.5점 밖에 차이가 나지 않는다.

Table 1 : WMT`14 테스트 세트(ntst14)에 대한 LSTM의 성능
Table 2 : WMT'14 테스트 세트(ntst14)에서 SMT 시스템과 함께 신경망을 사용하는 방법.

 

3.7. Performance on long sentences

- LSTM은 긴 문장에서도 잘 작동한다. (Figure 3, Table 3 참고)

 

3.8. Model Analysis

Figure 2 : LSTM hidden state의 PCA projection

- 위 그림은 단어의 순서에 민감한 반면, 능동태를 수동태로 바꾸는데 있어 상당히 둔감하지만 단어의 순서에 민감하다는 것을 보여준다. 

Table 3 : LSTM에 의해 생성된 긴 번역의 몇가지 예시
Figure 3 : 왼쪽 그림은 문장 길이의 함수로 시스템의 성능을 보여줌, x축은 길이별로 정렬된 테스트 문장에 해당하며 실제 sequence의 길이로 표시된다. 35단어 미만의 문장에서는 성능 저하가 없으며 가장 긴 문장에서의 약간의 성능 저하가 엿보인다. 오른쪽 그림은 점진적으로 더 희귀한 단어가 포함될 때 LSTM의 성능을 나타낸다. 여기서 x축은 "평균 단어 빈도 순위"로 정렬된 test sentence를 의미한다.


세 줄 요약

1. DNN이 고정된 차원의 벡터 input, output에서만 encoding할 수 있다는 단점을 극복한 LSTM 구조 제안
2. seq2seq의 기본적인 구조는 encoder - decoder 구조로 각각 4-layer LSTM을 사용
3. input sentence를 뒤집어서 학습할 때 성능이 높아졌고 긴 문장에서도 잘 학습된다는 것을 확인

 

 

댓글