循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks)
人對(duì)一個(gè)問(wèn)題的思考不會(huì)完全從頭開(kāi)始。比如你在閱讀本片文章的時(shí),你會(huì)根據(jù)之前理解過(guò)的信息來(lái)理解下面看到的文字量承。在理解當(dāng)前文字的時(shí)候,你并不會(huì)忘記之前看過(guò)的文字匣掸,從頭思考當(dāng)前文字的含義播聪。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)并不能做到這一點(diǎn)椒振,這是在對(duì)這種序列信息(如語(yǔ)音)進(jìn)行預(yù)測(cè)時(shí)的一個(gè)缺點(diǎn)昭伸。比如你想對(duì)電影中的每個(gè)片段去做事件分類(lèi),傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)是很難通過(guò)利用前面的事件信息來(lái)對(duì)后面事件進(jìn)行分類(lèi)澎迎。
而循環(huán)神經(jīng)網(wǎng)絡(luò)(下面簡(jiǎn)稱(chēng)RNNs)可以通過(guò)不停的將信息循環(huán)操作庐杨,保證信息持續(xù)存在,從而解決上述問(wèn)題夹供。RNNs如下圖所示
可以看出A是一組神經(jīng)網(wǎng)絡(luò)(可以理解為一個(gè)網(wǎng)絡(luò)的自循環(huán))灵份,它的工作是不停的接收并且輸出。從圖中可以看出A允許將信息不停的再內(nèi)部循環(huán)哮洽,這樣使得它可以保證每一步的計(jì)算都保存以前的信息填渠。
這樣講可能還是有點(diǎn)暈,更好的理解方式鸟辅,也是很多文章的做法氛什,將RNNs的自循環(huán)結(jié)構(gòu)展開(kāi),像是將同一個(gè)網(wǎng)絡(luò)復(fù)制并連成一條線(xiàn)的結(jié)構(gòu)匪凉,將自身提取的信息傳遞給下一個(gè)繼承者枪眉,如下圖所示。
這種鏈?zhǔn)降慕Y(jié)構(gòu)揭示了RNNs與序列和列表類(lèi)型的數(shù)據(jù)密切相關(guān)再层。好像他們生來(lái)就是為了處理序列類(lèi)型數(shù)據(jù)的贸铜。
誰(shuí)說(shuō)不是呢!在過(guò)去的幾年里聂受,RNNs在語(yǔ)音識(shí)別蒿秦、文字建模、翻譯饺饭、字幕等領(lǐng)域有很成功的應(yīng)用渤早。在Andrej Karpathy寫(xiě)的博客 The Unreasonable Effectiveness of Recurrent Neural Networks中討論了RNNs取得的驚人成果,這里就不詳細(xì)討論了瘫俊。
很對(duì)成功的案例都有一個(gè)共性鹊杖,就是都用了一種叫LSTMs的特殊的RNNs網(wǎng)絡(luò)結(jié)構(gòu)。下面就來(lái)看看什么是LSTMs扛芽。
長(zhǎng)依賴(lài)存在的問(wèn)題
從之前的描述可以看出來(lái)骂蓖,RNNs理論上是可以將以前的信息與當(dāng)前的任務(wù)進(jìn)行連接,例如使用以前的視頻幀來(lái)幫助網(wǎng)絡(luò)理解當(dāng)前幀川尖。如果RNNs能做到這一點(diǎn)登下,那將會(huì)是非常的有用。但是他們能做到這點(diǎn)嗎?答案是不一定被芳。
有時(shí)候我們需要利用近期的信息來(lái)執(zhí)行來(lái)處理當(dāng)前的任務(wù)缰贝。例如,考慮用一個(gè)語(yǔ)言模型通過(guò)利用以前的文字信息來(lái)預(yù)測(cè)下一個(gè)文字畔濒。如果我們需要預(yù)測(cè)“the clouds are in the sky”這句話(huà)的最后一個(gè)字剩晴,我們不需要其他的信息,通過(guò)前面的語(yǔ)境就能知道最后一個(gè)字應(yīng)該是sky侵状。在這種情況下赞弥,相關(guān)信息與需要該信息的位置距離較近,RNNs能夠?qū)W習(xí)利用以前的信息來(lái)對(duì)當(dāng)前任務(wù)進(jìn)行相應(yīng)的操作趣兄。如下圖所示通過(guò)輸入的信息來(lái)預(yù)測(cè)出
假設(shè)現(xiàn)在有個(gè)更為復(fù)雜的任務(wù),考慮到下面這句話(huà)“I grew up in France… I speak fluent French.”艇潭,現(xiàn)在需要語(yǔ)言模型通過(guò)現(xiàn)有以前的文字信息預(yù)測(cè)該句話(huà)的最后一個(gè)字拼窥。通過(guò)以前文字語(yǔ)境可以預(yù)測(cè)出最后一個(gè)字是某種語(yǔ)言,但是要猜測(cè)出French蹋凝,要根據(jù)之前的France語(yǔ)境闯团。這樣的任務(wù),不同之前仙粱,因?yàn)檫@次的有用信息與需要進(jìn)行處理信息的地方之間的距離較遠(yuǎn)房交,這樣容易導(dǎo)致RNNs不能學(xué)習(xí)到有用的信息,最終推導(dǎo)的任務(wù)可能失敗伐割。如下圖所示候味。
理論上RNNs是能夠處理這種“長(zhǎng)依賴(lài)”問(wèn)題的。通過(guò)調(diào)參來(lái)解決這種問(wèn)題隔心。但是在實(shí)踐過(guò)程中RNNs無(wú)法學(xué)習(xí)到這種特征白群。Hochreiter (1991) [German] 和Bengio, et al. (1994)深入研究過(guò)為什么RNNs沒(méi)法學(xué)習(xí)到這種特征。
幸好LSTMs這種特殊的RNNs是沒(méi)有這個(gè)問(wèn)題的硬霍。
LSTM 網(wǎng)絡(luò)
Long Short Term Memory networks(以下簡(jiǎn)稱(chēng)LSTMs)帜慢,一種特殊的RNN網(wǎng)絡(luò),該網(wǎng)絡(luò)設(shè)計(jì)出來(lái)是為了解決長(zhǎng)依賴(lài)問(wèn)題唯卖。該網(wǎng)絡(luò)由 Hochreiter & Schmidhuber (1997)引入粱玲,并有許多人對(duì)其進(jìn)行了改進(jìn)和普及。他們的工作被用來(lái)解決了各種各樣的問(wèn)題拜轨,直到目前還被廣泛應(yīng)用抽减。
所有循環(huán)神經(jīng)網(wǎng)絡(luò)都具有神經(jīng)網(wǎng)絡(luò)的重復(fù)模塊鏈的形式。 在標(biāo)準(zhǔn)的RNN中橄碾,該重復(fù)模塊將具有非常簡(jiǎn)單的結(jié)構(gòu)卵沉,例如單個(gè)tanh層颠锉。標(biāo)準(zhǔn)的RNN網(wǎng)絡(luò)如下圖所示
LSTMs也具有這種鏈?zhǔn)浇Y(jié)構(gòu),但是它的重復(fù)單元不同于標(biāo)準(zhǔn)RNN網(wǎng)絡(luò)里的單元只有一個(gè)網(wǎng)絡(luò)層史汗,它的內(nèi)部有四個(gè)網(wǎng)絡(luò)層琼掠。LSTMs的結(jié)構(gòu)如下圖所示。
在解釋LSTMs的詳細(xì)結(jié)構(gòu)時(shí)先定義一下圖中各個(gè)符號(hào)的含義停撞,符號(hào)包括下面幾種
圖中黃色類(lèi)似于CNN里的激活函數(shù)操作眉枕,粉色圓圈表示點(diǎn)操作,單箭頭表示數(shù)據(jù)流向怜森,箭頭合并表示向量的合并(concat)操作,箭頭分叉表示向量的拷貝操作
LSTMs的核心思想
LSTMs的核心是細(xì)胞狀態(tài)谤牡,用貫穿細(xì)胞的水平線(xiàn)表示副硅。
細(xì)胞狀態(tài)像傳送帶一樣。它貫穿整個(gè)細(xì)胞卻只有很少的分支翅萤,這樣能保證信息不變的流過(guò)整個(gè)RNNs恐疲。細(xì)胞狀態(tài)如下圖所示
LSTM網(wǎng)絡(luò)能通過(guò)一種被稱(chēng)為門(mén)的結(jié)構(gòu)對(duì)細(xì)胞狀態(tài)進(jìn)行刪除或者添加信息。
門(mén)能夠有選擇性的決定讓哪些信息通過(guò)套么。其實(shí)門(mén)的結(jié)構(gòu)很簡(jiǎn)單培己,就是一個(gè)sigmoid層和一個(gè)點(diǎn)乘操作的組合。如下圖所示
因?yàn)閟igmoid層的輸出是0-1的值胚泌,這代表有多少信息能夠流過(guò)sigmoid層省咨。0表示都不能通過(guò),1表示都能通過(guò)玷室。
一個(gè)LSTM里面包含三個(gè)門(mén)來(lái)控制細(xì)胞狀態(tài)零蓉。
一步一步理解LSTM
前面提到LSTM由三個(gè)門(mén)來(lái)控制細(xì)胞狀態(tài),這三個(gè)門(mén)分別稱(chēng)為忘記門(mén)穷缤、輸入門(mén)和輸出門(mén)敌蜂。下面一個(gè)一個(gè)的來(lái)講述。
LSTM的第一步就是決定細(xì)胞狀態(tài)需要丟棄哪些信息津肛。這部分操作是通過(guò)一個(gè)稱(chēng)為忘記門(mén)的sigmoid單元來(lái)處理的章喉。它通過(guò)查看和信息來(lái)輸出一個(gè)0-1之間的向量,該向量里面的0-1值表示細(xì)胞狀態(tài)中的哪些信息保留或丟棄多少身坐。0表示不保留秸脱,1表示都保留。忘記門(mén)如下圖所示部蛇。
下一步是決定給細(xì)胞狀態(tài)添加哪些新的信息撞反。這一步又分為兩個(gè)步驟,首先搪花,利用和通過(guò)一個(gè)稱(chēng)為輸入門(mén)的操作來(lái)決定更新哪些信息遏片。然后利用和通過(guò)一個(gè)tanh層得到新的候選細(xì)胞信息嘹害,這些信息可能會(huì)被更新到細(xì)胞信息中。這兩步描述如下圖所示吮便。
下面將更新舊的細(xì)胞信息笔呀,變?yōu)樾碌募?xì)胞信息。更新的規(guī)則就是通過(guò)忘記門(mén)選擇忘記舊細(xì)胞信息的一部分髓需,通過(guò)輸入門(mén)選擇添加候選細(xì)胞信息的一部分得到新的細(xì)胞信息许师。更新操作如下圖所示
更新完細(xì)胞狀態(tài)后需要根據(jù)輸入的和來(lái)判斷輸出細(xì)胞的哪些狀態(tài)特征,這里需要將輸入經(jīng)過(guò)一個(gè)稱(chēng)為輸出門(mén)的sigmoid層得到判斷條件僚匆,然后將細(xì)胞狀態(tài)經(jīng)過(guò)tanh層得到一個(gè)-1~1之間值的向量微渠,該向量與輸出門(mén)得到的判斷條件相乘就得到了最終該RNN單元的輸出。該步驟如下圖所示
還是拿語(yǔ)言模型來(lái)舉例說(shuō)明咧擂,在預(yù)測(cè)動(dòng)詞形式的時(shí)候逞盆,我們需要通過(guò)輸入的主語(yǔ)是單數(shù)還是復(fù)數(shù)來(lái)推斷輸出門(mén)輸出的預(yù)測(cè)動(dòng)詞是單數(shù)形式還是復(fù)數(shù)形式。
LSTM的變種
之前描述的LSTM結(jié)構(gòu)是最為普通的松申。在實(shí)際的文章中LSTM的結(jié)構(gòu)存在各種變式云芦,雖然變化都不會(huì)太大,但是也值得一提贸桶。
其中一個(gè)很受歡迎的變式由Gers & Schmidhuber (2000)提出舅逸,它在LSTM的結(jié)構(gòu)中加入了“peephole connections.”結(jié)構(gòu),peephole connections結(jié)構(gòu)的作用是允許各個(gè)門(mén)結(jié)構(gòu)能夠看到細(xì)胞信息皇筛,具體如下圖所示琉历。
上圖描繪的是所有門(mén)都能看到細(xì)胞信息,還有一些變式是在其中的某些門(mén)引入細(xì)胞信息水醋。
還有一種變式是在忘記門(mén)與輸入門(mén)之間引入一個(gè)耦合善已。不同于之前的LSTM結(jié)構(gòu),忘記門(mén)和輸入門(mén)是獨(dú)立的离例,這個(gè)變式是在忘記門(mén)刪除歷史信息的位置加入新的信息换团,在加入新信息的位置刪除舊信息。該結(jié)構(gòu)如下圖所示宫蛆。
一種比其他形式變化更為顯著的LSTM變式是由 Cho, et al. (2014)提出的門(mén)循環(huán)單元(GRU)艘包。它將忘記門(mén)和輸入門(mén)合并成一個(gè)新的門(mén),稱(chēng)為更新門(mén)耀盗。GRU還有一個(gè)門(mén)稱(chēng)為重置門(mén)想虎。如下圖所示
其中重置門(mén)為上圖中前面那個(gè)門(mén),決定了如何將新的輸入信息與前面的記憶相結(jié)合叛拷。更新門(mén)為上圖中后面那個(gè)門(mén)舌厨,定義了前面記憶保存到當(dāng)前時(shí)間步的量。由于該變式的簡(jiǎn)單有效忿薇,后來(lái)被廣泛應(yīng)用裙椭。
這里介紹的只是一些較為有名的LSTM變式躏哩,關(guān)于LSTM的變式其實(shí)還有很多種,像 Yao, et al. (2015)提出的Depth Gated RNNs揉燃。還有其他用于解決長(zhǎng)依賴(lài)問(wèn)題的方法扫尺,如由 Koutnik, et al. (2014)提出的 Clockwork RNNs。
至于哪種變式效果最好炊汤?各種差異對(duì)LSTM的影響有多少正驻?這些問(wèn)題 Greff, et al. (2015)做了一些對(duì)比,結(jié)論是他們基本是一樣的抢腐。 Jozefowicz, et al. (2015)測(cè)試了一萬(wàn)多種RNN結(jié)構(gòu)姑曙,發(fā)現(xiàn)在某些指定任務(wù)上有些變式還是由于標(biāo)準(zhǔn)LSTMs的。
總結(jié)
之前也提到過(guò)RNNs取得了不錯(cuò)的成績(jī)迈倍,這些成績(jī)很多是基于LSTMs來(lái)做的伤靠,說(shuō)明LSTMs適用于大部分的序列場(chǎng)景應(yīng)用。
一般文章寫(xiě)法會(huì)堆一堆公式嚇唬人授瘦,希望本文一步一步的拆分能有助于大家的理解。
LSTMs對(duì)于RNNs的使用是一大進(jìn)步竟宋。那么現(xiàn)在還有個(gè)問(wèn)題提完,是否還有更大的進(jìn)步?對(duì)于很多研究者來(lái)說(shuō)丘侠,但是是肯定的徒欣,那就是attention的問(wèn)世。attention的思想是讓RNN在每一步挑選信息的時(shí)候都能從更大的信息集里面挑選出有用信息蜗字。例如打肝,利用RNN模型為一幀圖片生成字母,它將會(huì)選擇圖片有用的部分來(lái)得到有用的輸入挪捕,從而生成有效的輸出粗梭。事實(shí)上, Xu, et al.(2015) 已經(jīng)這么做了级零,如果你想更深入的了解attention断医,這會(huì)是一個(gè)不錯(cuò)的開(kāi)始。attention方向還有一些振奮人心的研究奏纪,但還有很多東西等待探索......
在RNN領(lǐng)域attention并不是唯一一個(gè)可以研究的點(diǎn)鉴嗤。比如Kalchbrenner, et al. (2015)提出的Grid LSTMs,Gregor, et al. (2015), Chung, et al. (2015), 和 Bayer & Osendorfer (2015)將RNNs用于生成模型的研究都非常有意思序调。
在過(guò)去幾年RNNs方面的研究非常的多醉锅,相信以后的研究成果也會(huì)更為豐富。
致謝
同原文
歡迎加入OCR交流群:785515057(此群已滿(mǎn))
歡迎加入OCR交流群2:826714963