iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
2
AI & Machine Learning

以100張圖理解 Neural Network -- 觀念與實踐系列 第 17

Day 17:GRU (Gated Recurrent Unit) 概念介紹與實作

  • 分享至 

  • xImage
  •  

前言

原來還想多介紹幾個應用,但是,一直擔心忘了另一個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
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

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

沒有GRU.py及Sentiment1_GRU.py

已補上,謝謝。

0
Jason_LL
iT邦新手 5 級 ‧ 2021-07-12 16:14:01

您好,讀過您的文章後,最近在專題有實作GRU,但一直嘗試各種調整參數,accuracy 及 val_accuracy 都一直為 0.0000e+00,想請問該如何解決,謝謝~
https://ithelp.ithome.com.tw/upload/images/20210712/20139428GN1j1Z9YBO.jpghttps://ithelp.ithome.com.tw/upload/images/20210712/201394287VxzoaFwYA.jpghttps://ithelp.ithome.com.tw/upload/images/20210712/20139428Tk0DJeUyzn.jpg

看更多先前的回應...收起先前的回應...
  1. 應該是輸入資料有問題。
  2. 如果是自然語言的輸入,需加embedding 神經層。
Jason_LL iT邦新手 5 級 ‧ 2021-07-13 01:01:07 檢舉

如果方便的話 這是我的檔案連結 https://github.com/Jason-SHL/GRU ,因為是自學,已經幾乎查遍網頁資料但還是無從下手,想請較老師該如何修改
我輸入的資料為 氣壓、風速、日照量、確診人數等四個數值(不是自然語言)去預測出商店銷售數量,目前主要想呈現出 'loss' ,'val_loss'等數值,但結果都很奇怪.. 再麻煩老師提點,謝謝 ~

最後一層的Dense(1),變成迴歸,得到連續型變數,準確率當然為0。

Jason_LL iT邦新手 5 級 ‧ 2021-07-13 09:43:21 檢舉

原來!!
如果我沒理解錯誤的話,我的模型是回歸模型,因此常用指標應該為MAE和RMSE,而不是使用在分類的 Accuracy, Precision, Recall 這樣嗎?

完全正確。

Jason_LL iT邦新手 5 級 ‧ 2021-07-13 11:07:52 檢舉

謝謝!

我要留言

立即登入留言