日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

發(fā)布時間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (译)理解 LSTM 网络 (Understanding LSTM Networks by colah) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:其實之前就已經(jīng)用過 LSTM 了,是在深度學(xué)習(xí)框架 keras 上直接用的,但是到現(xiàn)在對LSTM詳細的網(wǎng)絡(luò)結(jié)構(gòu)還是不了解,心里牽掛著難受呀!今天看了 tensorflow 文檔上面推薦的這篇博文,看完這后,煥然大悟,對 LSTM 的結(jié)構(gòu)理解基本上沒有太大問題。此博文寫得真真真好!!!為了幫助大家理解,也是怕日后自己對這些有遺忘的話可以迅速回想起來,所以打算對原文寫個翻譯。首先聲明,由于本人水平有限,如有翻譯不好或理解有誤的多多指出!此外,本譯文也不是和原文一字一句對應(yīng)的,為了方便理解可能會做一些調(diào)整和修改。另外本文是作為我自己的學(xué)習(xí)筆記,沒有經(jīng)過原作者本人的授權(quán),所以請勿轉(zhuǎn)載)

1. 循環(huán)神經(jīng)網(wǎng)絡(luò)(RNNs)

人們思考問題往往不是從零開始的。就好像你現(xiàn)在閱讀這篇文章一樣,你對每個詞的理解都會依賴于你前面看到的一些詞,而不是把你前面看的內(nèi)容全部拋棄了,忘記了,再去理解這個單詞。也就是說,人們的思維總是會有延續(xù)性的。

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)是做不到這樣的延續(xù)性(它們沒辦法保留對前文的理解),這似乎成了它們一個巨大的缺陷。舉個例子,在觀看影片中,你想辦法去對每一幀畫面上正在發(fā)生的事情做一個分類理解。目前還沒有明確的辦法利用傳統(tǒng)的網(wǎng)絡(luò)把對影片中前面發(fā)生的事件添加進來幫助理解后面的畫面。

但是,循環(huán)神經(jīng)網(wǎng)絡(luò)可以做到。在RNNs的網(wǎng)絡(luò)中,有一個循環(huán)的操作,使得它們能夠保留之前學(xué)習(xí)到的內(nèi)容。

?

?
Fig1. RNNs 網(wǎng)絡(luò)結(jié)構(gòu)?

?

在上圖網(wǎng)絡(luò)結(jié)構(gòu)中,對于矩形塊 A 的那部分,通過輸入xt(t時刻的特征向量),它會輸出一個結(jié)果ht(t時刻的狀態(tài)或者輸出)。網(wǎng)絡(luò)中的循環(huán)結(jié)構(gòu)使得某個時刻的狀態(tài)能夠傳到下一個時刻。(譯者注:因為當前時刻的狀態(tài)會作為下一時刻輸入的一部分)

這些循環(huán)的結(jié)構(gòu)讓 RNNs 看起來有些難以理解。但是,你稍微想一下就會發(fā)現(xiàn),這似乎和普通的神經(jīng)網(wǎng)絡(luò)有不少相似之處呀。我們可以把 RNNs 看成是一個普通的網(wǎng)絡(luò)做了多次復(fù)制后疊加在一起組成的。每一網(wǎng)絡(luò)會把它的輸出傳遞到下一個網(wǎng)絡(luò)中。我們可以把 RNNs 在時間步上進行展開,就得到下圖這樣:

?

?
fig2. RNNs 展開網(wǎng)絡(luò)結(jié)構(gòu)

?

從 RNNs 鏈狀的結(jié)構(gòu)很容易理解到它是和序列信息相關(guān)的。這種結(jié)構(gòu)似乎生來就是為了解決序列相關(guān)問題的。

而且,它們的的確確非常管用!在最近的幾年中,人們利用 RNNs 不可思議地解決了各種各樣的問題:語音識別,語言模型,翻譯,圖像(添加)字幕,等等。關(guān)于RNNs在這些方面取得的驚人成功,我們可以看 Andrej Karpathy 的博客:?The Unreasonable Effectiveness of Recurrent Neural Networks.

RNNs 能夠取得這樣的成功,主要還是 LSTMs 的使用。這是一種比較特殊的 RNNs,而且對于很多任務(wù),它比普通的 RNNs 效果要好很多很多!基本上現(xiàn)在所使用的循環(huán)神經(jīng)網(wǎng)絡(luò)用的都是 LSTMs,這也正是本文后面所要解釋的網(wǎng)絡(luò)。

