梯度下降小结

机器学习中,很多监督学习模型需要构建损失函数,再用优化算法对损失函数进行优化,找到最优参数。常用到的优化算法有梯度下降法和最小二乘法,这里总结梯度下降法。

1 梯度下降原理

梯度下降在求解过程中,只需要求解损失函数的一阶导数,计算代价较小。基本思想:从某一点出发,沿着变化最快的方向前进,到达一个点后,再找下一个变化最快的地方,直到到达收敛点。
介绍梯度下降前,需要了解以下数学概念。

1.1 梯度下降必备数学基础

导数——简单来说,导数就是函数(y=f(x))在某一点(((x_{0},y_{0})))切线的斜率,记作(f'{(x_{0})})(frac{mathrm{d} y}{mathrm{d} x}|x=x_{0})
偏导数——在某一点(((x_{0},y_{0})))处的偏导数的几何意义是曲面(f(x,y))与面(x=x_{0})或面(y=y_{0})交线在(y=y_{0})(x=x_{0})处切线的斜率,记作(f_{x}(x_{0},y_{0}))(frac{partial f}{partial x})(frac{partial f}{partial y})
方向导数——简单来说,方向导数就是函数沿着某个方向的变化率。
梯度:函数(f(x,y))在平面域内具有连续的一阶偏导数,对于每一个点(P(x,y))都有向量((frac{partial f}{partial x},frac{partial f}{partial y})),则将其称为函数在点(P)的梯度,记作(igtriangledown f(x,y))
梯度向量的几何意义就是函数变化最快的地方,沿着梯度向量的方向,更容易找到最大值,而沿着梯度方向相反的方向,更易找到函数的最小值。

1.2 梯度下降

机器学习算法中,用梯度下降法迭代求解,使得损失函数最小化、得到模型参数。如果需要求解损失函数最大值,就需要梯度上升法迭代。实际,梯度下降法和梯度上升法可以相互转换,下面详细介绍梯度下降法。

2 梯度下降算法

以线性回归模型为例,设一个特征(x)与参数( heta _{0})( heta _{1}),得到假设函数为:(h_{ heta }(x^{(i)})= heta _{0}+ heta _{1}x^{(i)}) 损失函数:(J( heta _{0}, heta _{1})=frac{1}{2m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})^{2}) 优化目标: (min_{ heta_{0} , heta _{1}}J( heta _{0}, heta _{1}))
梯度下降算法,同步更新所有参数( heta)

[ heta_{j}:= heta_{j}-alpha frac{partial }{partial heta _{j}}J( heta _{0}, heta _{1}) ]

简单地说,梯度下降目的如下图,就是找到损失函数(J( heta _{0}, heta _{1}))的最小值。

梯度下降有三种形式:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent),下面分别介绍三种梯度下降算法。

3 批量梯度下降

批量梯度下降是梯度下降最原始的形式,每一次迭代使用全部样本进行梯度更新,具体理解为,对目标函数求偏导

[frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}=frac{1}{m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

每次迭代对参数进行更新:

[ heta _{j}:= heta _{j}-alpha frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}= heta _{j}-alphafrac{1}{m}sum_{i=1}^{m}(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

优点:
1)一次迭代是对所有样本进行计算,此时利用矩阵进行操作,实现了并行。
2)由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,BGD一定能够得到全局最优。
缺点:
当样本数目 m 很大时,每迭代一步都需要对所有样本计算,训练过程会很慢。

4 随机梯度下降

随机梯度下降每次迭代只用一个样本对参数进行更新,加快了训练速度。
一个样本的目标函数:

[J( heta _{0}, heta _{1})=frac{1}{2}(h_{ heta }(x^{(i)})-y^{(i)})^{2} ]

目标函数求偏导:

[frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}=(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

参数更新:

[ heta _{j}:= heta _{j}-alpha frac{partial J( heta _{0}, heta _{1})}{partial heta _{j}}= heta _{j}-alpha(h_{ heta }(x^{(i)})-y^{(i)})x_{j}^{(i)} ]

优点:
由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。
缺点:
1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
3)不易于并行实现。

5 小批量梯度下降

小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其思想是:每次迭代使用小批量个样本来对参数进行更新。
优点:
1)通过矩阵运算,每次在一个batch上优化神经网络参数并不会比单个数据慢太多。
2)每次使用一个batch可以大大减小收敛所需要的迭代次数,同时可以使收敛到的结果更加接近梯度下降的效果。
3)可实现并行化。
缺点:
小批量样本个数的不当选择可能会带来一些问题

6 梯度下降总结

如果样本量比较小,采用批量梯度下降算法。如果样本太大,或者在线算法,使用随机梯度下降算法。在实际的一般情况下,采用小批量梯度下降算法。

***参考:统计学习方法 梯度下降小结 ***

原文地址:https://www.cnblogs.com/eugene0/p/11449604.html