본문 바로가기

AI/NLP Paper

[NLP] Sequence to Sequence Learning with Neural Networks 리뷰

Abstract

DNN은 large labeled training set을 이용하여 학습을 가능하게 해 줬지만, sequence를 sequence로 표현하는 데는 사용되지 않았습니다.

 

이에 논문에서는 sequence 학습에 대한 end-to-end방법을 소개합니다.

 

멀티 레이어 LSTM을 사용하여 input sequence를 하나의 고정 길이 벡터로 표현하고, 다른 LSTM을 이용하여  표현된 벡터로부터 target sequence를 decode 합니다.

 

LSTM은 긴 문장에서도 어려움 없이 동작합니다. 그리고 단어 순서에 민감하고 능동적 및 수동적 표현에 상대적으로 강건한 구와 문장 표현을 학습했습니다.

 

마지막으로 source sentence의 단어 순서를 뒤집는 것이 LSTM의 성능을 크게 향상하는 것을 발견했습니다.

 

Introduction

DNN은 아주 강력한 머신러닝 모델이지만 input과 target벡터의 차원을 미리 알고 있어야 하고 또 그 크기가 고정되어 있어야 한다는 문제 때문에 sequence to sequence에서는 적용되기가 힘들었습니다.

 

이를 장기 의존적인 데이터를 학습할 수 있는 능력을 가진 LSTM을 적용한 end-to-end application을 통해 해결할 수 있었습니다.

 

또한 source sentence의 단어 순서를 뒤집음으로써 SGD가 긴 문장에 대해서도 잘 수행되어 최적화 문제를 해결할 수 있었습니다.

 

뿐만 아니라 정성적인 평가를 통해 LSTM을 적용한 모델이 단어의 순서에 대한 정보를 파악하고, 능동적 표현과 수동적 표현에 대해서 상당히 강건하다는 것을 보였습니다.

 

The model

기본적인 RNN은 $x_1, \cdots, x_T$가 input으로 주어질 때 $y_1, \cdots, y_T$를 다음 수식으로 계산합니다.

$$h_t = \sigma(W^{hx}x_t + W^{hh}h_{t-1})$$

$$y_t = W^{yh}h_t$$

RNN은 input과 output에 대한 alignment를 미리 알고 있어야 sequence to sequence를 쉽게 mapping 할 수 있습니다. 하지만 input과 output의 길이가 다른 경우에는 문제가 발생합니다. 또한 장기 의존성 문제 때문에 RNN의 훈련이 힘들어지게 됩니다.

 

이러한 문제 해결을 위해 LSTM을 사용합니다.

 

 

LSTM의 목표는 input sequence $(x_1, \cdots, x_T)$에 대해 output sequence $(y_1, \cdots, y_{T^\prime})$의 조건부 확률 $p(y_1, \cdots, y_{T^\prime} | x_1, \cdots, x_T)$를 추정하는 것입니다. (단, $T$와 $T^\prime$는 다릅니다.)

 

조건부 확률을 계산할 때 LSTM에서는 먼저 input sequence $(x_1, \cdots, x_T)$를 고정된 차원의 벡터 $v$로 표현합니다.

 

그리고 이 $v$를 초기 hidden state로 하여 확률을 구하게 됩니다. 식은 아래와 같습니다.

$$p(y_1, \cdots, y_{T^\prime} | x_1, \cdots, x_T) = \prod_{t=1}^{T^\prime} p(y_t | v, y_1, \cdots, y_{t-1})$$

위 식에서, 각 $p(y_t | v, y_1, \cdots, y_{t-1})$의 분포는 단어장의 모든 단어를 이용한 softmax를 사용하여 표현됩니다. 

 

또한 각 문장의 마지막에는 <EOS>라는 끝을 나타내는 특별한 토큰이 필요합니다. 

 

Figure 1의 전체적인 구조는 모델이 'A', 'B', 'C', '<EOS>'를 표현하는 벡터를 계산하고, 그 벡터를 이용하여 'W', 'X', 'Y', 'Z', '<EOS>'의 확률을 계산하는 것입니다.

 

실제로 논문에서 사용된 모델은 위의 설명과 3개의 중요한 차이점이 있습니다.

  1. 두 개의 다른 LSTM을 사용(인코더 LSTM, 디코더 LSTM). 이는 계산 비용 거의 없이 모델의 파라미터수를 늘렸고, LSTM을 다중 언어에 대해 동시에 훈련할 수 있게 만듦.

  2. 멀티 레이어 LSTM을 사용함(4개의 레이어 사용)

  3. input sentence의 순서를 뒤집음.

    예를 들면 초기에 $a, b, c$를 통해 $\alpha, \beta, \gamma$를 예측하는 모델에서 

    $c, b, a$를 통해 $\alpha, \beta, \gamma$를 예측하도록 바뀜.

    이를 통해서 SGD를 쉽게 해 줬고 이는 성능 향상으로 이어짐

 

