梯度下降法、隨機梯度下降法、小批量梯度下降法


本文以二維線性擬合為例,介紹批量梯度下降法、隨機梯度下降法、小批量梯度下降法三種方法,求解擬合的線性模型參數。

 

需要擬合的數據集是 $(X_1, y_1), (X_2, y_2)..., (X_n, y_n)$,其中$X^i=(x_1^i, x_2^i)$,表示2個特征,$y^i$是對應的回歸值。

擬合得到的函數是 $h_{\theta_1, \theta_2}(X)$,盡可能使${h_{{\theta _1},{\theta _2}}}(X) \approx y$。

損失函數是$J(\theta_1, \theta_2) = \sum\limits_{i = 1}^n {{{({h_{\theta_1, \theta_2} }({x_i}) - {y_i})}^2}}$。

 

損失函數是我們的性能評價指標,損失函數越小,代表我們得到函數$h_{\theta_1, \theta_2}(X)$越能夠擬合該數據集。

 

由於負梯度(函數的導數即為梯度)的方向是局部下降最快的地方,所以為了最小化損失函數,我們沿着損失函數的負梯度方向來調整參數。

 

1 批量梯度下降法(Batch Gradient Descent)

批量梯度下降法每次更新參數$\theta$都要計算所有的樣本數,求全局最優,所以訓練開銷很大,算法描述如下:

1. 初始化$\theta_1, \theta_2$,設置學習率$\alpha$和終止條件$\varepsilon$

2. 計算$\theta_1, \theta_2$的梯度(偏導數),判斷是否都小於終止條件$\varepsilon$,若小於輸出參數$\theta_1, \theta_2$,若不小於,重復第三步。

3. 更新$\theta_1, \theta_2$

$\theta_1 = \theta_1 - \alpha(\frac{\partial }{{\partial {\theta _1}}}J({\theta _1},{\theta _2}))$

    $ = {\theta _1} - \alpha \sum\limits_{i = 0}^n {({h_{{\theta _1},{\theta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

$\theta_2 = \theta_2 - \alpha(\frac{\partial }{{\partial {\theta _2}}}J({\theta _1},{\theta _2}))$

    $ = {\theta _2} - \alpha \sum\limits_{i = 0}^n {({h_{{\theta _1},{\theta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_2}^i} $

 

批量梯度法穩定地下降,速度較慢。

2 隨機梯度下降法(Stochastic Gradient Descent)

隨機梯度下降法原理上與批量梯度下降法類似,不同的是更新參數$\theta$時,不是計算所有的樣本數,而是隨機計算一個樣本。

加快了每次迭代的計算速度,但是收斂不穩定,更新公式如下:

${\theta _1} = {\theta _1} - \alpha ({h_{{\theta _1},{\theta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1^i}$

 

隨機梯度法快速下降,但同時也有更大幅度的波動。

3 小批量梯度下降法(Mini-batch Gradient Descent)

小批量梯度下降法是批量梯度下降法和隨機梯度下降法的一種平衡,對於$n$個樣本,每次隨機用$m$個樣本,進行批量梯度更新。

是對速度和穩定性進行了折中,更新公式如下:

${\theta _1} = {\theta _1} - \alpha \sum\limits_{i = 0}^x {({h_{{\theta _1},{\theta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

 小批量梯度法較快速下降,有小幅波動。

 

參考:

1. http://sofasofa.io/tutorials/python_gradient_descent/index.php


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM