-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
lstm神經(jīng)網(wǎng)絡(luò)(lstm神經(jīng)網(wǎng)絡(luò)原理)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于lstm神經(jīng)網(wǎng)絡(luò)的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、如何簡單的理解LSTM——其實沒有那么復(fù)雜
譯自原文: Understanding LSTM Networks
人類針對每個問題的思考,一般不會是完全的從頭開始思考。正如當(dāng)你閱讀這篇譯文的時候,你會根據(jù)已經(jīng)閱讀過的內(nèi)容來對后面的內(nèi)容進(jìn)行理解,你不會把之前的東西都丟掉從頭進(jìn)行思考,你對內(nèi)容的理解是貫穿的。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)做不到這一點,而這似乎是一個主要的缺點。 例如,假設(shè)您想對電影中的每個事件進(jìn)行分類。我們無法想象傳統(tǒng)神經(jīng)網(wǎng)絡(luò)如何能夠利用前面的場景去干預(yù)后面的預(yù)測。
幸好循環(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ò)看起來很神秘。 然而,如果你再多考慮一下,你就會發(fā)現(xiàn)其實它和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)并不是完全不同。 一個循環(huán)神經(jīng)網(wǎng)絡(luò)可以被認(rèn)為是同一個網(wǎng)絡(luò)的多個副本,每一個都傳遞一個消息給后繼者。 我們考慮一下如果將循環(huán)展開會發(fā)生什么:(示意如下)
這種鏈狀特征揭示了循環(huán)神經(jīng)網(wǎng)絡(luò)與序列和列表密切相關(guān)。 它們是用于此類數(shù)據(jù)的自然神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。
他們肯定是有用的! 在過去的幾年里,RNN應(yīng)在語音識別、語言建模、翻譯,圖像字幕等各種問題上取得了巨大成功。在Andrej Karpathy的這篇博文—— RNN的難以理解的有效性(The Unreasonable Effectiveness of Recurrent Neural Networks) 中討論了RNN取得的驚人成果,他們真的很神奇
這些成功的案例的共同點就是都是用了LSTM,這是一種非常特殊的循環(huán)神經(jīng)網(wǎng)絡(luò),對于許多任務(wù)來說,它們比基準(zhǔn)版本好的多。 幾乎所有令人興奮的結(jié)果都是基于循環(huán)神經(jīng)網(wǎng)絡(luò)實現(xiàn)的,這篇文章將探討這些LSTM,帶你解開LSTM的神秘面紗。
RNN顯著的魅力是將以前的信息連接到當(dāng)前任務(wù)的這種思路,例如使用先前的視頻幀可以有助于對當(dāng)前幀的理解。 如果RNN可以做到這一點,這將非常有用。 但他可以嗎?這要看情況。
有時,為了處理當(dāng)前的任務(wù),我們只需要查看最近的信息。 例如,考慮一種語言模型,該模型根據(jù)前面的詞語來預(yù)測下一個單詞。 如果我們試圖預(yù)測““the clouds are in the sky”的最后一個單詞,我們不需要任何其他的語境信息——下一個單詞顯然是sky。 在相關(guān)信息和需要該信息的距離較近的時候,RNN能夠?qū)W會去利用歷史信息。
但也有需要更多上下文的情況。 考慮嘗試預(yù)測文本中的最后一個單詞“I grew up in France… I speak fluent French.”。最近的信息表明,下一個單詞可能是一種語言的名稱,但如果我們想縮范圍確定那種語言,我們需要從前面獲取法國的背景。 相關(guān)信息和需要該信息的地方的距離變得非常大的情況是很可能的。
不幸的是,隨著距離的增加,RNN無法有效的利用歷史信息。
在理論上,RNN絕對有能力處理這樣的“長依賴”問題。人們可以仔細(xì)挑選參數(shù)來解決這種形式的問題。 可悲的是,在實踐中,RNN似乎無法學(xué)習(xí)到這些特征。 Hochreiter 和 Bengio ,曾經(jīng)深入的研究過這個問題,他們發(fā)現(xiàn)一些根本性的原因,能夠解釋RNN為什么不work。
謝天謝地,LSTM沒有這個問題!
長短記憶神經(jīng)網(wǎng)絡(luò)——通常稱作LSTM,是一種特殊的RNN,能夠?qū)W習(xí)長的依賴關(guān)系。 他們由 Hochreiter&Schmidhuber 引入,并被許多人進(jìn)行了改進(jìn)和普及。他們在各種各樣的問題上工作的非常好,現(xiàn)在被廣泛使用。
LSTM是為了避免長依賴問題而精心設(shè)計的。 記住較長的歷史信息實際上是他們的默認(rèn)行為,而不是他們努力學(xué)習(xí)的東西。
所有循環(huán)神經(jīng)網(wǎng)絡(luò)都具有神經(jīng)網(wǎng)絡(luò)的重復(fù)模塊鏈的形式。 在標(biāo)準(zhǔn)的RNN中,該重復(fù)模塊將具有非常簡單的結(jié)構(gòu),例如單個tanh層。
LSTM也擁有這種鏈狀結(jié)構(gòu),但是重復(fù)模塊則擁有不同的結(jié)構(gòu)。與神經(jīng)網(wǎng)絡(luò)的簡單的一層相比,LSTM擁有四層,這四層以特殊的方式進(jìn)行交互。
不要過早擔(dān)心細(xì)節(jié)問題, 稍后我們將一步一步地剖析LSTM。 現(xiàn)在,讓我們先熟悉一下我們將要使用的符號。
在上圖中,每一行都帶有一個向量,該向量從一個節(jié)點輸出到其他節(jié)點的輸入。 粉紅色圓圈表示點向運算,如向量加法、點乘,而黃色框是學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)層。 線的合并表示連接,而線的交叉表示其內(nèi)容正在復(fù)制,副本將轉(zhuǎn)到不同的位置。
LSTM的關(guān)鍵是細(xì)胞狀態(tài),表示細(xì)胞狀態(tài)的這條線水平的穿過圖的頂部。
細(xì)胞的狀態(tài)類似于輸送帶,細(xì)胞的狀態(tài)在整個鏈上運行,只有一些小的線性操作作用其上,信息很容易保持不變的流過整個鏈。
LSTM確實具有刪除或添加信息到細(xì)胞狀態(tài)的能力,這個能力是由被稱為門(Gate)的結(jié)構(gòu)所賦予的。
門(Gate)是一種可選地讓信息通過的方式。 它由一個Sigmoid神經(jīng)網(wǎng)絡(luò)層和一個點乘法運算組成。
Sigmoid神經(jīng)網(wǎng)絡(luò)層輸出0和1之間的數(shù)字,這個數(shù)字描述每個組件有多少信息可以通過, 0表示不通過任何信息,1表示全部通過
LSTM有三個門,用于保護(hù)和控制細(xì)胞的狀態(tài)。
LSTM的第一步是決定我們要從細(xì)胞狀態(tài)中丟棄什么信息。 該決定由被稱為“忘記門”的Sigmoid層實現(xiàn)。它查看ht-1(前一個輸出)和xt(當(dāng)前輸入),并為單元格狀態(tài)Ct-1(上一個狀態(tài))中的每個數(shù)字輸出0和1之間的數(shù)字。1代表完全保留,而0代表徹底刪除。
讓我們回到語言模型的例子,試圖根據(jù)以前的語料來預(yù)測下一個單詞。 在這樣的問題中,細(xì)胞狀態(tài)可能包括當(dāng)前主題的性別,從而決定使用正確的代詞。 當(dāng)我們看到一個新主題時,我們想要忘記舊主題的性別。
下一步是決定我們要在細(xì)胞狀態(tài)中存儲什么信息。 這部分分為兩步。 首先,稱為“輸入門層”的Sigmoid層決定了我們將更新哪些值。 接下來一個tanh層創(chuàng)建候選向量Ct,該向量將會被加到細(xì)胞的狀態(tài)中。 在下一步中,我們將結(jié)合這兩個向量來創(chuàng)建更新值。
在我們的語言模型的例子中,我們希望將新主題的性別添加到單元格狀態(tài),以替換我們忘記的舊對象。
現(xiàn)在是時候去更新上一個狀態(tài)值Ct−1了,將其更新為Ct。簽名的步驟以及決定了應(yīng)該做什么,我們只需實際執(zhí)行即可。
我們將上一個狀態(tài)值乘以ft,以此表達(dá)期待忘記的部分。之后我們將得到的值加上 it∗C̃ t。這個得到的是新的候選值, 按照我們決定更新每個狀態(tài)值的多少來衡量.
在語言模型的例子中,對應(yīng)著實際刪除關(guān)于舊主題性別的信息,并添加新信息,正如在之前的步驟中描述的那樣。
最后,我們需要決定我們要輸出什么。 此輸出將基于我們的細(xì)胞狀態(tài),但將是一個過濾版本。 首先,我們運行一個sigmoid層,它決定了我們要輸出的細(xì)胞狀態(tài)的哪些部分。 然后,我們將單元格狀態(tài)通過tanh(將值規(guī)范化到-1和1之間),并將其乘以Sigmoid門的輸出,至此我們只輸出了我們決定的那些部分。
對于語言模型的例子,由于只看到一個主題,考慮到后面可能出現(xiàn)的詞,它可能需要輸出與動詞相關(guān)的信息。 例如,它可能會輸出主題是單數(shù)還是復(fù)數(shù),以便我們知道動詞應(yīng)該如何組合在一起。
到目前為止,所描述的是一個很正常的LSTM。 但并不是所有的LSTM都與上述相同。 事實上,似乎幾乎每一篇涉及LSTM的論文都使用了一個略有不同的版本,差異很小,但有一些值得一看。
一個比較流行的LSTM變種是由 Gers & Schmidhuber (2000) 提出的,添加“peephole connections”。這意味著,我們允許gate層去看細(xì)胞的狀態(tài)。
上面的圖中所有的Sigmoid層都增加了窺視,但許多論文實現(xiàn)不是針對所有都增加窺探,而是有針對性的增加。
另一種變化是使用耦合的忘記和輸入門,而不是單獨決定要忘記什么、添加什么,這個決定需要一起做。 只有當(dāng)需要輸入某些信息的時候,我們才會忘記這個位置的歷史信息。只有當(dāng)我們忘記一些歷史信息的時候,我們才在狀態(tài)中添加新的信息。
LSTM的一個稍微更顯著的變化是由 Cho 介紹的門控循環(huán)單元(或GRU)。 它將忘記和輸入門組合成一個單一的“更新門”。它還將單元格狀態(tài)和隱藏狀態(tài)合并,并進(jìn)行了一些其他更改。 所得到的模型比標(biāo)準(zhǔn)LSTM模型更簡單,并且越來越受歡迎。
這些只是最顯著的LSTM變體中的幾個, 還有很多其他的,比如 Depth Gated RNNs ,還有一些完全不同的處理長期依賴的方法,例如 Clockwork 。哪些變體最好、差異的重要性等, Greff 做一個很好的變體的比較,發(fā)現(xiàn)他們都差不多。 Jozefowicz 測試了大量的RNN架構(gòu),發(fā)現(xiàn)一些RNN結(jié)構(gòu)在某些任務(wù)上要比LSTM更好。
此前,我提到人們通過RNN實現(xiàn)了顯著的成果。 基本上所有這些都是使用LSTM實現(xiàn)的。 對于大多數(shù)任務(wù)而言LSTM很有效。
一般介紹LSTM的文章大部分會寫一大組方程式,這使得LSTM看起來很嚇人。 希望通過這篇文章的逐步講解,幫助讀者更好的理解LSTM。
LSTM是我們使用RNN的一個巨大進(jìn)步。 很自然的想法:更大的進(jìn)步嗎? 研究人員的共同觀點是——有,那就是注意力模型。這個想法是讓RNN的每一步挑選信息的過程都參照上層的主題信息,關(guān)于Attention模型后面我會再進(jìn)行詳盡的描述,這里不再討論。
希望通過本文讓想了解和使用LSTM的人能夠了解其工作原理,能更好的使用,不被大量的數(shù)學(xué)公式和推導(dǎo)所阻礙。
二、LSTM神經(jīng)網(wǎng)絡(luò)輸入輸出究竟是怎樣的
每個時刻的輸入都是一個向量,它的長度是輸入層神經(jīng)元的個數(shù)。在你的問題中,這個向量就是embedding向量。它的長度與時間步的個數(shù)(即句子的長度)沒有關(guān)系。
每個時刻的輸出是一個概率分布向量,其中最大值的下標(biāo)決定了輸出哪個詞。
三、【譯】理解LSTM(通俗易懂版)
人對一個問題的思考不會完全從頭開始。比如你在閱讀本片文章的時,你會根據(jù)之前理解過的信息來理解下面看到的文字。在理解當(dāng)前文字的時候,你并不會忘記之前看過的文字,從頭思考當(dāng)前文字的含義。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)并不能做到這一點,這是在對這種序列信息(如語音)進(jìn)行預(yù)測時的一個缺點。比如你想對電影中的每個片段去做事件分類,傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)是很難通過利用前面的事件信息來對后面事件進(jìn)行分類。
而循環(huán)神經(jīng)網(wǎng)絡(luò)(下面簡稱RNNs)可以通過不停的將信息循環(huán)操作,保證信息持續(xù)存在,從而解決上述問題。RNNs如下圖所示
可以看出A是一組神經(jīng)網(wǎng)絡(luò)(可以理解為一個網(wǎng)絡(luò)的自循環(huán)),它的工作是不停的接收 并且輸出 。從圖中可以看出A允許將信息不停的再內(nèi)部循環(huán),這樣使得它可以保證每一步的計算都保存以前的信息。
這樣講可能還是有點暈,更好的理解方式,也是很多文章的做法,將RNNs的自循環(huán)結(jié)構(gòu)展開,像是將同一個網(wǎng)絡(luò)復(fù)制并連成一條線的結(jié)構(gòu),將自身提取的信息傳遞給下一個繼承者,如下圖所示。
這種鏈?zhǔn)降慕Y(jié)構(gòu)揭示了RNNs與序列和列表類型的數(shù)據(jù)密切相關(guān)。好像他們生來就是為了處理序列類型數(shù)據(jù)的。
誰說不是呢!在過去的幾年里,RNNs在語音識別、文字建模、翻譯、字幕等領(lǐng)域有很成功的應(yīng)用。在Andrej Karpathy寫的博客 The Unreasonable Effectiveness of Recurrent Neural Networks 中討論了RNNs取得的驚人成果,這里就不詳細(xì)討論了。
很對成功的案例都有一個共性,就是都用了一種叫LSTMs的特殊的RNNs網(wǎng)絡(luò)結(jié)構(gòu)。下面就來看看什么是LSTMs。
從之前的描述可以看出來,RNNs理論上是可以將以前的信息與當(dāng)前的任務(wù)進(jìn)行連接,例如使用以前的視頻幀來幫助網(wǎng)絡(luò)理解當(dāng)前幀。如果RNNs能做到這一點,那將會是非常的有用。但是他們能做到這點嗎?答案是不一定。
有時候我們需要利用近期的信息來執(zhí)行來處理當(dāng)前的任務(wù)。例如,考慮用一個語言模型通過利用以前的文字信息來預(yù)測下一個文字。如果我們需要預(yù)測“the clouds are in the sky”這句話的最后一個字,我們不需要其他的信息,通過前面的語境就能知道最后一個字應(yīng)該是sky。在這種情況下,相關(guān)信息與需要該信息的位置距離較近,RNNs能夠?qū)W習(xí)利用以前的信息來對當(dāng)前任務(wù)進(jìn)行相應(yīng)的操作。如下圖所示通過輸入的 信息來預(yù)測出
假設(shè)現(xiàn)在有個更為復(fù)雜的任務(wù),考慮到下面這句話“I grew up in France… I speak fluent French.”,現(xiàn)在需要語言模型通過現(xiàn)有以前的文字信息預(yù)測該句話的最后一個字。通過以前文字語境可以預(yù)測出最后一個字是某種語言,但是要猜測出French,要根據(jù)之前的France語境。這樣的任務(wù),不同之前,因為這次的有用信息與需要進(jìn)行處理信息的地方之間的距離較遠(yuǎn),這樣容易導(dǎo)致RNNs不能學(xué)習(xí)到有用的信息,最終推導(dǎo)的任務(wù)可能失敗。如下圖所示。
理論上RNNs是能夠處理這種“長依賴”問題的。通過調(diào)參來解決這種問題。但是在實踐過程中RNNs無法學(xué)習(xí)到這種特征。 Hochreiter (1991) [German] 和 Bengio, et al. (1994) 深入研究過為什么RNNs沒法學(xué)習(xí)到這種特征。
幸好LSTMs這種特殊的RNNs是沒有這個問題的。
Long Short Term Memory networks(以下簡稱LSTMs),一種特殊的RNN網(wǎng)絡(luò),該網(wǎng)絡(luò)設(shè)計出來是為了解決長依賴問題。該網(wǎng)絡(luò)由 Hochreiter & Schmidhuber (1997) 引入,并有許多人對其進(jìn)行了改進(jìn)和普及。他們的工作被用來解決了各種各樣的問題,直到目前還被廣泛應(yīng)用。
所有循環(huán)神經(jīng)網(wǎng)絡(luò)都具有神經(jīng)網(wǎng)絡(luò)的重復(fù)模塊鏈的形式。 在標(biāo)準(zhǔn)的RNN中,該重復(fù)模塊將具有非常簡單的結(jié)構(gòu),例如單個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ò)里的單元只有一個網(wǎng)絡(luò)層,它的內(nèi)部有四個網(wǎng)絡(luò)層。LSTMs的結(jié)構(gòu)如下圖所示。
在解釋LSTMs的詳細(xì)結(jié)構(gòu)時先定義一下圖中各個符號的含義,符號包括下面幾種
圖中黃色類似于CNN里的激活函數(shù)操作,粉色圓圈表示點操作,單箭頭表示數(shù)據(jù)流向,箭頭合并表示向量的合并(concat)操作,箭頭分叉表示向量的拷貝操作
LSTMs的核心是細(xì)胞狀態(tài),用貫穿細(xì)胞的水平線表示。
細(xì)胞狀態(tài)像傳送帶一樣。它貫穿整個細(xì)胞卻只有很少的分支,這樣能保證信息不變的流過整個RNNs。細(xì)胞狀態(tài)如下圖所示
LSTM網(wǎng)絡(luò)能通過一種被稱為門的結(jié)構(gòu)對細(xì)胞狀態(tài)進(jìn)行刪除或者添加信息。
門能夠有選擇性的決定讓哪些信息通過。其實門的結(jié)構(gòu)很簡單,就是一個sigmoid層和一個點乘操作的組合。如下圖所示
因為sigmoid層的輸出是0-1的值,這代表有多少信息能夠流過sigmoid層。0表示都不能通過,1表示都能通過。
一個LSTM里面包含三個門來控制細(xì)胞狀態(tài)。
前面提到LSTM由三個門來控制細(xì)胞狀態(tài),這三個門分別稱為忘記門、輸入門和輸出門。下面一個一個的來講述。
LSTM的第一步就是決定細(xì)胞狀態(tài)需要丟棄哪些信息。這部分操作是通過一個稱為忘記門的sigmoid單元來處理的。它通過查看 和 信息來輸出一個0-1之間的向量,該向量里面的0-1值表示細(xì)胞狀態(tài) 中的哪些信息保留或丟棄多少。0表示不保留,1表示都保留。忘記門如下圖所示。
下一步是決定給細(xì)胞狀態(tài)添加哪些新的信息。這一步又分為兩個步驟,首先,利用 和 通過一個稱為輸入門的操作來決定更新哪些信息。然后利用 和 通過一個tanh層得到新的候選細(xì)胞信息 ,這些信息可能會被更新到細(xì)胞信息中。這兩步描述如下圖所示。
下面將更新舊的細(xì)胞信息 ,變?yōu)樾碌募?xì)胞信息 。更新的規(guī)則就是通過忘記門選擇忘記舊細(xì)胞信息的一部分,通過輸入門選擇添加候選細(xì)胞信息 的一部分得到新的細(xì)胞信息 。更新操作如下圖所示
更新完細(xì)胞狀態(tài)后需要根據(jù)輸入的 和 來判斷輸出細(xì)胞的哪些狀態(tài)特征,這里需要將輸入經(jīng)過一個稱為輸出門的sigmoid層得到判斷條件,然后將細(xì)胞狀態(tài)經(jīng)過tanh層得到一個-1~1之間值的向量,該向量與輸出門得到的判斷條件相乘就得到了最終該RNN單元的輸出。該步驟如下圖所示
還是拿語言模型來舉例說明,在預(yù)測動詞形式的時候,我們需要通過輸入的主語是單數(shù)還是復(fù)數(shù)來推斷輸出門輸出的預(yù)測動詞是單數(shù)形式還是復(fù)數(shù)形式。
之前描述的LSTM結(jié)構(gòu)是最為普通的。在實際的文章中LSTM的結(jié)構(gòu)存在各種變式,雖然變化都不會太大,但是也值得一提。
其中一個很受歡迎的變式由 Gers & Schmidhuber (2000) 提出,它在LSTM的結(jié)構(gòu)中加入了“peephole connections.”結(jié)構(gòu),peephole connections結(jié)構(gòu)的作用是允許各個門結(jié)構(gòu)能夠看到細(xì)胞信息,具體如下圖所示。
上圖描繪的是所有門都能看到細(xì)胞信息,還有一些變式是在其中的某些門引入細(xì)胞信息。
還有一種變式是在忘記門與輸入門之間引入一個耦合。不同于之前的LSTM結(jié)構(gòu),忘記門和輸入門是獨立的,這個變式是在忘記門刪除歷史信息的位置加入新的信息,在加入新信息的位置刪除舊信息。該結(jié)構(gòu)如下圖所示。
一種比其他形式變化更為顯著的LSTM變式是由 Cho, et al. (2014) 提出的門循環(huán)單元(GRU)。它將忘記門和輸入門合并成一個新的門,稱為更新門。GRU還有一個門稱為重置門。如下圖所示
其中重置門為上圖中前面那個門,決定了如何將新的輸入信息與前面的記憶相結(jié)合。更新門為上圖中后面那個門,定義了前面記憶保存到當(dāng)前時間步的量。 由于該變式的簡單有效,后來被廣泛應(yīng)用。
這里介紹的只是一些較為有名的LSTM變式,關(guān)于LSTM的變式其實還有很多種,像 Yao, et al. (2015) 提出的Depth Gated RNNs。還有其他用于解決長依賴問題的方法,如由 Koutnik, et al. (2014) 提出的 Clockwork RNNs。
至于哪種變式效果最好?各種差異對LSTM的影響有多少?這些問題 Greff, et al. (2015) 做了一些對比,結(jié)論是他們基本是一樣的。 Jozefowicz, et al. (2015) 測試了一萬多種RNN結(jié)構(gòu),發(fā)現(xiàn)在某些指定任務(wù)上有些變式還是由于標(biāo)準(zhǔn)LSTMs的。
之前也提到過RNNs取得了不錯的成績,這些成績很多是基于LSTMs來做的,說明LSTMs適用于大部分的序列場景應(yīng)用。
一般文章寫法會堆一堆公式嚇唬人,希望本文一步一步的拆分能有助于大家的理解。
LSTMs對于RNNs的使用是一大進(jìn)步。那么現(xiàn)在還有個問題,是否還有更大的進(jìn)步?對于很多研究者來說,但是是肯定的,那就是attention的問世。attention的思想是讓RNN在每一步挑選信息的時候都能從更大的信息集里面挑選出有用信息。例如,利用RNN模型為一幀圖片生成字母,它將會選擇圖片有用的部分來得到有用的輸入,從而生成有效的輸出。事實上, Xu, et al. (2015) 已經(jīng)這么做了,如果你想更深入的了解attention,這會是一個不錯的開始。attention方向還有一些振奮人心的研究,但還有很多東西等待探索......
在RNN領(lǐng)域attention并不是唯一一個可以研究的點。比如 Kalchbrenner, et al. (2015) 提出的Grid LSTMs, Gregor, et al. (2015) , Chung, et al. (2015) , 和 Bayer & Osendorfer (2015) 將RNNs用于生成模型的研究都非常有意思。
在過去幾年RNNs方面的研究非常的多,相信以后的研究成果也會更為豐富。
同原文
歡迎加入OCR交流群:785515057(此群已滿)
歡迎加入OCR交流群2:826714963
原文鏈接
四、RNN和LSTM
循環(huán)神經(jīng)網(wǎng)絡(luò)的主要用途是處理和預(yù)測序列數(shù)據(jù),循環(huán)神經(jīng)網(wǎng)絡(luò)的來源是為了刻畫一個序列當(dāng)前的輸出與之前信息的關(guān)系。從網(wǎng)絡(luò)結(jié)構(gòu)上,循環(huán)神經(jīng)網(wǎng)絡(luò)會記憶之前的信息,并利用之前的信息影響后面節(jié)點的輸出。也就是說,循環(huán)神經(jīng)網(wǎng)絡(luò)的隱藏層之間的節(jié)點是有連接的,隱藏層的輸入不僅包括輸入層的輸出,還包括上一時刻隱藏層的輸出。
理論上循環(huán)神經(jīng)網(wǎng)絡(luò)可以看做是同一神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)被無限復(fù)制的結(jié)果,如下圖等號左側(cè),由于目前循環(huán)神經(jīng)網(wǎng)絡(luò)無法做到真正的無限循環(huán),所以一般將循環(huán)體展開,如下圖等號右側(cè)。
可以看到:在每一個時刻會有一個輸入 ,根據(jù)循環(huán)神經(jīng)網(wǎng)絡(luò)當(dāng)前的狀態(tài) 提供一個輸出 ,而循環(huán)神經(jīng)網(wǎng)絡(luò)當(dāng)前狀態(tài) 是根據(jù)上一時刻的狀態(tài) 和當(dāng)前的輸入 共同決定的。
從這個結(jié)構(gòu)來看,容易得出:循環(huán)神經(jīng)網(wǎng)絡(luò)擅于解決時間序列相關(guān)問題,對于序列數(shù)據(jù),將序列上不同時刻的數(shù)據(jù)依次傳入循環(huán)神經(jīng)網(wǎng)絡(luò)的輸入層,輸出可以是對序列中下一個時刻的預(yù)測。
所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问健T跇?biāo)準(zhǔn)的 RNN 中,這個重復(fù)的模塊只有一個非常簡單的結(jié)構(gòu),例如一個 tanh 層。
下圖展現(xiàn)了一個循環(huán)神經(jīng)網(wǎng)絡(luò)前向傳播的具體計算過程,可以看到每個時刻的輸入會跟上一時刻的輸出拼接之后進(jìn)行前向算法計算,乘以權(quán)重矩陣加上偏置值,然后當(dāng)前時刻的輸出經(jīng)過softmax+偏置等操作之后產(chǎn)生當(dāng)前單元的最終輸出,另一部分送入下一個時刻重復(fù)此過程:
RNN的關(guān)鍵是利用歷史信息來幫助當(dāng)前的決策,但是不幸的是,隨著序列長度的增加,RNN無法有效的利用歷史信息。于是有了一種特殊的RNN——LSTM,能夠?qū)W習(xí)長的依賴關(guān)系,LSTM是為了避免長依賴問題而精心設(shè)計的。 記住較長的歷史信息實際上是他們的默認(rèn)行為,而不是他們努力學(xué)習(xí)的東西。
LSTM 同樣是重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问?,但是重?fù)的模塊擁有一個不同的結(jié)構(gòu)。不同于 單一神經(jīng)網(wǎng)絡(luò)層,整體上除了h在隨時間流動,細(xì)胞狀態(tài)c也在隨時間流動,細(xì)胞狀態(tài)c就代表著長期記憶。
下面具體解釋LSTM的內(nèi)部工作機制,首先是各種圖標(biāo)的含義:
1. LSTM 的關(guān)鍵就是細(xì)胞狀態(tài),水平線在圖上方貫穿運行,直接在整個鏈上運行,只有一些少量的線性交互。信息在上面流傳保持不變會很容易。
2. LSTM 有通過精心設(shè)計的稱作為“門”的結(jié)構(gòu)來去除或者增加信息到細(xì)胞狀態(tài)的能力。門是一種讓信息選擇式通過的方法。他們包含一個 sigmoid 神經(jīng)網(wǎng)絡(luò)層和一個 pointwise 乘法操作。Sigmoid 層輸出 0 到 1 之間的數(shù)值,描述每個部分有多少量可以通過。0 代表 不許任何量通過 ,1 就指 允許任意量通過;LSTM擁有三個門,來保護(hù)和控制細(xì)胞狀態(tài)
3. 遺忘門
遺忘門決定我們會從細(xì)胞狀態(tài)中丟棄什么信息,該門會讀取 和 ,輸出一個在 0 到 1 之間的數(shù)值給每個在細(xì)胞狀態(tài) 中的數(shù)字。1 表示 完全保留 ,0 表示 完全舍棄 。右側(cè)公式里的內(nèi)容跟上文說到的RNN的計算細(xì)節(jié)一致。最終通過一個sigmoid實現(xiàn)新的取舍功能。
所說的遺忘可以理解為 之前的內(nèi)容記住多少 ,其精髓在于只能輸出(0,1)小數(shù)的sigmoid函數(shù)和粉色圓形的乘法操作
4. 輸入門
輸入門確定什么樣的新信息被存放在細(xì)胞狀態(tài)中,這里包含兩個部分:第一,sigmoid 層稱 “輸入門層” 決定什么值我們將要更新。然后,一個 tanh 層創(chuàng)建一個新的候選值向量 會被加入到狀態(tài)中。
現(xiàn)在開始更新舊細(xì)胞狀態(tài), 更新為 ,們把舊狀態(tài)與 相乘,丟棄掉我們確定需要丟棄的信息,接著加上 ,這就是新的候選值,根據(jù)我們決定更新每個狀態(tài)的程度進(jìn)行變化。
5. 輸出門
我們需要確定輸出什么值。這個輸出將會基于我們的細(xì)胞狀態(tài),但是也是一個過濾后的版本。首先,我們運行一個 sigmoid 層來確定細(xì)胞狀態(tài)的哪個部分將輸出出去。接著,我們把細(xì)胞狀態(tài)通過 tanh 進(jìn)行處理(得到一個在 -1 到 1 之間的值)并將它和 sigmoid 門的輸出相乘,最終我們僅僅會輸出我們確定輸出的那部分。
參考:
LSTM理解
以上就是關(guān)于lstm神經(jīng)網(wǎng)絡(luò)相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
十大災(zāi)難片排行榜(十大災(zāi)難片排行榜前十名)