梯度下降小结

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

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\)的梯度,记作\(\bigtriangledown f(x,y)\)
梯度向量的几何意义就是函数变化最快的地方,沿着梯度向量的方向,更容易找到最大值,而沿着梯度方向相反的方向,更易找到函数的最小值。

1.2 梯度下降

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

2 梯度下降算法

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

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

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

3 批量梯度下降

批量梯度下降是梯度下降最原始的形式,每一次迭代使用全部样本进行梯度更新,具体理解为,对目标函数求偏导
\[\frac{\partial J(\theta _{0},\theta _{1})}{\partial \theta _{j}}=\frac{1}{m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})x_{j}^{(i)}\]
每次迭代对参数进行更新:
\[\theta _{j}:=\theta _{j}-\alpha \frac{\partial J(\theta _{0},\theta _{1})}{\partial \theta _{j}}=\theta _{j}-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})x_{j}^{(i)}\]

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

4 随机梯度下降

随机梯度下降每次迭代只用一个样本对参数进行更新,加快了训练速度。
一个样本的目标函数:
\[J(\theta _{0},\theta _{1})=\frac{1}{2}(h_{\theta }(x^{(i)})-y^{(i)})^{2}\]
目标函数求偏导:
\[\frac{\partial J(\theta _{0},\theta _{1})}{\partial \theta _{j}}=(h_{\theta }(x^{(i)})-y^{(i)})x_{j}^{(i)}\]
参数更新:
\[\theta _{j}:=\theta _{j}-\alpha \frac{\partial J(\theta _{0},\theta _{1})}{\partial \theta _{j}}=\theta _{j}-\alpha(h_{\theta }(x^{(i)})-y^{(i)})x_{j}^{(i)}\]

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

5 小批量梯度下降

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

6 梯度下降总结

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

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

猜你喜欢

转载自www.cnblogs.com/eugene0/p/11449604.html