今天我們來討論深度學習中,專門在Run時間序列型資料的網路模型 - Recurrent Neural Network (RNN),在之前所討論到DNN跟CNN模型,兩個均未納入時間序列性質於設計模型。因此,當遇到時間序列問題,大部分都會把時間的性質拿掉,變成特徵獨立的關性,再繼續做Prediction或者Classification的問題。例如像是語音翻譯或者股價預測等等的應用場景,都是前後有關聯的問題。RNN主要是透過將隱藏層的output存在Memory裡,當下次input資料進去train的時候,會同時考慮上一次存在Memory裡的值進行計算。
其中,RNN模型中,最有名的就是Long short-term memory (LSTM)
LSTM(Long short-term memory),主要改善了以前RNN的一些問題 (Ex: Memory的設計問題),而LSTM由四個unit組成: Input Gate、Output Gate、Memory Cell以及Forget Gate。
而這些“控制”也都是網路中learnable的參數!
接下來我們來看一下實際一個cell的運作流程
source:李教授投影片
當資料input進一個LSTM cells,數學上可表示為g(z),第一個先遇到的就是input gate,input gate會使用f(Zi) (Activation function f),來表示input gate開啟的機率。接下來遇到第二關會是,Memory cell,首先,先紀錄當下input值加上前一次Memory cell裡的值並乘上forget gate的機率,看是否要遺忘前一次紀錄 。最後一關就是output gate,output gate會確認是否把值放出,也是以機率的方式來使用。
LSTM依照不同的input及output有一些基本的變化類型,如下圖:
source
以下針對常用的情境來方便大家更容易理解
Many to One:
就是多個時間點來預測下一個時間點 (Ex: 輸入: 一週股價,輸出: 下週一股價)
Many to Many:
多個具關聯的資料來預測下一個時間性或者下一個具關聯的資料 (Ex: 輸入: 英文句子,輸出: 中文句子)
除了input output的變化,LSTM也可以後面train回來 (Bidirectional LSTM),舉個例子來說,當有一個句子,一般的LSTM只會從前面掃過去,但Bidirectional LSTM除了從前面掃過去,也會從後面掃過來,類似從後文來回推前文。與一般的LSTM相比Bidirectional LSTM在一些語音辨識或者NLP應用上有更好的效果。但還是要注意應用場景上是否合乎資料邏輯 (Ex: 往回推的時候是否符合資料邏輯)
今天看完RNN - LSTM的部分,明天會來實作LSTM的應用。感謝大家漫長的閱讀~ 另外,今天Tesnoflow release了 2.0的stable版本!大家有興趣的話可以上官網看一下唷~Link