梯度下降法是用来计算函数最小值的。它的思路很简单,想象在山顶放了一个球,一松手它就会顺着山坡最陡峭的地方滚落到谷底:
凸函数图像看上去就像上面的山谷,如果运用梯度下降法的话,就可以通过一步步的滚动最终来到谷底,也就是找到了函数的最小值。
先解释下为什么要有梯度下降法?其实最简单的二维凸函数是抛物线
只是有一些凸函数,比如下面这个二元函数(该函数实际上是逻辑回归的经验误差函数,在监督式学习中确实需要求它的最小值):
要求它的最小值点就需要解如下方程组:
这个方程组实在太复杂了,直接求解难度太高,好在
所以可以用梯度下降法来找到
梯度下降法在本文不打算进行严格地证明和讲解,主要通过一些例子来讲解,先从最简单的凸函数
假设起点在
它的
这是在
将
其中
此时小球(也就是起点)下降到了
继续沿着梯度的反方向走:
小球就滚到了更低的位置:
重复上述过程到第 10 次,小球基本上就到了最低点,即有
把每一次的梯度向量
这也比较好理解,当最终趋向于 0 时有:
所以梯度下降法求出来的就是最小值(或者在附近)。
上面谈到了可以通过步长
如果设
上面例子中用的
如果令
继续加大步长,比如令
总结下,不同的步长
寻找合适的步长
原理都介绍完了,下面再通过一个三维的例子来加强对梯度下降法的理解。假设函数为:
其图像及等高线如下(等高线中心的蓝点表示最小值):
下面用梯度下降法来寻找最小值。
设初始点为
令步长
可以看到向最小值方向前进了一步:
同样的方法找到下一个点:
此时又向最小值靠近了:
如此迭代20次后,差不多找到了最小值: