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