深度学习的模拟退火:为什么无梯度统计学习不是主流?

机器算法验证 机器学习 神经网络 优化 反向传播
2022-02-06 16:12:31

为了定义什么是深度学习,在主流软件库和文献中,学习部分通常与反向传播一起列为要求而没有替代方案。在深度学习或一般统计学习中没有提到很多无梯度优化。同样,在“经典算法”(非线性最小二乘法)中涉及导数 [1]。一般来说,深度学习或经典算法中的无梯度学习并不是主流。一种有希望的替代方案是模拟退火 [2, 3],即所谓的“自然启发优化”。

为什么无梯度深度学习(统计学习)不在主流中,是否有任何内在的理论原因?(或者不是首选?)

笔记

[1] 如列文伯格-马夸特

[2]深度学习的模拟退火算法(2015)

[3] CoolMomentum: a method for stochastic optimization by Langevin dynamics with simulation annealing (2021) 虽然这仍然不是完全无梯度的,但不需要自动微分。

编辑 1使用Ensemble Kalman Filter的 附加参考,显示了一种无导数的方法:

  • 集成卡尔曼反演:机器学习任务的无导数技术arXiv:1808.03620
  • 集成卡尔曼滤波器优化深度神经网络:非性能梯度下降弹簧的另一种方法手稿-pdf

编辑 2 据我所知,Yann LeCun 并不认为无梯度学习是深度学习生态系统的一部分。“DL 正在构建参数化功能模块的网络,并使用基于梯度的优化从示例中对其进行训练。” 鸣叫

编辑 3 Ben Bolker 对局部几何的评论绝对值得成为答案之一。

4个回答

无梯度学习在主流中非常流行,但在深度学习中并未大量使用。用于训练不涉及导数的神经网络的方法通常称为“元启发式”。在计算机科学和模式识别(主要起源于电气工程)中,元启发式是解决 NP 难题的首选方法,例如航空公司航班调度、优化送货卡车燃料消耗的交通路线规划或旅行推销员问题。退火)。作为示例,请参见用于神经网络的基于群的学习用于训练神经网络的遗传算法或使用元启发式算法来训练卷积神经网络. 这些都是使用元启发式学习的神经网络,而不是导数。

虽然元启发式包含大量文献,但它们与深度学习的关联并不强,因为它们是不同的优化领域。查找“使用元启发式解决 NP 难题”。最后,回想一下,用于神经网络的梯度与神经网络可用于最小化(最大化)的函数的导数没有任何关系。(这将被称为使用神经网络的函数逼近,而不是通过神经网络进行分类分析。)它们只是关于网络内连接权重变化的误差或交叉熵的导数。

此外,函数的导数可能未知,或者问题可能过于复杂而无法使用导数。一些较新的优化方法涉及有限差分作为导数的替代,因为计算时间越来越快,并且无导数方法在时间复杂度上的计算成本越来越低。

好问题!简而言之,“梯度自由学习”(即“元启发式”,正如@user0123456789 指出的那样)通常在无法评估损失函数的“梯度”(即导数)时使用。这可能发生在以下情况下:

  • 损失函数的导数不存在(例如包含“指标函数”、分段函数)

  • 损失函数的导数存在,但评估成本非常高(例如,我听说过一些演讲,其中建议使用无梯度优化技术来解决涉及强化学习的各种问题)

  • 离散组合/优化问题(这与第一点有关,但想象一下尝试优化输入是一组离散对象而输出是与不同输入相关联的值的函数 - 例如:旅行商问题,背包优化、调度等)

  • 无梯度优化技术(例如进化算法、遗传算法、模拟退火、粒子群等)有时更适合某些类型的问题,例如“游戏”,其中通过根据性能改变和组合随机策略来开发最优策略关于某些目标(例如https://en.wikipedia.org/wiki/Neuroevolution_of_augmenting_topologieshttps://www.youtube.com/watch?v=OGHA-elMrxI

我想补充的另一个注意事项是,在可以评估损失函数的梯度的情况下(例如经典的 MLP 神经网络),我认为可能有一些理论结果可以保证随机梯度下降的概率收敛(即与无梯度学习相反)到提供无限迭代的全局最大值(我可能错了) - 使用无梯度优化技术,据我所知没有这样的保证(在这里,我自己问了一个关于“模式”的问题Theorem”,它使用马尔可夫链来保证随着遗传算法中迭代次数的增加而改进结果https://math.stackexchange.com/questions/4295279/does-the-following-computer-science-optimization-theorem-have-a-proof)。

总而言之 - 如果你的损失函数的导数“存在”,尝试使用经典的基于梯度的优化技术。如果导数不存在,请考虑使用基于 Gradient Free 的技术。

例如,在这里我问了一个关于识别数据集中的“集群”的问题,以使“给定集群的所有列中零的比例”最小化。据我所知,这个问题没有标准的“梯度”,使其成为“无梯度优化技术”的理想选择:https ://or.stackexchange.com/questions/7488/mixed-integer-programming -使用遗传算法进行优化

希望这可以帮助!

我们不使用无梯度方法训练神经网络的原因很简单:无梯度方法不如基于梯度的方法有效。

基于梯度的方法收敛速度更快,得到更好的解决方案。无梯度方法的扩展性往往很差(例如,您引用的一篇论文仅在 MNIST 上进行测试,这是一个很小的数据集和任务;在 CIFAR-10 上进行的其他测试是一种基于梯度的方法)并且倾向于产生结果较差(例如,您引用的一篇论文报告 MNIST 的准确率为 97%;但 MNIST 的最新准确率远高于 99%)。

通常,当梯度可用且损失表面不太混乱时,通常基于梯度的方法比无梯度的方法效果更好。当不容易计算梯度或损失函数不是很平滑时,无梯度方法很有用。

据我了解,这是神经网络在处理有趣问题时往往需要大量变量的结果。对于简单的任务,无梯度方法工作得很好,并且非常有能力击败基于梯度的方法,因为它们中的许多方法比基于梯度的方法更好地处理非凸函数/局部最优,这往往是最大的问题低维问题。

但是,随着维度/模型变量数量的增加,会发生两件事:

  1. 局部最优不再是最优,而是变成鞍。比如说,一个局部最小值,零梯度点必须是每个维度的最小值。如果您拥有其中的一百万个,则实际上可以保证它不会是至少一个中的最小值。现代基于梯度的方法可以很好地处理鞍点,因此随着模型的扩大,函数对它们来说变得有效凸。
  2. 解决方案候选的随机扰动变得越来越不可能碰巧具有与梯度的方向相似的方向。这意味着在依赖于此类扰动的无梯度方法中,必须在候选解决方案沿梯度方向移动之前进行很多处理,而不是仅仅执行随机游走。大多数无梯度方法都属于这一类,因此随着模型的扩大,性能会受到影响。

该规则的例外是进化策略的方法家庭。这些方法的主要思想是从多个扰动中积累有关梯度的信息,并以一种更可能与梯度对齐的方式扭曲后续扰动的分布。那些在深度学习任务上表现相当不错[1]。它们需要的资源大约是基于梯度的家族完成相同工作所需的资源量的几倍,但在欺骗性问题上提供了卓越的性能并提高了水平可伸缩性。我认为这种方法从未引起主流关注的主要原因是因为世界上很少有人可以使用并行硬件的数量才能达到与基于研究生的水平相媲美的程度。已经有一段时间了,但据我回忆,盈亏平衡点在数百个 GPU 区域的某个地方。

[1] https://eng.uber.com/deep-neuroevolution/