循環(huán)神經(jīng)網(wǎng)絡(luò)
人類不會每時每刻都開始思考登钥。當(dāng)你閱讀這篇文章時,你會根據(jù)你對之前單詞的理解來理解每個單詞薄霜。你不要扔掉所有東西,然后再從頭開始思考纸兔。你的想法有持久性惰瓜。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)無法做到這一點(diǎn),這似乎是一個主要的缺點(diǎn)汉矿。例如崎坊,假設(shè)您想要對電影中每個點(diǎn)發(fā)生的事件進(jìn)行分類。目前尚不清楚傳統(tǒng)神經(jīng)網(wǎng)絡(luò)如何利用其對電影中先前事件的推理來告知后者洲拇。
循環(huán)神經(jīng)網(wǎng)絡(luò)解決了這個問題奈揍,他們是帶有循環(huán)的網(wǎng)絡(luò),允許信息持續(xù)存在。
在上圖中赋续,一塊神經(jīng)網(wǎng)絡(luò)A查看一些輸入xt并輸出一個值ht男翰。 循環(huán)允許信息從網(wǎng)絡(luò)的一個步驟傳遞到下一個步驟。
這些循環(huán)使得循環(huán)神經(jīng)網(wǎng)絡(luò)看起來有點(diǎn)神秘蚕捉。 但是奏篙,如果你多想一點(diǎn),事實(shí)證明它們與普通的神經(jīng)網(wǎng)絡(luò)并沒有什么不同。 可以將循環(huán)神經(jīng)網(wǎng)絡(luò)視為同一網(wǎng)絡(luò)的多個副本秘通,每個副本都將消息傳遞給后繼者为严。 考慮如果我們展開循環(huán)會發(fā)生什么:
這種類似鏈的性質(zhì)表明,遞歸神經(jīng)網(wǎng)絡(luò)與序列和列表密切相關(guān)肺稀。 它們是用于此類數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)的自然架構(gòu)第股。
他們肯定會被使用! 在過去幾年中话原,將RNN應(yīng)用于各種問題取得了令人難以置信的成功:語音識別夕吻,語言建模,翻譯繁仁,圖像字幕......這個列表還在繼續(xù)涉馅。 我將討論使用RNNs可以實(shí)現(xiàn)的驚人壯舉,以及Andrej Karpathy的優(yōu)秀博客文章黄虱,回歸神經(jīng)網(wǎng)絡(luò)的不合理有效性稚矿。 但他們真的很棒。
這些成功的關(guān)鍵在于使用“LSTM”捻浦,這是一種非常特殊的遞歸神經(jīng)網(wǎng)絡(luò)晤揣,對于許多任務(wù)而言,它比標(biāo)準(zhǔn)版本好得多朱灿。 幾乎所有基于遞歸神經(jīng)網(wǎng)絡(luò)的令人興奮的結(jié)果都是用它們實(shí)現(xiàn)的昧识。 這篇論文將探討這些LSTM。
長序列依賴問題
RNN的一個吸引力是他們可能能夠?qū)⑾惹靶畔⑦B接到當(dāng)前任務(wù)盗扒,例如使用先前的視頻幀可能通知對當(dāng)前幀的理解跪楞。 如果RNN可以做到這一點(diǎn),它們將非常有用环疼。 但他們可以嗎习霹? 這取決于。
有時炫隶,我們只需要查看最近的信息來執(zhí)行當(dāng)前任務(wù)淋叶。 例如,考慮一種語言模型伪阶,試圖根據(jù)之前的單詞預(yù)測下一個單詞煞檩。 如果我們試圖預(yù)測“云在天空中”的最后一個詞,我們不需要任何進(jìn)一步的背景 - 很明顯下一個詞將是天空栅贴。 在這種情況下斟湃,如果相關(guān)信息與所需信息之間的差距很小,則RNN可以學(xué)習(xí)使用過去的信息檐薯。
但也有一些情況需要更多的背景凝赛。 考慮嘗試預(yù)測文本中的最后一個詞“我在法國長大......我說流利的法語注暗。”最近的信息表明墓猎,下一個詞可能是一種語言的名稱捆昏,但如果我們想縮小哪種語言,我們需要 從更進(jìn)一步的背景來看毙沾,法國的背景骗卜。 相關(guān)信息與需要變得非常大的點(diǎn)之間的差距是完全可能的。
不幸的是左胞,隨著差距的擴(kuò)大寇仓,RNN無法學(xué)習(xí)連接信息。
理論上烤宙,RNN絕對能夠處理這種“長期依賴性”遍烦。人類可以仔細(xì)挑選參數(shù)來解決這種形式的玩具問題。 遺憾的是门烂,在實(shí)踐中乳愉,RNN似乎無法學(xué)習(xí)它們。 Hochreiter(1991)[德國]
和Bengio等人對該問題進(jìn)行了深入探討(1994)
屯远,他找到了一些非常根本的原因,為什么它可能很難捕虽。
值得慶幸的是慨丐,LSTM沒有這個問題!
LSTM網(wǎng)絡(luò)
長短序列記憶網(wǎng)絡(luò)-通常被稱為LSTMs網(wǎng)絡(luò)泄私,是一種特殊的RNN網(wǎng)絡(luò)房揭,其能夠?qū)W習(xí)到長序列間的依賴。LSTM網(wǎng)絡(luò)由Hochreiter和Schmidhuber(1997)率先提出晌端,并且被很多人精煉和推廣捅暴。他們所提出的改進(jìn)在各種各樣的問題上都表現(xiàn)很好,現(xiàn)在被廣泛的使用咧纠。
LSTM很明顯的被設(shè)計(jì)用于避免長序列依賴問題蓬痒。長時間記住信息實(shí)際上是他們的默認(rèn)行為,而不是他們努力學(xué)到的東西漆羔。
所有的循環(huán)神經(jīng)網(wǎng)絡(luò)都是被一個一個的神經(jīng)元重復(fù)模塊鏈的東西組成梧奢。在標(biāo)準(zhǔn)的RNN中,這些重復(fù)的模塊的結(jié)構(gòu)非常簡單演痒,比如說單個tanh層亲轨。
LSTM也是這種類似的鏈?zhǔn)浇Y(jié)構(gòu),但是重復(fù)模塊中的結(jié)構(gòu)不同鸟顺。其中并不只有一個簡單的神經(jīng)網(wǎng)絡(luò)層惦蚊,而是有四個神經(jīng)網(wǎng)絡(luò)層,且通過一種特殊的方式交互。
別擔(dān)心這里面的細(xì)節(jié)是什么蹦锋,我們將逐步介紹LSTM圖≌咨常現(xiàn)在,請適應(yīng)我們使用的符號晕粪。
在上圖中挤悉,每條線都是一個向量的行進(jìn)路線,從一個節(jié)點(diǎn)的輸出到其它節(jié)點(diǎn)的輸入巫湘。粉紅色的圓圈代表逐點(diǎn)計(jì)算装悲,比如向量加法。黃色的框表示神經(jīng)網(wǎng)絡(luò)層尚氛。兩條線合并表示串聯(lián)诀诊,而分叉代表復(fù)制其內(nèi)容,副本會傳遞到不同的位置阅嘶。
LSTM的核心原理
lstm的關(guān)鍵是單元狀態(tài)属瓣,水平線貫穿圖中頂部的內(nèi)容。
單元狀態(tài)有點(diǎn)像傳送帶讯柔,它直接沿著真?zhèn)€鏈運(yùn)行抡蛙,只有一些次要的線性交互。信息很容易沿著它不變的流動魂迄。
LSTM有能力移除或添加信息到單元狀態(tài)中粗截,這是由一個叫門的結(jié)構(gòu)精細(xì)調(diào)節(jié)的。
門是一種可選擇通過的方法捣炬。它由一個sigmoid神經(jīng)網(wǎng)絡(luò)層和逐點(diǎn)乘法組成熊昌。
sigmoid層的輸出為0到1之間的數(shù),如果乘以這個系數(shù)湿酸,這就是說讓多少信息通過這個門婿屹。值為0意味著不讓任何東西通過,而值為1則意味著讓一切都通過推溃。
每個LSTM重復(fù)模塊由三個這樣的門昂利,用于保護(hù)和控制單元狀態(tài)。
逐步圖解LSTM
LSTM的第一步是確定我們將從單元狀態(tài)中丟棄哪些信息美莫,這個策略由一個被稱為遺忘門的sigmoid層決定页眯。輸入ht?1和xt遺忘門對應(yīng)單元狀態(tài)Ct-1中每個數(shù)輸出一個0到1之間的數(shù)字。1代表“完全保持”厢呵,0表示“完全遺忘”窝撵。
讓那個我們回到我們的語言模型例子中嘗試基于所有之前的詞預(yù)測下一個詞是什么。在這陽的問題中襟铭,單元狀態(tài)中可能包括當(dāng)前主題的性別碌奉,因此可以預(yù)測正確的代詞短曾。當(dāng)我們看到一個新的主題的性別時,我們想要忘記舊主題的性別赐劣。
下一步將決定我們將在單元狀態(tài)中保存哪些新信息嫉拐。 這有兩個部分。 首先魁兼,稱為“輸入門層”的sigmoid層決定我們將更新哪些值婉徘。 接下來,tanh層創(chuàng)建可以添加到狀態(tài)的新候選值Ct~的向量咐汞。 在下一步中萝究,我們將結(jié)合這兩個來創(chuàng)建狀態(tài)更新碗淌。
在我們的語言模型的例子中,我們想要將新主題的性別添加到單元格狀態(tài)贷帮,以替換我們忘記的舊主題绢陌。
現(xiàn)在是時候?qū)⑴f的單元狀態(tài)Ct-1更新為新的單元狀態(tài)Ct扑媚。 之前的步驟已經(jīng)決定要做什么曾我,我們只需要實(shí)際做到這一點(diǎn)勤家。
我們將舊狀態(tài)乘以ft,忘記我們之前決定忘記的事情掠手。 然后我們添加* Ct~憾朴。 這是新的候選值,根據(jù)我們決定更新每個州的值來縮放喷鸽。
在語言模型的情況下伊脓,我們實(shí)際上放棄了關(guān)于舊主題的性別的信息并添加新信息,正如我們在前面的步驟中所做的那樣魁衙。
最后,我們需要決定我們要輸出的內(nèi)容株搔。 此輸出將基于我們的單元狀態(tài)剖淀,但將是過濾版本。 首先纤房,我們運(yùn)行一個sigmoid層纵隔,它決定我們要輸出的單元狀態(tài)的哪些部分。 然后炮姨,我們將單元狀態(tài)設(shè)置為tanh(將值推到介于-1和1之間)并將其乘以sigmoid門的輸出捌刮,以便我們只輸出我們決定的部分。
對于語言模型示例舒岸,由于它只是看到一個主題绅作,它可能想要輸出與動詞相關(guān)的信息,以防接下來會發(fā)生什么蛾派。 例如俄认,它可能輸出主語是單數(shù)還是復(fù)數(shù)个少,以便我們知道動詞應(yīng)該與什么形式共軛,如果接下來的話眯杏。
LSTM的變種
到目前為止我所描述的是一個非常正常的LSTM夜焦。 但并非所有LSTM都與上述相同。 事實(shí)上岂贩,似乎幾乎所有涉及LSTM的論文都使用略有不同的版本茫经。 差異很小,但值得一提的是其中一些萎津。
由Gers&Schmidhuber(2000)引入的一種流行的LSTM變體是添加“窺視孔連接”卸伞。這意味著我們讓門層看到單元狀態(tài)。
上面的圖表為所有門增加了窺視孔姜性,但許多論文會給一些窺視孔而不是其他的瞪慧。
另一種變化是使用耦合的遺忘和輸入門。 我們不是單獨(dú)決定忘記什么以及應(yīng)該添加新信息部念,而是共同做出這些決定弃酌。 我們只會忘記當(dāng)我們要在其位置輸入內(nèi)容時。 當(dāng)我們忘記舊事物時儡炼,我們只向州輸入新值妓湘。
LSTM稍微有點(diǎn)戲劇性的變化是由Cho等人引入的門控循環(huán)單元(GRU)(2014)。 它將遺忘和輸入門組合成一個“更新門”乌询。它還合并了單元狀態(tài)和隱藏狀態(tài)榜贴,并進(jìn)行了一些其他更改。 由此產(chǎn)生的模型比標(biāo)準(zhǔn)LSTM模型簡單妹田,并且越來越受歡迎唬党。
這些只是最著名的LSTM變種中的一小部分。 還有很多其他的東西鬼佣,比如Yao等人的Depth Gated RNNs(2015年)驶拱。 還有一些完全不同的解決長期依賴關(guān)系的方法,如Koutnik等人的Clockwork RNNs(2014)晶衷。
哪種變體最好蓝纲? 差異是否重要? Greff等人(2015)對流行的變種做了很好的比較晌纫,發(fā)現(xiàn)它們都差不多税迷。 Jozefowicz,et al(2015)測試了超過一萬個RNN架構(gòu)锹漱,找到了一些在某些任務(wù)上比LSTM更好的架構(gòu)箭养。
結(jié)論
早些時候,我提到了人們使用RNN取得的顯著成果凌蔬÷独粒基本上所有這些都是使用LSTM實(shí)現(xiàn)的闯冷。對于大多數(shù)任務(wù)來說,它們確實(shí)工作得更好懈词!
寫下來作為一組方程式蛇耀,LSTM看起來非常令人生畏。希望在這篇文章中逐步走過它們坎弯,使它們更加平易近人纺涤。
LSTM是我們通過RNN實(shí)現(xiàn)的重要一步。很自然地想知道:還有另一個重要的步驟嗎抠忘?研究人員的共同觀點(diǎn)是:“是的撩炊!下一步是它的注意力!“我們的想法是讓RNN的每一步都從一些更大的信息集中選擇信息崎脉。例如拧咳,如果您使用RNN創(chuàng)建描述圖像的標(biāo)題,則可能會選擇圖像的一部分來查看其輸出的每個單詞囚灼。實(shí)際上骆膝,徐等人 (2015)做到這一點(diǎn) - 如果你想探索注意力,它可能是一個有趣的起點(diǎn)灶体!使用注意力已經(jīng)取得了許多非常令人興奮的結(jié)果阅签,而且似乎還有很多事情即將來臨......
注意力不是RNN研究中唯一激動人心的線索。例如蝎抽,Kalchbrenner等人的Grid LSTMs (2015)似乎非常有希望政钟。在生成模型中使用RNN的工作 - 例如Gregor等人(2015),Chung等人(2015年)樟结,或Bayer&Osendorfer(2015年)-似乎也很有趣养交。過去幾年對于遞歸神經(jīng)網(wǎng)絡(luò)來說是一個激動人心的時刻,即將到來的神經(jīng)網(wǎng)絡(luò)承諾只會更加激動人心瓢宦!