當前位置:
首頁 > 最新 > 專知中秋呈獻-PyTorch手把手深度學習教程03

專知中秋呈獻-PyTorch手把手深度學習教程03

首先祝各位專知好友,中秋佳節快樂!

< 一文帶你入門優雅的Pytorch >

< 快速理解系列(一): 圖文+代碼, 讓你快速理解CNN>

< 快速理解系列(二): 圖文+代碼, 讓你快速理解LSTM>

< 快速理解系列(三): 圖文+代碼, 讓你快速理解GAN >

< 快速理解系列(四): 圖文+代碼, 讓你快速理解Dropout >

< NLP系列(一) 用Pytorch 實現 Word Embedding >

< NLP系列(二) 基於字元級RNN的姓名分類 >

< NLP系列(三) 基於字元級RNN的姓名生成 >

LSTM(Long Short-Term Memory)是長短期記憶網路,是一種時間遞歸神經網路,適合於處理和預測時間序列中間隔和延遲相對較長的重要事件。

LSTM 已經在科技領域有了多種應用。基於 LSTM 的系統可以學習翻譯語言、控制機器人、圖像分析、文檔摘要、語音識別圖像識別、手寫識別、控制聊天機器人、預測疾病、點擊率和股票、合成音樂等等任務。

網上有很多關於LSTM的介紹,為了大家更好的理解,特此分享翻譯的一篇很好的外文。首先聲明,由於本人水平有限,如有錯誤歡迎指出。

1、Recurrent Neural Networks

人類並不是每時每刻都從一片空白的大腦開始他們的思考。在你閱讀這篇文章時候,你都是基於自己已經擁有的對先前所見詞的理解來推斷當前詞的真實含義。我們不會將所有的東西都全部丟棄,然後用空白的大腦進行思考。我們的思想擁有持久性。

傳統的神經網路並不能做到這點,看起來也像是一種巨大的弊端。例如,假設你希望對電影中的每個時間點的時間類型進行分類。傳統的神經網路應該很難來處理這個問題——使用電影中先前的事件推斷後續的事件

RNN 解決了這個問題。RNN 是包含循環的網路,允許信息的持久化

在上面的示例中,神經網路模塊A正在讀取一個輸入X,並輸出一個h,循環可以使得信息可以從網路的當前狀態傳遞到下一個狀態。

這些循環使得 RNN 看起來非常神秘。然而,如果你仔細想想,這樣也不比一個正常的神經網路難於理解。RNN 可以被看做是同一神經網路的多次複製,每個神經網路模塊會把消息傳遞給下一個。所以,如果我們將這個循環展開:

鏈式的特徵揭示了 RNN 本質上是與序列和列表相關的。他們是對於這類數據的最自然的神經網路架構。

並且 RNN 也已經被人們應用了!在過去幾年中,應用 RNN 在語音識別,語言建模,翻譯,圖片描述等問題上已經取得一定成功,並且這個列表還在增長。關於RNNs在這些方面取得的驚人成功,大家可以看 Andrej Karpathy 的博客:The Unreasonable Effectiveness of Recurrent Neural Networks

而這些成功應用的關鍵之處就是 LSTM 的使用,這是一種特別的 RNN,比標準的 RNN 在很多的任務上都表現得更好。幾乎所有的令人振奮的關於 RNN 的結果都是通過 LSTM 達到的。這篇博文也會就 LSTM 進行展開。

2、長期依賴(Long-Term Dependencies)問題

RNN的出現主要是它們能夠把之前的信息聯繫到現在的任務中去,例如使用過去的視頻段來推測對當前段的理解。如果RNN可以做到這個,他們就變得非常有用。但是真的可以么?答案是,還有很多依賴因素。

有時,我們只需要查看最近的信息來執行當前的任務。例如,考慮一種語言模型,嘗試基於以前的單詞來預測下一個單詞。如果我們試圖預測「」的最後一個詞,我們就不需要任何進一步的語境,下一個字將是很明顯。在這種情況下,相關信息與預測詞的位置間隔很小,則RNN可以學習使用過去的信息。

