當前位置:
首頁 > 最新 > 白話循環神經網路

白話循環神經網路

在上一篇文章中,介紹了卷積神經網路(CNN)的演算法原理,CNN在圖像識別中有著強大、廣泛的應用,但有一些場景用CNN卻無法得到有效地解決,例如:

  • 語音識別,要按順序處理每一幀的聲音信息,有些結果需要根據上下文進行識別;

  • 自然語言處理,要依次讀取各個單詞,識別某段文字的語義

這些場景都有一個特點:就是都與時間序列有關,且輸入的序列數據長度是不固定的。

而經典的人工神經網路、深度神經網路(DNN),甚至卷積神經網路(CNN),一是輸入的數據維度相同,另外是各個輸入之間是獨立的,每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立。

而在現實生活中,例如對一個演講進行語音識別,那演講者每講一句話的時間幾乎都不太相同,而識別演講者的講話內容還必須要按照講話的順序進行識別。

這就需要有一種能力更強的模型:該模型具有一定的記憶能力,能夠按時序依次處理任意長度的信息。這個模型就是今天的主角:「循環神經網路」 (Recurrent Neural Networks,簡稱RNN)

循環神經網路(RNN),神經元的輸出可以在下一個時間戳直接作用到自身(作為輸入),看看下面的對比圖:

從上面的兩個簡化圖,可以看出RNN相比經典的神經網路結構多了一個循環圈,這個圈就代表著神經元的輸出在下一個時間戳還會返回來作為輸入的一部分,這些循環讓RNN看起來似乎很神秘,然而,換個角度想想,也不比一個經典的神經網路難於理解。RNN可以被看做是對同一神經網路的多次賦值,第i層神經元在t時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(t-1)時刻的輸出,如果我們按時間點將RNN展開,將得到以下的結構圖:

在不同的時間點,RNN的輸入都與將之前的時間狀態有關,tn時刻網路的輸出結果是該時刻的輸入和所有歷史共同作用的結果,這就達到了對時間序列建模的目的。

【問題來了】關於RNN的長期依賴(Long-Term Dependencies)問題

理論上,RNN可以使用先前所有時間點的信息作用到當前的任務上,也就是上面所說的長期依賴,如果RNN可以做到這點,將變得非常有用,例如在自動問答中,可以根據上下文實現更加智能化的問答。然而在現實應用中,會面臨著不同的情況,例如:

(1)有一個語言模型是基於先前的詞來預測下一個詞。如果現在要預測以下這句話的最後一個單詞「白雲飄浮在(天空)」,我們並不需要任何其它上下文,最後一個詞很顯然就應該是「天空」。在這樣的場景中,相關的信息和預測的詞位置之間的間隔是非常小的,如下圖所示:

(2)假設我們要預測「我從小生長在四川……我會講流利的 (四川話)」最後一個詞,根據最後一句話的信息建議最後一個詞可能是一種語言的名字,但是如果我們要弄清楚是什麼語言,則需要找到離當前位置很遠的「四川」那句話的上下文。這說明相關信息和當前預測位置之間的間隔就變得相當大。如下圖所示:

不幸的是,隨著間隔的不斷增大,RNN會出現「梯度消失」「梯度爆炸」的現象,這就是RNN的長期依賴問題。例如我們常常使用sigmoid作為神經元的激勵函數,如對於幅度為1的信號,每向後傳遞一層,梯度就衰減為原來的0.25,層數越多,到最後梯度指數衰減到底層基本上接受不到有效的信號,這種情況就是「梯度消失」。因此,隨著間隔的增大,RNN會喪失學習到連接如此遠的信息的能力。

【腫么辦】神器來了:Long Short Term Memory網路(簡稱LSTM,長短期記憶網路)

LSTM是一種RNN特殊的類型,可以學習長期依賴信息。在很多問題上,LSTM都取得相當巨大的成功,並得到了廣泛的應用。

一個LSTM單元的結構,如下圖所示:

從上圖可以看出,中間有一個cell(細胞),這也是LSTM用於判斷信息是否有用的「處理器」。同時,cell旁邊被放置了三扇門,分別是輸入門(Input Gate)、遺忘門(Forget Gate)和輸出門(Output Gate)。一個信息進入LSTM的網路當中,可以根據規則來判斷是否有用,只有符合要求的信息才會被留下,不符合的信息則會通過遺忘門被遺忘。

