天天看點

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

RNN處理的主要是有序序列。比如在一個訂票系統中,需要從使用者的一句話中提取出出發地,目的地和交通方式等資訊,實作智能訂票。在這種情況下,詞語之間順序的改變可能會帶來不一樣的結果。RNN可以實作通過上下文推斷該詞語屬于何種資訊。

1.RNN的基本架構

RNN的基本思想就是在處理一個新的輸入的同時,考慮之前結果的影響。如圖是一個簡單的RNN,圖中的x1和x2是輸入,綠色的圓圈代表hidden layer,橙色的圓圈代表output layer,y1和y2代表輸出,而藍色方框中的a1和a2是hidden layer的運算結果。

整個運算過程為:首先給a1和a2附初始值,然後把a1,a2,x1,x2一起作為hidden layer的輸入,并把hidden layer的運算結果存到a1和a2中。在處理下一個輸入(比如x3,x4)時,把a1,a2,x3,x4作為hidden layer的輸入,如此循環往複。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

2.不同類型的RNN

當然,RNN中的hidden layer可以有多層,根據不同的存儲方法可以把RNN分為Elman Network和Jordan Network。它們的差別在于一個存儲了所有hidden layer的結果,一個隻存儲了整個神經網絡的輸出。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

 同時,RNN也可以是雙向的(Bidirectional RNN)。如圖,訓練兩個RNN,分别使用正序和逆序的輸入,并把兩個神經網絡得到的結果提供給output layer。這樣的好處是某次的結果不僅考慮了之前資料的影響,還考慮了之後資料的影響。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

 3.LSTM

LSTM是一種針對存儲方式進行的優化。簡單的RNN隻需要将結果存入,需要的時候讀出,而LSTM每次存儲需要輸入三個額外的信号來控制input gate,output gate和forget gate。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

具體來說,如下圖所示,假設四個輸入分别是z,zf,zi,zo。存儲在memory cell裡的值為c。f,g,h為激活函數,則更新後的值為

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

輸出的值為

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

函數f通常取sigmoid函數,函數值在0到1之間,是以它們好像三道閘門,分别表示輸入的程度,(沒有被)遺忘的程度和輸出的程度。在具體操作時,三個gate的輸入等于一個向量w與輸入向量某幾維的内積,w可以視為參數并通過梯度下降的方法被訓練出來。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

4.RNN訓練的問題

如圖所示,橫軸代表RNN訓練次數,縱軸代表誤差。一般來說,随着訓練次數增加,訓練集上的誤差會逐漸減小,但是RNN的誤差有時會劇烈地上下波動。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

這是因為RNN對于參數的變化在一些地方是十分敏感的。如圖所示是RNN誤差随參數的的變化趨勢,在梯度較小的地方,學習率可能會被調的很大,但是如果這時突然碰到梯度特别大的地方,那下一次的參數就會跑到不知道什麼地方去了。

李宏毅深度學習筆記(五)——循環神經網絡(RNN)

這個問題可以使用LSTM或者GRU解決。它們可以讓整個error surface變得幾乎沒有十分平坦的地方,這樣反而可以得到更好的結果。

繼續閱讀