轉(zhuǎn)載:《理解 LSTM 網(wǎng)絡(luò) | 我愛計(jì)算機(jī)》
Recurrent Neural Networks
人類對(duì)事物的理解并不是從一片空白開始的,往往都是基于對(duì)先前所見所聞的理解來對(duì)看到的進(jìn)行推斷只壳;我們的思想有持久性叮雳,對(duì)市場(chǎng)歷史的理解對(duì)將來的走勢(shì)也具有一定的參考和借鑒毫深。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)一大弊端就是只是在每個(gè)時(shí)間點(diǎn)對(duì)事件類型進(jìn)行分類,很難根據(jù)先前的事件對(duì)后續(xù)進(jìn)行推斷。RNN解決了這個(gè)問題进栽,RNN包含循環(huán)網(wǎng)絡(luò)克胳,允許信息的持久化平绩。
上圖中,神經(jīng)網(wǎng)絡(luò)模塊 A 漠另,讀取某個(gè)輸入 x_i 捏雌,并輸出一個(gè)值 h_i ;循環(huán)可以使得信息從當(dāng)前步傳遞到下一步笆搓。循環(huán)使得RNN看起來神秘性湿,仔細(xì)想想,其實(shí)跟正常的神經(jīng)網(wǎng)絡(luò)沒有太大區(qū)別满败。RNN可以看做是同一神經(jīng)網(wǎng)絡(luò)的多次復(fù)制肤频,每個(gè)神經(jīng)網(wǎng)絡(luò)模塊會(huì)把信息傳遞個(gè)下一個(gè)。如果展開這個(gè)循環(huán)就得到:
鏈?zhǔn)降奶卣鹘沂玖薘NN本質(zhì)山是序列和列表相關(guān)的算墨,RNN是對(duì)于這類數(shù)據(jù)最自然的神經(jīng)網(wǎng)絡(luò)架構(gòu)宵荒。過去幾年,應(yīng)用RNN在語音識(shí)別净嘀、語言建模报咳、翻譯、圖片描述等問題上挖藏,已經(jīng)取得了一定的成功暑刃。建議參考Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks 來看看更豐富有趣的 RNN 的成功應(yīng)用。
這些成功應(yīng)用的關(guān)鍵之處就是LSTM的使用膜眠,LSTM是一種特殊的RNN稍走,比標(biāo)準(zhǔn)的RNN在很多任務(wù)上表現(xiàn)更好,幾乎所有令人興奮的關(guān)于RNN的結(jié)果都是通過LSTM達(dá)到的柴底。
**長期依賴(Long-Term Dependencies)問題 **
RNN 的關(guān)鍵點(diǎn)之一就是他們可以用來連接先前的信息到當(dāng)前的任務(wù)上婿脸,例如使用過去的視頻段來推測(cè)對(duì)當(dāng)前段的理解。如果 RNN 可以做到這個(gè)柄驻,他們就變得非常有用狐树。但是真的可以么?答案是鸿脓,還有很多依賴因素抑钟。
有時(shí)候涯曲,我們僅僅需要知道先前的信息來執(zhí)行當(dāng)前的任務(wù)。例如在塔,我們有一個(gè)語言模型用來基于先前的詞來預(yù)測(cè)下一個(gè)詞幻件。如果我們?cè)囍A(yù)測(cè) “the clouds are in the sky” 最后的詞,我們并不需要任何其他的上下文 —— 因此下一個(gè)詞很顯然就應(yīng)該是 sky蛔溃。在這樣的場(chǎng)景中绰沥,相關(guān)的信息和預(yù)測(cè)的詞位置之間的間隔是非常小的,RNN 可以學(xué)會(huì)使用先前的信息贺待。
但是同樣會(huì)有一些更加復(fù)雜的場(chǎng)景徽曲。假設(shè)我們?cè)囍ヮA(yù)測(cè)“I grew up in France... I speak fluent French”最后的詞。當(dāng)前的信息建議下一個(gè)詞可能是一種語言的名字麸塞,但是如果我們需要弄清楚是什么語言秃臣,我們是需要先前提到的離當(dāng)前位置很遠(yuǎn)的 France 的上下文的。這說明相關(guān)信息和當(dāng)前預(yù)測(cè)位置之間的間隔就肯定變得相當(dāng)?shù)拇竽墓ぁ2恍业氖前麓耍谶@個(gè)間隔不斷增大時(shí),RNN 會(huì)喪失學(xué)習(xí)到連接如此遠(yuǎn)的信息的能力雁比。
在理論上得院,RNN 絕對(duì)可以處理這樣的 長期依賴 問題。人們可以仔細(xì)挑選參數(shù)來解決這類問題中的最初級(jí)形式章贞,但在實(shí)踐中,RNN 肯定不能夠成功學(xué)習(xí)到這些知識(shí)非洲。Bengio, et al. (1994)等人對(duì)該問題進(jìn)行了深入的研究鸭限,他們發(fā)現(xiàn)一些使訓(xùn)練 RNN 變得非常困難的相當(dāng)根本的原因。然而两踏,幸運(yùn)的是败京,LSTM 并沒有這個(gè)問題!
LSTM網(wǎng)絡(luò)
Long Short Term 網(wǎng)絡(luò)—— 一般就叫做 LSTM ——是一種 RNN 特殊的類型梦染,可以學(xué)習(xí)長期依賴信息赡麦。LSTM 由Hochreiter & Schmidhuber (1997)提出,并在近期被Alex Graves進(jìn)行了改良和推廣帕识。在很多問題泛粹,LSTM 都取得相當(dāng)巨大的成功,并得到了廣泛的使用肮疗。LSTM 通過刻意的設(shè)計(jì)來避免長期依賴問題晶姊。記住長期的信息在實(shí)踐中是 LSTM 的默認(rèn)行為,而非需要付出很大代價(jià)才能獲得的能力伪货!所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问矫茄谩T跇?biāo)準(zhǔn)的 RNN 中钾怔,這個(gè)重復(fù)的模塊只有一個(gè)非常簡單的結(jié)構(gòu),例如一個(gè) tanh 層蒙挑。
LSTM 同樣是這樣的結(jié)構(gòu)宗侦,但是重復(fù)的模塊擁有一個(gè)不同的結(jié)構(gòu)。不同于 單一神經(jīng)網(wǎng)絡(luò)層忆蚀,這里是有四個(gè)矾利,以一種非常特殊的方式進(jìn)行交互。
不必?fù)?dān)心這里的細(xì)節(jié)蜓谋。我們會(huì)一步一步地剖析 LSTM 解析圖∶纹ぃ現(xiàn)在,我們先來熟悉一下圖中使用的各種元素的圖標(biāo)桃焕。
在上面的圖例中剑肯,每一條黑線傳輸著一整個(gè)向量,從一個(gè)節(jié)點(diǎn)的輸出到其他節(jié)點(diǎn)的輸入观堂。粉色的圈代表 pointwise 的操作让网,諸如向量的和,而黃色的矩陣就是學(xué)習(xí)到的神經(jīng)網(wǎng)絡(luò)層师痕。合在一起的線表示向量的連接溃睹,分開的線表示內(nèi)容被復(fù)制,然后分發(fā)到不同的位置胰坟。
LSTM的核心思想
LSTM 的關(guān)鍵就是細(xì)胞狀態(tài)因篇,水平線在圖上方貫穿運(yùn)行。細(xì)胞狀態(tài)類似于傳送帶笔横。直接在整個(gè)鏈上運(yùn)行竞滓,只有一些少量的線性交互。信息在上面流傳保持不變會(huì)很容易吹缔。
LSTM 有通過精心設(shè)計(jì)的稱作為“門”的結(jié)構(gòu)來去除或者增加信息到細(xì)胞狀態(tài)的能力商佑。門是一種讓信息選擇式通過的方法。他們包含一個(gè) sigmoid 神經(jīng)網(wǎng)絡(luò)層和一個(gè) pointwise 乘法操作厢塘。
Sigmoid 層輸出 0 到 1 之間的數(shù)值茶没,描述每個(gè)部分有多少量可以通過。0 代表“不許任何量通過”晚碾,1 就指“允許任意量通過”抓半!LSTM 擁有三個(gè)門,來保護(hù)和控制細(xì)胞狀態(tài)格嘁。
逐步理解LSTM
在我們 LSTM 中的第一步是決定我們會(huì)從細(xì)胞狀態(tài)中丟棄什么信息琅关。這個(gè)決定通過一個(gè)稱為忘記門層完成。該門會(huì)讀取h_{t-1}
和 x_t
,輸出一個(gè)在 0 到 1 之間的數(shù)值給每個(gè)在細(xì)胞狀態(tài) C_{t-1}
中的數(shù)字涣易。1 表示“完全保留”画机,0 表示“完全舍棄”。
讓我們回到語言模型的例子中來基于已經(jīng)看到的預(yù)測(cè)下一個(gè)詞新症。在這個(gè)問題中步氏,細(xì)胞狀態(tài)可能包含當(dāng)前主語的性別,因此正確的代詞可以被選擇出來徒爹。當(dāng)我們看到新的主語荚醒,我們希望忘記舊的主語。
下一步是確定什么樣的新信息被存放在細(xì)胞狀態(tài)中隆嗅。這里包含兩個(gè)部分界阁。第一,sigmoid 層稱 “輸入門層” 決定什么值我們將要更新胖喳。然后泡躯,一個(gè) tanh 層創(chuàng)建一個(gè)新的候選值向量,{C}_t
丽焊,會(huì)被加入到狀態(tài)中较剃。下一步,我們會(huì)講這兩個(gè)信息來產(chǎn)生對(duì)狀態(tài)的更新技健。在我們語言模型的例子中写穴,我們希望增加新的主語的性別到細(xì)胞狀態(tài)中,來替代舊的需要忘記的主語雌贱。
現(xiàn)在是更新舊細(xì)胞狀態(tài)的時(shí)間了啊送,C_{t-1}
更新為 C_t
。前面的步驟已經(jīng)決定了將會(huì)做什么欣孤,我們現(xiàn)在就是實(shí)際去完成馋没。我們把舊狀態(tài)與 f_t
相乘,丟棄掉我們確定需要丟棄的信息导街。接著加上i_t
* {C}_t
。這就是新的候選值纤子,根據(jù)我們決定更新每個(gè)狀態(tài)的程度進(jìn)行變化搬瑰。在語言模型的例子中,這就是我們實(shí)際根據(jù)前面確定的目標(biāo)控硼,丟棄舊代詞的性別信息并添加新的信息的地方泽论。
最終,我們需要確定輸出什么值卡乾。這個(gè)輸出將會(huì)基于我們的細(xì)胞狀態(tài)翼悴,但是也是一個(gè)過濾后的版本。首先,我們運(yùn)行一個(gè) sigmoid 層來確定細(xì)胞狀態(tài)的哪個(gè)部分將輸出出去鹦赎。接著谍椅,我們把細(xì)胞狀態(tài)通過 tanh 進(jìn)行處理(得到一個(gè)在 -1 到 1 之間的值)并將它和 sigmoid 門的輸出相乘,最終我們僅僅會(huì)輸出我們確定輸出的那部分古话。在語言模型的例子中雏吭,因?yàn)樗涂吹搅艘粋€(gè) 代詞,可能需要輸出與一個(gè) 動(dòng)詞 相關(guān)的信息陪踩。例如杖们,可能輸出是否代詞是單數(shù)還是負(fù)數(shù),這樣如果是動(dòng)詞的話肩狂,我們也知道動(dòng)詞需要進(jìn)行的詞形變化摘完。
LSTM的變體
我們到目前為止都還在介紹正常的 LSTM。但是不是所有的 LSTM 都長成一個(gè)樣子的傻谁。實(shí)際上孝治,幾乎所有包含 LSTM 的論文都采用了微小的變體。差異非常小栅螟,但是也值得拿出來講一下荆秦。其中一個(gè)流形的 LSTM 變體,就是由 Gers & Schmidhuber (2000) 提出的力图,增加了 “peephole connection”步绸。是說,我們讓 門層 也會(huì)接受細(xì)胞狀態(tài)的輸入吃媒。
上面的圖例中瓤介,我們?cè)黾恿?peephole 到每個(gè)門上,但是許多論文會(huì)加入部分的 peephole 而非所有都加赘那。
另一個(gè)變體是通過使用 coupled 忘記和輸入門刑桑。不同于之前是分開確定什么忘記和需要添加什么新的信息,這里是一同做出決定募舟。我們僅僅會(huì)當(dāng)我們將要輸入在當(dāng)前位置時(shí)忘記祠斧。我們僅僅輸入新的值到那些我們已經(jīng)忘記舊的信息的那些狀態(tài) 。
另一個(gè)改動(dòng)較大的變體是 Gated Recurrent Unit (GRU)拱礁,這是由 Cho, et al. (2014) 提出琢锋。它將忘記門和輸入門合成了一個(gè)單一的 更新門。同樣還混合了細(xì)胞狀態(tài)和隱藏狀態(tài)呢灶,和其他一些改動(dòng)吴超。最終的模型比標(biāo)準(zhǔn)的 LSTM 模型要簡單,也是非常流行的變體鸯乃。
這里只是部分流行的 LSTM 變體鲸阻。當(dāng)然還有很多其他的,如Yao, et al. (2015) 提出的 Depth Gated RNN。還有用一些完全不同的觀點(diǎn)來解決長期依賴的問題鸟悴,如Koutnik, et al. (2014) 提出的 Clockwork RNN陈辱。要問哪個(gè)變體是最好的?其中的差異性真的重要嗎遣臼?Greff, et al. (2015) 給出了流行變體的比較性置,結(jié)論是他們基本上是一樣的。Jozefowicz, et al. (2015) 則在超過 1 萬種 RNN 架構(gòu)上進(jìn)行了測(cè)試揍堰,發(fā)現(xiàn)一些架構(gòu)在某些任務(wù)上也取得了比 LSTM 更好的結(jié)果鹏浅。
結(jié)論
剛開始,我提到通過 RNN 得到重要的結(jié)果屏歹。本質(zhì)上所有這些都可以使用 LSTM 完成隐砸。對(duì)于大多數(shù)任務(wù)確實(shí)展示了更好的性能!由于 LSTM 一般是通過一系列的方程表示的蝙眶,使得 LSTM 有一點(diǎn)令人費(fèi)解季希。然而本文中一步一步地解釋讓這種困惑消除了不少。LSTM 是我們?cè)?RNN 中獲得的重要成功幽纷。很自然地式塌,我們也會(huì)考慮:哪里會(huì)有更加重大的突破呢?在研究人員間普遍的觀點(diǎn)是:“Yes! 下一步已經(jīng)有了——那就是注意力友浸!” 這個(gè)想法是讓 RNN 的每一步都從更加大的信息集中挑選信息峰尝。例如,如果你使用 RNN 來產(chǎn)生一個(gè)圖片的描述收恢,可能會(huì)選擇圖片的一個(gè)部分武学,根據(jù)這部分信息來產(chǎn)生輸出的詞。實(shí)際上伦意,Xu, et al.(2015)已經(jīng)這么做了——如果你希望深入探索注意力可能這就是一個(gè)有趣的起點(diǎn)火窒!還有一些使用注意力的相當(dāng)振奮人心的研究成果,看起來有更多的東西亟待探索……
注意力也不是 RNN 研究領(lǐng)域中唯一的發(fā)展方向驮肉。例如熏矿,Kalchbrenner, et al. (2015) 提出的 Grid LSTM 看起來也是很有前途。使用生成模型的 RNN离钝,諸如Gregor, et al.(2015) Chung, et al. (2015) 和 Bayer & Osendorfer (2015) 提出的模型同樣很有趣票编。在過去幾年中,RNN 的研究已經(jīng)相當(dāng)?shù)娜寄纬剑芯砍晒?dāng)然也會(huì)更加豐富栏妖!