什么样的模型泛化性能比较好,什么样的操作真的能带来泛化性,我们真的对泛化有明确定义吗?也许只要扭一扭权重,泛化就能明确地展示在我们面前。
在最近的一项工作中,大量的实验证据表明层旋转(即在训练时神经网络每一层与其初始状态之间的余弦距离的变化)构成了一种强大而稳定的衡量泛化性能的指标。尤其是当每一层最终的权值和初始权值之间的余弦距离越大时,总能使得最终模型的泛化性能越好。
论文:Layer rotation: a surprisingly powerful indicator of generalization in deep networks?
论文地址:https://arxiv.org/abs/1806.01603v2
有趣的是,这种关系证明了一种与网络无关的最优状态:在训练过程中,所有层的权值从它们的初始状态变化到余弦值等于 1 时,性能总能优于其它的配置情况,其测试准确率要高出百分之 30%。此外,我们说明了层旋转非常易于检测和控制,有助于超参数调优)。层旋转还能提供统一的框架,从而解释学习率调优、权值衰减、学习率预热和自适应梯度方法对泛化和训练速度的影响。
为了解释层旋转的惊人特性,研究者在 MNIST 数据集上训练了一个单隐层的 MLP,并证明了层旋转与中间层的特征有关,且相关性与训练的程度还有关。
为泛化把把脉
为了理解深度神经网络有趣的泛化特性,指定衡量泛化性能的数值指标是非常重要的,这些指标能够适用于各种各样的训练情况。这些指标为深度学习中的泛化理论工作提供了重要的见解,有助于解释为什么常用的训练技巧和技术会影响泛化性能。
在本文中,研究者展示了发现新泛化指标的实验证据:在训练时神经网络时,每一层与其初始状态之间的余弦距离变化(称为「层旋转」)。
实际上,研究者通过一系列实验(使用不同的数据集、网络和训练过程)表明了,层旋转更大时(即每一层最终的权值和初始权值之间的余弦距离更大),同时泛化能力也会更好。
除了提出关于泛化的原始度量方法,实验还表明,与其它的泛化指标相比,层旋转还具有以下优良特性:
它有一个与网络无关的最优状态(所有层的余弦距离都达到 1);
很容易监控,因为它只取决于网络权值的变化,所以在最优化过程中,层旋转可以通过适当的权值更新规则得到控制;
它提供了一个统一的框架来解释学习率调优、权值衰减、学习率预热、以及自适应梯度方法对于泛化和训练速度的影响。
在对相关工作进行讨论后,研究者的实验展示按照以下三个步骤来组织:
开发监控和控制层旋转的工具;
在受控环境下系统地研究层旋转的各种设置;
研究标准训练环境下的层旋转设置,重点研究随机梯度下降(SGD)、权值衰减和自适应梯度方法环境加的情况。
为了鼓励其它研究者复现实验结果,论文作者提供了创建本文所有图表的相关工具和源代码。
地址:https://github.com/ispgroupucl/layer-rotation-paper-experiments
为了方便从业人员使用控制和监控工具,论文作者提供了在不同深度学习库环境下的实现。
地址:https://github.com/ispgroupucl/layer-rotation-tools
通过 Layca 系统地研究层旋转的设置
本节的目的是利用工具进行对各种层旋转设置进行实验研究。实验针对网络架构和数据集复杂度不一的五个任务进行,如表 1 所示:
表 1:实验任务的总结。
图 1 显示了不同层旋转率的设置下的层旋转曲线以及相应的测试准确率。
图 1:在表 1 所示的 5 个任务上,对层旋转曲线的分析以及在不同的层旋转率设置(使用 Layca 算法训练得到)下得到的测试准确率(η)。
在标准训练环境下对层旋转的研究
本节研究使用随机梯度下降(SGD)、权值衰减、或自适应梯度方法进行训练时,自然出现(不人为控制)的层旋转设置。
图 2 显示了在表 1 所示的 5 个任务的基础的 SGD 训练过程中,由不同的学习率得到的层旋转曲线和测试准确率。我们观察到,随着层旋转变大,测试准确率也会随之增加(这与我们的经验一致),直到到达临界点后开始下降(这与我们的经验则不一致)。
图 2:在不同的学习率下,通过基础的 SGD 得到的层旋转曲线和相应的测试准确率。不同颜色的编码、坐标轴设置和 ∆η 的计算方法与图 1 相同。
图 4 显示了使用高学习率(1/3)、不同的预热时间(0,5,10 或 15 个 epoch 进行预热)进行训练时的层旋转和训练曲线。我们观察到,在没有进行预热的情况下,SGD 会产生不稳定的层旋转,而且训练准确率在第 25 个 epoch 之前都没有提升。使用预热带来了显著的性能提升:在 25 个 epoch 后,训练的准确率达到了 75%,只不过仍然会有一些训练曲线的不稳定性存在,同时会出现一个陡峭的层旋转下降。
图 4:在 CIFAR-10 数据集上训练 ResNet-110 网络的过程中,在高学习率(1/3)下使用不同的预热时间(0,5,10 或 15 个 epoch)得到的层旋转和训练曲线。
近年来,自适应梯度方法在机器学习领域逐渐兴起(例如,RMSprop[35],Adagrad [8],Adam [22])。图 5 显示了在第 1,10 和 50 个 epoch 结束时测量的每一层的第 10,50 和 第 90 个百分位的矩估计。该图表明,自适应梯度方法可能对层旋转有很大的影响。
图 5:在 C10-CNN1 上训练时,Adam 对梯度的二阶原点距(无中心方差)的参数估计。
图 6:使用自适应梯度方法(每个任务/列分别使用 RMSProp,Adam,Adagrad,RMSProp+L2 和 Adam+L2),生成的层旋转曲线和相应的测试准确率,第一行不使用 Layca 控制层旋转,第二行使用了 Layca 控制层旋转。
如何解释层旋转?
研究者使用一个小型实验来可视化地说明层旋转如何影响网络学到的特征。具体而言在删减版的 MNIST 数据集(每类有 1,000 个样本,从而提升过参数化)上,研究者训练了一个由 784 个神经元组成的、带有一个隐层的多层感知机(MLP)。
图 8 显示了在不同的层旋转设置(随机地选择 5 个隐层神经元)下得到的特征。这个可视化结果揭示了一个明显的现象:层旋转似乎并不影响模型学习哪些特征,而是影响在训练过程中这些特征被学习的程度。
图 8:层旋转对中间特征的影响的可视化结果。学习到的中间特征(与随机选择出的 5 个神经元相关联)在不同的层旋转设置下的可视化结果。结果表明,层旋转并不影响学习哪些特征,而是影响这些特征在训练过程中被学习的程度。
既然层旋转反映的是特征的学习程度,那么越抽象和高级的特征,它们理应泛化性能越好。那么这也许就是层旋转这么强大的原因?