机器学习中常常需要通过求某个模型的极致来确定参数,本文讨论一下比较常用的梯度下降法
背景
学习线性回归算法,求解模型参数时,涉及到利用最值确定模型参数的方法。而梯度下降法求极值的方法被较多的提及,本文将梳理一下梯度下降法的思想。
思路
梯度gradient
所谓梯度,即为一个向量(矢量),用以表示某一函数在该点处的方向导数沿着该方向取得最大值。即函数在该点处沿着该方向变化最快,变化率最大(为梯度的模)
通俗来说就是爬山时,当你身处山上的某一点时,从该点出发,上山或下山的最快方向(并不考虑体力,耐力)。
梯度下降
梯度下降法,用梯度的思想来求解函数的最小值。
例如在山顶放了一个小球,松手后它会随着山坡最陡峭的地方滚落到山谷。
动机
就本科阶段学习的高等数学知识而言,我们也经常会接触到求函数极值的问题,我们通常会使用另倒数等于0的方法来讨论函数的极值点。例如二维凸函数
(此处凸函数是指高数中的凹函数和凸函数的总称)
$f(x) = x^2$
通过另倒数等于0,我们可以得到如下结论:
$f’(x) = 2x = 0$
$x = 0$
即在0出取得最小值。
而对于如下这个二元函数:
$$
f(w_0,w_1) = \frac{1}{6}[ln(1+e^{w_0+2w_1}) + ln(1+e^{-w_0-7w_1})
$$
$$
- ln(1+e^{-w_0-4w_1})+ ln(1+e^{w_0+w_1})
$$
$$ - ln(1+e^{-w_0-5w_1}) + ln(1+e^{w_0+4.5w_1})]
$$
用导数法来求他的最小值会变得异常困难。而事实上,该函数是逻辑回归的经验误差函数,我们需要通过求这个函数的最小值来确定两个参数。
通过绘制该函数的图像,我们可以得到一个类似山谷的图像。那么我们思考能否使用梯度下降法。
简单例子
学习的过程通常是有简入繁的过程,接下来我们使用之前提到的相对简单的列子$f(x) = x^2$来引出梯度下降法。
梯度
根据梯度下降法的思路,在进行梯度下降法时,我们首先需要一个“小球”。例如,我们一开始将这个二维的”小球“放置在x=10的位置上,则小球的初始坐标为$(10,f(10)=100)$。
”小球“由于受力不平衡,那么他会向山坡下移动,一些物理学知识我们可以预测,小球将会向坡度最陡峭的那个方向移动,这就与梯度的概念不谋而合。由于此处我们需要讨论向量,为了方便,我们规定标量+括号,如:$(x)$表示一个向量
于是我们求该点处的梯度:
$\Delta f(x_0) = f’(x_0)(i) = (f’(x_0)) = (2x|_{x_0 = 10}) = (20)$
可见在二位坐标系下,梯度向量是一个以为向量,反应到坐标上的变化,也就是x的变化率。
那么我们将“小球”所在的位置加上梯度方向,则就可以得到小球移动后的向量$(x_1)$:
$(x_1) = (x_0) - \eta(\Delta f(x_0))$
其中$\eta$成为步长,用于控制每次滚动的距离标量。此处我们使用$\eta = 0.2$,那么:
$(x_1) = (x_0) - 0.2\times (\Delta f(x_0)) = (6)$
迭代
至此我们完成了”小球”的一步滚动,但是要完整实现我们的思路,还需要使小球连续运动直到它到达谷底。一个很常规的思路就是得到每一步的终点后,以该点为基础继续进行移动,也就是迭代。
$x_1$的梯度为:
$\Delta f(x_1) = f’(x_1)(i) = (f’(x_1)) = (2x|_{x_1=6}) = (12)$
则下一步“小球”将移动到:
$(x_2) = (x_1) - \eta \Delta f(x_1) = (6) - 0.2 \times (12) = (3.6)$
在迭代到第10次时,我们得到$x_{10} \approx 0$
总结
此时我们把每次求得的梯度的模长$||\Delta f||$,归纳起来,可以得到下面的表格:
$x_0$ | $x_1$ | $x_2$ | $x_3$ | $x_4$ | $x_5$ | $x_6$ | $x_7$ | $x_8$ | $x_9$ | $x_{10}$ | |
---|---|---|---|---|---|---|---|---|---|---|---|
|| $\Delta f$ || | 20 | 12 | 7.2 | 4.32 | 2.59 | 1.56 | 0.93 | 0.56 | 0.34 | 0.2 | 0.12 |
观察可以发现,随着迭代次数的增加有:
$||\Delta f|| = 0 \to \Delta f = 0 \to f’(x) = 0$
最终我们得到与另倒数等于0的这种方法相似的效果。但同样可以知道使用此法测算出的结果是一个接近于极值点的情况,并不是真正的极值点。这也体现了我们在将理论进行实际引应用中,为了解决种种问题而在最终结果上做出妥协的思考方式。
关于步长
上文提到,步长可以由我们自由设置,但是如果步长设置不够合理,将会导致无法找到最大或最小值的情况。
例如在测算$f(x) = x^2$时,令$\eta = 1.1$,那么随着迭代的增加$f(x)$的值会越来越大。换句话说,就是小球某一步直接滚过了最小值,导致小球在无摩擦力的情况下每次获得了更大的重力势能,导致其越滚越高。
通常步长不当可根据$f(x)$的变化趋势,分为以下三种情况:
- $f(x)$越来越大,则$\eta$过大
- $f(x)$一开始急剧下降,到达某一值时几乎不变,则$\eta$较大
- $f(x)$几乎是线性变化,即变化过于缓慢,则$\eta$较小,可适当提高
总结
至此,梯度下降法的基本思想和操作方式讲解已经结束了,为我们提供了一种新的求极值的思路,并且让我们回顾了科学技术在实际应用中的适应思路。之后需要多多练习。对于更高纬的情况,例如:
$f(x) = x_1^2 + 2x_2^2$
可以使用梯度下降法自行求解。