RNN基本模型匯總(deeplearning.ai)

祝大家新年快樂! 大吉大利,今晚吃雞!寫完這篇匯總我就去吃雞了!

此篇是根據ng的deeplearning.ai的序列模型做的筆記,主要是為了總結一下RNN的基本的序列模型。還望大神勿噴。看完這篇文章,對於TextRNN,RCNN,Hierarchical Attention Network等模型結構就更好理解了,這些結構無非就是基本RNN結構的拼接,轉換。

RNN基本模型

RNN基本形式

我認為RNN模型有以下三個特點

  • 時序性遞歸性 y_{t} = f(y_{t-1},x_{t}) ,一般輸入來自兩個方面,一個是之前狀態 y_{t-1} ,和當前狀態的輸入 x_{t}
  • 參數共享,每一步的參數矩陣都是共享的,主要的參數矩陣也是上述的兩個方面, W_{aa}W_{ax}
  • cell的設計,為了解決rnn更新時指數式的梯度彌散,梯度爆炸的問題和控制cell保留信息比例的問題,設計了gru,lstm cell,具體見後面。

反向傳播過程

many to many 模型的參數更新示意圖

從圖中可以看出,參數的更新方式也是基於時間步的,從loss function開始求導,最終都匯總的輸入剛開始的時間步開始更新,由於每一步的參數都是共享的,更新了最初的時間步的參數,也就更新了所有的參數。這是RNN和其他網路結構不同的地方。

GRU

GRU cell有兩個gate:

  • update gate:

控制當前輸入 	ilde{c}^{<t>} 和之前cell c^{<t-1>} 之間平衡關係,取值在0~1之間。

  • reset gate:

控制當前輸入 	ilde{c}^{<t>} 中有多少來自之前的輸出,取值在0~1之間。

在GRU模型中輸出 a^{<t>} 與cell中保存的信息 c^{<t>} 是一樣的。

LSTM

LSTM相較於GRU多了一個gate,即forget gate,將GRU中的update gate分成input gate和forget gate。且輸出信息通過output gate去控制,相當於GRU中的reset gate。

  • input gate (圖中 Gamma_{u} ) : 控制當前輸入所佔比例
  • forget gate (圖中 Gamma_{f} ): 控制之前cell所佔比例
  • output gate(圖中 Gamma_{o} ) : 控制輸出所佔比例

通過gate的設計我們可以根據不同的任務學得不一樣的參數,以控制當前信息和之前cell中的信息保留的比例,去更好的完成時序任務,同時也能防止梯度的彌散和爆炸(gradident clip 可以解決這個問題)。

雙向RNN

雙向RNN意味著對於一條語句我們可以正著輸入一遍,反過來輸入一遍,這樣對於每一個sate我們既可以考慮到前面的信息也可以考慮到後面的信息,然後concat二者的output 接一個線性權重即可得到輸出。

deep RNN

Deep RNN用多層的cell去提取特徵,相當於cnn裡面設置的多個卷積核。這樣提取特徵的效果會更好。

關於attention機制,word2vec等年後有時間再寫吧,祝大家狗年大吉,旺旺旺~


推薦閱讀:

機器學習入門之泰坦尼克號案例
引領深度學習革命--CNN架構全解析
十分種讀懂KNN
基於NLP的股價預測
實現屬於自己的TensorFlow(三) - 反向傳播與梯度下降實現

TAG:深度學習DeepLearning | 自然語言處理 | 機器學習 |