# 李宏毅_ATDL_Lecture_6
###### tags: `Hung-yi Lee` `NTU` `Advance Topics in Deep Learning`
[課程撥放清單](https://www.youtube.com/channel/UC2ggjtuuWvxrHHHiaDH1dlQ/playlists)
## Highway Network & Grid LSTM
[課程連結](https://www.youtube.com/watch?v=dxB6299gpvI&list=PLJV_el3uVTsPMxPbjeX7PicgWbY7F8wW9&index=6)
### Feedforward v.s. Recurrent

在說明`Highway Network`之前先回顧`Feedforward`與`Recurrent`
上圖說明著兩者的計算過程:
* Feedforward
* 經過`t`層之後得到`y`,每個`f`皆不相同
* 這邊的`t`所指為Layer
* 只有一開始有輸入`x`
* Recurrent
* 同一個`f`不斷計算,最後經過`g`得到`y`
* 這邊的`t`所指為`time step`
* 每個`time step`皆輸入`x`
把RNN豎直,它就可以是一個`Feedforward`
### GRU -> Highway Network


`Highway Network`的想法就是要將`RNN`豎直,測試是否可以訓練出一個非常深的`NN`,這邊說明將`GRU`調整為`Highway Network`
上圖為原始`GRU`,下圖為調整之後`GRU`
1. 將每個時步的`x^t`取消掉
2. 將每個時步的`y^t`取消掉
3. 將`h`調整為`a`
* 原$h^{t-1}$指第$t-1$個時步的輸出,調整為$a^{t-1}$代表第$t-1$個Layer的輸出
4. 取消`reset gate`
* 原`GRU`中每一個時步皆有輸入,因此不重要的事就可以忘掉,但在`Highway Network`中只有最開始有輸入,如果過程中忘掉資訊,後面就沒有任何資訊了。
* 另類想法上,取消`reset gate`也減少大量參數
### Highway Network

調整架構之後將橫圖豎直,輸入$a^{t-1}$在下,輸出$a^t$在上,在取消掉`reset gate`之後,剩下`update gate`
1. $h'=\sigma(Wa^{t-1})$
2. `update gate`: $z=\sigma(W'a^{t-1})$
* 操控紅色箭頭處
3. $a^t=z\odot a^{t-1}+(1-z)\odot h$
* `GRU`中,`update gate`是`input gate`與`forget gate`的綜合,因此兩者連動
以上,就是`Highway Network`,後來微軟又出現了`Residual Network`,更精簡的版本,連`Z`都不要了,直接將$a^{t-1}$與$h'$相加得到$a^t$
有人提過,`Rdsidual Network`就是將`LSTM`豎直。
### Highway Network

`Highway Network`可以自動決定要用幾個Layer。
### Highway Network

上圖是將`Highway Network`應用於MNIST與CIFAR-100兩個資料集。
* 橫軸:層數
* 縱軸:Loss
作法上是將一個訓練好擁有50層的`Highway Network`直接拔掉一層,看他在訓練資料集中的變化,如果沒有任何影響,代表它在過程中是直接被pass掉的。
可以發現到,在MNIST中間有一大部份被拿掉之後對結果是沒有影響的,這代表訓練過程模型自己發現到前面幾層才是有用的。
而在CIFAR-100上拿掉幾個Layer都對模型有影響,這是因為CIFAR-100的資料較為複雜
### Grid LSTM


`LSTM`不止可以豎直,還可以橫向發展,這就是`Grid LSTM`。
左圖是原始`LSTM`,與右邊`Grid LSTM`的差異在於輸入的部份由一個原本的`x`,變化為`a, b`,以此方式同時擁有時間$h$與深度$b$的Memory
### Grid LSTM

加入深度的Memory非常直觀,只要將$h, b$並在一起,$c, a$並在一起,其它相同去做計算就可以產生相對應的$c', a', b', h,$
### 3D Grid LSTM

同樣的邏輯也可以套用在3維的情況,左圖是老師畫的,右圖是論文上的。