type
status
date
slug
summary
tags
category
icon
password
Property
选择“恰到好处”的学习率 是很棘手的。 如果把它选得太小,就没有什么进展;如果太大,得到的解就会振荡,甚至可能发散。 如果可以自动确定,或者完全不必选择学习率,会怎么样?
除了考虑目标函数的值和梯度、还考虑它的曲率的二阶方法可以帮我们解决这个问题。 虽然由于计算代价的原因,这些方法不能直接应用于深度学习,但为如何设计高级优化算法提供了有用的思维直觉,可以模拟许多理想特性。
牛顿法
回顾一些函数 的泰勒展开式,事实上可以把它写成
为了避免繁琐的符号,将 定义为的Hessian,是矩阵。
当的值很小且问题很简单时, 很容易计算。 但对于深度神经网络,考虑到可能非常大,个条目的存储代价会很高, 此外通过反向传播进行计算可能雪上加霜。
的最小值满足。 遵循微积分规则, 通过取对 的导数, 再忽略不重要的高阶项,便得到
也就是说,作为优化问题的一部分,需要将Hessian矩阵 求逆。
一个简单的例子,对于,它的泰勒展开式是确切的:,有和。 因此这里对于任何,可以获得。 单单一步就足以完美地收敛,而无须任何调整。
给定一个凸双曲余弦函数,可以看到经过几次迭代后,得到了处的全局最小值。
现在考虑一个非凸函数,比如 , 为某些常数。 请注意在牛顿法中,最终将除以Hessian。 这意味着如果二阶导数是负的, 的值可能会趋于增加。 这是这个算法的致命缺陷!
发生了惊人的错误,怎样才能修正它?
一种方法是用取Hessian的绝对值来修正,另一个策略是重新引入学习率。 这似乎违背了初衷,但不完全是——拥有二阶信息可以使我们在曲率较大时保持谨慎,而在目标函数较平坦时则采用较大的学习率。 让我们看看在学习率稍小的情况下它是如何生效的,比如。 如我们所见,有了一个相当高效的算法。
收敛性分析
以部分目标凸函数为例,分析它们的牛顿法收敛速度,这些函数三次可微,且二阶导数不为零()。
用 表示 在第 次迭代时的值, 令 表示迭代时与最优性的距离。 通过泰勒展开,得到条件 可以写成:
这对某些 成立。 将上述展开除以 得到
回想之前的方程。 代入这个更新方程,取两边的绝对值得到
因此,每当处于有界区域 , 就有一个二次递减误差
另一方面,优化研究人员称之为“线性”收敛,而将 这样的条件称为“恒定”收敛速度。无法估计整体收敛的速度,但是一旦接近极小值,收敛将变得非常快。 另外,这种分析要求 在高阶导数上表现良好,即确保在如何变化它的值方面没有任何“超常”的特性。
预处理
计算和存储完整的Hessian非常昂贵,而改善这个问题的一种方法是“预处理”。 它回避了计算整个Hessian,而只计算“对角线”项,即如下的算法更新:
虽然这不如完整的牛顿法精确,但它仍然比不使用要好得多。 为什么预处理有效呢? 假设一个变量以毫米表示高度,另一个变量以公里表示高度的情况。 假设这两种自然尺度都以米为单位,那么参数化就出现了严重的不匹配。 幸运的是,使用预处理可以消除这种情况。 梯度下降的有效预处理相当于为每个变量选择不同的学习率(矢量 的坐标)。预处理推动了随机梯度下降优化算法的一些创新。