# Sequence to Sequence

{% embed url="<https://arxiv.org/abs/1409.3215>" %}

## 1. Abstract & Introduction

1. Deep Neural Network(DNN)은 다양한 Task에서 훌륭한 성능을 내는 모델이지만 Seq to Seq Mapping은 할 수가 없었다.
2. 본 논문에서는 LSTM을 사용한 Encoder와 Decoder를 구성함으로써 문제를 해소하고자 하였다.
3. WMT-14 dataset에 대하여 영어를 불어로 변역하는 Task로 점수를 매겨본 결과 기존 기계번역에 사용하던 SMT 모델(33.3 BLEU Score) 보다 더 좋은 성능(34.8 BLEU Score)을 낼 수 있었다.
4. LSTM을 활용하여 SMT 모델로 추론한 1000개의 가설을 재배열 하였더니 성능이 36.5까지 향상되었다. (현 최고점은 37점)
5. 단어의 순서를 거꾸로 하였을 때 LSTM의 성능이 향상되었다. 단어의 순서를 거꾸로 함으로 만들어지는 많은 short term dependency는 source 와 target sentence의 최적화 문제를 쉽게 만들었기 때문이다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5ZRY8nBLiO_voRY_c%2F-Mk5bBZZgAbCzRBTt2Da%2Fimage.png?alt=media\&token=7222c58d-1c63-4ea1-a031-e585f207856d)

기존 RNN 기반 모델의 경우 위와 같이 형성되어 하나의 input에 각각 결과하고 hidden state를 다음 layer로 전달하며 결과를 얻어낸다. 영어와 한글 사이의 문법으로 인해 $$x\_2, x\_3$$ 이 $$y\_3, y\_2$$로 매핑이 될 수 없는 한계를 가지고 있다. 이런 한계를 Encoder와 Decoder 두개의 RNN구조로 나누어서 학습할 수 있도록 한다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5ZRY8nBLiO_voRY_c%2F-Mk5bOPTPwOR9za-7IJ-%2Fimage.png?alt=media\&token=a697c22f-45de-4127-b071-731f3c03e44f)

즉, Input Data를 Encoder에 넣어 전체적인 문장의 의미를 가지는 Context Vector를 구하고, 이 구해진 Context Vector로 부터 Decoder가 번역결과를 추론합니다.

## 2. The Model

기존 RNN은 아래와 같이 입력값 $$(x\_1, ..., x\_T)$$에 대해서 출력값 $$(y\_1, ..., y\_T)$$을 가지는 수식을 갖는다.

$$h\_t = sigmoid(W^{hx}x\_t + W^{hh}h\_{t-1})$$

$$y\_t =W^{yh}h\_t$$

입력 문장의 크기와 출력 문장의 크기가 다르면 위와 같이 처리가 어렵다.\
check) RNN은 Long-Term Dependency를 처리하기 어렵다는 문제가 있어 LSTM 기법을 활용하였다.

$$p(y\_1, ..., y\_{{T}'}\mid x\_1, ..., x\_{{T}}) = \prod\_{t=1}^{{T}'}p(y\_t \mid v, y\_1, ...,y\_{t-1})$$

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5ZRY8nBLiO_voRY_c%2F-Mk5chRBk3J5PxklXypi%2Fimage.png?alt=media\&token=6109f86f-0c5a-4d5b-b46e-f0f0cbcdd8c8)

* $$x\_t$$: 현재까지의 입력단어
* $$h\_t$$: 지금까지 입력된 문장에 대한 정보를 담은 벡터 표현
* $$s\_t$$: 지금까지 출력된 문장에 대한 정보를 담은 벡터 표현
* $$y\_t$$: 현재의 출력 단어
* $$v: x\_1, ..., x\_{T}$$ 에 대한 정보를 담은 벡터표현

**※ 특징**

* Encoder 파트와 Decoder파트는 서로 다른 LSTM로 구성되어 있다.

  ⇒ 작은 계산 비용의 증가로 Parameter의 수를 증가시킬 수 있다.
* 총 4개의 Layer를 가지는 LSTM을 사용한다.

  ⇒ 모델의 capacity가 커진다. 너무 깊게 쌓으면 비용이 증가할 수 있다.
* 단어순서를 바꾸는 것이 성능을 향상시켰다.

## 3. Experiment

* **WMT’14의 English to French dataset으로 실험을 진행했다. source / target language 각각에 fixed size vocabulary를 사용했다 (source: 160,000 / target: 80,000). OOV는 “UNK” token으로 대체된다.**
* **일반적인 Decoding과 Rescoring**
  * $$1/\left | S \right| = \sum\_{(T,S)\in S}log{p(T \mid S)}$$, \[$$S:$$ Source Sentence, $$T:$$ Target Sentence]
  * $$\hat{T} = \underset{T}{arg max} \ p(T\mid S)$$
  * beam search 기법 사용
* **문장의 입력을 Reverse함으로써 long sequence에서는 source sentence를 BLEU score가 25.9에서 30.6으로 증가했다.**
* **학습 Hyperparameters**

  * deep LSTMs with 4-layers
  * embedding size : 1,000 dim
  * LSTM init : uniform distribution(-0.08 \~ 0.08)
  * SGD without momentum
  * learning rate : 0.7
  * After 5 epoch, halving(이등분) learning rate every half epoch until 7.5 epochs
  * batch size : 128

  check) 비슷한 길이의 문장끼리 묶음으로써 두배의 학습 속도 향상을 내었다.

## 4. Experimental Results

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5dIUMm69-KHPi7_x4%2F-Mk5ducfCfYzwAm8PeNz%2Fimage.png?alt=media\&token=2937e2ea-b414-44d3-8324-3d4801b24b08)

* Baseline 모델보다 충분히 나은 성능을 확인할 수 있다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5dIUMm69-KHPi7_x4%2F-Mk5e2NNxOStW2apKt79%2Fimage.png?alt=media\&token=92f4dbba-1bdb-4968-844d-c8219c2037cd)

* LSTM과 SMT를 함께 사용했을 때 36.5로 준수한 성능을 확인할 수 있다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5dIUMm69-KHPi7_x4%2F-Mk5e8abGL3B7xLube66%2Fimage.png?alt=media\&token=e95fa31b-e7b4-4f61-ac07-6e0fbb0d2a5c)

* 비슷한 내용끼리 분류된 것을 확인

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MjcKlzGhHYe2bvmxTwS%2F-Mk5dIUMm69-KHPi7_x4%2F-Mk5eFirq6hEcd94RJnv%2Fimage.png?alt=media\&token=40a50577-cb92-4998-a623-08032f9919d9)

## 다음으로 읽어볼 논문

{% embed url="<https://arxiv.org/abs/1409.0473>" %}

{% embed url="<https://arxiv.org/abs/1706.03762>" %}

## Reference

{% embed url="<https://cpm0722.github.io/paper-review/sequence-to-sequence-learning-with-neural-networks>" %}

{% embed url="<https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice>" %}

{% embed url="<https://www.youtube.com/watch?v=4DzKM0vgG1Y&t=1755s>" %}

{% embed url="<https://coshin.tistory.com/47>" %}
