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