點擊下方卡片,關注「新機器視覺」公眾號
重磅乾貨,第一時間送達
來源:機器學習算法那些事
熟悉深度學習的朋友知道,LSTM是一種RNN模型,可以方便地處理時間序列數據,在NLP等領域有廣泛應用。
0. 從RNN說起
循環神經網絡(Recurrent Neural Network,RNN)是一種用於處理序列數據的神經網絡。相比一般的神經網絡來說,他能夠處理序列變化的數據。比如某個單詞的意思會因為上文提到的內容不同而有不同的含義,RNN就能夠很好地解決這類問題。
1. 普通RNN先簡單介紹一下一般的RNN。其主要形式如下圖所示(圖片均來自台大李宏毅教授的PPT):

為當前狀態下數據的輸入,表示接收到的上一個節點的輸入。
為當前節點狀態下的輸出,而為傳遞到下一個節點的輸出。
通過上圖的公式可以看到,輸出 h'與 x 和 h 的值都相關。
而 y 則常常使用 h'投入到一個線性層(主要是進行維度映射)然後使用softmax進行分類得到需要的數據。
對這裡的y如何通過 h'計算得到往往看具體模型的使用方式。
長短期記憶(Long short-term memory, LSTM)是一種特殊的RNN,主要是為了解決長序列訓練過程中的梯度消失和梯度爆炸問題。簡單來說,就是相比普通的RNN,LSTM能夠在更長的序列中有更好的表現。
LSTM結構(圖右)和普通RNN的主要輸入輸出區別如下所示。

相比RNN只有一個傳遞狀態,LSTM有兩個傳輸狀態,一個(cell state),和一個(hidden state)。RNN中的等價於LSTM中的。
其中對於傳遞下去的改變得很慢,通常輸出的是上一個狀態傳過來的加上一些數值。
而則在不同節點下往往會有很大的區別。
2.2 深入LSTM結構下面具體對LSTM的內部結構來進行剖析。
首先使用LSTM的當前輸入和上一個狀態傳遞下來的拼接訓練得到四個狀態。
其中,,是由拼接向量乘以權重矩陣之後,再通過一個 sigmoid激活函數轉換成0到1之間的數值,來作為一種門控狀態。而則是將結果通過一個 tanh激活函數將轉換成-1到1之間的值(這裡使用 tanh是因為這裡是將其做為輸入數據,而不是門控信號)。
下面開始進一步介紹這四個狀態在LSTM內部的使用(敲黑板)

是Hadamard Product,也就是操作矩陣中對應的元素相乘,因此要求兩個相乘矩陣是同型的。則代表進行矩陣加法。
LSTM內部主要有三個階段:
1. 忘記階段。這個階段主要是對上一個節點傳進來的輸入進行選擇性忘記。簡單來說就是會 「忘記不重要的,記住重要的」。
具體來說是通過計算得到的(f表示forget)來作為忘記門控,來控制上一個狀態的哪些需要留哪些需要忘。
2. 選擇記憶階段。這個階段將這個階段的輸入有選擇性地進行「記憶」。主要是會對輸入進行選擇記憶。哪些重要則着重記錄下來,哪些不重要,則少記一些。當前的輸入內容由前面計算得到的表示。而選擇的門控信號則是由(i代表information)來進行控制。
將上面兩步得到的結果相加,即可得到傳輸給下一個狀態的。也就是上圖中的第一個公式。與普通RNN類似,輸出往往最終也是通過變化得到。
3. 總結以上,就是LSTM的內部結構。通過門控狀態來控制傳輸狀態,記住需要長時間記憶的,忘記不重要的信息;而不像普通的RNN那樣只能夠「呆萌」地僅有一種記憶疊加方式。對很多需要「長期記憶」的任務來說,尤其好用。
但也因為引入了很多內容,導致參數變多,也使得訓練難度加大了很多。因此很多時候我們往往會使用效果和LSTM相當但參數更少的GRU來構建大訓練量的模型。
本文僅做學術分享,如有侵權,請聯繫刪文。
