虽然深度学习已经被用于各类不一样的应用上,可是因为缺少可以完整解释其成功背后的基础理论,因此常常面对着各类质疑。就在最近,Test-of-time 奖项的得到者在 Neural Information Processing (NIPS) 会议上将深度学习比做为炼金术。算法
虽然用于解释深度学习为什么有如此强的泛化能力的泛化理论(Generalization Theory)还是一个开放性的问题,可是在本文中,咱们将会对近期试图解释这个问题的理论和经验(empirical)上所取得的进步展开讨论。安全
深度学习的悖论网络
一个“明显的悖论”是尽管深度学习有容量大(large capacity)、数值不稳定性(numerical instability)、尖锐极小值 (sharp minima) 和缺少鲁棒性(又称为健壮性,robustness)等特色,可是仍在实践中仍然有强的泛化能力。架构
最近的“Understanding deep learning requires rethinking generalization”文章代表深度神经网络(CNN)有足够的容量来记忆 Imagenet 和 CIFAR10 中带有随机标签的数据集。虽然目前还不清楚,为何他们在真实数据上找到了泛化的解决方案。app
另外一个关于深层架构的问题是数值的不稳定性。在基于导数的学习算法中,数值不稳定性问题一般被称为爆炸问题(exploding)或者梯度消失问题(vanishing gradient)。额外的困难是源于背后的 forward model 的不稳定性。这就是说,在原始特征上作一些小的扰动时,一些神经网络的输出多是不稳定的。 在机器学习中,它被称为缺少鲁棒性(non-robustness)。图 1 为对抗性***(adversarial attack)的一个例子。机器学习
(图 1 的图片来源:Attacking Machine Learning with Adversarial Examples)ide
有几项研究关于深度学习的泛化理论是创建在随机梯度降低法(Stochastic Gradient Descent,简写为 SGD)找到损失函数(loss function)的极小值(minima)的平滑度(flatness)上。可是,最近有研究代表“Sharp Minima Generalize For Deep Nets”。更确切地来讲,平滑的极小值(flat minima)能够经过从新参数化变成尖锐的极小值(sharp minima),可是并不改变其泛化属性。所以,泛化性并不能仅仅经过参数空间的鲁棒性来解释。函数
泛化理论学习
泛化理论的目标是解释和证实为何以及怎样提升训练集的准确性能够提升测试集的准确性。这两个精度之间的差别称为泛化偏差或“泛化能力降低(generalization gap)”。更严格的泛化能力降低能够定义为,当用给定学习算法 A 中的函数用来处理数据集时,获得的不可计算预期风险和可计算经验风险之间的差别值:测试
本质上,若是咱们将泛化能力降低界定为一个较小的值就能保证深度学习算法在实际应用中有很好的泛化能力。基于模型的复杂性、稳定性和鲁棒性等,确实存在多个关于泛化能力降低的理论界限(theoretical bounds)。
模型复杂度的两个度量分别是 Rademacher 复杂度和 Vapnik-Chervonenkis(VC)维度。 可是,基于 Radamacher complexity 的深度学习函数的已知界限(bounds)随着 DNN 的深度呈指数级的增加。这与实际观察相悖,在实际观察中更深的神经网络反而更适合于训练数据且会产生更小的经验偏差。一样地,基于 VC 维度的泛化能力降低界限在可训练参数的数量上呈线性增加,可是也与在深度学习中实际观测状况相悖。换句话说,这两个界限都太保守了。
K Kawaguchi,LP Kaelbling 和 Y Bengio 最近提出了一个更为有用的方法。不一样于其余人,他们认可深度学习模型一般是使用训练—验证范式进行训练的这一事实。他们经过验证错误而非训练错误来限制不可计算的指望风险。基于这些观点,他们回答了为何深度学习在实际应用中的泛化能力很好:“咱们的模型具备很好的泛化能力,是由于咱们能够经过带有验证错误的模型搜索来得到一个好的模型”。而且证实如下的界限,对于任意,下式至少有 的几率成立。
值的强调的是,是咱们选择最终模型的决策过程当中使用验证数集的次数,是验证数集的大小。这个界限就帮助解释了为何深度学习有良好的泛化能力,尽管可能存在不稳定性、缺少鲁棒性和有尖锐的极小值等问题。到这里,还有一个还没有解决的问题是为何咱们可以找到致使低验证错误的体系结构和参数。一般,架构是受到了现实世界观察的启发,而好的参数是经过 SGD 来找到的,这些咱们将在下面讨论。
随机梯度降低法 SGD
SGD 是现代深度学习的一个内在组成部分,并且显然是深度学习泛化能力背后的主要缘由之一。因此咱们接下来将会讨论 SGD 的泛化属性。
在最近“Data-Dependent Stability of Stochastic Gradient Descent”一文中,做者证实了在一些有额外损失的条件下,SGD 是一种平均而言稳定的算法。这些条件在经常使用的损失函数中被知足,例若有 sigmoid 激活函数的神经网络中的逻辑(logistic)/softmax loss。在这种状况下,稳定性就意味着 SGD 对训练集中小扰动的敏感度。他们也进一步证实了 SGD 在诸如深度神经网络等非凸函数中存在数据依赖的平均界限的泛化能力降低:
其中是训练集的大小,是训练步数,表示初始点曲率如何影响稳定性。这就引出了至少两个结论。首先,围绕初始点(initialization point)的目标函数的曲率具备决定性的影响。从更为平缓有较低风险区域的一个点开始,应该会产生更高的稳定性,即更快的泛化。在实践中选择初始化参数时,这会是一个很好的预筛选策略。其次,考虑到全面经过,即,咱们将界限简化为。也就有了更大的训练集,而更小的泛化能力下降。
有趣的是,有一些研究调查了学习曲线的问题。其中大部分表现为幂律泛化偏差(power-law generalization error),在其指数或时,标度为。 这一结论与前面讨论过的论文一致。可是要提到是百度的大规模研究,该研究可以凭经验观察(empirically observe)这个幂律(见图 2)。然而,实际应用中的指数β在 -0.07 到 -0.35 之间。理论上仍然须要进一步的解释。
(图 2 资料来源: Deep Learning Scaling Is Predictable, Empirically)
此外,还有理论和实证证据代表批量大小(batch size)对 SGD 泛化能力的影响。直观地说就是小批量训练会在梯度上引入噪音,这种噪音会使 SGD 远离尖锐极小值,从而加强泛化能力。谷歌最近的一篇文章显示,最佳批量大小与学习率(learning rate)和训练集大小成正比。或者换句话说,“不要衰减学习率,而要增长批量的大小”。对于有动量(momentum)的 SGD,能够推导出相似的缩放规则,其中动量为,是最佳批量,是动量。 换而言之,全部的结论均可以用如下的公式来总结:
其中是学习率,是训练集大小,是动量,是批量大小。
结论
在过去的几年里,你们对深度学习矛盾效应背后的基础理论的兴趣日益增加。虽然如今还有一些开放的研究问题有待解决,可是现代的深度学习并非炼金术。在这篇文章中,咱们就深度学习的泛化能力方面讨论了一下这个问题,从而得出了一些实际的结论:
在较小曲线较为平滑和较安全的区域选择初始化参数。曲率能够经过 Hessian-vector multiplication method 来高效地估计。
改变更量的时候要从新调整批量大小。
不要衰减学习率,而要增长批量大小。
若是您以为有趣,请不要忘记拍手和分享文章。您也能够经过 Linkedin 和 Twitter 与做者联系。