但也有需要更多上下文的情況。考慮嘗試預測文本中的最後一個單詞「」。最近的信息表明,下一個單詞可能是一種語言的名稱,但是如果我們想縮小哪種語言,我們需要法國的背景,從進一步回來。相關信息之間的差距和需要變得非常大的點是完全有可能的。

不幸的是,隨著差距的擴大,RNN無法學會連接信息。

理論上,RNN絕對有能力處理這樣的「長期依賴」。人們可以仔細挑選參數來解決這種形式的問題。可悲的是,在實踐中,RNN似乎無法學習。 Hochreiter(1991)[German]和Bengio, et al. (1994),等人深入探討了這個問題,他們發現了一些導致學習困難的根本原因。幸運的是,LSTM並沒有這個問題。

3、LSTM

Long Short Term 網路(通常稱為「LSTM」)是一種特殊的RNN,能夠學習長期的依賴關係。他們由Hochreiter&Schmidhuber(1997)介紹,並被許多人完善和推廣。他們在各種各樣的問題上工作得非常好,現在被廣泛使用。

LSTM被明確設計為避免長期依賴問題。記住長時間的信息實際上是他們的默認行為,而不是他們難以學習的東西!

所有 RNN 都具有一種重複神經網路模塊的鏈式的形式。在標準的 RNN 中,這個重複的模塊只有一個非常簡單的結構,例如一個層。

LSTM 同樣是這樣的結構,但是重複的模塊擁有一個不同的結構。不同於 單一神經網路層,這裡是有四個,以一種非常特殊的方式進行交互。

不必擔心這裡的細節。我們會一步一步地剖析 LSTM 解析圖。現在,我們先來熟悉一下圖中使用的各種元素的圖標。

image

在上圖中,每一條黑線都攜帶從一個節點的輸出到其他節點的輸入的整個向量。粉色圓圈表示運算,如向量加法,而黃色框是學習到的神經網路層。行合併表示連接,線合併表示向量的連接,分開的線表示內容被複制。

4、LSTM 的核心思想

LSTM的關鍵是細胞狀態,水平線穿過圖的頂部。

cell狀態類似於輸送帶。它直接在整個鏈上運行,只有一些少量的線性相互作用。信息在上面流傳保持不變會很容易。

image

LSTM具有刪除或添加信息到cell狀態的能力,這被稱為「門」的結構去調節。

門是一種讓信息選擇式通過的方法。他們包含一個神經網路層和一個乘法操作。

層輸出(是一個向量)的每個元素都是一個在 0 和 1 之間的實數,表示讓對應信息通過的權重(或者佔比)。比如, 0 表示「不讓任何信息通過」, 1 表示「讓所有信息通過」。

LSTM 擁有三個門,來保護和控制細胞狀態。

5、逐步理解 LSTM1、遺忘門(forget gate)

在我們 LSTM 中的第一步是決定我們會從cell狀態中丟棄什麼信息。這個決定通過一個稱為完成。該門會讀取和,輸出一個在 0 到 1 之間的數值(向量長度和 cell 的狀態一樣)。表示讓的各部分信息通過的比重。 0 表示「不讓任何信息通過」, 1 表示「讓所有信息通過」

讓我們回到語言模型的例子中來基於已經看到的預測下一個詞。在這個問題中,細胞狀態可能包含當前主語的性別,因此正確的代詞可以被選擇出來。當我們看到新的主語,我們希望忘記舊的主語。

2、輸入門(input gate)

下一步是決定我們要讓多少新的信息加入到cell狀態中取。這裡包含兩部分。首先,一個稱為 「輸入門層」的層決定什麼值我們將要更新。接下來,一個 tanh 層生成一個向量,也就是備選的用來更新的內容Ct。在下一步中,我們將結合這兩個來對cell進行狀態的更新。

在我們的語言模型的例子中,我們想把新的主語性別添加到cell狀態中,以替換舊的信息。

然後我們就可以更新 cell 狀態了, 即把更新為。 首先我們把舊的狀態和相乘, 把一些不想保留的信息忘掉。然後加上。這部分信息就是我們要添加的新內容。

3、輸出門(output gate)

最後,我們需要決定我們要輸出什麼。此輸出將基於我們的cell狀態,但需要經過一個過濾的處理。首先,我們運行一個層,它決定了我們要輸出的cell狀態的哪些部分。然後,我們將cell狀態通過層(將值歸到-1和1之間),並將其乘以的輸出,以便我們只輸出我們決定的部分。

