梯度下降法随机梯度下降法小批量梯度下降法

Posted yijuncheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了梯度下降法随机梯度下降法小批量梯度下降法相关的知识,希望对你有一定的参考价值。

本文以二维线性拟合为例,介绍批量梯度下降法、随机梯度下降法、小批量梯度下降法三种方法,求解拟合的线性模型参数。

 

需要拟合的数据集是 $(X_1, y_1), (X_2, y_2)..., (X_n, y_n)$,其中$X^i=(x_1^i, x_2^i)$,表示2个特征,$y^j$是对应的回归值。

拟合得到的函数是 $h_{ heta_1, heta_2}(X)$,尽可能使${h_{{ heta _1},{ heta _2}}}(X) approx y$。

损失函数是$J( heta_1, heta_2) = sumlimits_{i = 1}^n {{{({h_{ heta_1, heta_2} }({x_i}) - {y_i})}^2}}$。

 

损失函数是我们的性能评价指标,损失函数越小,代表我们得到函数$h_{ heta_1, heta_2}(X)$越能够拟合该数据集。

 

由于负梯度(函数的导数即为梯度)的方向是局部下降最快的地方,所以为了最小化损失函数,我们沿着损失函数的负梯度方向来调整参数。

 

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

批量梯度下降法每次更新参数$ heta$都要计算所有的样本数,求全局最优,所以训练开销很大,算法描述如下:

1. 初始化$ heta_1, heta_2$,设置学习率$alpha$和终止条件$varepsilon$

2. 计算$ heta_1, heta_2$的梯度(偏导数),判断是否都小于终止条件$varepsilon$,若小于输出参数$ heta_1, heta_2$,若不小于,重复第三步。

3. 更新$ heta_1, heta_2$

$ heta_1 = heta_1 - alpha(frac{partial }{{partial { heta _1}}}J({ heta _1},{ heta _2}))$

${ heta _1} = { heta _1} - alpha sumlimits_{i = 0}^n {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

$ heta_2 =  heta_2 - alpha(frac{partial }{{partial { heta _2}}}J({ heta _1},{ heta _2}))$

${ heta _2} = { heta _2} - alpha sumlimits_{i = 0}^n {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_2}^i} $

 

批量梯度法稳定地下降,速度较慢。

2 随机梯度下降法(Stochastic Gradient Descent)

随机梯度下降法原理上与批量梯度下降法类似,不同的是更新参数$ heta$时,不是计算所有的样本数,而是随机计算一个样本。

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

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

 

随机梯度法快速下降,但同时也有更大幅度的波动。

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

小批量梯度下降法是批量梯度下降法和随机梯度下降法的一种平衡,对于$n$个样本,每次随机用$m$个样本,进行批量梯度更新。

是对速度和稳定性进行了折中,更新公式如下:

${ heta _1} = { heta _1} - alpha sumlimits_{i = 0}^x {({h_{{ heta _1},{ heta _2}}}({x_1}^i,{x_2}^i) - {y^i}){x_1}^i} $

 小批量梯度法较快速下降,有小幅波动。

 

参考:

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

以上是关于梯度下降法随机梯度下降法小批量梯度下降法的主要内容,如果未能解决你的问题,请参考以下文章

梯度下降法是啥?

批量梯度下降和随机梯度下降法的缺点

批量梯度下降和随机梯度下降法的缺点

批量梯度下降和随机梯度下降法的缺点

梯度下降法

梯度下降法小例子