摘要: 一個新的系列,來自於斯坦福德深度學習在線課程:http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial。本文梳理了該教程第一部分的內容,主要包括人工神經網絡入門、反向傳遞算法、梯度檢驗與高級優化 和 自編碼算法與稀疏性等要點。最后以課程作業作為總結和練習。
前言
斯坦福深度學習在線課程是 Andrew Ng 編制的,該教程以深度學習中的重要概念為線索,基本勾勒出了深度學習的框架。為了簡明扼要,該教程幾乎省略了數學推導和證明過程。我寫這個系列不追求概念的講解,因為教程已經解釋的很清楚了,我的目標是把教程所省略的一些關鍵的數學推導給出來。因為數學原理是深入理解算法模型所繞不過去的,其次,幾篇博客也是我的課程筆記,留作以后查閱使用。
綜上,如果您已經閱讀了對應的教程並理解了主要概念,這一系列能幫您查漏補缺深化理解,否則您會覺得文章的邏輯不連貫。
人工神經網絡
人工神經網絡的“學習”原理很簡單:
每層都有若干個節點,每個節點就好比一個神經元(neuron),它與上一層的每個節點都保持着連接,且它的輸入是上一層每個節點輸出的線性組合。每個節點的輸出是其輸入的函數,把這個函數叫激活函數(activation function)。人工神經網絡通過“學習”不斷優化那些線性組合的參數,它就越有能力完成人類希望它完成的目標。
除了輸入層(第1層)以外,第 l +1 層第 i 個節點的輸入為:
其中是第 l 層的節點數。
第 l +1 層第 i 個節點的輸出為:
當 l =1 時:
函數 f 就是激活函數。激活函數最常用的有兩種:
sigmoid 函數
雙曲正切函數
它們的函數曲線類似,都在(-∞,+∞)上單調遞增:
sigmoid 函數值域為(0, 1);而雙曲正切函數的值域為(-1,1)。
對人工神經網絡進行訓練,就是為了得到最優的線性組合參數:
其中是網絡的總層數。
給定 m 個訓練數據:
要用這些數據訓練人工神經網絡,使它能夠對新的輸入數據做正確的分類或擬合,首先要保證它在已有的數據上有足夠高的正確率。
使用代價函數(Cost Function)來衡量人工神經網絡在已有數據上所犯錯誤的大小:
注意,代價方程有多種形式,只要能反映預測誤差即可。
對於單條數據 ,其代價方程為:
可見總代價方程是每條數據代價方程的算術平均。
在優化時,代價方程還會加上一個規則化項,其目的是減小權重的幅度,防止過度擬合:
反向傳播算法
反向傳播算法從輸出層開始,反向計算每個節點的殘差,並用這些殘差計算代價方程對每一個參數的偏導數。
反向傳播算法的數學推導過程我在 這篇 文章里已經詳細給出,這里在給出一個簡潔版本。
對於一個樣例 :
將公式向量化:
對於整個樣本集:
自編碼算法與稀疏性
自編碼器要求輸出盡可能等於輸入,並且它的隱藏層必須滿足一定的稀疏性,即隱藏層不能攜帶太多信息。所以隱藏層對輸入進行了壓縮,並在輸出層中解壓縮。整個過程肯定會丟失信息,但訓練能夠使丟失的信息盡量少。
為了保證隱藏層的稀疏性,自動編碼器的代價方程加入了一個稀疏性懲罰項:
其中:
因為代價方程多了一項,所以梯度的表達式也有變化:
稀疏性懲罰項只需要第 1 層參數參與計算,令
所以
所以
相當於
變成
可視化自動編碼器的訓練結果
訓練完(稀疏)自編碼器,我們還想把這自編碼器學到的函數可視化出來,好弄明白它到底學到了什么。
已知:
什么樣的輸入 x 可讓 得到最大程度的激勵?
假設輸入有范數約束:
要使 最大,只需要使
最大即可,因為 f 是單調遞增函數(此處忽略了截距項),令其為表達式(1)。
使(1)取得最大值的 x 一定滿足:
因為超平面的最值一定在閉合區域的邊界上取得。
把(1)改寫成:
令
表達式(1)可重寫為:
這是兩個模為1的向量的內積乘以一個常數,當兩個向量重合時它取到最值,即:
最值為:
課后練習
在 MATLAB 命令行界面輸入:
執行結果:
訓練結果可視化: