Long Short-Term Memory
目標 | 提出 RNN 使用 BPTT 進行最佳化時遇到的問題,並提出 LSTM 架構進行修正 |
作者 | Sepp Hochreiter, Jürgen Schmidhuber |
期刊/會議名稱 | Neural Computation |
發表時間 | 1997 |
論文連結 | https://ieeexplore.ieee.org/abstract/document/6795963 |
書本連結 | https://link.springer.com/chapter/10.1007/978-3-642-24797-2_4 |
重點
- 此篇論文與 LSTM-2000 都寫錯自己的數學公式,但我的筆記內容主要以正確版本為主
- 計算 RNN 梯度反向傳播的演算法包含 BPTT 或 RTRL
- BPTT 全名為 Back-Propagation Throught Time
- RTRL 全名為 Real Time Recurrent Learning
- 不論使用 BPTT 或 RTRL,RNN 的梯度都會面臨爆炸或消失的問題
- 梯度爆炸造成神經網路的權重劇烈振盪
- 梯度消失造成訓練時間慢長
- 無法解決時間差較長的問題
- 論文提出 LSTM + RTRL 能夠解決上述問題
- Backward pass 演算法時間複雜度為
, 代表權重 - Backward pass 演算法空間複雜度也為
,因此沒有輸入長度的限制 - 此結論必須依靠丟棄部份梯度並使用 RTRL 才能以有效率的辦法解決梯度爆炸或消失
- Backward pass 演算法時間複雜度為
- 使用乘法閘門(Multiplicative Gate)學習開啟 / 關閉模型記憶寫入 / 讀取機制
- LSTM 的閘門單元參數應該讓偏差項(bias term)初始化成負數
- 輸入閘門偏差項初始化成負數能夠解決內部狀態偏差行為(Internal State Drift)
- 輸出閘門偏差項初始化成負數能夠避免模型濫用記憶單元初始值與訓練初期梯度過大
- 如果沒有輸出閘門,則收斂速度會變慢
- 根據實驗 LSTM 能夠達成以下任務
- 擁有處理短時間差(Short Time Lag)任務的能力
- 擁有處理長時間差(Long Time Lag)任務的能力
- 能夠處理最長時間差長達
個單位的任務 - 輸入訊號含有雜訊時也能處理
- LSTM 的缺點
- 仍然無法解決 delayed XOR 問題
- 改成 BPTT 可能可以解決,但計算複雜度變高
- CEC 在使用 BPTT 後有可能無效,但根據實驗使用 BPTT 時誤差傳遞的過程中很快就消失
- 在部份任務上無法比 random weight guessing 最佳化速度還要快
- 例如 500-bit parity
- 使用 CEC 才導致此後果
- 但計算效率高,最佳化過程也比較穩定
- 無法精確的判斷重要訊號的輸入時間
- 所有使用梯度下降作為最佳演算法的模型都有相同問題
- 如果精確判斷是很重要的功能,則作者認為需要幫模型引入計數器的功能
- 仍然無法解決 delayed XOR 問題
- 當單一字元的出現次數期望值增加時,學習速度會下降
- 作者認為是常見字詞的出現導致參數開始振盪
- 與 PyTorch 實作的 LSTM 完全不同
- 本篇論文的架構定義更為廣義
- 本篇論文只有輸入閘門(Input Gate)跟輸出閘門(Output Gate),並沒有使用失憶閘門(Forget Gate)
傳統的 RNN
計算定義
一個 RNN 模型在
- 外部輸入(External Input)
- 輸入維度為
- 使用下標
代表不同的輸入訊號,
- 輸入維度為
- 總輸出(Total Output)
- 輸出維度為
- 使用下標
代表不同的輸入訊號, - 注意這裡是使用
不是
- 輸出維度為
- 總共計算
個時間點- 時間為離散狀態,
的起始值為 ,結束值為 ,每次遞增 - 初始化
,輸入為 ,輸出為
- 時間為離散狀態,
令 RNN 模型的參數為
代表第 時間的模型內部節點 所收到的淨輸入(total input)- 由
時間點的輸入訊號計算 時間點的輸出結果 - 這是早年常見的 RNN 公式表達法
- 由
代表輸入節點 與模型內部節點 所連接的權重- 輸入節點可以是外部輸入
或是總輸出 - 總共有
個輸入節點,因此 - 總共有
個內部節點,因此
- 輸入節點可以是外部輸入
令模型使用的啟發函數(Activation Function)為
- 使用下標
是因為每個維度所使用的啟發函數可以不同 必須要可以微分,當時與 RNN 有關的論文幾乎都是令 為 sigmoid 函數- 後續論文分析都是採用 sigmoid 函數,因此我們直接以
表達
計算誤差
如果
梯度計算
根據
根據
式子
根據
由於第
式子
模型參數
而在時間點
梯度爆炸 / 消失
從
為了方便計算,我們定義新的符號
意思是在過去時間點
- 注意是貢獻總誤差所得之梯度
- 根據時間的限制我們有不等式
- 節點
的數值範圍為 ,見式子
因此
由
由
現在讓我們固定
-
當
時,根據 我們可以推得論文中的 (3.1) 式 -
當
時,根據 我們可以推得論文中的 (3.2) 式
注意錯誤:論文中的 (3.2) 式不小心把
因此根據
根據
則梯度變化率成指數
而如果
則梯度變化率成指數
從
因此當
所以
而
最後一個推論的原理是指數函數的收斂速度比線性函數快。
注意錯誤:論文中的推論
是錯誤的,理由是
注意錯誤:論文中進行了以下函數最大值的推論
最大值發生於微分值為
拆解微分式可得
移項後可以得到
註:推論中使用了以下公式
但公式的前提不對,理由是
接著我們可以計算
由於每個項次都能遭遇梯度消失,因此總和也會遭遇梯度消失。
問題觀察
情境 1:模型輸出與內部節點 1-1 對應
假設模型沒有任何輸入,啟發函數
則根據式子
為了不讓梯度
透過
- 不會像
導致梯度爆炸 - 不會像
導致梯度消失
如果
觀察
- 輸入
與輸出 之間的關係是乘上一個常數項 - 代表函數
其實是一個線性函數
若採用
這個現象稱為 Constant Error Carousel(簡稱 CEC),而作者設計的 LSTM 架構會完全基於 CEC 進行設計,但我覺得概念比較像 ResNet 的 residual connection。
情境 2:增加外部輸入
將
由於
但作者認為,在計算的過程中,部份時間點的輸入資訊
- 加入新資訊:代表
- 忽略新資訊:代表
因此無法只靠一個
情境 3:輸出回饋到多個節點
將
由於
但作者認為,在計算的過程中,部份時間點的輸出資訊
- 保留過去資訊:代表
- 忽略過去資訊:代表
因此無法只靠一個
LSTM 架構
圖 1:記憶單元內部架構。 符號對應請見下個小節。 圖片來源:論文。
圖 2:LSTM 全連接架構範例。 線條真的多到讓人看不懂,看我整理過的公式比較好理解。 圖片來源:論文。
為了解決梯度爆炸 / 消失問題,作者決定以 Constant Error Carousel 為出發點(見
- 乘法輸入閘門(Multiplicative Input Gate):用於決定是否更新記憶單元的內部狀態
- 乘法輸出閘門(Multiplicative Output Gate):用於決定是否輸出記憶單元的計算結果
- 自連接線性單元(Central Linear Unit with Fixed Self-connection):概念來自於 CEC(見
),藉此保障梯度不會消失
初始狀態
我們將
符號 | 意義 | 數值範圍 |
---|---|---|
隱藏單元的個數 | ||
每個記憶單元區塊中記憶單元的個數 | ||
記憶單元區塊的個數 |
- 因為論文 4.3 節有提到可以完全沒有隱藏單元,因此允許
- 根據論文 4.4 節,可以同時擁有
個不同的記憶單元區塊,因此允許
接著我們定義
符號 | 意義 | 數值範圍 |
---|---|---|
隱藏單元(Hidden Units) | ||
輸入閘門單元(Input Gate Units) | ||
輸出閘門單元(Output Gate Units) | ||
記憶單元區塊 |
||
記憶單元區塊 |
||
模型總輸出 |
- 以上所有向量全部都初始化成各自維度的零向量,也就是
時模型所有節點(除了輸入)都是 - 根據論文 4.4 節,可以同時擁有
個不同的記憶單元- 圖 2 模型共有
個不同的記憶單元 - 記憶單元區塊上標
的數值範圍為
- 圖 2 模型共有
- 同一個記憶單元區塊共享閘門單元,因此
的維度為 - 根據論文 4.3 節,記憶單元、閘門單元與隱藏單元都算是隱藏層(Hidden Layer)的一部份
- 外部輸入會與隱藏層和總輸出連接
- 隱藏層會與總輸出連接(但閘門不會)
All units (except for gate units) in all layers have directed connections (serve as input) to all units in the layer above (or to all higher layers; see experiments 2a and 2b)
計算定義
當我們得到
以上就是 LSTM(1997 版本)的計算流程。
都是 differentiable element-wise activation function,大部份都是 sigmoid 或是 sigmoid 的變形 的數值範圍(range)必須限制在 ,才能達成閘門的功能 的數值範圍只跟任務有關- 論文並沒有給
任何數值範圍的限制
論文 4.3 節有提到可以完全沒有隱藏單元,而後續的研究(例如 LSTM-2000、LSTM-2002)也完全沒有使用隱藏單元,因此
中的 必須去除 中的 必須去除- 隱藏單元的設計等同於保留
的架構,是個不好的設計,因此論文後續在最佳化的過程中動了手腳
根據
- 記憶單元淨輸入會與輸入閘門進行相乘,因此稱為乘法輸入閘門
- 由於
時間點的資訊有加上 時間點的資訊,因此稱為自連接線性單元 - 同一個記憶單元區塊會共享同一個輸入閘門,因此
中的乘法是純量乘上向量,這也是 的理由 - 當模型認為輸入訊號不重要時,模型應該要關閉輸入閘門,即
- 丟棄當前輸入訊號,只以過去資訊進行決策
- 在此狀態下
時間點的記憶單元內部狀態與 時間點完全相同,達成 ,藉此保障梯度不會消失
- 當模型認為輸入訊號重要時,模型應該要開啟輸入閘門,即
- 不論輸入訊號
的大小,只要 ,則輸入訊號完全無法影響接下來的所有計算,LSTM 以此設計避免 所遇到的困境
根據
- 記憶單元啟發值會與輸出閘門進行相乘,因此稱為乘法輸出閘門
- 同一個記憶單元區塊會共享同一個輸出閘門,因此
中的乘法是純量乘上向量,這也是 的理由 - 當模型認為輸出訊號會導致當前計算錯誤時,模型應該關閉輸出閘門,即
- 在輸入閘門開啟的狀況下,關閉輸出閘門代表不讓現在時間點的資訊影響當前計算
- 在輸入閘門關閉的狀況下,關閉輸出閘門代表不讓過去時間點的資訊影響當前計算
- 當模型認為輸出訊號包含重要資訊時,模型應該要開啟輸出閘門,即
- 在輸入閘門開啟的狀況下,開啟輸出閘門代表讓現在時間點的資訊影響當前計算
- 在輸入閘門關閉的狀況下,開啟輸出閘門代表不讓過去時間點的資訊影響當前計算
- 不論輸出訊號
的大小,只要 ,則輸出訊號完全無法影響接下來的所有計算,LSTM 以此設計避免 所遇到的困境 - PyTorch 實作的 LSTM 中
表達的意思是記憶單元輸出
根據
- 注意在計算
時並沒有使用閘門單元,與 的計算不同 - 注意
與 不同 是總輸出,我的 是論文中的 是記憶單元的輸出閘門,我的 是論文中的
根據論文 A.7 式下方的描述,
我不確定這是否為作者的筆誤,畢竟附錄中所有分析的數學式都寫的蠻正確的,我認為這裡是筆誤的理由如下:
- 同個實驗室後續的研究(例如 LSTM-2002)寫的式子不同
- 至少要傳播兩個時間點才能得到輸出,代表第
個時間點的輸出完全無法利用到記憶單元的知識 - 後續的實驗架構設計中沒有將外部輸入連接到輸出,代表第
個時間點的輸出完全依賴模型的初始狀態(常數),非常不合理
因此我決定改用我認為是正確的版本撰寫後續的筆記,即
注意
參數結構
參數 | 意義 | 輸出維度 | 輸入維度 |
---|---|---|---|
產生隱藏單元的全連接參數 | |||
產生輸入閘門的全連接參數 | |||
產生輸出閘門的全連接參數 | |||
產生第 |
|||
產生輸出的全連接參數 |
丟棄部份模型單元的梯度
過去的論文中提出以修改最佳化過程避免 RNN 訓練遇到梯度爆炸 / 消失的問題(例如 Truncated BPTT)。
論文 4.5 節提到最佳化 LSTM 的方法為 RTRL 的變種,主要精神如下:
- 最佳化的核心思想是確保能夠達成 CEC (見
) - 使用的手段是要求所有梯度反向傳播的過程在經過記憶單元區塊與隱藏單元後便停止傳播
- 停止傳播導致在完成
時間點的 forward pass 後梯度可以馬上計算完成(real time 的精神便是來自於此)
首先我們定義新的符號
所有與隱藏單元淨輸入
- 注意論文在 A.1.2 節的開頭只提到輸入閘門、輸出閘門、記憶單元要丟棄梯度
- 但論文在 A.9 式描述可以將隱藏單元的梯度一起丟棄,害我白白推敲公式好幾天
Here it would be possible to use the full gradient without affecting constant error flow through internal states of memory cells.
根據
由於
相對於總輸出所得剩餘梯度
我們將論文的 A.8 式拆解成
總輸出參數
令
由於總輸出
就是論文中 A.8 式的第一個 case- 由於
可以是任意的輸出節點,因此在 時 對於 的梯度為
隱藏單元參數
在
閘門單元參數
同
記憶單元淨輸入參數
記憶單元淨輸入參數
相對於隱藏單元所得剩餘梯度
我們將論文的 A.9 式拆解成
隱藏單元參數
根據
閘門單元參數
由於隱藏單元
記憶單元淨輸入參數
同
相對於記憶單元輸出所得剩餘梯度
我們將論文的 A.13 式拆解成
閘門單元參數
根據
記憶單元淨輸入參數
同
注意錯誤:論文 A.13 式最後使用加法
相對於閘門單元所得剩餘梯度
我們將論文的 A.10, A.11 式拆解成
閘門單元參數
根據
記憶單元淨輸入參數
由於閘門單元
相對於記憶單元內部狀態所得剩餘梯度
我們將論文的 A.12 式拆解成
閘門單元參數
將
記憶單元淨輸入參數
使用
注意錯誤:論文 A.12 式最後使用加法
更新模型參數
總輸出參數
從
隱藏單元參數
從
輸出閘門單元參數
從
輸入閘門單元參數
從
記憶單元淨輸入參數
從
架構分析
時間複雜度
假設
就是論文中的 A.27 式- 在
時間點參數更新需要考慮 時間點的計算狀態,請見 - 沒有如同
的連乘積項,因此不會有梯度消失問題 - 整個計算過程需要額外紀錄的梯度項次只有
中的- 紀錄讓 LSTM 可以隨著 forward pass 的過程即時更新
- 不需要等到
時間點的計算結束,因此不是採用 BPTT 的演算法 - 即時更新(意思是
時間點的 forward pass 完成後便可計算 時間點的誤差梯度)是 RTRL 的主要精神
總共會執行
空間複雜度
我們也可以推得在
總共會執行
- 依照時間順序計算梯度,計算完
時間點的梯度時 的資訊便可丟棄 - 這就是 RTRL 的最大優點
達成梯度常數
根據
由於丟棄部份梯度的作用,
內部狀態偏差行為
觀察
- 如果
是一個非常大的正數,則 會變得非常小 - 如果
是一個非常小的負數,則 也會變得非常小 - 在
極正或極負的情況下,輸入閘門參數 的梯度會消失 - 此現象稱為內部狀態偏差行為(Internal State Drift)
- 同樣的現象也會發生在記憶單元淨輸入參數
身上,請見 - 此分析就是論文的 A.39 式改寫而來
解決 Internal State Drift
作者提出可以在
根據
雖然這種作法是種模型偏差(Model Bias)而且會導致
輸出閘門初始化
論文 4.7 節表示,在訓練的初期模型有可能濫用記憶單元的初始值作為計算的常數項(細節請見
因此可以將輸出閘門加上偏差項,並初始化成較小的負數(理由類似於
如果有多個記憶單元,則可以給予不同的負數,讓模型能夠按照需要依大小順序取得記憶單元(愈大的負數愈容易被取得)。
輸出閘門的優點
在訓練的初期誤差通常比較大,導致梯度跟著變大,使得模型在訓練初期的參數劇烈振盪。
由於輸出閘門所使用的啟發函數
但這些說法並沒有辦法真的保證一定會實現,算是這篇論文說服力比較薄弱的點。
實驗
實驗設計
- 要測試較長的時間差
- 資料集不可以出現短時間差
- 任務要夠難
- 不可以只靠 random weight guessing 解決
- 需要比較多的參數或是高計算精度 (sparse in weight space)
控制變因
- 使用 Online Learning 進行最佳化
- 意思就是 batch size 為 1
- 不要被 Online 這個字誤導
- 使用 sigmoid 作為啟發函數
- 包含
- 包含
- 資料隨機性
- 資料生成為隨機
- 訓練順序為隨機
- 在每個時間點
的計算順序為- 將外部輸入
丟入模型 - 計算輸入閘門、輸出閘門、記憶單元、隱藏單元
- 計算總輸出
- 將外部輸入
- 訓練初期只使用一個記憶單元,即
- 如果訓練中發現最佳化做的不好,開始增加記憶單元,即
- 一旦記憶單元增加,輸入閘門與輸出閘門也需要跟著增加
- 這個概念稱為 Sequential Network Construction
- 如果訓練中發現最佳化做的不好,開始增加記憶單元,即
與 函數如果沒有特別提及,就是使用 的定義
實驗 1:Embedded Reber Grammar
圖 3:Reber Grammar。 一個簡單的有限狀態機,能夠生成的字母包含 BEPSTVX。 圖片來源:論文。
圖 4:Embedded Reber Grammar。 一個簡單的有限狀態機,包含兩個完全相同的 Reber Grammar,開頭跟結尾只能是 BT…TE 與 BP…PE。 圖片來源:論文。
任務定義
- Embedded Reber Grammar 是實驗 RNN 短時間差(Short Time Lag)的基準測試資料集
- 根據圖 3 的架構,生成的第一個字為 B,接著是 T 或 P
- 因此前兩個字生成 BT 或 BP 的機率各為
- 能夠生成的字母包含 BEPSTVX
- 生成直到產生 E 結束,結尾一定是 SE 或 VE
- 由於有限狀態機中有 Loop,因此 Reber Grammar 有可能產生任意長度的文字
- 因此前兩個字生成 BT 或 BP 的機率各為
- 根據圖 4 的架構,生成的開頭為 BT 或 BP
- 前兩個字生成 BT 或 BP 的機率各為
- 如果生成 BT,則結尾一定要是 TE
- 如果生成 BP,則結尾一定要是 PE
- 因此 RNN 模型必須學會記住開頭的 T / P 與結尾搭配,判斷一個文字序列是否由 Embedded Reber Grammar 生成
- 前兩個字生成 BT 或 BP 的機率各為
- 模型會在每個時間點
收到一個字元,並輸出下一個時間點 會收到的字元- 輸入與輸出都是 one-hot vector,維度為
,每個維度各自代表 BEPSTVX 中的一個字元,取數值最大的維度作為預測結果 - 模型必須根據
時間點收到的字元預測 時間點輸出的字元 - 概念就是 Language Model
- 輸入與輸出都是 one-hot vector,維度為
- 資料數
- 訓練集:256 筆
- 測試集:256 筆
- 總共產生 3 組不同的訓練測試集
- 每組資料集都跑
次實驗,每次實驗模型都隨機初始化 - 總共執行
次實驗取平均
- 評估方法
- Accuracy
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
至少有 |
||
沒有隱藏單元 | ||
全連接隱藏層 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
外部輸入沒有直接連接到總輸出 | ||
參數初始化範圍 | ||
輸出閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸出閘門偏差項 | |
Learning rate | ||
總參數量 |
實驗結果
表格 1:Embedded Reber Grammar 實驗結果。 表格來源:論文。
- LSTM + 丟棄梯度 + RTRL 在不同的實驗架構中都能解決任務
- RNN + RTRL 無法完成
- Elman Net + ELM 無法完成
- LSTM 收斂速度比其他模型都還要快
- LSTM 使用的參數數量並沒有比其他的模型多太多
- 驗證輸出閘門的有效性
- 當 LSTM 模型記住第二個輸入是 T / P 之後,輸出閘門就會讓後續運算的啟發值接近
,不讓記憶單元內部狀態影響模型學習簡單的 Reber Grammar - 如果沒有輸出閘門,則收斂速度會變慢
- 當 LSTM 模型記住第二個輸入是 T / P 之後,輸出閘門就會讓後續運算的啟發值接近
實驗 2a:無雜訊長時間差任務
任務定義
定義
定義
令
當給予模型
- 模型需要記住
的順序 - 模型也需要記住開頭的
是 還是 ,並利用 的資訊預測 - 根據
的大小這個任務可以是短時間差或長時間差 - 訓練資料
- 每次以各
的機率抽出 作為輸入 - 總共執行
次抽樣與更新
- 每次以各
- 測試資料
- 每次以各
的機率抽出 作為輸入 - 每次錯誤率在
以下就是成功,反之失敗 - 總共執行
次成功與失敗的判斷
- 每次以各
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
總輸出就是記憶單元的輸出 | ||
當誤差停止下降時,增加記憶單元 | ||
Sigmoid 函數 | ||
沒有隱藏單元 | ||
全連接隱藏層 | ||
全連接隱藏層 | ||
沒有輸出閘門 | ||
總輸出就是記憶單元的輸出 | ||
參數初始化範圍 | ||
Learning rate | ||
最大更新次數 |
實驗結果
表格 2:無雜訊長時間差任務實驗結果。 表格來源:論文。
- 在
時使用 RNN + RTRL 時部份實驗能夠預測序列- 序列很短時 RNN 還是有能力完成任務
- 在
時使用 RNN + RTRL 時直接失敗 - 在
時只剩 LSTM 能夠完全完成任務 - LSTM 收斂速度最快
實驗 2b:有雜訊長時間差任務
實驗設計和 LSTM 的架構與實驗 2a 完全相同,只是序列
- 此設計目的是為了確保實驗 2a 中的順序性無法被順利壓縮
- 先創造訓練資料,測試使用與訓練完全相同的資料
- 仍然只有 LSTM 能夠完全完成任務
- LSTM 的誤差仍然很快就收斂
- 當
時只需要 次更新就能完成任務 - 代表 LSTM 能夠在有雜訊的情況下正常運作
- 當
實驗 2c:有雜訊超長時間差任務
任務定義
實驗設計和 LSTM 的架構與實驗 2a 概念相同,只是
生成一個序列的概念如下:
- 固定一個正整數
,代表序列基本長度 - 從
中隨機抽樣生成長度為 的序列 - 在序列的開頭補上
或 (機率各為 ),讓序列長度變成 - 接著以
的機率從 中挑一個字補在序列 的尾巴,或是以 的機率補上 - 如果生成
就再補上 或 (與開頭第二個字元相同)並結束 - 如果不是生成
則重複步驟 4
假設步驟
其中
因此
利用二項式分佈的期望值公式我們可以推得
訓練誤差只考慮最後一個時間點
測試時會連續執行
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
作者認為其實只要一個記憶單元就夠了 | ||
只考慮最後一個時間點的預測誤差,並且預測的可能結果只有 |
||
沒有隱藏單元 | ||
全連接隱藏層 | ||
全連接隱藏層 | ||
全連接隱藏層 | ||
外部輸入沒有直接連接到總輸出 | ||
參數初始化範圍 | ||
Learning rate |
實驗結果
表格 3:有雜訊超長時間差任務實驗結果。 表格來源:論文。
- 其他方法沒有辦法完成任務,因此不列入表格比較
- 輸入序列長度可到達
- 當輸入字元種類與輸入長度一起增加時,訓練時間只會緩慢增加
- 當單一字元的出現次數期望值增加時,學習速度會下降
- 作者認為是常見字詞的出現導致參數開始振盪
實驗 3a:Two-Sequence Problem
任務定義
給予一個實數序列
如果
給定一個常數
當
- 此任務由 Bengio 提出
- 作者發現只要用隨機權重猜測(Random Weight Guessing)就能解決,因此在實驗 3c 提出任務的改進版本
- 訓練分成兩個階段
- ST1:事先隨機抽取的
筆測試資料完全分類正確 - ST2:達成 ST1 後在
筆測試資料上平均錯誤低於
- ST1:事先隨機抽取的
- 實驗結果是執行
次實驗的平均值
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
沒有隱藏單元 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
外部輸入沒有直接連接到總輸出 | ||
參數初始化範圍 | ||
輸入閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸入閘門偏差項 | |
輸出閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸出閘門偏差項 | |
Learning rate |
實驗結果
表格 4:Two-Sequence Problem 實驗結果。 表格來源:論文。
- 偏差項初始化的數值其實不需要這麼準確
- LSTM 能夠快速解決任務
- LSTM 在輸入有雜訊(高斯分佈)時仍然能夠正常表現
實驗 3b:Two-Sequence Problem + 雜訊
表格 5:Two-Sequence Problem + 雜訊實驗結果。 表格來源:論文。
實驗設計與 LSTM 完全與實驗 3a 相同,但對於序列
- 兩階段訓練稍微做點修改
- ST1:事先隨機抽取的
筆測試資料少於 筆資料分類錯誤 - ST2:達成 ST1 後在
筆測試資料上平均錯誤低於
- ST1:事先隨機抽取的
- 結論
- 增加雜訊導致誤差收斂時間變長
- 相較於實驗 3a,雖然分類錯誤率上升,但 LSTM 仍然能夠保持較低的分類錯誤率
實驗 3c:強化版 Two-Sequence Problem
表格 6:強化版 Two-Sequence Problem 實驗結果。 表格來源:論文。
實驗設計與 LSTM 完全與實驗 3b 相同,但進行以下修改
類別必須輸出 , 類別必須輸出- 高斯分佈變異數改為
- 預測結果與答案絕對誤差大於
就算分類錯誤 - 任務目標是所有的預測絕對誤差平均值小於
- 兩階段訓練改為一階段
- 事先隨機抽取的
筆測試資料完全分類正確 筆測試資料上絕對誤差平均值小於
- 事先隨機抽取的
- Learning rate 改成
- 結論
- 任務變困難導致收斂時間變更長
- 相較於實驗 3a,雖然分類錯誤率上升,但 LSTM 仍然能夠保持較低的分類錯誤率
實驗 4:加法任務
任務定義
定義一個序列
每個時間點的元素的第一個數值都是隨機從
令
決定每個時間點的元素的第二個數值的方法如下:
- 首先將所有元素的第二個數值初始化成
- 將
與 的第二個數值初始化成 - 從
隨機挑選一個時間點,並將該時間點的第二個數值加上 - 如果前一個步驟剛好挑到
,則 的第二個數值將會是 ,否則為 - 從
隨機挑選一個時間點,並只挑選第二個數值仍為 的時間點,挑選後將該時間點的第二個數值設為
透過上述步驟
模型在
只考慮
- 模型必須要學會長時間關閉輸入閘門
- 在實驗中故意對所有參數加上偏差項,實驗內部狀態偏差行為造成的影響
- 當連續
次的誤差第於 ,且平均絕對誤差低於 時停止訓練 - 測試資料集包含
筆資料
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
沒有隱藏單元 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
外部輸入沒有直接連接到總輸出,有額外使用偏差項 | ||
參數初始化範圍 | ||
輸入閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸入閘門偏差項 | |
Learning rate |
實驗結果
表格 7:加法任務實驗結果。 表格來源:論文。
- LSTM 能夠達成任務目標
- 不超過
筆以上預測錯誤的資料
- 不超過
- LSTM 能夠摹擬加法器,具有作為 distributed representation 的能力
- 能夠儲存時間差至少有
以上的資訊,因此不會被內部狀態偏差行為影響
實驗 5:乘法任務
任務定義
從 LSTM 的架構上來看實驗 4 的加法任務可以透過
概念與實驗 4 的任務幾乎相同,只做以下修改:
- 每個時間點的元素第一個數值改為
之間的隨機值 時間點的輸出目標改成
- 當連續
筆訓練資料中,不超過 筆資料的絕對誤差小於 就停止訓練 - 選擇
的理由是模型已經有能力記住資訊,但計算結果不夠精確 - 選擇
的理由是模型能夠精確達成任務
- 選擇
LSTM 架構
與實驗 4 完全相同,只做以下修改:
- 輸入閘門偏差項改成隨機初始化
- Learning rate 改為
實驗結果
表格 8:乘法任務實驗結果。 表格來源:論文。
- LSTM 能夠達成任務目標
- 在
時不超過 筆以上預測錯誤的資料 - 在
時不超過 筆以上預測錯誤的資料
- 在
- 如果額外使用隱藏單元,則收斂速度會更快
- LSTM 能夠摹擬乘法器,具有作為 distributed representation 的能力
- 能夠儲存時間差至少有
以上的資訊,因此不會被內部狀態偏差行為影響
實驗 6a:Temporal Order with 4 Classes
任務定義
給予一個序列
序列
因此根據
模型必須要在
的最少時間差為- 模型必須要記住資訊與出現順序
- 當模型成功預測連續
筆資料,並且預測平均誤差低於 時便停止訓練 - 測試資料共有
筆
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
沒有隱藏單元 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
外部輸入沒有直接連接到總輸出,有額外使用偏差項 | ||
參數初始化範圍 | ||
輸入閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸入閘門偏差項 | |
Learning rate |
實驗結果
表格 9:Temporal Order with 4 Classes 任務實驗結果。 表格來源:論文。
-
LSTM 的平均誤差低於
- 沒有超過
筆以上的預測錯誤
- 沒有超過
-
LSTM 可能使用以下的方法進行解答
- 擁有
個記憶單元時,依照順序記住出現的資訊 - 只有
個記憶單元時,LSTM 可以改成記憶狀態的轉移
- 擁有
實驗 6b:Temporal Order with 8 Classes
任務定義
與實驗 6a 完全相同,只是多了一個
時間點改成落在 時間點落在- 類別變成
種
LSTM 架構
參數 | 數值(或範圍) | 備註 |
---|---|---|
沒有隱藏單元 | ||
沒有隱藏單元 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
全連接隱藏層,有額外使用偏差項 | ||
外部輸入沒有直接連接到總輸出,有額外使用偏差項 | ||
參數初始化範圍 | ||
輸入閘門偏差項初始化範圍 | 由大到小依序初始化不同記憶單元對應輸入閘門偏差項 | |
Learning rate |
實驗結果
見表格 9。