2. 長時期依賴存在的問題

RNNs 的出現(xiàn),主要是因為它們能夠把以前的信息聯(lián)系到現(xiàn)在,從而解決現(xiàn)在的問題。比如,利用前面的畫面,能夠幫助我們理解當前畫面的內(nèi)容。如果 RNNs 真的可以做到這個,那么它肯定是對我們的任務(wù)有幫助的。但是它真的可以 做到嗎,恐怕還得看實際情況呀!

有時候,我們在處理當前任務(wù)的時候,只需要看一下比較近的一些信息。比如在一個語言模型中,我們要通過上文來預(yù)測一下個詞可能會是什么,那么當我們看到“ the clouds are in the ?”時,不需要更多的信息,我們就能夠自然而然的想到下一個詞應(yīng)該是“sky”。在這樣的情況下,我們所要預(yù)測的內(nèi)容和相關(guān)信息之間的間隔很小,這種情況下 RNNs 就能夠利用過去的信息, 很容易的實現(xiàn)。

?

?
fig2. 短期依賴

?

但是,有些情況是需要更多的上下文信息。比如我們要預(yù)測“I grew up in France … (此處省略1萬字)… I speak ?”這個預(yù)測的詞應(yīng)該是 Franch,但是我們是要通過很長很長之前提到的信息,才能做出這個正確的預(yù)測的呀,普通的 RNNs 很難做到這個。

隨著預(yù)測信息和相關(guān)信息間的間隔增大, RNNs 很難去把它們關(guān)聯(lián)起來了。

?

?
fig3. 長期依賴

?

從理論上來講,通過選擇合適的參數(shù),RNNs 確實是可以把這種長時期的依賴關(guān)系(“l(fā)ong-term dependencies”) 聯(lián)系起來,并解決這類問題的。但遺憾的是在實際中, RNNs 無法解決這個問題。?Hochreiter (1991) [German]?和?Bengio, et al. (1994)?曾經(jīng)對這個問題進行過深入的研究,發(fā)現(xiàn) RNNs 的確很難解決這個問題。

但是非常幸運,LSTMs 能夠幫我們解決這個問題。

3. LSTM 網(wǎng)絡(luò)

長短期記憶網(wǎng)絡(luò)(Long Short Term Memory networks) - 通常叫做 “LSTMs” —— 是 RNN 中一個特殊的類型。由Hochreiter & Schmidhuber (1997)提出,廣受歡迎,之后也得到了很多人們的改進調(diào)整。LSTMs 被廣泛地用于解決各類問題,并都取得了非常棒的效果。

明確來說,設(shè)計 LSTMs 主要是為了避免前面提到的 長時期依賴 (long-term dependency )的問題。它們的本質(zhì)就是能夠記住很長時期內(nèi)的信息,而且非常輕松就能做到。

所有循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)都是由完全相同結(jié)構(gòu)的(神經(jīng)網(wǎng)絡(luò))模塊進行復(fù)制而成的。在普通的RNNs 中,這個模塊結(jié)構(gòu)非常簡單,比如僅是一個單一的 tanh 層。

?

?
fig4. 普通 RNNs 內(nèi)部結(jié)構(gòu)

?

LSTMs 也有類似的結(jié)構(gòu)(譯者注:唯一的區(qū)別就是中間部分)。但是它們不再只是用一個單一的 tanh 層,而是用了四個相互作用的層。?

?
fig5. LSTM 內(nèi)部結(jié)構(gòu)

?

別擔(dān)心,別讓這個結(jié)構(gòu)給嚇著了,下面根據(jù)這個結(jié)構(gòu),我們把它解剖開,一步一步地來理解它(耐心看下去,你一定可以理解的)。現(xiàn)在,我們先來定義一下用到的符號:?

?
fig6. 符號說明

?

在網(wǎng)絡(luò)結(jié)構(gòu)圖中,每條線都傳遞著一個向量,從一個節(jié)點中輸出,然后輸入到另一個節(jié)點中。粉紅色的圓圈表示逐點操作,比如向量相加;黃色的矩形框表示的是一個神經(jīng)網(wǎng)絡(luò)層(就是很多個神經(jīng)節(jié)點);合并的線表示把兩條線上所攜帶的向量進行合并(比如一個帶?ht?1,另一個帶?xt?, 那么合并后的輸出就是[ht?1,xt]); 分開的線表示將線上傳遞的向量復(fù)制一份,傳給兩個地方。

