序列建模
用機器學習對序列建模的意義
將輸入序列變化到另一個域上的輸出序列,例如:
將聲壓信號轉化成單詞序列。
若沒有目標序列,可以通過預測輸入序列中的下一段來作爲學習信號。
這種方法介於監督學習與無監督學習之間,它使用了監督學習的訓練方法,但並不需要一個單獨的學習信號。
序列的無記憶模型
自迴歸模型(Autoregressive models)
通過使用固定數量的歷史序列項,來預測未來序列項。即所謂的“delay taps”,如圖1。
前饋神經網絡(Feed-forward neural nets)
通過引入一個隱含非線性神經元來產生自迴歸模型。如圖2。
讓模型具有記憶
通過給生成模型加入具有內部動態的隱含狀態層,能夠使模型具有記憶:
- 與非記憶模型不同,記憶模型能夠在其隱藏狀態層中存儲很長時間,而且沒有簡單的標準去判斷多遠以前的事件對現在沒有影響。
- 如果隱含層動態是有噪音的,而且其輸出也是有噪音的。那麼我們將無從得知其真正的隱含層狀態。
- 因此只能在隱含層空間推斷出概率分佈。
通過觀測值來推測隱含狀態通常是困難的。
然而以下有2種典型模型的隱含狀態計算起來比較方便。
線性動態系統(Linear Dynamical Systems)
線性動態系統工程師比較常用,其隱含層狀態是帶有高斯噪聲的線性動態,如圖3所示。
隱馬爾可夫模型(Hidden Markov Models)
隱馬爾可夫模型基於離散數學,計算機學者比較喜歡。這種模型隱含層狀態由狀態轉移矩陣進行切換,每一次隱含層對應一個輸出,如圖4所示。
HMMs 的侷限性
HMMs 的 記憶容量太小,如果有
遞歸神經網絡(Recurrent Neural Networks)
RNN的優點在與結合了兩者的優點:
- 利用了類似線性動態系統的分佈式隱含層結構,從而有效能夠存儲關於過去的大量信息。(能夠同時記憶多件不同的事情)
- 利用了類似隱馬爾可夫的非線性動態結構,從而能夠以更加複雜的方式更新隱含狀態。
生成模型是否需要隨機?
- 線性動態模型與隱馬爾可夫模型都是隨機模型,因爲這些動態和觀測值都是存在噪音的。
- RNN是確定性模型。
使用反向傳播訓練RNN
RNN網絡可以展開成反覆利用共享權重的深度網絡,如圖5所示。
因此其共享權重也應該聯合修正:
將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 相關內容會整理一篇單獨博文。