LSTM長短期記憶遞歸神經網絡

當前項目中用到自動學習,這部分在讀書期間學得比較泛,沒有深入。加之,時間一長,學得都還給老師了。今天重溫LSTM.

0. 什麼是LSTM

LSTM,全稱 Long Short Term Memory (長短期記憶) 是一種特殊的遞歸神經網絡 。這種網絡與一般的前饋神經網絡不同,

LSTM可以利用時間序列對輸入進行分析;簡而言之,當使用前饋神經網絡時,神經網絡會認爲我們 t 時刻輸入的內容與

 t+1 時刻輸入的內容完全無關,對於許多情況,例如圖片分類識別,這是毫無問題的,可是對於一些情景,例如自然語

言處理 (NLP, Natural Language Processing) 或者我們需要分析類似於連拍照片這樣的數據時,合理運用 t或之前的輸入

來處理 t+n 時刻顯然可以更加合理的運用輸入的信息。爲了運用到時間維度上信息,人們設計了遞歸神經網絡 (RNN,

Recurssion Neural Network),一個簡單的遞歸神經網絡可以用這種方式表示

在圖中, xt是在 t 時刻的輸入信息, t 是在 t時刻的輸入信息,我們可以看到神經元A會遞歸的調用自身並且

將 t−1 時刻的信息傳遞給t 時刻。遞歸神經網絡在許多情況下運行良好,特別是在對短時間序列數據的分析時

十分方便。但是,注意到前面着重強調了“短”,這是爲什麼呢?

上圖所示的簡單遞歸神經網絡存在一個“硬傷“,長期依賴問題:遞歸神經網絡只能處理我們需要較接近的上

下文的情況:

Example 1. 想象現在設計了一個基於簡單RNN的句子自動補全器,當我輸入"Sea is ..." 的時候會自動補全爲"Sea is blue"。

在這種情況下,我們需要獲取從上文獲取的信息極短,而RNN可以很好的收集到 t=0 時的信息"Sea"並且補上"blue"

Example 2. 現在,假設我們用剛剛的RNN試圖補全一篇文章"我一直呆在中國,……,我會說一口流利的 (?)"。

在這裏,爲了補全最後的空缺,需要的信息在非常遠的上文(e.g. 200+字前)提到的”中國“。在實驗中簡單的理想狀態下,

經過精心調節的RNN超參數可以良好的將這些信息向後傳遞。可是在現實的情況中,基本沒有RNN可以做到這一點。一些

學者後來研究發現RNN的長期依賴問題是這種網絡結構本身的問題。

不但如此,相比於一般的神經網絡,這種簡單的RNN還很容易出現兩種在神經網絡中臭名昭著的問題:梯度消失問題(神經

網絡的權重/偏置梯度極小,導致神經網絡參數調整速率急劇下降)和梯度爆炸問題(神經網絡的權重/偏置梯度極大,導致神經

網絡參數調整幅度過大,矯枉過正)。相信大家都看過一個著名的雞湯, (0.99)365 和 (1.01)365 的對比。實際上,這個雞湯

非常好的描述了梯度問題的本質:對於任意信息遞歸使用足夠多次同樣的計算,都會導致極大或極小的結果,也就是說…

根據微分鏈式法則,在RNN中,神經元的權重的梯度可以被表示爲一系列函數的微分的連乘。因爲神經元的參數(權重與偏置)

都是基於學習速率(一般爲常數)和參數梯度相反數(使得神經網絡輸出最快逼近目標輸出)得到的,一個過小或過大的梯度會

導致我們要麼需要極長的訓練時間(本來從-2.24 調節到 -1.99 只用500個樣本,由於梯度過小,每次只調 10−6 ,最後用了幾萬

個樣本),要麼會導致參數調節過度(例如本來應該從-10.02調節到-9.97,由於梯度過大,直接調成了+20.3)

1. 爲什麼需要LSTM

LSTM從被設計之初就被用於解決一般遞歸神經網絡中普遍存在的長期依賴問題,使用LSTM可以有效的傳遞和表達長時間序列

中的信息並且不會導致長時間前的有用信息被忽略(遺忘)。與此同時,LSTM還可以解決RNN中的梯度消失/爆炸問題。

2. LSTM 的直覺解釋

LSTM的設計或多或少的借鑑了人類對於自然語言處理的直覺性經驗。要想了解LSTM的工作機制,可以先閱讀一下一個(虛構的)

淘寶評論:

“這個筆記本非常棒,紙很厚,料很足,用筆寫起來手感非常舒服,而且沒有一股刺鼻的油墨味;更加好的是這個筆記本不但便
宜還做工優良,我上次在別家買的筆記本裁紙都裁不好,還會割傷手……”

如果讓你看完這段話以後馬上轉述,相信大多數人都會提取出來這段話中幾個重要的關鍵詞“紙好”,“沒味道”,“便宜”和“做工好”,

然後再重新組織成句子進行轉述。這說明了以下兩點:

  1. 在一個時間序列中,不是所有信息都是同等有效的,大多數情況存在“關鍵詞”或者“關鍵幀”
  2. 我們會在從頭到尾閱讀的時候“自動”概括已閱部分的內容並且用之前的內容幫助理解後文

基於以上這兩點,LSTM的設計者提出了“長短期記憶”的概念——只有一部分的信息需要長期的記憶,而有的信息可以不記下來。

同時,我們還需要一套機制可以動態的處理神經網絡的“記憶”,因爲有的信息可能一開始價值很高,後面價值逐漸衰減,這時候

我們也需要讓神經網絡學會“遺忘”特定的信息

3. LSTM的具體解釋

一個普通的,使用tanh函數的RNN可以這麼表示:

