Cost function(代價函數)
1、參數表示:
m 個訓練樣本:{(x(1), y(1)), (x(2), y(2)), ..., (x(m), y(m))}
神經網絡的層數:L
l 層的神經元數量(不計入偏置單元):Sl
2、兩種分類問題:
(1)Binary classification(二元分類):
y = 0 or 1
只有一個輸出單元 / hθ(x)為一個實數 / SL = 1
(2)Multi-class classification(多類別分類):
有K個輸出單元
3、代價函數:
Backpropagation algorithm(反向傳播算法)
1、字符定義:
δj(l) :表示第 l 層的第 j 個結點的誤差。
aj(l) : 表示第 l 層的第 j 個結點的激勵值。
2、計算過程:(假設是4層神經網絡,即下圖)【后期推導】
對於第4層的每一個輸出單元:
δj(4) = aj(4)- yj (其中 aj(4) 也可記為hθ(x))
向量化:δ(4) = a(4)- y
δ(3) = (Θ(3))Tδ(4) .*g'(z(3)) ,其中 g'(z(3)) = a(3).*(1-a(3))
δ(2) = (Θ(2))Tδ(3) .*g'(z(2)) ,其中 g'(z(2)) = a(2).*(1-a(2))
δ(1) 不存在誤差。
3、算法流程:
(其中向量化表示Δ:)
通過證明可得【后期推導】:
4、理解算法:
如果 λ = 0,則cost函數為:
接近於平方誤差函數。
而δj(l) 是cost函數的偏微分:
類似於正向傳播,反向傳播也有:
δj(l) = Θij(l) δi(l+1) + Θi+1 j(l) δi+1(l+1) + Θi+2 j(l) δi+2(l+1)...
例如:
5、算法實現:
(1)簡述:
參數:
①先對Θ(1),Θ(2),Θ(3),...進行初始化(跟邏輯回歸不一樣,這里的 Θ 是矩陣);
②實現 costFunction 計算 J 和 grad:根據 Θ 正向/反向計算出 D 和 J(Θ);
③使用 fminunc 函數求出 Θ。
(2)Gradient checking(梯度檢測):
一般情況下,ϵ=10−4
對於多個θ,可以具體為:
代碼實現:
epsilon = 1e-4;
for i = 1:n,
thetaPlus = theta;
thetaPlus(i) += epsilon;
thetaMinus = theta;
thetaMinus(i) -= epsilon;
gradApprox(i) = (J(thetaPlus) - J(thetaMinus))/(2*epsilon)
end;
(3) Random initialization(隨機初始化):
不同於邏輯回歸,這里的 Θ 初始值不能為全0. 否則會出現每次迭代更新,每一層上的 θ 參數值相等,且每一個 a 的結果也相等,即 a1(2) = a2(2) = ...。
因此初始化時需要打破對稱性,將 Θij(l) 設置在[ -ϵ, ϵ ]之間。
代碼舉例:
If the dimensions of Theta1 is 10x11, Theta2 is 10x11 and Theta3 is 1x11.
Theta1 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta2 = rand(10,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
Theta3 = rand(1,11) * (2 * INIT_EPSILON) - INIT_EPSILON;
神經網絡總結
1、選擇神經網絡:
輸入層的神經元數量:根據特征的維度
輸出層的神經元數量:根據划分的類別數量
隱藏層的神經元數量:默認多個隱藏層的神經元數量相同,隱藏層的神經元數量稍大於輸入特征的數量。
2、訓練神經網絡:
(1)隨機初始化權重;
(2)通過正向傳播求 hθ(x(i))
(3)計算代價函數 J(Θ)
(4)通過反向傳播求 D(即):
compute Δ
end %for
compute D
(5)使用梯度檢測比較上述計算結果和用數值方法計算結果是否近似。檢測結束后將這部分代碼去除,保證代碼的執行效率。
(6)使用梯度下降法或者其它優化算法最小化 J(Θ)(比如使用fminunc函數)。