?Recurrent neural networks(RNN)循環(huán)神經(jīng)網(wǎng)絡(luò),在前饋神經(jīng)網(wǎng)絡(luò)中令哟,單獨(dú)的輸入完全確定了剩下的層上的神經(jīng)元的 激活值恼琼。
可以想象,這是一幅靜態(tài)的圖景:網(wǎng)絡(luò)中的所有事物都被固定了屏富,處于一種“冰凍結(jié) 晶”的狀態(tài)晴竞。但假如,我們允許網(wǎng)絡(luò)中的元素能夠以動(dòng)態(tài)方式不斷地比那話狠半。
例如噩死,隱藏神經(jīng)元 的行為不是完全由前一層的隱藏神經(jīng)元,而是同樣受制于更早的層上的神經(jīng)元的激活值神年。這樣 肯定會帶來跟前饋神經(jīng)網(wǎng)絡(luò)不同的效果已维。也可能隱藏和輸出層的神經(jīng)元的激活值不會單單由當(dāng) 前的網(wǎng)絡(luò)輸入決定,而且包含了前面的輸入的影響已日。
RNN 的弊端
?RNN 是在有順序的數(shù)據(jù)上進(jìn)行學(xué)習(xí)的. 為了記住這些數(shù)據(jù), RNN 會像人一樣產(chǎn)生對先前發(fā)生事件的記憶. 不過一般形式的 RNN 就像一個(gè)老爺爺, 有時(shí)候比較健忘.
為什么會這樣呢?
?想像現(xiàn)在有這樣一個(gè) RNN, 他的輸入值是一句話: ‘我今天要做紅燒排骨, 首先要準(zhǔn)備排骨, 然后…., 最后美味的一道菜就出鍋了’, shua ~ 說著說著就流口水了.
現(xiàn)在請 RNN 來分析, 我今天做的到底是什么菜呢. RNN可能會給出“辣子雞”這個(gè)答案. 由于判斷失誤, RNN就要開始學(xué)習(xí) 這個(gè)長序列 X 和 ‘紅燒排骨’ 的關(guān)系 , 而RNN需要的關(guān)鍵信息 ”紅燒排骨”卻出現(xiàn)在句子開頭,
?再來看看 RNN是怎樣學(xué)習(xí)的吧. 紅燒排骨這個(gè)信息原的記憶要進(jìn)過長途跋涉才能抵達(dá)最后一個(gè)時(shí)間點(diǎn). 然后我們得到誤差, 而且在 反向傳遞 得到的誤差的時(shí)候, 他在每一步都會 乘以一個(gè)自己的參數(shù) W. 如果這個(gè) W 是一個(gè)小于1 的數(shù), 比如0.9. 這個(gè)0.9 不斷乘以誤差, 誤差傳到初始時(shí)間點(diǎn)也會是一個(gè)接近于零的數(shù), 所以對于初始時(shí)刻, 誤差相當(dāng)于就消失了.
我們把這個(gè)問題叫做梯度消失或者梯度彌散 Gradient vanishing. 反之如果 W 是一個(gè)大于1 的數(shù), 比如1.1 不斷累乘, 則到最后變成了無窮大的數(shù), RNN被這無窮大的數(shù)撐死了, 這種情況我們叫做剃度爆炸, Gradient exploding. 這就是普通 RNN 沒有辦法回憶起久遠(yuǎn)記憶的原因.
LSTM
?LSTM 就是為了解決這個(gè)問題而誕生的. LSTM 和普通 RNN 相比, 多出了三個(gè)控制器. (輸入控制, 輸出控制, 忘記控制). 現(xiàn)在, LSTM RNN 內(nèi)部的情況是這樣.
?他多了一個(gè) 控制全局的記憶, 我們用粗線代替. 為了方便理解, 我們把粗線想象成電影或游戲當(dāng)中的 主線劇情. 而原本的 RNN 體系就是 分線劇情.
三個(gè)控制器都是在原始的 RNN 體系上, 我們先看 輸入方面 , 如果此時(shí)的分線劇情對于劇終結(jié)果十分重要, 輸入控制就會將這個(gè)分線劇情按重要程度 寫入主線劇情 進(jìn)行分析.
再看 忘記方面, 如果此時(shí)的分線劇情更改了我們對之前劇情的想法, 那么忘記控制就會將之前的某些主線劇情忘記, 按比例替換成現(xiàn)在的新劇情. 所以主線劇情的更新就取決于輸入 和忘記 控制.
最后的輸出方面, 輸出控制會基于目前的主線劇情和分線劇情判斷要輸出的到底是什么.基于這些控制機(jī)制, LSTM 就像延緩記憶衰退的良藥, 可以帶來更好的結(jié)果.