深度学习笔记:LSTM
Recurrent Neural Networks
人類并不是每時(shí)每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時(shí)候,你都是基于自己已經(jīng)擁有的對先前所見詞的理解來推斷當(dāng)前詞的真實(shí)含義。我們不會(huì)將所有的東西都全部丟棄,然后用空白的大腦進(jìn)行思考。我們的思想擁有持久性。?
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)并不能做到這點(diǎn),看起來也像是一種巨大的弊端。例如,假設(shè)你希望對電影中的每個(gè)時(shí)間點(diǎn)的時(shí)間類型進(jìn)行分類。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)應(yīng)該很難來處理這個(gè)問題——使用電影中先前的事件推斷后續(xù)的事件。?
RNN 解決了這個(gè)問題。RNN 是包含循環(huán)的網(wǎng)絡(luò),允許信息的持久化。
?
RNN 包含循環(huán)
在上面的示例圖中,神經(jīng)網(wǎng)絡(luò)的模塊,A,正在讀取某個(gè)輸入 x_i,并輸出一個(gè)值 h_i。循環(huán)可以使得信息可以從當(dāng)前步傳遞到下一步。這些循環(huán)使得 RNN 看起來非常神秘。然而,如果你仔細(xì)想想,這樣也不比一個(gè)正常的神經(jīng)網(wǎng)絡(luò)難于理解。RNN 可以被看做是同一神經(jīng)網(wǎng)絡(luò)的多次賦值,每個(gè)神經(jīng)網(wǎng)絡(luò)模塊會(huì)把消息傳遞給下一個(gè)。所以,如果我們將這個(gè)循環(huán)展開:
?
展開的 RNN
鏈?zhǔn)降奶卣鹘沂玖?RNN 本質(zhì)上是與序列和列表相關(guān)的。他們是對于這類數(shù)據(jù)的最自然的神經(jīng)網(wǎng)絡(luò)架構(gòu)。
并且 RNN 也已經(jīng)被人們應(yīng)用了!在過去幾年中,應(yīng)用 RNN 在語音識(shí)別,語言建模,翻譯,圖片描述等問題上已經(jīng)取得一定成功,并且這個(gè)列表還在增長。我建議大家參考 Andrej Karpathy 的博客文章——The Unreasonable Effectiveness of Recurrent Neural Networks?來看看更豐富有趣的 RNN 的成功應(yīng)用。
而這些成功應(yīng)用的關(guān)鍵之處就是 LSTM 的使用,這是一種特別的 RNN,比標(biāo)準(zhǔn)的 RNN 在很多的任務(wù)上都表現(xiàn)得更好。幾乎所有的令人振奮的關(guān)于 RNN 的結(jié)果都是通過 LSTM 達(dá)到的。這篇博文也會(huì)就 LSTM 進(jìn)行展開。
長期依賴(Long-Term Dependencies)問題
RNN 的關(guān)鍵點(diǎn)之一就是他們可以用來連接先前的信息到當(dāng)前的任務(wù)上,例如使用過去的視頻段來推測對當(dāng)前段的理解。如果 RNN 可以做到這個(gè),他們就變得非常有用。但是真的可以么?答案是,還有很多依賴因素。有時(shí)候,我們僅僅需要知道先前的信息來執(zhí)行當(dāng)前的任務(wù)。例如,我們有一個(gè) 語言模型用來基于先前的詞來預(yù)測下一個(gè)詞。如果我們試著預(yù)測 “the clouds are in the sky” 最后的詞,我們并不需要任何其他的上下文 —— 因此下一個(gè)詞很顯然就應(yīng)該是 sky。在這樣的場景中,相關(guān)的信息和預(yù)測的詞位置之間的間隔是非常小的,RNN 可以學(xué)會(huì)使用先前的信息。
?
不太長的相關(guān)信息和位置間隔
但是同樣會(huì)有一些更加復(fù)雜的場景。假設(shè)我們試著去預(yù)測“I grew up in France… I speak fluent French”最后的詞。當(dāng)前的信息建議下一個(gè)詞可能是一種語言的名字,但是如果我們需要弄清楚是什么語言,我們是需要先前提到的離當(dāng)前位置很遠(yuǎn)的 France 的上下文的。這說明相關(guān)信息和當(dāng)前預(yù)測位置之間的間隔就肯定變得相當(dāng)?shù)拇蟆2恍业氖?#xff0c;在這個(gè)間隔不斷增大時(shí),RNN 會(huì)喪失學(xué)習(xí)到連接如此遠(yuǎn)的信息的能力。
?
相當(dāng)長的相關(guān)信息和位置間隔
在理論上,RNN 絕對可以處理這樣的 長期依賴 問題。人們可以仔細(xì)挑選參數(shù)來解決這類問題中的最初級(jí)形式,但在實(shí)踐中,RNN 肯定不能夠成功學(xué)習(xí)到這些知識(shí)。?Bengio, et al. (1994)?等人對該問題進(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)降男问?。在?biāo)準(zhǔn)的 RNN 中,這個(gè)重復(fù)的模塊只有一個(gè)非常簡單的結(jié)構(gòu),例如一個(gè) tanh 層。
?
標(biāo)準(zhǔn) RNN 中的重復(fù)模塊包含單一的層
LSTM 同樣是這樣的結(jié)構(gòu),但是重復(fù)的模塊擁有一個(gè)不同的結(jié)構(gòu)。不同于 單一神經(jīng)網(wǎng)絡(luò)層,這里是有四個(gè),以一種非常特殊的方式進(jìn)行交互。
?
LSTM 中的重復(fù)模塊包含四個(gè)交互的層
不必?fù)?dān)心這里的細(xì)節(jié)。我們會(huì)一步一步地剖析 LSTM 解析圖?,F(xiàn)在,我們先來熟悉一下圖中使用的各種元素的圖標(biāo)。
?
LSTM 中的圖標(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ì)很容易。?
?
Paste_Image.png
LSTM 有通過精心設(shè)計(jì)的稱作為“門”的結(jié)構(gòu)來去除或者增加信息到細(xì)胞狀態(tài)的能力。門是一種讓信息選擇式通過的方法。他們包含一個(gè) sigmoid 神經(jīng)網(wǎng)絡(luò)層和一個(gè) pointwise 乘法操作。
?
Paste_Image.png
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ù)測下一個(gè)詞。在這個(gè)問題中,細(xì)胞狀態(tài)可能包含當(dāng)前?主語?的類別,因此正確的?代詞?可以被選擇出來。當(dāng)我們看到新的?代詞?,我們希望忘記舊的?代詞?。
?
決定丟棄信息
下一步是確定什么樣的新信息被存放在細(xì)胞狀態(tài)中。這里包含兩個(gè)部分。第一,sigmoid 層稱 “輸入門層” 決定什么值我們將要更新。然后,一個(gè) tanh 層創(chuàng)建一個(gè)新的候選值向量,\tilde{C}_t,會(huì)被加入到狀態(tài)中。下一步,我們會(huì)講這兩個(gè)信息來產(chǎn)生對狀態(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 * \tilde{C}_t。這就是新的候選值,根據(jù)我們決定更新每個(gè)狀態(tài)的程度進(jìn)行變化。
在語言模型的例子中,這就是我們實(shí)際根據(jù)前面確定的目標(biāo),丟棄舊代詞的類別信息并添加新的信息的地方。
?
更新細(xì)胞狀態(tài)
最終,我們需要確定輸出什么值。這個(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)的輸入。
?
peephole 連接
上面的圖例中,我們增加了 peephole 到每個(gè)門上,但是許多論文會(huì)加入部分的 peephole 而非所有都加。
另一個(gè)變體是通過使用 coupled 忘記和輸入門。不同于之前是分開確定什么忘記和需要添加什么新的信息,這里是一同做出決定。我們僅僅會(huì)當(dāng)我們將要輸入在當(dāng)前位置時(shí)忘記。我們僅僅輸入新的值到那些我們已經(jīng)忘記舊的信息的那些狀態(tài) 。
?
coupled 忘記門和輸入門
另一個(gè)改動(dòng)較大的變體是 Gated Recurrent Unit (GRU),這是由?Cho, et al. (2014)?提出。它將忘記門和輸入門合成了一個(gè)單一的 更新門。同樣還混合了細(xì)胞狀態(tài)和隱藏狀態(tài),和其他一些改動(dòng)。最終的模型比標(biāo)準(zhǔn)的 LSTM 模型要簡單,也是非常流行的變體。
?
GRU
這里只是部分流行的 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)行了測試,發(fā)現(xiàn)一些架構(gòu)在某些任務(wù)上也取得了比 LSTM 更好的結(jié)果。
結(jié)論
剛開始,我提到通過 RNN 得到重要的結(jié)果。本質(zhì)上所有這些都可以使用 LSTM 完成。對于大多數(shù)任務(wù)確實(shí)展示了更好的性能!
由于 LSTM 一般是通過一系列的方程表示的,使得 LSTM 有一點(diǎn)令人費(fèi)解。然而本文中一步一步地解釋讓這種困惑消除了不少。
LSTM 是我們在 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ù)娜?#xff0c;而研究成果當(dāng)然也會(huì)更加豐富!
轉(zhuǎn)載。原文:https://www.jianshu.com/p/9dc9f41f0b29總結(jié)
以上是生活随笔為你收集整理的深度学习笔记:LSTM的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于MySQL查询优化 の 30条忠告
- 下一篇: 删除online日志測试及ora-600