前言
BP 神經(jīng)網(wǎng)絡(luò),訓(xùn)練的時(shí)候惦辛,給定一組輸入和輸出劳秋,不斷的對(duì)權(quán)值進(jìn)行訓(xùn)練,使得輸出達(dá)到穩(wěn)定胖齐。但 BP 神經(jīng)網(wǎng)絡(luò)并不是適合所有的場(chǎng)景玻淑,并不真正的體現(xiàn)出某些場(chǎng)景的真正特點(diǎn)⊙交铮回到經(jīng)典的概率論問(wèn)題补履,拋硬幣問(wèn)題,假設(shè)你已經(jīng)拋了100次的剿另,90次是正面的箫锤,10次是反面的,問(wèn)現(xiàn)在繼續(xù)在拋一次雨女,出現(xiàn)正面的概率是多少谚攒?如果沒有前面幾次的經(jīng)驗(yàn),很正常的會(huì)認(rèn)為再次出現(xiàn)正面的概率是50%氛堕,但由于我們之前有對(duì)這個(gè)進(jìn)行了實(shí)驗(yàn)馏臭,即有了經(jīng)驗(yàn)了,按照貝葉斯定律岔擂,出現(xiàn)正面的概率肯定會(huì)大于50%位喂。BP 神經(jīng)網(wǎng)絡(luò)也少了對(duì)前面結(jié)果的一種反饋。
常見乱灵,易懂的受到前位影響的算法塑崖,加法算法。十位的結(jié)果痛倚,所到個(gè)位結(jié)果的影響规婆,因?yàn)榭赡苡羞M(jìn)位,同樣,百位的結(jié)果所到十位的影響抒蚜。
這種受到前位影響的算法非常的常見掘鄙,而經(jīng)典 BP 神經(jīng)網(wǎng)絡(luò)并不能很好的反映這種算法的特性,需要就經(jīng)典的BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化和改造嗡髓,也就是引進(jìn)前位操漠,歷史數(shù)據(jù)對(duì)網(wǎng)絡(luò)的影響,使其具備時(shí)序性饿这。通過(guò)歷史數(shù)據(jù)的關(guān)聯(lián)來(lái)推測(cè)后續(xù)的事情浊伙。
遞歸神經(jīng)網(wǎng)絡(luò)RNN
從前面加法算法的動(dòng)態(tài)圖中,對(duì)現(xiàn)有的 BP 神經(jīng)網(wǎng)絡(luò)進(jìn)行改造长捧,也就是加入前位的結(jié)果對(duì)于后續(xù)網(wǎng)絡(luò)的影響嚣鄙。
這里把 BP 神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)成上圖的形式,很形象的揭示了遞歸神經(jīng)網(wǎng)絡(luò)的特點(diǎn)串结,前向的結(jié)果哑子,作為下一個(gè)輸入,影響下一個(gè)網(wǎng)絡(luò)的結(jié)果肌割。遞歸神經(jīng)網(wǎng)絡(luò)卧蜓,在很多方向已經(jīng)取得了很好的成果。而一種特殊的遞歸神經(jīng)網(wǎng)絡(luò) Long Short Term 網(wǎng)絡(luò)(LSTM)把敞,取到的結(jié)果最為璀璨烦却,是這個(gè)方向的明星。
來(lái)看看 LSTM 的實(shí)現(xiàn)先巴。
LSTM 網(wǎng)絡(luò)
1997年 Hochreiter & Schmidhuber 提出了Long Short Term 網(wǎng)絡(luò),它是一種 RNN 的實(shí)現(xiàn)形式冒冬,在很多問(wèn)題上伸蚯,LSTM 取得了相當(dāng)大的成功,在許多的領(lǐng)域上都有很好的成果简烤。
最簡(jiǎn)單的 LSTM 網(wǎng)絡(luò):
把前位的輸出結(jié)果當(dāng)成后位的輸入剂邮,經(jīng)過(guò) tanh 層,相當(dāng)于擴(kuò)充了原來(lái)BP神經(jīng)網(wǎng)絡(luò)的另一個(gè)輸入横侦。這樣一次的進(jìn)行訓(xùn)練挥萌。
在簡(jiǎn)化一點(diǎn)的方式如下圖:
如果去掉 layer1 層,那么就是一個(gè)最簡(jiǎn)單的 BP神經(jīng)網(wǎng)絡(luò)了枉侧。這里引入了 layer1 層引瀑,使得經(jīng)典的 BP 神經(jīng)網(wǎng)絡(luò)多了一個(gè)輸入,layer_1 層在加法算法中榨馁,表示的是前一個(gè)輸入就可以反映出加法算法的特性憨栽,從結(jié)構(gòu)來(lái)看,這個(gè) LSTM 的變形并不是非常的復(fù)雜,但現(xiàn)在就重要的就是如何計(jì)算出各個(gè)層次的增量屑柔,然后進(jìn)行迭代了屡萤。
這里主要需要解決導(dǎo)數(shù)問(wèn)題 python 的代碼實(shí)現(xiàn):
變量的更新:
其中 layer1delta 變量為兩個(gè)變量的和:
完整的迭代過(guò)程在:
在遞歸神經(jīng)網(wǎng)絡(luò)中,跟經(jīng)典的 BP 神經(jīng)網(wǎng)絡(luò)在結(jié)構(gòu)上并沒有太多的不同掸宛,最關(guān)鍵的點(diǎn)死陆,還是在求解增量,進(jìn)行迭代唧瘾。
回頭再想措译,如果僅僅用 BP 神經(jīng)網(wǎng)絡(luò)的算法能不能實(shí)現(xiàn)出加法算法,我覺得是可以的劈愚,但是速度和準(zhǔn)確性不會(huì)有 LSTM 高瞳遍。因此,LSTM 的結(jié)構(gòu)也是可以改進(jìn)算法菌羽,不同的結(jié)構(gòu)方式可以避免算法的很多缺陷掠械。
更一般的 LSTM 結(jié)構(gòu):
算法的迭代過(guò)程在:
http://nicodjimenez.github.io/2014/08/08/lstm.html
https://github.com/nicodjimenez/lstm
算法跟BP神經(jīng)網(wǎng)絡(luò)沒有太大的不同,但要注意的還是各個(gè)變量的增量和迭代問(wèn)題注祖。
遞歸神經(jīng)網(wǎng)絡(luò)的應(yīng)用
遞歸神經(jīng)網(wǎng)絡(luò)跟BP神經(jīng)網(wǎng)絡(luò)猾蒂,最大的不同是引進(jìn)了時(shí)序,可以根據(jù)以往的數(shù)據(jù)來(lái)推測(cè)未來(lái)的事件是晨。這是現(xiàn)在比較熱門的一個(gè)方向肚菠。比較多的應(yīng)用實(shí)在語(yǔ)音和文本的處理上,網(wǎng)上有相當(dāng)多的關(guān)于遞歸神經(jīng)網(wǎng)絡(luò)的應(yīng)用罩缴,比如寫出像汪峰一樣的歌詞蚊逢,默寫唐詩(shī),寫冷段子等箫章。但要寫出像樣的歌詞和詩(shī)詞烙荷,還需要做很多的處理,如果把遞歸神經(jīng)網(wǎng)絡(luò)應(yīng)用在推薦系統(tǒng)里檬寂,也會(huì)得到不錯(cuò)的效果终抽。
參考
http://blog.csdn.net/zzukun/article/details/49968129
http://www.reibang.com/p/9dc9f41f0b29
http://nicodjimenez.github.io/2014/08/08/lstm.html
https://github.com/nicodjimenez/lstm
http://blog.csdn.net/longxinchen_ml/article/details/51253526
https://github.com/karpathy/char-rnn
http://blog.csdn.net/v_july_v/article/details/52796239