在這裏,我們可以看到A在 t−1 時刻的輸出值 t−1 被複制到了 t 時刻,與 t時刻的輸入xt 整合後經過一個帶權重和偏置的

tanh函數後形成輸出,並繼續將數據複製到 t+1 時刻……

與上圖樸素的RNN相比,單個LSTM單元擁有更加複雜的內部結構和輸入輸出:

在上圖中,每一個紅色圓形代表對向量做出的操作(pointwise operation, 對位操作),而黃色的矩形代表一個

神經網絡層,上面的字符代表神經網絡所使用的激活函數

LSTM的關鍵:單元狀態

LSTM能夠從RNN中脫穎而出的關鍵就在於上圖中從單元中貫穿而過的線 ——神經元的隱藏態(單元狀態),我們

可以將神經元的隱藏態簡單的理解成遞歸神經網絡對於輸入數據的“記憶”,用Ct表示神經元在 t時刻過後的“記憶”,

這個向量涵蓋了在 t+1 時刻前神經網絡對於所有輸入信息的“概括總結”

接下來會描述一下LSTM四個函數層分別在做些什麼

LSTM_1 遺忘門

對於上一時刻LSTM中的單元狀態來說,一些“信息”可能會隨着時間的流逝而“過時”。爲了不讓過多記憶影

響神經網絡對現在輸入的處理,我們應該選擇性遺忘一些在之前單元狀態中的分量——這個工作就交給了

“遺忘門”每一次輸入一個新的輸入,LSTM會先根據新的輸入和上一時刻的輸出決定遺忘掉之前的哪些記

憶——輸入和上一步的輸出會整合爲一個單獨的向量,然後通過sigmoid神經層,最後點對點的乘在單元

狀態上。因爲sigmoid 函數會將任意輸入壓縮到 (0,1) 的區間上,我們可以非常直覺的得出這個門的工作

原理 —— 如果整合後的向量某個分量在通過sigmoid層後變爲0,那麼顯然單元狀態在對位相乘後對應的

分量也會變成0,換句話說,“遺忘”了這個分量上的信息;如果某個分量通過sigmoid層後爲1,單元狀態會

“保持完整記憶”。不同的sigmoid輸出會帶來不同信息的記憶與遺忘。通過這種方式,LSTM可以長期記憶

重要信息,並且記憶可以隨着輸入進行動態調整

下面的公式可以用來描述遺忘門的計算,其中 ft 就是sigmoid神經層的輸出向量:

LSTM_2 & 3 記憶門

記憶門是用來控制是否將在t時刻(現在)的數據併入單元狀態中的控制單位。首先,用tanh函數層將現

在的向量中的有效信息提取出來,然後使用(圖上tanh函數層左側)的sigmoid函數來控制這些記憶要放

“多少”進入單元狀態。這兩者結合起來就可以做到:

  1. 從當前輸入中提取有效信息
  2. 對提取的有效信息做出篩選,爲每個分量做出評級(0 ~ 1),評級越高的最後會有越多的記憶進入單元狀態

下面的公式可以分別表示這兩個步驟在LSTM中的計算:

LSTM_4 輸出門

輸出門,顧名思義,就是LSTM單元用於計算當前時刻的輸出值的神經層。輸出層會先將當前輸入值與上一時

刻輸出值整合後的向量(也就是公式中的 [ℎt−1,xt] )用sigmoid函數提取其中的信息,接着,會將當前的

單元狀態通過tanh函數壓縮映射到區間(-1, 1)中*

爲什麼我們要在LSTM的輸出門上使用tanh函數?
以下引用自Stack Overflow上問題 What is the intuition of using tanh in LSTM 中的最佳答案:

在LSTM的輸入和輸出門中使用tanh函數有以下幾個原因:
1. 爲了防止梯度消失問題,我們需要一個二次導數在大範圍內不爲0的函數,而tanh函數可以滿足這一點
2. 爲了便於凸優化,我們需要一個單調函數
3. tanh函數一般收斂的更快
4. tanh函數的求導佔用系統的資源更少

將經過tanh函數處理後的單元狀態與sigmoid函數處理後的,整合後的向量點對點的乘起來就可以得到LSTM在t 時刻的輸出了!


4. LSTM 的變體

自從LSTM在自然語言處理等方面大獲成功後,許多種LSTM的變體被提出,其中只有幾種值得特別關注:

這種LSTM讓各個門都可以在獲得了上一時刻的單元狀態的前提下進行運算。在上面的圖中,單元狀態被額外賦予到了所有三個層中(輸出門除外),

然而在實際的應用中,大部分研究者只會選擇性的打開三個通道中的一或兩個

除此之外,還有很多其他LSTM變體以及通過其他方式構建RNN達到類似LSTM的效果的架構,然而這些架構的效率都大同小異,所以不過多說明了

5. 參考資料

[1] “Understanding LSTM Networks.” Understanding LSTM Networks -- Colah's Blog.

[2] “Long Short-Term Memory.” Wikipedia, Wikimedia Foundation, 1 Apr. 2020, .

[3] “LSTM以及三重門,遺忘門,輸入門,輸出門.” LSTM以及三重門,遺忘門,輸入門,輸出門_網絡_Lison_Zhu's Blog-CSDN博客.

[4] “遞歸神經網絡問題整理.” 遞歸神經網絡問題整理_網絡_leo魚的博客-CSDN博客.

[5] “詳解機器學習中的梯度消失、爆炸原因及其解決方法.” 詳解機器學習中的梯度消失、爆炸原因及其解決方法_網絡_Double_V的博客-CSDN博客.

[6] Dnkdnk. “What Is the Intuition of Using Tanh in LSTM.” Stack Overflow, 1 Sept. 1966, .

轉自:LSTM

 

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