RNN基本模型匯總(deeplearning.ai)
祝大家新年快樂! 大吉大利,今晚吃雞!寫完這篇匯總我就去吃雞了!
此篇是根據ng的deeplearning.ai的序列模型做的筆記,主要是為了總結一下RNN的基本的序列模型。還望大神勿噴。看完這篇文章,對於TextRNN,RCNN,Hierarchical Attention Network等模型結構就更好理解了,這些結構無非就是基本RNN結構的拼接,轉換。
RNN基本模型
我認為RNN模型有以下三個特點:
- 時序性,遞歸性 ,一般輸入來自兩個方面,一個是之前狀態 ,和當前狀態的輸入 。
- 參數共享,每一步的參數矩陣都是共享的,主要的參數矩陣也是上述的兩個方面, 和 。
- cell的設計,為了解決rnn更新時指數式的梯度彌散,梯度爆炸的問題和控制cell保留信息比例的問題,設計了gru,lstm cell,具體見後面。
反向傳播過程
從圖中可以看出,參數的更新方式也是基於時間步的,從loss function開始求導,最終都匯總的輸入剛開始的時間步開始更新,由於每一步的參數都是共享的,更新了最初的時間步的參數,也就更新了所有的參數。這是RNN和其他網路結構不同的地方。
GRU
GRU cell有兩個gate:
- update gate:
控制當前輸入 和之前cell 之間平衡關係,取值在0~1之間。
- reset gate:
控制當前輸入 中有多少來自之前的輸出,取值在0~1之間。
在GRU模型中輸出 與cell中保存的信息 是一樣的。
LSTM
LSTM相較於GRU多了一個gate,即forget gate,將GRU中的update gate分成input gate和forget gate。且輸出信息通過output gate去控制,相當於GRU中的reset gate。
- input gate (圖中 ) : 控制當前輸入所佔比例
- forget gate (圖中 ): 控制之前cell所佔比例
- output gate(圖中 ) : 控制輸出所佔比例
通過gate的設計我們可以根據不同的任務學得不一樣的參數,以控制當前信息和之前cell中的信息保留的比例,去更好的完成時序任務,同時也能防止梯度的彌散和爆炸(gradident clip 可以解決這個問題)。
雙向RNN
雙向RNN意味著對於一條語句我們可以正著輸入一遍,反過來輸入一遍,這樣對於每一個sate我們既可以考慮到前面的信息也可以考慮到後面的信息,然後concat二者的output 接一個線性權重即可得到輸出。
deep RNN
Deep RNN用多層的cell去提取特徵,相當於cnn裡面設置的多個卷積核。這樣提取特徵的效果會更好。
關於attention機制,word2vec等年後有時間再寫吧,祝大家狗年大吉,旺旺旺~
推薦閱讀:
※機器學習入門之泰坦尼克號案例
※引領深度學習革命--CNN架構全解析
※十分種讀懂KNN
※基於NLP的股價預測
※實現屬於自己的TensorFlow(三) - 反向傳播與梯度下降實現
TAG:深度學習DeepLearning | 自然語言處理 | 機器學習 |