原來還想多介紹幾個應用,但是,一直擔心忘了另一個RNN的變形 -- GRU,所以,還是先把它處理掉,才好 focus 在應用上。另一方面,LSTM 執行速度非常慢,如果改用 GRU,希望測試可以快一點。
RNN 還有一個兄弟,與LSTM類似的模型,稱為『GRU』(無譯名,Gated Recurrent Unit),如下圖,本來想把它忽略掉,但看到相關文章,說它能加快執行速度及減少記憶體的耗用,因此,還是花點時間實驗看看。
圖. GRU vs. LSTM 效能比較,圖片來源:Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
回想一下,LSTM的記憶(Ct, Current Memeory State) 由輸入(input)、遺忘(forget)兩個閥(Gate)控制,GRU則簡化為一個『更新閥』(Update Gate)控制,公式如下,zt為更新閥:
在記憶處理上,LSTM與GRU的差異如下,兩者使用的數學符號不同,看得有點累:
圖. LSTM 記憶處理
圖. GRU 記憶處理
整體架構如下圖,詳細說明請參考CS224d笔记4续——RNN隐藏层计算之GRU和LSTM 及 from vanilla RNN to GRU & LSTMs,後者包含影片及動畫投影片,筆者自認功力有限,沒辦法說明的更清楚,就此打住。
圖. 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
測試結果如下:
我們已經將RNN三大演算法介紹過了,也實作情緒分析應用,接下來,筆者還是會多找一些應用,來跟大家一起討論,下次見了。
您好,讀過您的文章後,最近在專題有實作GRU,但一直嘗試各種調整參數,accuracy 及 val_accuracy 都一直為 0.0000e+00,想請問該如何解決,謝謝~
如果方便的話 這是我的檔案連結 https://github.com/Jason-SHL/GRU ,因為是自學,已經幾乎查遍網頁資料但還是無從下手,想請較老師該如何修改
我輸入的資料為 氣壓、風速、日照量、確診人數等四個數值(不是自然語言)去預測出商店銷售數量,目前主要想呈現出 'loss' ,'val_loss'等數值,但結果都很奇怪.. 再麻煩老師提點,謝謝 ~
最後一層的Dense(1),變成迴歸,得到連續型變數,準確率當然為0。
原來!!
如果我沒理解錯誤的話,我的模型是回歸模型,因此常用指標應該為MAE和RMSE,而不是使用在分類的 Accuracy, Precision, Recall 這樣嗎?
完全正確。
謝謝!