在語言模型的例子中,因為他就看到了一個代詞,可能需要輸出與一個動詞 相關的信息。例如,可能輸出是否代詞是單數還是負數,這樣如果是動詞的話,我們也知道動詞需要進行的詞形變化。

對於語言模型示例,由於它只是看到一個代詞,它可能需要輸出與動詞相關的信息來確定下一步發生什麼。例如,它可能會輸出代詞是單數還是複數,以便我們知道動詞應該是什麼形式的。

6、LSTM 的變體

到目前為止我所描述的是一個很正常的LSTM。但並不是所有的LSTM都與上述相同。事實上,似乎幾乎每一篇涉及LSTM的論文都使用了一個略有不同的版本。差異很小,但值得一提的是它們。

一個受歡迎的LSTM變體是Gers & Schmidhuber (2000)提出來的,他們在裡面加入了「peephole connections」。這意味著讓門層也會接受cell狀態的輸入。

上面的圖例中,我們增加了 peephole 到每個門上,但是許多論文會加入部分的 peephole 而非所有都加。

另一種變體是使用耦合的忘記和輸入門。而不是單獨決定要忘記什麼信息和添加新信息,我們一起做出這些決定。我們僅僅會當我們將要輸入在當前位置時忘記。我們僅僅輸入新的值到那些我們已經忘記舊的信息的那些狀態 。

LSTM的一個稍微更顯著的變化是由Cho,et al(2014)介紹的門控循環單元——。 它將忘記和輸入門組合成一個單一的「更新門」,它還合併了cell狀態和隱藏狀態,並進行了一些其他更改。所得到的模型比標準LSTM模型更簡單,並且越來越受歡迎。

這些只是最顯著的LSTM變體中的一些。還有很多其他的,如Yao, et al. (2015)提出的。。還有一些完全不同的處理長期依賴的方法,例如 Koutnik, et al. (2014)提出的。

哪些變體最好?其中的差異真的重要嗎?

Greff, et al. (2015) 給出了流行變體的比較,結論是他們基本上是一樣的。Jozefowicz, et al. (2015)則在超過 1 萬種 RNN 架構上進行了測試,發現一些架構在某些任務上也取得了比 LSTM 更好的結果。

7、結論

剛開始,我提到人們通過RNN實現了顯著的成果。基本上所有這些都可以使用 LSTM 完成。對於大多數任務確實展示了更好的性能!

看著一組方程式,LSTM看起來很嚇人。希望在這篇文章中一步步走過他們,使他們變得更加平易近人。

LSTM是我們用RNN獲得的重要成功。很自然的想法:還會有更大的突破嗎?研究人員的共同觀點是:「是的!有一個下一步,那就是!「這個想法是讓RNN的每個步驟從一些較大的信息集合中挑選信息。例如,如果您使用RNN創建描述圖像的標題,則可能會選擇圖像的一部分來查看其輸出的每個字。事實上,Xu, et al.(2015)做到這一點.如果你想要深入探索Attention,這可能是一個有趣的起點!已經有一些使用

Attention令人興奮的結果,似乎更多的還值得我們去探索...

Attention不是RNN研究中唯一令人興奮的線索。例如Kalchbrenner, et al(2015)提出的Grid LSTM似乎很有前途。使用生成模型的RNN,諸如Gregor, et al. (2015)Chung, et al. (2015) 和 Bayer & Osendorfer (2015)提出的模型 也似乎很有趣。最近幾年對於RNN來說已經是一個激動人心的時刻了,而後來的研究成果將會更加豐富。

8、PyTorch實現

循環神經網路 RNN 和 Bi-RNN

實現MNIST的分類

reference:

明天繼續推出:專知PyTorch深度學習教程系列-< 快速理解系列(三): 圖文+代碼, 讓你快速理解GAN >,敬請關注。

完整系列搜索查看,請PC登錄

對PyTorch教程感興趣的同學,歡迎進入我們的專知PyTorch主題群一起交流、學習、討論,掃一掃如下群二維碼即可進入:

了解使用專知-獲取更多AI知識!


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 專知 的精彩文章:

TAG:專知 |