3.1 LSTMs 的核心思想

LSTMs 最關(guān)鍵的地方在于 cell(整個綠色的框就是一個 cell) 的狀態(tài) 和 結(jié)構(gòu)圖上面的那條橫穿的水平線。

cell 狀態(tài)的傳輸就像一條傳送帶,向量從整個 cell 中穿過,只是做了少量的線性操作。這種結(jié)構(gòu)能夠很輕松地實現(xiàn)信息從整個 cell 中穿過而不做改變。(譯者注:這樣我們就可以實現(xiàn)了長時期的記憶保留了)?

?
fig7. 傳送帶結(jié)構(gòu)

?

若只有上面的那條水平線是沒辦法實現(xiàn)添加或者刪除信息的。而是通過一種叫做?門(gates)?的結(jié)構(gòu)來實現(xiàn)的。

?可以實現(xiàn)選擇性地讓信息通過,主要是通過一個 sigmoid 的神經(jīng)層 和一個逐點相乘的操作來實現(xiàn)的。?

?
fig8. 門結(jié)構(gòu)(sigmoid 層)

?

sigmoid 層輸出(是一個向量)的每個元素都是一個在 0 和 1 之間的實數(shù),表示讓對應(yīng)信息通過的權(quán)重(或者占比)。比如, 0 表示“不讓任何信息通過”, 1 表示“讓所有信息通過”。

每個 LSTM 有三個這樣的門結(jié)構(gòu),來實現(xiàn)保護和控制信息。(譯者注:分別是 “forget gate layer”, 遺忘門; “input gate layer”,傳入門; “output gate layer”, 輸出門)

3.2 逐步理解 LSTM

(好了,終于來到最激動的時刻了)

3.2.1 遺忘門

首先是 LSTM 要決定讓那些信息繼續(xù)通過這個 cell,這是通過一個叫做“forget gate layer ”的sigmoid 神經(jīng)層來實現(xiàn)的。它的輸入是ht?1xt,輸出是一個數(shù)值都在 0,1 之間的向量(向量長度和 cell 的狀態(tài)?Ct?1?一樣),表示讓?Ct?1的各部分信息通過的比重。 0 表示“不讓任何信息通過”, 1 表示“讓所有信息通過”。

回到我們上面提到的語言模型中,我們要根據(jù)所有的上文信息來預(yù)測下一個詞。這種情況下,每個 cell 的狀態(tài)中都應(yīng)該包含了當前主語的性別信息(保留信息),這樣接下來我們才能夠正確地使用代詞。但是當我們又開始描述一個新的主語時,就應(yīng)該把上文中的主語性別給忘了才對(忘記信息)。?

?
fig9. 遺忘門 (forget gates)

?

3.2.2 傳入門

下一步是決定讓多少新的信息加入到 cell 狀態(tài) 中來。實現(xiàn)這個需要包括兩個 步驟:首先,一個叫做“input gate layer ”的 sigmoid 層決定哪些信息需要更新;一個 tanh 層生成一個向量,也就是備選的用來更新的內(nèi)容,Ct~?。在下一步,我們把這兩部分聯(lián)合起來,對 cell 的狀態(tài)進行一個更新。

?

?
fig10. 傳入門 (input gates)

?

在我們的語言模型的例子中,我們想把新的主語性別信息添加到 cell 狀態(tài)中,來替換掉老的狀態(tài)信息。?
有了上述的結(jié)構(gòu),我們就能夠更新 cell 狀態(tài)了, 即把Ct?1更新為?Ct。 從結(jié)構(gòu)圖中應(yīng)該能一目了然, 首先我們把舊的狀態(tài)?Ct?1ft相乘, 把一些不想保留的信息忘掉。然后加上it?Ct~。這部分信息就是我們要添加的新內(nèi)容。

?

?
fig11. 更新 cell 狀態(tài)

?

3.2.3 輸出門

