本文以二维线性拟合为例,介绍批量梯度下降法、随机梯度下降法、小批量梯度下降法三种方法,求解拟合的线性模型参数。
需要拟合的数据集是 $(X_1, y_1), (X_2, y_2)..., (X_n, y_n)$,其中$X^i=(x_1^i, x_2^i)$,表示2个特征,$y^j$是对应的回归值。
拟合得到的函数是 $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} = {\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} = {\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}^j) - {y^i}){x_1^j}$
随机梯度法快速下降,但同时也有更大幅度的波动。
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
原文地址:https://www.cnblogs.com/yijuncheng/p/9846315.html