lstm网络_LSTM(长短期记忆网络)
在上篇文章一文看盡RNN(循環神經網絡)中,我們對RNN模型做了總結。由于RNN也有梯度消失的問題,因此很難處理長序列的數據,大牛們對RNN做了改進,得到了RNN的特例LSTM(Long Short-Term Memory),它可以避免常規RNN的梯度消失,因此在工業界得到了廣泛的應用。下面我們就對LSTM模型做一個總結。
Long Short Term Memory networks(以下簡稱LSTMs),一種特殊的RNN網絡,該網絡設計出來是為了解決長依賴問題。該網絡由 Hochreiter & Schmidhuber (1997)引入,并有許多人對其進行了改進和普及。他們的工作被用來解決了各種各樣的問題,直到目前還被廣泛應用。
1、從RNN到LSTM
在 RNN 模型里,我們講到了 RNN 具有如下的結構,每個序列索引位置 都有一個隱藏狀態 。
RNN時間線展開圖如果我們略去每層都有 ,則 RNN 的模型可以簡化成如下圖的形式:
所有循環神經網絡都具有神經網絡的重復模塊鏈的形式。在標準的RNN中,該重復模塊將具有非常簡單的結構,例如單個tanh層。
The repeating module in a standard RNN contains a single layer.圖中可以很清晰看出在隱藏狀態由和 得到。由于 RNN 梯度消失的問題,大牛們對于序列索引位置 的隱藏結構做了改進,可以說通過一些技巧讓隱藏結構復雜了起來,來避免梯度消失的問題,這樣的特殊 RNN 就是我們的 LSTM 。
LSTMs也具有這種鏈式結構,但是它的重復單元不同于標準RNN網絡里的單元只有一個網絡層,它的內部有四個網絡層。由于 LSTM 有很多的變種,這里我們以最常見的 LSTM 為例講述。LSTMs的結構如下圖所示。
The repeating module in an LSTM contains four interacting layers.可以看到 LSTM 的結構要比 RNN 的復雜的多,真佩服牛人們怎么想出來這樣的結構,然后這樣居然就可以解決 RNN 梯度消失的問題。
在解釋LSTMs的詳細結構時先定義一下圖中各個符號的含義,符號包括下面幾種:
在上圖中,黃色的盒子是神經網絡層,粉紅色的圓圈表示點操作,如向量加法乘法,單箭頭表示數據流向,箭頭合并表示向量的合并(concat)操作,箭頭分叉表示向量的拷貝操作。
2、LSTM核心思想
LSTMs的核心是單元狀態(Cell State),用貫穿單元的水平線表示。
單元狀態有點像傳送帶。它沿著整個鏈一直走,只有一些微小的線性相互作用。信息很容易在不改變的情況下流動。單元狀態如下圖所示。
LSTM確實有能力將信息移除或添加到單元狀態,并由稱為gates的結構小心地進行調節。
門是一種選擇性地讓信息通過的方式。它們由一個Sigmod網絡層和一個點乘運算組成。
因為sigmoid層的輸出是0-1的值,這代表有多少信息能夠流過sigmoid層。0表示都不能通過,1表示都能通過。
一個LSTM里面包含三個門來控制單元狀態。
3、一步一步理解LSTM
前面提到LSTM由三個門來控制細胞狀態,這三個門分別稱為忘記門、輸入門和輸出門。下面一個一個的來講述。
3.1 遺忘門(forget gate)
LSTM 的第一步就是決定細胞狀態需要丟棄哪些信息。這部分操作是通過一個稱為遺忘門的 sigmoid 單元來處理的。它通過 和 信息來輸出一個 0-1 之間的向量,該向量里面的 0-1 值表示單元狀態 中的哪些信息保留或丟棄多少。0表示不保留,1表示都保留。遺忘門如下圖所示。
forget gate3.2 輸入門(input gate)
要更新單元狀態,我們需要輸入門。首先,我們將先前的隱藏狀態和當前輸入傳遞給 函數。這決定了通過將值轉換為0到1來更新哪些值。0表示不重要,1表示重要。你還將隱藏狀態和當前輸入傳遞給 函數,將它們壓縮到-1和1之間以幫助調節網絡。然后將 輸出與 輸出相乘。
input gate3.3 單元狀態(cell state)
現在我們有足夠的信息來計算單元狀態。首先,單元狀態逐點乘以遺忘向量。如果它乘以接近0的值,則有可能在單元狀態中丟棄值。然后我們從輸入門獲取輸出并進行逐點加法,將單元狀態更新為神經網絡發現相關的新值。這就得到了新的單元狀態。
cell state3.4 輸出門(output gate)
最后我們有輸出門。輸出門決定下一個隱藏狀態是什么。請記住,隱藏狀態包含有關先前輸入的信息。隱藏狀態也用于預測。首先,我們將先前的隱藏狀態和當前輸入傳遞給 函數。然后我們將新的單元狀態傳遞給 函數。將 輸出與 輸出相乘,以決定隱藏狀態應攜帶的信息。它的輸出是隱藏狀態。然后將新的單元狀態和新的隱藏狀態傳遞到下一個時間步。
output gate遺忘門決定了哪些內容與前面的時間步相關。
輸入門決定了從當前時間步添加哪些信息。
輸出門決定下一個隱藏狀態應該是什么。
4、LSTM變種
之前描述的LSTM結構是最為普通的。在實際的文章中LSTM的結構存在各種變式,雖然變化都不會太大,但是也值得一提。
其中一個很受歡迎的變式由Gers & Schmidhuber (2000)提出,它在LSTM的結構中加入了“peephole connections.”結構,peephole connections結構的作用是允許各個門結構能夠看到細胞信息,具體如下圖所示。
上圖在所有的門上都增加了“peephole connections.”,但是但許多論文只為部分門添加。
還有一種變式是在忘記門與輸入門之間引入一個耦合。不同于之前的LSTM結構,忘記門和輸入門是獨立的,這個變式是在忘記門刪除歷史信息的位置加入新的信息,在加入新信息的位置刪除舊信息。該結構如下圖所示。
一種比其他形式變化更為顯著的LSTM變式是由 Cho, et al. (2014)提出的門循環單元(GRU)。它將忘記門和輸入門合并成一個新的門,稱為更新門。GRU還有一個門稱為重置門。如下圖所示
5、總結
之前也提到過RNNs取得了不錯的成績,這些成績很多是基于LSTMs來做的,說明LSTMs適用于大部分的序列場景應用。一般文章寫法會堆一堆公式嚇唬人,希望本文一步一步的拆分能有助于大家的理解。LSTMs對于RNNs的使用是一大進步。那么現在還有個問題,是否還有更大的進步?對于很多研究者來說,但是是肯定的,那就是attention的問世。attention的思想是讓RNN在每一步挑選信息的時候都能從更大的信息集里面挑選出有用信息。例如,利用RNN模型為一幀圖片生成字母,它將會選擇圖片有用的部分來得到有用的輸入,從而生成有效的輸出。事實上, Xu, et al.(2015) 已經這么做了,如果你想更深入的了解attention,這會是一個不錯的開始。attention方向還有一些振奮人心的研究,但還有很多東西等待探索......
6、參考鏈接
- http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- https://zhuanlan.zhihu.com/p/81549798
總結
以上是生活随笔為你收集整理的lstm网络_LSTM(长短期记忆网络)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java的栈堆的理解_理解堆与栈 - 一
- 下一篇: java 优化线程_Java | 多线程