Experiment

Decoding and Rescoring

LSTM을 훈련할 때 주어진 $S$에 대한 번역 $T$의 로그 확률을 최대로 하도록 학습했습니다. 이때의 목적함수는 다음과 같습니다.

$$\frac{1}{|S|}\sum_{(T, X) \in S}\log p(T|S)$$

여기서 $S$는 training set입니다. 

 

훈련이 한 번 완료될 때마다, 가장 번역이 잘 된 문장을 생성합니다.

$$\hat{T} = arg \max_T p(T|S)$$ 

간단한 left-to-right beam search decoder를 통해 가장 최적의 번역을 찾습니다. 이때의 beam size는 $B$로 둡니다.

 

여기서 beam search란 계산된 확률에서 가장 확률이 높은 '단 하나'를 찾는 것이 아니라 미리 설정해준 beam size $B$를 이용해서 가장 확률이 높은 상위 $B$개를 골라서 예측을 이어가는 것입니다.

 

https://littlefoxdiary.tistory.com/4

 

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

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

littlefoxdiary.tistory.com

 

beam search를 진행하다가 <EOS>를 예측하면 그 순간 더 이상 예측을 하지 않고 완성된 문장 목록에 추가합니다. 

 

논문에서 소개된 모델은 beam size가 1일 때도 잘 동작하지만, beam size가 2일 때 성능이 아주 좋다고 합니다.

 

Reversing the Source Sentences

보통, source sentence를 target sentence와 concatenate 하면 대응되는 단어들이 멀리 떨어지게 됩니다. 

그림 1

(source 단어와 target 단어 사이에 있는 단어의 수를 거리로 가정하겠습니다.)

 

source의 순서를 뒤집으면 아래와 같아집니다.

그림 2

이때의 평균 거리를 각각 구해보면

  1. 그림 1에서의 단어들 사이의 평균 거리 : $(2 + 2 + 2) / 3 = 2$
  2. 그림 2에서의 단어들 사이의 평균 거리 : $(4 + 2 + 0) / 3 = 2$

이처럼 평균 거리는 변하지 않습니다. 하지만 $a$와 $\alpha$가 가장 가까워지고 $b$와 $\beta$가 그다음으로 가까워지는 등 source와 target의 위치에 변화가 생깁니다. 이는 minimal time lag문제를 획기적으로 감소시킵니다. 따라서 역전파가 더 쉬워지고 이는 성능 향상으로 이어집니다.

 

처음에 이러한 방법을 이용하면 초반 단어에 대해서는 예측을 잘하고 나중에 나오는 단어는 예측을 잘 못할 것이라 예상했는데, 걱정과는 다르게 긴 문장에서도 뒤집는 방법을 택했을 때 성능이 향상됐습니다.

 

이는 문장을 뒤집어서 학습시키는 게 LSTM의 메모리 활용에 도움을 줬기 때문인 것 같습니다.

 

Training details

다음은 훈련을 진행할 때 모델의 파라미터나 다른 조건에 대한 내용입니다.

  • 4 layer LSTM 사용(layer마다 1000개의 cell, 1000차원의 벡터로 단어 임베딩)
  • LSTM의 파라미터를 $-0.08 \sim 0.08$ 사이의 균등 분포를 이용해서 초기화
  • SGD(without momentum) 사용. 초기 학습률은 0.7로 고정했지만 5 에폭 이후 0.5 에폭마다 학습률 절반으로 줄이면서 학습 진행. 총 7.5 에폭의 훈련 진행
  • 미니 배치 사이즈 128
  • exploding gradients문제 해결을 위해 $g = \frac{5g}{s}$ If s > 5 (단, $s = ||g||_2$)
  • 미니 배치 내에는 전부 같은 길이의 문장이 들어가도록 제어해줌. 이 방법을 통해 학습 속도 2배 향상.

다음은 결과입니다.

 

Conclusion

이 논문에서는 단어장의 개수에 제한을 둔 large deep LSTM모델이 SMT 기반의 모델보다 성능이 뛰어남을 보였습니다.

 

또한 source sentence를 뒤집음으로써 번역의 성능을 더 향상할 수 있음을 보였습니다.

 

뿐만 아니라 LSTM이 아주 긴 문장에 대해서도 정확하게 해석할 능력이 있다는 것을 보였습니다.

 

가장 중요한 것은, 비록 덜 최적화된 방법이지만 간단하고 end-to-end 방식의 접근법이 완성된 SMT시스템보다 뛰어난 성능을 보였다는 것입니다.