Neural Networks for Machine Learning by Geoffrey Hinton (7)序列建模與RNN

序列建模

用機器學習對序列建模的意義

將輸入序列變化到另一個域上的輸出序列,例如:

將聲壓信號轉化成單詞序列。

若沒有目標序列,可以通過預測輸入序列中的下一段來作爲學習信號。

這種方法介於監督學習與無監督學習之間,它使用了監督學習的訓練方法,但並不需要一個單獨的學習信號。

序列的無記憶模型

自迴歸模型(Autoregressive models)

通過使用固定數量的歷史序列項,來預測未來序列項。即所謂的“delay taps”,如圖1。


這裏寫圖片描述

前饋神經網絡(Feed-forward neural nets)

通過引入一個隱含非線性神經元來產生自迴歸模型。如圖2


這裏寫圖片描述

讓模型具有記憶

通過給生成模型加入具有內部動態的隱含狀態層,能夠使模型具有記憶:
- 與非記憶模型不同,記憶模型能夠在其隱藏狀態層中存儲很長時間,而且沒有簡單的標準去判斷多遠以前的事件對現在沒有影響
- 如果隱含層動態是有噪音的,而且其輸出也是有噪音的。那麼我們將無從得知其真正的隱含層狀態。
- 因此只能在隱含層空間推斷出概率分佈。

通過觀測值來推測隱含狀態通常是困難的。

然而以下有2種典型模型的隱含狀態計算起來比較方便。

線性動態系統(Linear Dynamical Systems)

線性動態系統工程師比較常用,其隱含層狀態是帶有高斯噪聲的線性動態,如圖3所示。


這裏寫圖片描述

隱馬爾可夫模型(Hidden Markov Models)

隱馬爾可夫模型基於離散數學,計算機學者比較喜歡。這種模型隱含層狀態由狀態轉移矩陣進行切換,每一次隱含層對應一個輸出,如圖4所示


這裏寫圖片描述

HMMs 的侷限性

HMMs 的 記憶容量太小,如果有N 個隱含狀態,HMMs 只能記住 log2(N) 位的信息;如果需要記住100位信息,那麼HMMs 需要 2100 個狀態。

遞歸神經網絡(Recurrent Neural Networks)

RNN的優點在與結合了兩者的優點:
- 利用了類似線性動態系統的分佈式隱含層結構,從而有效能夠存儲關於過去的大量信息。(能夠同時記憶多件不同的事情)
- 利用了類似隱馬爾可夫的非線性動態結構,從而能夠以更加複雜的方式更新隱含狀態。
生成模型是否需要隨機?
- 線性動態模型與隱馬爾可夫模型都是隨機模型,因爲這些動態和觀測值都是存在噪音的。
- RNN是確定性模型

使用反向傳播訓練RNN

RNN網絡可以展開成反覆利用共享權重的深度網絡,如圖5所示。


這裏寫圖片描述

因此其共享權重也應該聯合修正:

w1=w2Δ=Ew1+Ew2

將RNN展開是一種理解方式,還可以就在時域理解,即每次把對權重不同時刻的導數相加,進行聯合修正。

給RNN提供輸入

有多種方式來給RNN提供輸入(如圖6),其中最常用的是下列中的第三種:
- 指定所有節點的初始狀態。
- 指定部分節點的初始狀態。
- 指定部分節點的全部時刻狀態。


這裏寫圖片描述

給RNN提供監督信號

同樣有多種方式給RNN提供監督信號(如圖7),最常用的也是下列第三種:
- 指定所有節點的最終狀態。
- 指定所有節點的最後幾個階段狀態。
- 指定部分節點的所有階段的狀態。


這裏寫圖片描述

訓練RNN的簡單實例

完成兩個二進制序列的求和,需要完成相應的進位操作。其完整的算法邏輯可由如圖8所示含有4個隱含狀態的流程圖表示:


這裏寫圖片描述

該RNN針對二進制序列求和會有2個時間步延時刻(如圖9所示):
- 一個用以更新隱藏節點的狀態。
- 一個通過隱藏節點計算輸出。


這裏寫圖片描述

RNN可以模擬一個有限狀態自動機,但卻更加強大:N個隱含節點對應2^N個可能的激活向量,卻只需要N^2個權重。

爲什麼訓練RNN非常困難?

因爲訓練的前向過程和反向過程具有巨大區別

  • 前向過程爲了防止激活向量爆炸,我們使用了壓縮函數,如Sigmoid。
  • 反向過程卻是一個完全線性的過程(回想殘差的傳遞公式)。

前向過程決定了反向傳遞過程的斜率,如圖10所示。


這裏寫圖片描述

梯度爆炸與消失

對於RNN這種非常深的NN,梯度殘差非常容易出現爆炸活着消失。
就算使用了良好初始化的權值,依然難以探測出當前輸出依賴於若干時間步之前的輸入。

訓練RNN的4種有效手段

  • LSTM (Long Short Term Memory)
    使RNN獲得長期記憶能力。
  • Hessian Free 優化方法
    通過檢測梯度小但是曲率更小的權值方向來解決梯度消失問題。
  • 回聲狀態網絡(Echo State Networks)
    小心初始化從輸入到隱含層的權值;小心初始化隱含層到輸出的權值;其核心是一個隨機生成、且保持不變的儲備池(Reservoir),唯一要訓練的部分使其輸出權值,使用簡單的線性迴歸即可完成訓練。
  • 良好的初始化與動量的使用

LSTM 相關內容會整理一篇單獨博文。

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