iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
0

前言

原來還想多介紹幾個應用,但是,一直擔心忘了另一個RNN的變形 -- GRU,所以,還是先把它處理掉,才好 focus 在應用上。另一方面,LSTM 執行速度非常慢/images/emoticon/emoticon18.gif,如果改用 GRU,希望測試可以快一點。

GRU (Gated Recurrent Unit) vs. LSTM

RNN 還有一個兄弟,與LSTM類似的模型,稱為『GRU』(無譯名,Gated Recurrent Unit),如下圖,本來想把它忽略掉,但看到相關文章,說它能加快執行速度及減少記憶體的耗用,因此,還是花點時間實驗看看。
https://ithelp.ithome.com.tw/upload/images/20171226/20001976rhen46Lrsx.png
圖. GRU vs. LSTM 效能比較,圖片來源:Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling

GRU 架構

回想一下,LSTM的記憶(Ct, Current Memeory State) 由輸入(input)、遺忘(forget)兩個閥(Gate)控制,GRU則簡化為一個『更新閥』(Update Gate)控制,公式如下,zt為更新閥:
https://ithelp.ithome.com.tw/upload/images/20171226/20001976phdFedCH1q.png
https://ithelp.ithome.com.tw/upload/images/20171226/20001976lMy5V0uk4i.png
在記憶處理上,LSTM與GRU的差異如下,兩者使用的數學符號不同,看得有點累:
https://ithelp.ithome.com.tw/upload/images/20171227/20001976UgmqRVibwU.png
圖. LSTM 記憶處理
https://ithelp.ithome.com.tw/upload/images/20171227/20001976apZkdgfLoj.png
圖. GRU 記憶處理

整體架構如下圖,詳細說明請參考CS224d笔记4续——RNN隐藏层计算之GRU和LSTMfrom vanilla RNN to GRU & LSTMs,後者包含影片及動畫投影片,筆者自認功力有限,沒辦法說明的更清楚,就此打住。
https://ithelp.ithome.com.tw/upload/images/20171212/20001976QGf1IXC07N.jpg
圖. GRU 架構,圖片來源:Evolution: from vanilla RNN to GRU & LSTMs

實作

Keras 提供 GRU 函數可直接使用,我麼就可以把前兩篇的程式LSTM.py及Sentiment1.py中的LSTM layer直接換成GRU Layer,測試看看效能及準確率是否有改善,可自這裡下載,檔名為GRU.py及Sentiment1_GRU.py。由於只改一行,就不列出程式碼了,以免讓讀者以為筆者濫竽充數。

執行

兩支程式執行方式分別如下:
python GRU.py
python Sentiment1_GRU.py

測試結果如下:

  1. 效能及準確率不是很顯著,執行時間相差無幾(GRU:7 or 8秒,LSTM:9秒)。/images/emoticon/emoticon02.gif
  2. 附帶一提,RNN/LSTM/GRU在優化時,常使用 rmsprop 函數取代 SGD 或 adam,因為,它收斂的速度會比較快,原因是 rmsprop 的學習速率(learning rate)會隨著之前的梯度總和作反向的調整。
  3. 結論是讀者如果認為少許的改善,也是值得的,就可以改用GRU,但是,用谷大神搜尋時,還是以LSTM為關鍵字,能找到較多的資源。

結論

我們已經將RNN三大演算法介紹過了,也實作情緒分析應用,接下來,筆者還是會多找一些應用,來跟大家一起討論,下次見了。


上一篇
Day 16:『長短期記憶網路』(LSTM) 應用 -- 情緒分析(Sentiment Analysis)
下一篇
Day 18: 機器翻譯(Machine Translation)
系列文
以100張圖理解 Neural Network -- 觀念與實踐31

1 則留言

0
smithychuang
iT邦新手 5 級 ‧ 2019-03-28 15:02:14

沒有GRU.py及Sentiment1_GRU.py

已補上,謝謝。

我要留言

立即登入留言