公開課地址:https://class.coursera.org/ml-003/class/index
授課老師:Andrew Ng
1、cost function(代價函數)
上一講的最後引入了多分類問題,多分類問題與二元分類問題的區別就在於輸出單元是多個,用圖總結如下:
同時在前面我們也已經知道羅吉斯迴歸的代價函數如下:
前半部分代表真實值與假設值的差值,後半部分代表對係數進行規格化的偏差項。與此類似的,我們可以定義神經網路的代價函數:
真實值與假設值之間的距離定義為統計所有的樣本和輸出類別之間的和值,後面再加上權重的規格化偏差項。
2、backpropagation algorithm(反向傳播演算法)
既然我們已經給出了代價函數的形式,按照老思路就是將其最小化求出參數:
為了進行梯度下降,我們需要列出神經網路每一層的輸入和輸出分別是什麼,表示方法和之前的一樣:
在這裡我們需要定義一個誤差變數δ,用來表示該節點對最終誤差的出現產生了多少影響。對於最後一層,我們能直接定義誤差值是多少,對於前面的隱藏層,只能夠通過反向推導來求解,這也是反向傳播演算法的由來。
具體的推導過程可以參看維基百科:
http://en.wikipedia.org/wiki/Backpropagation
梯度下降的演算法可以描述如下:
用Δ表示全域誤差,每一層都對應一個Δ(l)。再引入D作為代價函數對參數的求導結果。左邊j是否等於0影響的是是否有最後的偏差項。
3、backpropagation intuition(反向傳播舉例)
這一小節舉了一個利用BP演算法求解神經網路權重的例子,首先我們要定義網路的結構和一些輸入輸出表示:
同時我們在這裡對代價函數進行簡化,無須考慮最後的規格化偏差項:
對於第i個樣本,cost(i)如那樣定義,如果熟悉δ的推導過程,能發現:
同時對於每一層來說,δ分量都等於後面一層所有的δ加權和,其中權值就是參數Θ:
4、gradient checking(梯度檢查)
在求解過程中,通過check梯度判斷我們的code有沒有問題。對於下面這個圖,取Θ點左右各一點(Θ+ε),(Θ-ε),則有點Θ的導數(梯度)近似等於(J(Θ+ε)-J(Θ-ε))/(2ε):
對於每個參數的求導公式如下:
由於在BP演算法中我們一直能得到J(Θ)的導數D(derivative),那麼就可以將這個近似值與D進行比較,如果這兩個結果相近就說明code正確,否則錯誤。
不過要注意以下幾點:
5、random initialization(隨機初始化)
對於參數theta初始化問題,最簡單的想法都是先賦值為0:
不過由於這種賦值導致了一開始計算時隱藏節點沒什麼區別,就像那樣a1,a2計算過程和結果都是一樣的,等於是一個節點,存在浪費情況。為了打破這種局面,可以對theta進行隨機初始化:
6、putting it together(總論)
為了訓練一個神經網路我們需要做哪些工作呢?
首先是選擇網路的結構:
然後就是訓練權重了,包括初始化和BP演算法:
最後是檢查訓練得到的參數是否正確,採用上面提到的梯度檢查方法:
這樣就完成了一個神經網路的訓練過程。
----------------------------------------------------弱弱的分割線----------------------------------------------
這一節的重點是BP演算法,不過由於視頻中沒有過多的推導細節,光看結論印象不深,必須要親自推導一下才行。加入該演算法後,神經網路也就擁有了自學習的過程,只需要定義神經網路的結構和初始值即可。