最后,我們需要來決定輸出什么值了。這個輸出主要是依賴于 cell 的狀態(tài)Ct,但是又不僅僅依賴于?Ct,而是需要經(jīng)過一個過濾的處理。首先,我們還是使用一個 sigmoid 層來(計算出)決定Ct中的哪部分信息會被輸出。接著,我們把Ct通過一個 tanh 層(把數(shù)值都歸到 -1 和 1 之間),然后把 tanh 層的輸出和 sigmoid 層計算出來的權(quán)重相乘,這樣就得到了最后輸出的結(jié)果。

在語言模型例子中,假設(shè)我們的模型剛剛接觸了一個代詞,接下來可能要輸出一個動詞,這個輸出可能就和代詞的信息相關(guān)了。比如說,這個動詞應(yīng)該采用單數(shù)形式還是復(fù)數(shù)的形式,那么我們就得把剛學(xué)到的和代詞相關(guān)的信息都加入到 cell 狀態(tài)中來,才能夠進行正確的預(yù)測。

?

?
fig12. cell 輸出

?

4. LSTM 的變種 GRU

原文這部分介紹了 LSTM 的幾個變種,還有這些變形的作用。在這里我就不再寫了。有興趣的可以直接閱讀原文。

下面主要講一下其中比較著名的變種 GRU(Gated Recurrent Unit ),這是由?Cho, et al. (2014)?提出。在 GRU 中,如 fig.13 所示,只有兩個門:重置門(reset gate)和更新門(update gate)。同時在這個結(jié)構(gòu)中,把細胞狀態(tài)和隱藏狀態(tài)進行了合并。最后模型比標準的 LSTM 結(jié)構(gòu)要簡單,而且這個結(jié)構(gòu)后來也非常流行。?

?
fig13. GRU結(jié)構(gòu)

?

其中,?rt?表示重置門,zt?表示更新門。重置門決定是否將之前的狀態(tài)忘記。(作用相當于合并了 LSTM 中的遺忘門和傳入門)當?rt?趨于 0 的時候,前一個時刻的狀態(tài)信息?ht?1?會被忘掉,隱藏狀態(tài)?ht~?會被重置為當前輸入的信息。更新門決定是否要將隱藏狀態(tài)更新為新的狀態(tài)ht~(作用相當于 LSTM 中的輸出門)?。

和 LSTM 比較一下:

  • (1) GRU 少一個門,同時少了細胞狀態(tài)?Ct
  • (2) 在 LSTM 中,通過遺忘門和傳入門控制信息的保留和傳入;GRU 則通過重置門來控制是否要保留原來隱藏狀態(tài)的信息,但是不再限制當前信息的傳入。
  • (3) 在 LSTM 中,雖然得到了新的細胞狀態(tài)?Ct,但是還不能直接輸出,而是需要經(jīng)過一個過濾的處理:?ht=ot?tanh(Ct); 同樣,在 GRU 中, 雖然 (2) 中我們也得到了新的隱藏狀態(tài)?ht~, 但是還不能直接輸出,而是通過更新門來控制最后的輸出:?ht=(1?zt)?ht?1+zt?ht~?。

后記:好了,到這里對一般形式的 LSTM 的結(jié)構(gòu)講解已經(jīng)結(jié)束了,原文后面對 LSTM 的各種變形講解也比較簡單,在這里我就不再寫了,有興趣的可以直接閱讀原文。上面我結(jié)合了原論文比較詳細地介紹了一下 GRU,個人水平有限,難免也會出錯。其實英語理解能力還行的話建議還是閱讀原文比較好,有些東西翻譯過來連我自己都不知道該怎么表達了,如果您覺得有什么地方不對,歡迎指出。翻譯完后才發(fā)現(xiàn)網(wǎng)上已經(jīng)有很多翻譯的版本了,所以參考那些版本又做了一些調(diào)整,主要是參考了[譯] 理解 LSTM 網(wǎng)絡(luò)這篇文章。后面如果有時間的話,我應(yīng)該會寫個用 TensorFlow 來實現(xiàn) LSTM 的例子,敬請期待,哈哈哈!

(LSTM 的例子還真寫好了,歡迎戳:?TensorFlow入門(五)多層 LSTM 通俗易懂版)

本文轉(zhuǎn)自博客園知識天地的博客,原文鏈接:(譯)理解 LSTM 網(wǎng)絡(luò) (Understanding LSTM Networks by colah),如需轉(zhuǎn)載請自行聯(lián)系原博主。

總結(jié)

以上是生活随笔為你收集整理的(译)理解 LSTM 网络 (Understanding LSTM Networks by colah)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。