选自 arXiv
作者:Ruoyu Sun
参与:魔王、杜伟
神经网络何时才算训练成功?成功背后的原因是什么?本文概述了用于训练神经网络的优化算法和理论。
深度学习优化方法都有哪些?其理论依据是什么?最近,来自伊利诺伊大学香槟分校(UIUC)的研究者孙若愚就此主题写了一篇长达 60 页的综述论文。
UIUC 助理教授孙若愚(图源:https://ise.illinois.edu/directory/profile/ruoyus)
孙若愚现任 UIUC 助理教授,本科毕业于北京大学数学系,博士毕业于美国明尼苏达大学。其主要研究方向为数据分析。
- 个人主页:https://ise.illinois.edu/directory/profile/ruoyus
- 论文地址:https://arxiv.org/pdf/1912.08957.pdf
由于论文篇幅较长,机器之心选取了部分内容进行编译介绍,更多详情参见原论文。
这篇文章首先讨论了梯度爆炸/消失问题以及更通用的谱控制问题,并讨论了一些实际解决方案,如初始化和归一化方法;其次,本文综述了神经网络训练过程中使用的一般优化方法,如 SGD、自适应梯度方法和分布式方法,还介绍了这些算法的现有理论结果。最后,本文综述了关于神经网络训练的全局问题的研究,包括糟糕的局部极小值上的结果、模式连接(mode connectivity)、彩票假设和无限宽度分析。
引言
本文的主题是了解成功训练神经网络的实用要素以及导致模型训练失败的可能因素。
假设你回到 1980 年,想使用神经网络解决图像分类问题。如果从头开始训练,那么你最初的几次尝试大概率无法得到合理的结果。是哪些本质变化使算法奏效了呢?整体来看,(除了强大的硬件以外)你需要三样东西:恰当的神经网络、恰当的训练算法和恰当的训练 trick。
恰当的神经网络
这包括神经架构和激活函数。对于神经架构,你可能想用至少具备 5 个层和足够神经元的卷积网络来替换全连接网络。为了得到更好的性能,你可能想将网络宽度增加到 20 甚至 100,并添加跳跃连接。至于激活函数,ReLU 是不错的起点,不过 tanh 和 swish 也可以。
恰当的训练算法
使用 SGD 并坚持到最后是一个不错的选择。经过微调的常量步长已经足够好,而动量和自适应步长还可以提供额外的好处。
恰当的训练 trick
恰当的初始化对开始算法训练非常重要。要想训练一个超过 10 层的网络,通常需要用到两个训练 trick:添加归一化层、添加跳跃连接。
这些设计选择中哪些是必要的?目前我们对一些设计选择有所了解,包括初始化策略、归一化方法、跳跃连接、过参数化(大宽度)和 SGD,如下图 1 所示。
本文将优化的益处大致分为三部分:控制利普希茨常数(Lipschitz constant),实现更快收敛,获得更好的损失分布(landscape)。但是还有很多难以理解的设计选择,最显著的当属神经架构了。
现在我们似乎无法理解神经架构这一复杂系统的每一部分,但目前已有的理解可以提供一些有用的见解。
图 1:成功训练神经网络的几项主要设计选择(已具备理论理解)。它们对算法收敛的三个方面产生影响:实现收敛、实现更快收敛、获得更好的全局解。这三项相互关联,这里只是大致的分类。注意:存在其他重要的设计选择,尤其是神经架构。目前我们并未在理论层面理解神经架构,因此本图未包含该项。这些设计选择还有其他好处,如泛化(本图同样未包含该项)。
为保持本综述论文的简洁性,本文将主要关注使用前馈神经网络的监督学习问题,不讨论更复杂的公式(如 GAN 和深度强化学习),也不涉及更复杂的架构(如 RNN、注意力和胶囊网络)。在更宽泛的语境中,监督学习理论至少包含表示、优化和泛化,本文专注于优化,不过多讨论表示和泛化。
本文的核心目标是理解神经网络结构(由多个变量连接构成的参数化)对优化算法设计和分析的影响,优化算法可以超出监督学习范式。
本文适合对神经网络优化的理论理解感兴趣的研究者。了解优化方法及其基础理论有助于读者阅读本文。关于深度学习优化的现有综述文章针对的是一般的机器学习从业者,如 Goodfellow 等人所著《深度学习》的第 8 章。这些综述文章通常不深入讨论优化的理论层面。而本文将更多地关注理论结果,同时试图让无理论知识的读者也能理解。本文尽可能用简单的示例诠释直观概念,而不是解释定理的细节。
大方向:分解理论
研究理论时,分解是一种有用且常见的元方法。本文首先简要综述优化在机器学习中的作用,然后讨论如何分解深度学习优化理论。
表示、优化和泛化
监督学习的目标是基于观测样本找出逼近底层函数的函数。第一步就是找到能够表示期望函数的函数族(如神经网络);第二步是最小化特定损失函数,进而确定函数的参数;第三步是使用第二步找到的函数在未见过的测试数据上执行预测,得到的误差就是测试误差。测试误差可被分解为表示误差、优化误差和泛化误差,分别对应这三个步骤导致的误差。
在机器学习中,「表示」、「优化」和「泛化」经常被分开研究。例如,在研究特定函数族的表示能力时,我们通常不关心它们能否很好地解决优化问题。在研究泛化误差时,我们通常假设找到了全局最优解。类似地,在研究优化属性时,我们常常不会明确考虑泛化误差(不过有时会假设表示误差为零)。
优化问题的分解
深度学习优化问题很复杂,需要进一步分解。优化的过程可以分为三步:第一步是开始运行算法,使之收敛至合理的解,如驻点;第二步是使算法尽快收敛;第三步是确保算法收敛至一个具备低目标值的解(如全局最小值)。还有一个额外的步骤是获取优秀的测试准确率,但这超出了优化范畴,这里不过多讨论。
简言之,本文将优化问题划分为三部分:收敛、收敛速度和全局质量。
文章结构
本文第二章介绍了监督学习范式下,典型神经网络优化问题的公式。
第三章介绍了反向传播,并分析了对神经网络梯度下降应用经典收敛分析的难度。
第四章讨论了训练神经网络的 trick,以及一些底层理论。这些方法依赖于神经网络,打开了神经网络的黑箱。具体而言,这部分讨论了梯度爆炸/消失这一主要挑战,以及更一般的谱控制(controlling spectrum)难题,此外,第四章还综述了主要的解决方案,如初始化和归一化方法。
第五章讨论了通用算法设计:将神经网络视作通用非凸优化问题。具体而言,这部分综述了使用不同学习率的 SGD、自适应梯度方法、大规模分布式训练、二阶优化方法,以及现有的收敛和迭代复杂度结果。
第六章综述了神经网络全局优化方面的研究,包括全局分布、模型连接、彩票假设和无限宽度分析(如神经切线核)。
本文为机器之心编译,转载请联系本公众号获得授权。