---
# System prepended metadata

title: Sequence to Sequence Learning with Neural Networks
tags: [deep learning, paper notes]

---

# Sequence to Sequence Learning with Neural Networks
###### tags: `paper notes` `deep learning`

[Paper Link](https://arxiv.org/abs/1706.03762)

---


## Intro

* DNN Model最近在Object detection和Speech recognition都獲得很棒的結果, 但DNN之所以強大是因為這些模型都可以利用**平行運算**讓整個訓練過程有效率地進行。
* 若能有一個能map seq2seq的Domain-indepentent方法會很有用, 因為大部分的問題的input和output都不是fixed的而且unknown
  * ex:機器翻譯和語音辨識還有QA 
* 這篇裡面利用一個LSTM來讀input sequence (當Encoder) 再用另一個LSTM來提取這些Sequence (當Decoder)
  * 第二個LSTM基本上是一個RNN的LM
  * LSTM一個有用的特性是可以將variable的input sentence map成一個fixed-dimensional的vector representation，而這正能解決最近的困境
 ![](https://i.imgur.com/XawM5uF.jpg)
* 意外的是LSTM在這裡的表現沒有因為Long Sentence而變差, 是因為這篇有將input sequence的順序顛倒拿來train
  * **這是這篇的主要貢獻之一**


### What is Bean search?

* Beam Search?
  * 一個可以拿來測試Seq2Seq model Decoder的演算法 
  * 取代Greedy algo
    * Greedy會將當前預測表中機率最大的詞作為下一個詞的預測去輸出
  * Beam search是一次考慮多個詞在一起會是下一句的機率，並找出總合機率最大的那群(Beam) 
    * 實際做法是Beam search一次選擇多個機率大的詞，數量取決於Beam有多大。
    * 選出來後將其互相組合排列做比較，再選出擺在一起機率會最大的那些詞作為輸出 
    * 可以說是升級版的貪心(? 


* Reference:
  *  [Beam search Wiki](https://en.wikipedia.org/wiki/Beam_search)
  *  [【機器學習】【seq2seq模型與attention機制，Beam Search】](https://www.itread01.com/content/1547935945.html)
  * [Beam Search算法及其应用](http://hongbomin.com/2017/06/23/beam-search/)
  * [Seq2Seq中的beam search算法](https://zhuanlan.zhihu.com/p/36029811?group_id=972420376412762112)


## The Model

* RNN可以很簡單的做到一樣的事情，但為什麼不用RNN，而用LSTM?
  * RNN必須事先知道input和output的對照(但通常兩者長度不一)，而且還有輸出的長度沒辦法大於輸入的限制跟無法處理non-monotonic relationship的問題
    * 只有用Seq2Seq結構, RNN才能處理輸入輸出長度不一的問題 (利用Encoder-Decoder去 map) 
  * RNN還有長期依賴(Long-term dependency)的問題

### 前人的LSTM

* LSTM的目標是能輸入$(x_1,...,x_T$之後輸出**條件機率**$p(y_1,...,y_{T'}|x_1,...,x_T)$
* LSTM先利用最後一層的hidden state得到Input Sequence的dimensional representation $v$再算出條件機率$y_1,...,y_{T'}$
![](https://i.imgur.com/F6qQFDR.jpg)
* 每個條件機率的分布都用softmax來表示
* EOS = End of Sequence的加入可以讓模型知道學到哪裡就停止

### 他們的LSTM(號稱有三大不同點)

1. **Two different LSTM**: 一個是給input sequence用另一個是給output sequence用, 主要是為了能在不增加太多運算成本的情況下能增加參數
2. **Deep LSTM**: 他們發現Deep LSTM 的表現 >  Shallow LSTM, 因此用了4層的LSTM
3. **Reverse LSTM**:將input sequence Reverse非常有用
* EX:將$c,b,c$ map成$\alpha,\beta,\gamma$ 
  * $a,b,c$原本應該被map成$\alpha,\beta,\gamma$


他們覺得這樣會加強input和output之間的溝通(因為事實上應該是$a$和$\alpha$關係比較深, 模型被強迫去學習糾正

## Experiments

* WMT'14 English to French MT task in two way
  * 直接翻譯 不參考SMT system
  * Rescore n-best list of SMT baseline

### Dataset details
* 12M sen-tences consisting of 348M French words and 304M English words


### Decoding and Rescoring
* 實驗的主要目標是用很多Sentence pair去train出一個大型的深度LSTM
* maximizing the log probability of a correct transloation $T$ given the source sentence $S$

Training object:
![](https://i.imgur.com/5yoUfoc.jpg)
* 一開始先用簡單的left-to-right beam search decoder (a small number $B$ of partial hypotheses, which is prefix of some translation)
* 並在每個timestep都用每個字典中的字詞慢慢擴展假設的數量
* 但因為最後假設的數量變太多 所以就discard了這個方法但留下了log possibilty最高的$B$
* 只要遇到EOS, 這個假設就會從Beam中被移除並且被加到complete hypotheses的集合之中, 表示一段假設的完成
* 模型即使在Beam size=1的時候也能表現得不錯 但 size=2是最好的
* 前面也有提到 有用LSTM來rescore the 1000-best lists produced by the baseline system

## Reverseing the Source Sentence

* **個人覺得是本篇重點**
* 使用此方法可以將 LSTM的perplexity從5.8降到4.7, BLEU分數則是從25.9提升到30.6
* 本篇論文沒辦法完整解釋這個現象發生的原因, 但他們相信這是因為dataset上許多短期依賴造成
* 他們覺得是minimal time lag減少的關係
   *  讓Target sentence和source sentence更容易"建立溝通" 
* 有做實驗看Long sentence vs Reverse sentece哪個比較有助於LSTM, 結果是Reverse更有效果

## Experimental Results 

![](https://i.imgur.com/Bjx8VKq.jpg)

## Model Analysis 


![](https://i.imgur.com/QpC3WE7.jpg)
![](https://i.imgur.com/NaRIe1Q.jpg)

## Conclusion

* 展示了Deep LSTM with a limited vocabulary表現得比標準的SMT with unlimited vocabulary 更厲害
*  surprised by the extent of the improvement obtained by reversing the words in the source sentences
*  surprised by the ability of the LSTM to correctly translate very long sentences.



## Reference
[從零開始的 Sequence to Sequence](http://zake7749.github.io/2017/09/28/Sequence-to-Sequence-tutorial/)