本文總結自《Neural Networks and Deep Learning》第1章的部分內容。
使用梯度下降算法進行學習(Learning with gradient descent)
1. 目標
我們希望有一個算法,能讓我們找到權重和偏置,以至於網絡的輸出y(x) 能夠擬合所有的訓練輸入x。
2. 代價函數(cost function)
定義一個Cost function (loss function, objective function): 目標函數,如下:


C: 被稱為二次代價函數;有時也被稱為均方誤差或者MSE
w: weight 權重
b: bias 偏向
n: 訓練數據集實例個數
x: 輸入值
a: 輸出值 (當x是輸入時)
||v||: 向量v的模
C(w,b) 越小越好,輸出的預測值和真實值差別越小越好。
那么我們的目標就轉為: 最小化C(w,b)。
我們訓練神經網絡的目的是找到能最小化二次代價函數C(w; b) 的權重和偏置。
3. 梯度下降
最小化問題可以用梯度下降解決(gradient descent)。
C(v) v有兩個變量v1, v2,通常可以用微積分解決,如果v包含的變量過多,無法用微積分解決。
梯度下降算法工作的方式就是重復計算梯度∇C,然后沿着相反的方向移動,沿着山谷“滾落”。
即每下降到一個地方,就要計算下一步要往哪個方向下去。
權重和偏置的更新規則:
4. 隨機梯度下降算法 (stochastic gradient descent)
實際中使用梯度下降算法會使學習變得相當緩慢。這是因為:
對於每個訓練實例x, 都要計算梯度向量∇C。如果訓練數據集過大,會花費很長時間,學習過程太慢。
所以實際中使用隨機梯度下降算法 (stochastic gradient descent)。
基本思想: 從所有訓練實例中取一個小的采樣(sample): X1,X2,…,Xm (mini-batch),來估計 ∇C, 大大提高學習速度。
如果樣本夠大,




代入更新方程:


然后,重新選擇一個mini-batch用來訓練,直到用完所有的訓練實例,一輪epoch完成。
作者:tsianlgeo
本文版權歸作者和博客園共有,歡迎轉載,未經同意須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。歡迎指正與交流。