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 具有如下的結構,每個序列索引位置 tt 都有一個隱藏狀態 h(t)h^{(t)}

RNN時間線展開圖

如果我們略去每層都有 o(t),L(t),y(t)o^{(t)}, L^{(t)}, y^{(t)} ,則 RNN 的模型可以簡化成如下圖的形式:

所有循環神經網絡都具有神經網絡的重複模塊鏈的形式。 在標準的RNN中,該重複模塊將具有非常簡單的結構,例如單個tanh層。

**The repeating module in a standard RNN contains a single layer.**

圖中可以很清晰看出在隱藏狀態h(t)h^{(t)}x(t)x^{(t)}h(t1)h^{(t-1)} 得到。由於 RNN 梯度消失的問題,大牛們對於序列索引位置 tt 的隱藏結構做了改進,可以說通過一些技巧讓隱藏結構複雜了起來,來避免梯度消失的問題,這樣的特殊 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 單元來處理的。它通過 ht1h_{t-1}xtx_{t} 信息來輸出一個 0-1 之間的向量,該向量裏面的 0-1 值表示單元狀態 Ct1C_{t-1}中的哪些信息保留或丟棄多少。0表示不保留,1表示都保留。遺忘門如下圖所示。

forget gate

3.2 輸入門(input gate)

要更新單元狀態,我們需要輸入門。首先,我們將先前的隱藏狀態和當前輸入傳遞給 sigmoidsigmoid 函數。這決定了通過將值轉換爲0到1來更新哪些值。0表示不重要,1表示重要。你還將隱藏狀態和當前輸入傳遞給 tanhtanh 函數,將它們壓縮到-1和1之間以幫助調節網絡。然後將 tanhtanh 輸出與 sigmoidsigmoid 輸出相乘。

input gate

3.3 單元狀態(cell state)

現在我們有足夠的信息來計算單元狀態。首先,單元狀態逐點乘以遺忘向量。如果它乘以接近0的值,則有可能在單元狀態中丟棄值。然後我們從輸入門獲取輸出並進行逐點加法,將單元狀態更新爲神經網絡發現相關的新值。這就得到了新的單元狀態。

cell state

3.4 輸出門(output gate)

最後我們有輸出門。輸出門決定下一個隱藏狀態是什麼。請記住,隱藏狀態包含有關先前輸入的信息。隱藏狀態也用於預測。首先,我們將先前的隱藏狀態和當前輸入傳遞給 sigmoidsigmoid 函數。然後我們將新的單元狀態傳遞給 tanhtanh 函數。將 tanhtanh 輸出與 sigmoidsigmoid 輸出相乘,以決定隱藏狀態應攜帶的信息。它的輸出是隱藏狀態。然後將新的單元狀態和新的隱藏狀態傳遞到下一個時間步。

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

關注公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章