LSTM巧妙地通過「門」的形式,利用開關實現時間上的記憶功能,是解決長期依賴問題的有效技術。在數字電路中,門(gate)是一個二值變數,0代表關閉狀態、不允許任何信息通過;1代表開放狀態,允許所有信息通過。而LSTM中的「門」也是類似,但它是一個「軟」門,介於(0,1)之間,表示以一定的比例使信息通過。

一聽起來就不明覺厲,那它是怎麼做到的呢?

我們先來看一下RNN按時間展開後的簡化圖,結構很簡單,標準RNN中的重複模塊只包含單一的層,例如tanh層,如下圖:

LSTM有著類似的結構,但是重複的模塊擁有一個不同的結構,LSTM 中的重複模塊包含四個交互的層,其中輸入門(Input Gate)、遺忘門(Forget Gate)和輸出門(Output Gate)便在這裡面,如下圖:

下面介紹一下LSTM的工作原理,下面會結合結構圖和公式進行介紹,回顧一下最基本的單層神經網路的結構圖、計算公式如下,表示輸入是x,經過變換Wx+b和激活函數f得到輸出y。下面會多次出現類似的公式

下面以一個語言模型的例子來進行介紹,這個模型是根據已經看到的詞來預測下一個詞,例如:

小明剛吃完米飯,現在準備要吃水果,然後拿起了一個( )

(1)遺忘門(Forget Gate)

該門的示意圖如下,該門會讀取ht-1和xt的信息,通過sigmoid層輸出一個介於0 到 1 之間的數值,作為給每個在細胞狀態Ct-1中的數字,0 表示「完全捨棄」,1 表示「完全保留」。

結合上面講到的語言預測模型例子,「小明剛吃完米飯」,這句話主語是「小明」,賓語是「米飯」,下一句話「現在準備要吃水果」,這時賓語已經變成了新的詞「水果」,那第三句話要預測的詞,就是跟「水果」有關了,跟「米飯」已經沒有什麼關係,因此,這時便可以利用「遺忘門」將「米飯」遺忘掉。

(2)輸入門(Input Gate)

下一步是確定什麼樣的新信息被存放在細胞狀態中。這裡包含兩部分:

首先是經過「輸入門」,這一層是決定我們將要更新什麼值;然後,一個 tanh 層創建一個新的候選值向量,加入到狀態中,如下圖:

在這個語言預測模型的例子中,我們希望將新的代詞「水果」增加到細胞狀態中,來替代舊的需要忘記的代詞「米飯」。

現在來更新舊細胞的狀態,由Ct-1更新為Ct,更新方式為:(1)把舊狀態Ct-1與ft相乘(回顧一下,ft就是遺忘門,輸出遺忘程度,即0到1之間的值),丟棄掉需要丟棄的信息(如遺忘門輸出0,則相乘後變成0,該信息就被丟棄了);(2)然後再加上it與候選值相乘(計算公式見上圖)。這兩者合併後就變成一個新的候選值。

在這個語言預測模型的例子中,這就是根據前面確定的目標,丟棄舊的代詞信息(米飯)並添加新的信息(水果)的地方。

(3)輸出門(Output Gate)

最後我們要確定輸出什麼值,首先,通過一個sigmoid層來確定細胞狀態的哪個部分將要輸出出去,接著,把細胞狀態通過 tanh 進行處理(得到一個介於-1到1之間的值)並將它和 sigmoid的輸出結果相乘,最終將會僅僅輸出我們需要的那部分信息。

在這個語言模型的例子中,因為看到了一個新的代詞(水果),可能需要輸出與之相關的信息(蘋果、梨、香蕉……)。

以上就是標準LSTM的原理介紹,LSTM也出現了不少的變體,其中一個很流行的變體是Gated Recurrent Unit (GRU),它將遺忘門和輸入門合成了一個單一的更新門,同樣還混合了細胞狀態和隱藏狀態,以及其它一些改動。最終GRU模型比標準的 LSTM 模型更簡單一些,如下圖所示:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

你盼著你的蛙回家,你媽卻叫你滾蛋
有些時候,你真的不需要那麼善良

TAG:全球大搜羅 |