几乎所有机器学习问题都涉及某种形式的优化, 然而大多数相关书籍将优化问题并入数学基础部分一笔带过,给读者(至少我)带来困惑。我写这篇文章,希望给有类似疑惑的人带来些许启发。
优化在这里指的是求某个变量
下文约定小写字母
1,梯度下降
梯度下降简单来讲,就是让变量
- 什么是梯度?
- 为什么梯度下降可以有效减少
?
- 梯度下降在什么情况下表现不好?
1.1 梯度
函数
1.2 梯度下降的原理
假设
所以我们的目标为:
(内积的几何表示,
梯度下降
1.3 梯度下降的进一步分析
梯度下降实际上只利用了一阶导数,也就是梯度带来的信息,因为如此,我们将会看到在某些情况下,梯度下降是一种效率很低的,极端情况下甚至无效的优化方法。
如果我们不仅考虑函数的一阶导数,而同时考虑二阶导数到来的信息,我们就要考虑 Hessian矩阵:
因为Hessian矩阵是实对称矩阵,可以被特征分解,并由此可证明在特定方向上的二阶导数可以写成
假如梯度下降的当前点为
其中
由上式可见,当
- 学习率
太大,冲过了极小值所对应的。
-
在梯度方向的二阶导数太大,即函数在处非常陡峭,即使一个小的学习率也使冲过极小值所对应的。
另外,在多维情况下,单个点处每个方向的二阶导数是不同的。当在某个方向的二阶导数很大,另一个方向的二阶导数很小时,例如像下图中的窄而陡峭的峡谷。由于峡谷壁非常陡峭(一阶导数小但二阶导数大,一阶导数随梯度下降增加速度快),梯度下降偏向在峡谷壁向左或向右方向下降,而不是从上往下往峡谷底部下降。同时,因为峡谷壁非常陡峭,每一次迭代都冲过了峡谷底部,因此下一次迭代时在对面的峡谷壁下降。梯度下降把时间浪费于在峡谷壁上来回下降,因此效率很低。
2.牛顿法
2.1 牛顿法的原理
如果我们同时考虑利用二阶导数带来的信息来指导迭代,最简单的方法是牛顿法。牛顿法基于二阶泰勒展开来近似
其中
-
, 即梯度向量中所有元素为0。
-
为正定矩阵,即确保附近的驻点为极小点。这是因为为正定矩阵,任意方向二阶导数(见1.3)。
假如条件2已经满足,对式2.1.1两边取导,得:
令
即每一步的迭代为:
2.2 牛顿法的进一步分析
当
假如
可求得在
(标量对向量求导的方法可参考[4] )
则迭代后点
而对于
由
当
迭代地更新近似函数和跳到近似函数的最小点可以比梯度下降更快地到达驻点。但牛顿法只在Hessian为正定矩阵时才适用,否则牛顿法会跳进鞍点或极大点。高维空间中鞍点的激增解释了为何在大多数情况下为何牛顿法无法成功取代梯度下降。[1]
3, 一个例子:线性最小二乘
假设我们希望找到最小化下式的
3.1 梯度下降
首先,我们计算梯度
1)将学习率
2)while
end while
3.2 牛顿法
因为对于任意单位向量
(欢迎转载,但请注明出处)
参考
- ^abDeep Learning - by Ian Goodfellow, Yoshua Bengio and Aaron Courville
- ^Jacobian矩阵、Hessian矩阵和多元函数的二阶导数 https://www.jianshu.com/p/f90e8d4195a4
- ^正定二次函数 https://baike.baidu.com/item/%E6%AD%A3%E5%AE%9A%E4%BA%8C%E6%AC%A1%E5%87%BD%E6%95%B0/19132454?fr=aladdin
- ^矩阵求导术(上) https://zhuanlan.zhihu.com/p/140556531/edit