【译】深入理解LSTM网络
遞歸神經(jīng)網(wǎng)絡(luò)
人類不會(huì)每時(shí)每刻都開始思考。 當(dāng)你閱讀這篇文章時(shí),你會(huì)根據(jù)你對(duì)之前單詞的理解來(lái)理解每個(gè)單詞。 你不要扔掉所有東西,然后再?gòu)念^開始思考。 你的想法有持久性。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)無(wú)法做到這一點(diǎn),這似乎是一個(gè)主要的缺點(diǎn)。 例如,假設(shè)您想要對(duì)電影中每個(gè)點(diǎn)發(fā)生的事件進(jìn)行分類。 目前尚不清楚傳統(tǒng)神經(jīng)網(wǎng)絡(luò)如何利用其對(duì)電影中先前事件的推理來(lái)告知后者。
循環(huán)神經(jīng)網(wǎng)絡(luò)解決了這個(gè)問題。 它們是帶有循環(huán)的網(wǎng)絡(luò),允許信息持續(xù)存在。
遞歸神經(jīng)網(wǎng)絡(luò)具有循環(huán)。
在上圖中,一塊神經(jīng)網(wǎng)絡(luò)\(A \) ,查看一些輸入\(x_t \)并輸出一個(gè)值\(h_t \) 。 循環(huán)允許信息從網(wǎng)絡(luò)的一個(gè)步驟傳遞到下一個(gè)步驟。
這些循環(huán)使得循環(huán)神經(jīng)網(wǎng)絡(luò)看起來(lái)有點(diǎn)神秘。 但是,如果你多想一點(diǎn),事實(shí)證明它們與普通的神經(jīng)網(wǎng)絡(luò)并沒有什么不同。 可以將循環(huán)神經(jīng)網(wǎng)絡(luò)視為同一網(wǎng)絡(luò)的多個(gè)副本,每個(gè)副本都將消息傳遞給后繼者。 考慮如果我們展開循環(huán)會(huì)發(fā)生什么:
展開的遞歸神經(jīng)網(wǎng)絡(luò)。
這種類似鏈的性質(zhì)表明,遞歸神經(jīng)網(wǎng)絡(luò)與序列和列表密切相關(guān)。 它們是用于此類數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)的自然架構(gòu)。
他們肯定會(huì)被使用! 在過(guò)去幾年中,將RNN應(yīng)用于各種問題取得了令人難以置信的成功:語(yǔ)音識(shí)別,語(yǔ)言建模,翻譯,圖像字幕......這個(gè)列表還在繼續(xù)。 我將討論使用RNNs可以實(shí)現(xiàn)的驚人壯舉,以及Andrej Karpathy的優(yōu)秀博客文章,回歸神經(jīng)網(wǎng)絡(luò)的不合理有效性 。 但他們真的很棒。
這些成功的關(guān)鍵在于使用“LSTM”,這是一種非常特殊的遞歸神經(jīng)網(wǎng)絡(luò),對(duì)于許多任務(wù)而言,它比標(biāo)準(zhǔn)版本好得多。 幾乎所有基于遞歸神經(jīng)網(wǎng)絡(luò)的令人興奮的結(jié)果都是用它們實(shí)現(xiàn)的。 這篇論文將探討這些LSTM。
長(zhǎng)期依賴問題
RNN的一個(gè)吸引力是他們可能能夠?qū)⑾惹靶畔⑦B接到當(dāng)前任務(wù),例如使用先前的視頻幀可能通知對(duì)當(dāng)前幀的理解。 如果RNN可以做到這一點(diǎn),它們將非常有用。 但他們可以嗎? 這取決于。
有時(shí),我們只需要查看最近的信息來(lái)執(zhí)行當(dāng)前任務(wù)。 例如,考慮一種語(yǔ)言模型,試圖根據(jù)之前的單詞預(yù)測(cè)下一個(gè)單詞。 如果我們?cè)噲D預(yù)測(cè)“云在天空中”的最后一個(gè)詞,我們不需要任何進(jìn)一步的背景 - 很明顯下一個(gè)詞將是天空。 在這種情況下,如果相關(guān)信息與所需信息之間的差距很小,則RNN可以學(xué)習(xí)使用過(guò)去的信息。
但也有一些情況需要更多的背景。 考慮嘗試預(yù)測(cè)文本中的最后一個(gè)詞“我在法國(guó)長(zhǎng)大......我說(shuō)流利的法語(yǔ) 。”最近的信息表明,下一個(gè)詞可能是一種語(yǔ)言的名稱,但如果我們想縮小哪種語(yǔ)言,我們需要從更進(jìn)一步的背景來(lái)看,法國(guó)的背景。 相關(guān)信息與需要變得非常大的點(diǎn)之間的差距是完全可能的。
不幸的是,隨著差距的擴(kuò)大,RNN無(wú)法學(xué)習(xí)連接信息。
理論上,RNN絕對(duì)能夠處理這種“長(zhǎng)期依賴性”。人類可以仔細(xì)挑選參數(shù)來(lái)解決這種形式的玩具問題。 遺憾的是,在實(shí)踐中,RNN似乎無(wú)法學(xué)習(xí)它們。 Hochreiter(1991)[德國(guó)]和Bengio等人對(duì)該問題進(jìn)行了深入探討。 (1994) ,他找到了一些非常根本的原因,為什么它可能很難。
值得慶幸的是,LSTM沒有這個(gè)問題!
LSTM Networks
長(zhǎng)短期內(nèi)存網(wǎng)絡(luò) - 通常只稱為“LSTM” - 是一種特殊的RNN,能夠?qū)W習(xí)長(zhǎng)期依賴性。 它們由Hochreiter&Schmidhuber(1997)介紹 ,并在以下工作中被許多人提煉和推廣。 1它們?cè)诟鞣N各樣的問題上運(yùn)作得非常好,現(xiàn)在被廣泛使用。
LSTM明確旨在避免長(zhǎng)期依賴性問題。 長(zhǎng)時(shí)間記住信息實(shí)際上是他們的默認(rèn)行為,而不是他們難以學(xué)習(xí)的東西!
所有遞歸神經(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中的重復(fù)模塊包含單個(gè)層。
LSTM也具有這種類似鏈的結(jié)構(gòu),但重復(fù)模塊具有不同的結(jié)構(gòu)。 有四個(gè),而不是一個(gè)神經(jīng)網(wǎng)絡(luò)層,以一種非常特殊的方式進(jìn)行交互。
LSTM中的重復(fù)模塊包含四個(gè)交互層。
不要擔(dān)心發(fā)生了什么的細(xì)節(jié)。 我們將逐步介紹LSTM圖。 現(xiàn)在,讓我們?cè)囍鴮?duì)我們將要使用的符號(hào)感到滿意。
在上圖中,每一行都攜帶一個(gè)整個(gè)向量,從一個(gè)節(jié)點(diǎn)的輸出到其他節(jié)點(diǎn)的輸入。 粉色圓圈表示逐點(diǎn)運(yùn)算,如矢量加法,而黃色框表示神經(jīng)網(wǎng)絡(luò)層。 行合并表示連接,而行分叉表示其內(nèi)容被復(fù)制,副本將轉(zhuǎn)移到不同的位置。
LSTM背后的核心理念
LSTM的關(guān)鍵是單元狀態(tài),水平線貫穿圖的頂部。
電池狀態(tài)有點(diǎn)像傳送帶。 它直接沿著整個(gè)鏈運(yùn)行,只有一些次要的線性交互。 信息很容易沿著它不變地流動(dòng)。
LSTM確實(shí)能夠移除或添加信息到細(xì)胞狀態(tài),由稱為門的結(jié)構(gòu)精心調(diào)節(jié)。
蓋茨是一種可選擇通過(guò)信息的方式。 它們由S形神經(jīng)網(wǎng)絡(luò)層和逐點(diǎn)乘法運(yùn)算組成。
sigmoid層輸出0到1之間的數(shù)字,描述每個(gè)組件應(yīng)該通過(guò)多少。 值為零意味著“不讓任何東西通過(guò)”,而值為1則意味著“讓一切都通過(guò)!”
LSTM具有三個(gè)這樣的門,用于保護(hù)和控制電池狀態(tài)。
一步一步的LSTM走過(guò)
我們的LSTM的第一步是確定我們將從細(xì)胞狀態(tài)中丟棄哪些信息。 這個(gè)決定是由一個(gè)叫做“忘記門層”的sigmoid層決定的。它看著\(h_ {t-1} \)和\(x_t \) ,并在\(0 \)和\(1之間輸出一個(gè)數(shù)字\)對(duì)于單元格狀態(tài)中的每個(gè)數(shù)字\(C_ {t-1} \) 。 \(1 \)表示“完全保留此”,而\(0 \)表示“完全擺脫這個(gè)”。
讓我們回到我們的語(yǔ)言模型示例,試圖根據(jù)以前的所有單詞預(yù)測(cè)下一個(gè)單詞。 在這樣的問題中,細(xì)胞狀態(tài)可能包括當(dāng)前受試者的性別,因此可以使用正確的代詞。 當(dāng)我們看到一個(gè)新主題時(shí),我們想要忘記舊主題的性別。
下一步是確定我們將在單元狀態(tài)中存儲(chǔ)哪些新信息。 這有兩個(gè)部分。 首先,稱為“輸入門層”的sigmoid層決定我們將更新哪些值。 接下來(lái),tanh層創(chuàng)建一個(gè)新候選值的向量, \(\ tilde {C} _t \) ,可以添加到狀態(tài)。 在下一步中,我們將結(jié)合這兩個(gè)來(lái)創(chuàng)建狀態(tài)更新。
在我們的語(yǔ)言模型的例子中,我們想要將新主題的性別添加到單元格狀態(tài),以替換我們忘記的舊主題。
現(xiàn)在是時(shí)候?qū)⑴f單元狀態(tài)\(C_ {t-1} \)更新為新單元狀態(tài)\(C_t \) 。 之前的步驟已經(jīng)決定要做什么,我們只需要實(shí)際做到這一點(diǎn)。
我們將舊狀態(tài)乘以\(f_t \) ,忘記我們之前決定忘記的事情。 然后我們添加\(i_t * \ tilde {C} _t \) 。 這是新的候選值,根據(jù)我們決定更新每個(gè)州的值來(lái)縮放。
在語(yǔ)言模型的情況下,我們實(shí)際上放棄了關(guān)于舊主題的性別的信息并添加新信息,正如我們?cè)谇懊娴牟襟E中所做的那樣。
最后,我們需要決定我們要輸出的內(nèi)容。 此輸出將基于我們的單元狀態(tài),但將是過(guò)濾版本。 首先,我們運(yùn)行一個(gè)sigmoid層,它決定我們要輸出的單元狀態(tài)的哪些部分。 然后,我們將單元格狀態(tài)通過(guò)\(\ tanh \) (將值推到\( - 1 \)和\(1 \)之間 )并將其乘以sigmoid門的輸出,這樣我們只輸出我們決定的部分。
對(duì)于語(yǔ)言模型示例,由于它只是看到一個(gè)主題,它可能想要輸出與動(dòng)詞相關(guān)的信息,以防接下來(lái)會(huì)發(fā)生什么。 例如,它可能輸出主語(yǔ)是單數(shù)還是復(fù)數(shù),以便我們知道動(dòng)詞應(yīng)該與什么形式共軛,如果接下來(lái)的話。
長(zhǎng)期記憶的變種
到目前為止我所描述的是一個(gè)非常正常的LSTM。 但并非所有LSTM都與上述相同。 事實(shí)上,似乎幾乎所有涉及LSTM的論文都使用略有不同的版本。 差異很小,但值得一提的是其中一些。
由Gers&Schmidhuber(2000)引入的一種流行的LSTM變體是添加“窺視孔連接”。這意味著我們讓柵極層看到單元狀態(tài)。
上面的圖表為所有門增加了窺視孔,但許多論文會(huì)給一些窺視孔而不是其他的。
另一種變化是使用耦合的遺忘和輸入門。 我們不是單獨(dú)決定忘記什么以及應(yīng)該添加新信息,而是共同做出這些決定。 我們只會(huì)忘記當(dāng)我們要在其位置輸入內(nèi)容時(shí)。 當(dāng)我們忘記舊事物時(shí),我們只向州輸入新值。
LSTM稍微有點(diǎn)戲劇性的變化是由Cho等人引入的門控循環(huán)單元(GRU) 。 (2014年) 。 它將遺忘和輸入門組合成一個(gè)“更新門”。它還合并了單元狀態(tài)和隱藏狀態(tài),并進(jìn)行了一些其他更改。 由此產(chǎn)生的模型比標(biāo)準(zhǔn)LSTM模型簡(jiǎn)單,并且越來(lái)越受歡迎。
這些只是最著名的LSTM變種中的一小部分。 還有很多其他的東西,比如Yao等人的 Depth Gated RNNs 。 (2015年) 。 還有一些完全不同的解決長(zhǎng)期依賴關(guān)系的方法,如Koutnik等人的 Clockwork RNNs 。 (2014年) 。
哪種變體最好? 差異是否重要? 格雷夫等人。 (2015)對(duì)流行的變種做了很好的比較,發(fā)現(xiàn)它們都差不多。 Jozefowicz,et al。 (2015)測(cè)試了超過(guò)一萬(wàn)個(gè)RNN架構(gòu),找到了一些在某些任務(wù)上比LSTM更好的架構(gòu)。
結(jié)論
早些時(shí)候,我提到了人們使用RNN取得的顯著成果。 基本上所有這些都是使用LSTM實(shí)現(xiàn)的。 對(duì)于大多數(shù)任務(wù)來(lái)說(shuō),它們確實(shí)工作得更好!
寫下來(lái)作為一組方程式,LSTM看起來(lái)非常令人生畏。 希望在這篇文章中逐步走過(guò)它們,使它們更加平易近人。
LSTM是我們通過(guò)RNN實(shí)現(xiàn)的重要一步。 很自然地想知道:還有另一個(gè)重要的步驟嗎? 研究人員的共同觀點(diǎn)是:“是的! 下一步是它的注意力!“我們的想法是讓RNN的每一步都從一些更大的信息集中選擇信息。 例如,如果您使用RNN創(chuàng)建描述圖像的標(biāo)題,則可能會(huì)選擇圖像的一部分來(lái)查看其輸出的每個(gè)單詞。 實(shí)際上, 徐等人。 (2015)做到這一點(diǎn) - 如果你想探索注意力,它可能是一個(gè)有趣的起點(diǎn)! 使用注意力已經(jīng)取得了許多非常令人興奮的結(jié)果,而且似乎還有很多事情即將來(lái)臨......
注意力不是RNN研究中唯一激動(dòng)人心的線索。 例如, Kalchbrenner 等人的 Grid LSTMs 。 (2015)似乎非常有希望。 在生成模型中使用RNN的工作 - 例如Gregor, et al。 (2015) , Chung, et al。 (2015年) ,或Bayer&Osendorfer(2015年) - 似乎也很有趣。 過(guò)去幾年對(duì)于遞歸神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)是一個(gè)激動(dòng)人心的時(shí)刻,即將到來(lái)的神經(jīng)網(wǎng)絡(luò)承諾只會(huì)更加激動(dòng)人心!
致謝
我很感謝很多人幫助我更好地理解LSTM,評(píng)論可視化,并對(duì)這篇文章提供反饋。
我非常感謝Google的同事提供的有用反饋,尤其是Oriol Vinyals , Greg Corrado , Jon Shlens , Luke Vilnis和Ilya Sutskever 。 我也很感謝許多其他朋友和同事花時(shí)間幫助我,包括Dario Amodei和Jacob Steinhardt 。 我特別感謝Kyunghyun Cho關(guān)于我的圖表的非常周到的信件。
在這篇文章之前,我在神經(jīng)網(wǎng)絡(luò)教授的兩個(gè)研討會(huì)系列中練習(xí)解釋LSTM。 感謝所有參與這些活動(dòng)的人,感謝他們對(duì)我的耐心和反饋。
除了原作者之外,很多人都對(duì)現(xiàn)代LSTM做出了貢獻(xiàn)。 一個(gè)非全面的名單是:Felix Gers,Fred Cummins,Santiago Fernandez,Justin Bayer,Daan Wierstra,Julian Togelius,Faustino Gomez,Matteo Gagliolo和Alex Graves 。 ?
?
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
總結(jié)
以上是生活随笔為你收集整理的【译】深入理解LSTM网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用CRF做命名实体识别——NER系列(三
- 下一篇: Linux crond 每分钟,每小时,