葫芦书笔记----循环神经网络(RNN)
循環神經網絡
循環神經網絡(RNN)是用來建模序列化數據的一種主流深度學習模型。
##循環神經網絡和卷積神經網絡
速記:循環圣經網絡可以很好地處理文本數據變長并且有序的輸入序列
詳細:RNN可以將前面閱讀到的有用信息編碼到狀態變量中去,從而擁有了一定的記憶能力,可以更好地理解之后的文本。
RNN的前向傳播公式
n e t t = U x t + W h t ? 1 net_t=Ux_t+Wh_{t-1} nett?=Uxt?+Wht?1?
h t = f ( n e t t ) h_t=f(net_t) ht?=f(nett?)
y = g ( V h T ) y=g(Vh_T) y=g(VhT?)
其中,f和g為激活函數,U為輸入層到隱藏層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣。
循環神經網絡的梯度消失問題
循環神經網絡為什么會出現梯度消失或梯度爆炸?有哪些改進方案?
速記:使用BPTT(基于時間的反向傳播)來求解時,純銅的循環神經網絡梯度可以表示成連城的形式,原因和普通神經網絡相似。改進方法為LSTM,GRU等變種模型。
在循環神經網絡中能否使用ReLU作為激活函數?
速記:可以,但是需要對矩陣的初值做一定限制,否則容易引發數值問題。
詳細:為解釋這個問題,先給出RNN的前向傳播公式
n e t t = U x t + W h t ? 1 net_t=Ux_t+Wh_{t-1} nett?=Uxt?+Wht?1?
h t = f ( n e t t ) h_t=f(net_t) ht?=f(nett?)
根據前向傳播公式向前傳遞一層,可以得到
n e t t = U x t + W h t ? 1 = U x t + W f ( U x t ? 1 + W h t ? 2 ) net_t=Ux_t+Wh_{t-1}=Ux_t+Wf(Ux_{t-1}+Wh_{t-2}) nett?=Uxt?+Wht?1?=Uxt?+Wf(Uxt?1?+Wht?2?)
如果采用ReLU替代公式中的激活函數 f f f,并且假設ReLU函數一直處于激活區域(即輸入大于0),則有 f ( x ) = x , n e t t = U x t + W ( U x t ? 1 + W h t ? 2 ) f(x)=x,net_t=Ux_t+W(Ux_{t-1}+Wh_{t-2}) f(x)=x,nett?=Uxt?+W(Uxt?1?+Wht?2?),繼續將其展開, n e t t net_t nett?的表達式中最終會包含t個W連乘。如果W不是單位矩陣,最終結果將會居于0或者無窮,依法嚴重的數值問題。即使采用了ReLU激活函數,只要W不是單位矩陣梯度還是會消失或者爆炸。
綜上所述,當采用ReLU作為循環神經網絡中隱含層的激活函數時,只有當W 的取值在單位矩陣附近時才能取得比較好的效果,因此需要將W初始化為單位矩 陣。實驗證明,初始化W為單位矩陣并使用ReLU激活函數在一些應用中取得了與 長短期記憶模型相似的結果,并且學習速度比長短期記憶模型更快,是一個值得 嘗試的小技巧。
##長短時記憶網絡(LSTM)
LSTM是如何實現長短期記憶功能的?
速記:加入一個遺忘門和輸入門以及輸出門。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;以往門控制前一步記憶單元的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決于當前的記憶單元。
LSTM里各模塊分別使用什么激活函數,可以使用別的激活函數嗎?
速記:在LSTM中,遺忘門、輸入門和輸出門都是用Sigmoid函數作為激活函數;在生成候選記憶時,使用雙曲正切函數Tanh作為激活函數. 可以使用別的激活函數,最開始的時候用的就是sigmoid的變種。
##Seq2Seq 模型
在后面的文章里再具體寫下去。
總結
以上是生活随笔為你收集整理的葫芦书笔记----循环神经网络(RNN)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JDBC防止SQL注入原理
- 下一篇: 汉森网络谈谈如何才能增加网站权重