如何去评价一个神经网络的泛化能力?
一篇出自比利时天主教鲁汶大学的研究发表在了ICML 2019识别和理解深度学习现象Workshop上。
研究指出,网络的泛化能力,可以通过“层旋转”来评判。
所谓层旋转,是指神经网络中每一层的权重向量与初始化之间夹角余弦的变化,被研究人员可以当成衡量泛化性能强弱的指标。
研究人员公布了在训练期间控制层旋转工具的代码,表示这项工作“可以大大减少当前调整超参数的难度”:
也就是说,可以通过最少的超参数调整,获得最佳的神经网络性能。
在Reddit论坛上,有人指出这是一项“超级有趣的实证结果”,也有人表示这项研究启发出了众多新思考。
层旋转有什么用
在论文Layer rotation: a surprisingly powerful indicator of generalization in deep networks?中,研究详细解释了层旋转背后的探索之路。
神经网络的泛化能力受训练它的优化程序的影响,因此确定这个程序中哪些因素影响泛化是个重要问题。
在这篇论文中,研究人员提出了一种全新的算法:Layca((LAYer-level Controlled Amount of weight rotation),能够直接控制神经网络的优化算法通过每层网络的学习速率参数,进而控制层旋转。
也就是说,使用了Layca算法,可以通过它的学习速率参数,控制每一层网络中每一步权重旋转。
Layca算法的工作流程是下面这样的:
研究人员表示,用这种新的算法,可以达到比较明显的控制效果,同时,泛化能力也会产生巨大的差异,准确度差异达30%。
随后,他们利用Layca,进一步对层旋转架构进行研究,开发监测和控制层旋转的工具。
研究人员采用SGD(随机梯度下降)作为默认优化器,用Layca来改变相对转速和全局旋转速率值,分别对5种网络架构和数据复杂性不同的神经网络进行研究,它们分别为:
他们绘制出一张在不同层旋转速率中层旋转曲线(CFR)与相应测试精度(η)之间的关系。
在下图中,横轴代表迭代次数,纵轴代表夹角的余弦,曲线颜色从浅到深代表网络最后一层与第一层,最终结果如下:
可以看出,每层的层旋转越大,神经网络的泛化能力就越好。
由此看来,研究人员认为,层旋转这个指标,可以用来直接来判断网络的泛化能力。
层旋转的影响
之后,除了Layca,研究者们还用SGD做了类似的实验。根据实验结果,得出了几个结论:
对于SGD学习率
学习率参数直接影响层旋转速率,并影响更新的大小。
从下面五个任务中SGD训练期间不同学习率对层旋转曲线影响的实验结果图来看,测试精度随着层旋转而增加,到临界点后开始减少。
对于权重衰减
权重衰减的范数会增加由给定训练步骤引起的旋转量,根据下面的实验结果图可以看出,所有层的权重在初始化时达到1的余弦距离,并且得到的测试性能与使用Layca获得的性能相当。
对于学习率预热
高学习率会产生突然的层旋转,不会影响训练损失。
在学习率预热方面,研究者用ResNet-110做实验,在CIFAR-10数据集上训练。使用的预热策略是以小10倍的学习速率开始,线性增加逐渐达到指定的最终学习率。
结果如下图:
SGD产生不稳定的层旋转,始终转化为无法提高训练精度。使用预热可以大大减少这些不稳定性,在Epoch超过25之前,训练京都没有显著提高。
而Layca表现更优。归功于Layca的控制能力,它稳定性较高,并且在不需要预热的情况下达到高泛化性能。
对于自适应梯度法
研究者们基于ICLR 2015论文《A method for stochastic optimization》中的算法,在C10-CNN1任务上做了实验。
根据第10,第50和第90百分位每个层的状况可以看出,自适应梯度方法可能对层旋转产生巨大影响,自适应梯度方法使用的参数级统计数据主要在层之间变化,而在层内可忽略不计。
另外,对比自适应梯度法在训练前面的5个任务和自适应梯度法层旋转与SGD诱导层旋转的结果,可以发现,自适应梯度法能够让Layca达到SGD的泛化能力。
根据自适应梯度法、SGD+权重衰减和SGD+L2正则化在5个训练任务上的表现得出,SGD可以通过Layca实现自适应梯度法的训练速度。
对于中间层特征
那么,基于这些层旋转和各属性之间的联系,如何去具体的解释层旋转呢?
研究者们做了另一个实验,在一个简化的MNIST数据集上训练多层感知机(MLP),从相同的初始化状态开始,我们用Layca训练四种学习率不同的网络,让四种不同的层旋转配置均达到100%的训练准确度,同时拥有不同的泛化能力。
将图旋转对中间层特征的影响画出来就会发现:
层旋转不会影响学习哪些特征,而是影响在训练过程中学习的程度。层旋转越大,特征越突出,初始化可检索的越少,而当层旋转接近1的时候,网络的最终权重消除了初始化的所有残余。
层旋转与特征学习程度之间的这种联系表明:完全学习中间层特征对于达到100%的训练准确性是不必要的,但训练过程如果完全学习了中间层特征,可以产生更好的泛化性能。
传送门
Layer rotation: a surprisingly powerful indicator of generalization in deep networks?
https://arxiv.org/abs/1806.01603v2
代码:
https://github.com/ispgroupucl/layer-rotation-paper-experiments
层旋转工具:
https://github.com/ispgroupucl/layer-rotation-tools
“