NLP学习笔记41-递归神经网络
一 序
? ?本文屬于貪心NLP訓練營學習筆記系列。
? ?為什么需要遞歸神經網絡?
? ?類似天氣、股票、語音這種數據,是時序數據,對于語音:同一個單詞不同人說對應時長不同。
之前學習的多層感知器,假設輸入是一個獨立的沒有上下文聯系的單位,比如根據圖譜識別動物類別。如果需要根據上一句話預測下一句話,就是輸出必須依賴以前的輸入,需要遞歸神經網絡來實現這樣的功能。
二 遞歸神經網絡介紹
2.1?vanilla?RNN?原始RNN
整體上還是:輸入層=>隱藏層=>輸出層? 這種三層結構。?
x網絡某一時刻的輸入
??是輸入端到隱含層的權重表示,它將我們的原始輸入進行抽象作為隱藏層的輸入.
某一時刻T的隱藏狀態
某一時刻T的輸出
隱含層到隱含層的權重,它是網絡的記憶控制者,負責調度記憶。
?隱含層到輸出層的權重,從隱藏層學習到的表示將通過它再一次抽象,并作為最終輸出。
?某一時刻T的 損失值,整個損失函數就是J求和。
? 其中b是bias
? 其中b是bias
2.2 HMM VS RNN
相同點:都是通過hidden state 的變化來表示序列間的依賴關系。
不同點:隱狀態的表示: hmm是onehot, RNN是分布表示,RNN的表示能力強很多,分布式表示類似于word2vec。
隱狀態的演化方式: hmm是線性的,RNN是高度非線性。
剩下的不同點老師沒講,建議網上找找:以下來自網上的
HMM本質是一個概率模型,而RNN不是。另外RNN沒有馬爾科夫假設,可以考慮很長的歷史信息。
2.3 語言模型 language model
語言模型: 一句話很多個單詞,計算聯合概率可以展開為計算條件概率的聯乘。
這個是RNN對于語言模型的使用。計算公式跟前面是一樣的。
2.4 RNN的深度
??
RNN從時間的維度看,它是深度模型。但是它有不同于CNN那種隱含層有很多的模型。
2.5 梯度爆炸與梯度消失
? ??RNN的反向傳播,也稱為基于時間的反向傳播算法BPTT(back propagation through time)。跟多層感知器類似,對所有參數求損失函數的偏導,目的是損失函數最小。
我們?某一時刻T的 損失值,例如:?表示時間4的損失。下面看怎么計算梯度,還是使用鏈式法則
其中?
可以看到,需要計算隱含層對之前隱含層的梯度。
? 其中diag部分是矩陣。
general form:
?
存在連乘項,當時間序列足夠長,即t足夠大時,受w影響較大。w處于0~1之間,會導致 式子趨近于0,梯度消失(vanishing gradient)。當w的值很大(一般為初始化不當引起),就會趨近于無窮,這就造成了梯度爆炸(exploding gradient).
通常遇到的問題是梯度消失(會導致模型記不住之前的信息)。
long-term dependency
在解決RNN梯度消失的問題,先看個例子,如果記不住長距離的信息,只要最近的,會導致錯誤。因為句子的最關鍵的信息在前面。
如果這種問題使用N-Gram,會導致N小了不行,對于長句子N設為多少都不合適;另外,模型的大小和N的關系是指數級的。所以需要RNN。
Gradient Clipping(梯度裁剪) for?exploding gradient
從老師畫的梯度曲線圖,發生梯度爆炸,那么就是學過了,會直接跳過最優解。從梯度定義
確定一個閾值,如果后面參數的g(t)超過了,直接裁剪。
裁剪就是類似于歸一化操作。梯度乘以這個縮放因子(閾值/梯度大小)
得出的新的梯度,再進行梯度下降法計算。
這都是理論。還得結合代碼看看代理啥參數起作用。
梯度爆炸問題容易解決,上面那種clipping 方式,但是梯度消失的問題比較難以解決。
三 LSTM
? LSTM 是一種 RNN 特殊的類型,可以學習長期依賴信息。與RNN 相比LSTM 同樣是一種重復神經網絡模塊的鏈式的形式。
不同的是:LSTM使用了不同的函數去去計算隱藏層的狀態。
LSTM 的關鍵就是細胞狀態,可以把cells看作是黑盒用以保存當前輸入之前的保存的狀態。LSTM 有通過精心設計的稱作為“門”的結構來去除或者增加信息到細胞狀態的能力。
門是一種讓信息選擇式通過的方法,具體通過sigmod函數實現,Sigmoid 層輸出0,1數值.0代表“不許任何量通過”,1就指“允許任意量通過”.
LSTM 擁有三個門,分別是forget gate\input gate\ output gate
第一步是決定我們會從細胞狀態中丟棄什么信息,忘記門:??
會讀取?,?,輸出一個在0,1 數值給每個在細胞狀態.
下一步是確定什么樣的新信息被存放在細胞狀態中。
??決定什么值我們將要更新
?
tanh層創建一個新的候選值向量?會被加入到狀態中.
接下來更新舊細胞狀態?更新到.
? ?這是是element wise
我們把舊狀態與?相乘,丟棄掉我們確定需要丟棄的信息。后面的第二項是新的候選值,根據我們決定更新每個狀態的程度進行變化。
最終,我們要求出輸出什么值。
??來確定細胞狀態的哪個部分將輸出出去
?(tanh得到一個在-1,1之間的值)并將它和輸出相乘,最終我們僅僅會輸出我們確定輸出的那部分。
小結:
LSTM能選擇性的保留信息,從數學角度,計算梯度有優于RNN模型,但是不能萬全解決梯度消失問題。
這里老師沒有展開LSTM的關于梯度消失 的推導,網上說的之前RNN的聯乘問題,LSTM? 約等于(類比)為sigmoid函數。
?
LSTM 應用場景
老師推薦了這篇博客:http://karpathy.github.io/2015/05/21/rnn-effectiveness/
介紹了很多有趣的應用,后來很多人沿著這些問題做了改進,
四 Bi-directional LSTM
LSTM的 問題:無法編碼從后到前的信息?。Bi-directional 是前向的LSTM、后向的LSTM組合成的Bi-LSTM.
最后將前向和后向的隱向量 進行拼接得到?.
作為補充,老師講了一個論文,給出了一個對比 ,RNN或者LSTM效果都不如Bi-LSTM 好。
GRU
門控循環單元(gated recurrent unit,GRU)是LSTM網絡的一種效果很好的變體,它較LSTM網絡的結構更加簡單,而且效果也很好。
在LSTM中引入了三個門函數:輸入門、遺忘門和輸出門來控制輸入值、記憶值和輸出值。而在GRU模型中只有兩個門:分別是更新門和重置門。
表達式如下:
? ?更新門
?
? ? 其中?為第?t?個時間步的輸入向量,即輸入序列?X?的第?t?個分量,它會經過一個線性變換(與權重矩陣?相乘)。保存的是前一個時間步?t-1?的信息,它同樣也會經過一個線性變換。更新門將這兩部分信息相加并投入到?Sigmoid?激活函數中,因此將激活結果壓縮到?0?到?1?之間。
? ?更新門幫助模型決定到底要將多少過去的信息傳遞到未來,或到底前一時間步和當前時間步的信息有多少是需要繼續傳遞的。這一點非常強大,因為模型能決定從過去復制所有的信息以減少梯度消失的風險。
重置門
重置門 該表達式與更新門的表達式是一樣的,重置門主要決定了到底有多少過去的信息需要遺忘。
?當前記憶內容
其中計算重置門? ?與的?Hadamard?乘積,即對應元素乘積。因為前面計算的重置門 是一個由?0?到?1?組成的向量,它會衡量門控開啟的大小。例如某個元素對應的門控值為?0,那么它就代表這個元素的信息完全被遺忘掉。該?Hadamard?乘積將確定所要保留與遺忘的以前信息。
?前面是為第?t?個時間步的輸入向量,?將這兩部分的計算結果相加 (起到一個拼接作用)? 再投入雙曲正切激活函數tanh中(數據放縮到-1~1的范圍內)
最終記憶
網絡需要計算?,這里需要?將保留當前單元的信息并傳遞到下一個單元中。是更新門的激活結果,它同樣以門控的形式控制了信息的流入。
前面一項表示對原本隱藏狀態的選擇性“遺忘”,忘記?維度中一些不重要的信息.
后面一項是表示對包含當前節點信息的進行選擇性”記憶“. 綜合來看,是忘記傳遞下來的某些舊信息(也就是說需要收集的信息),并加入當前節點輸入的某些新信息。
關于 GRU老師只是簡單講了下表達式,具體的細節還是這篇:https://zhuanlan.zhihu.com/p/32481747
****************
理論部分結束了,下一步該找數據動手做驗證。
總結
以上是生活随笔為你收集整理的NLP学习笔记41-递归神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Simhash的生成及存储
- 下一篇: JAVA解析.xlsb文件