Cost function(代價函數)算法
一、參數表示:網絡
m 個訓練樣本:{(x(1), y(1)), (x(2), y(2)), ..., (x(m), y(m))}dom
神經網絡的層數:L函數
l 層的神經元數量(不計入偏置單元):Sl優化
二、兩種分類問題:spa
(1)Binary classification(二元分類):3d
y = 0 or 1blog
只有一個輸出單元 / hθ(x)爲一個實數 / SL = 1it
(2)Multi-class classification(多類別分類):io
有K個輸出單元
三、代價函數:
Backpropagation algorithm(反向傳播算法)
一、字符定義:
δj(l) :表示第 l 層的第 j 個結點的偏差。
aj(l) : 表示第 l 層的第 j 個結點的激勵值。
二、計算過程:(假設是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) 不存在偏差。
三、算法流程:
(其中向量化表示Δ:)
經過證實可得【後期推導】:
四、理解算法:
若是 λ = 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)...
例如:
五、算法實現:
(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)經過正向傳播求 hθ(x(i))
(3)計算代價函數 J(Θ)
(4)經過反向傳播求 D(即):
compute Δ
end %for
compute D
(5)使用梯度檢測比較上述計算結果和用數值方法計算結果是否近似。檢測結束後將這部分代碼去除,保證代碼的執行效率。
(6)使用梯度降低法或者其它優化算法最小化 J(Θ)(好比使用fminunc函數)。