【机器之心专栏】SGD性差自适应优化器更容易泛化到测试集

机器之心专栏

机器之心编辑部

这篇来自 CMU 和 HKUST 科学团队的 ICML 论文在 ImageNet 数据集上的分类准确率比之前的 SOTA BNN 网络 ReActNet 提高了 1.1%,仅通过调整训练算法即可。

二值化网络(BNN)是一种网络压缩方法,将原本需要32位的神经网络参数值和激活值二值化,只表示1位,即-1/+1。

这种极端压缩方式虽然带来了优越的压缩性能,但会降低网络的精度。

在今年的 ICML 会议上,CMU 和 HKUST 研究团队的一篇论文在 ImageNet 数据集上的分类准确率比之前的 SOTA BNN 网络 ReActNet 提高了 1.1%,只是通过调整训练算法,最终获得了 top- 1准确率达到70.5%,超越了所有同等量级的二值化网络,如下图所示。

本文从二元网络训练过程中的常见问题出发,逐步给出相应的解决方案,最终收敛到一个实用的训练策略。接下来,让我们跟着这篇论文来看看二值化网络(BNN)应该如何优化。

首先,应该如何选择 BNN 优化器?

可以看出,BNN的优化表面与实值网络有显着差异,如下图所示。实值网络在局部最小值附近具有更平滑的表面,因此实值网络也更容易泛化到测试集。相比之下,BNN的优化面更陡,泛化性差,优化困难。

这种明显的优化差异也导致直接跟随实值网络的优化器在 BNN 上表现不佳。目前,实值分类网络的通用优化器是 SGD。本文的对比实验还发现,对于实值网络,SGD 的性能始终优于自适应优化器 Adam。但是对于 BNN,SGD 的性能不如 Adam,如下图所示。这就提出了一个问题:为什么在实值分类网络中默认的通用优化器 SGD 在 BNN 优化中输给了 Adam?

这要从 BNN 的特性说起。因为BNN中的参数值(权重)和激活值(activation)都是二值化的,所以需要使用符号函数将实值参数和激活值转化为二值化。

而这个Sign函数是不可微的,所以常规的做法是将Sign函数的导数与Clip函数的导数对二值化的激活值进行拟合。

这样做的一个问题是,当真实值的激活值超过 [-1, 1] 的范围时,称为激活饱和,对应的导数值会变为 0。这就导致了臭名昭著的梯度消失问题。从下图的可视化结果可以看出,网络内部的激活值超出[-1, 1]的范围是很常见的,所以二值化优化中的一个重要问题就是梯度消失了到激活值的过饱和,这使得参数没有足够的梯度估计来学习,很容易陷入局部次优解。

与SGD相比,Adam优化的二值化网络中激活值过饱和和梯度消失的问题得到缓解。这也是 Adam 在 BNN 上优于 SGD 的原因。那么为什么 Adam 会缓解梯度消失的问题呢?本文通过构建的超简单 2D 二元网络分析分析了 Adam 和 SGD 优化过程中的轨迹:

该图显示了用两个二元节点构建的网络的优化表面。(a) 在前向传播中,由于二值化函数 Sign 的存在,优化后的表面是离散的, (b) 在后向传播中,因为使用了 Clip(-1, x, 1) 的导数为Sign(x)的近似导数,所以实际优化空间由Clip(−1, x, 1)函数组成,(c) 从实际优化轨迹可以看出,相比SGD,Adam优化器局部最优更能克服零梯度,(d)实际优化轨迹的俯视图。

如图(b)所示,在计算反向梯度时,只有当X和Y方向都落在[-1, 1]的范围内时,两个方向都有梯度,并且在这个区域之外,至少一个方向梯度消失了。

从下面公式中SGD和Adam优化方法的对比可以看出,SGD的优化方法只计算一阶矩,即梯度的平均值。当梯度消失时,对应参数的更新值下降很快。在 Adam 中c语言实现神经网络算法,Adam 会累加二阶矩,即梯度的二次方的平均值,这样在梯度消失的方向,对应于放大学习率,在梯度方向增加参数更新值消失。这可以帮助网络在局部零梯度区域之外达到更好的解空间。

此外,这篇论文还展示了一个非常有趣的现象。在优化的 BNN 中,存储在网络中以帮助优化的实值参数呈现正则分布:

该分布分为三个峰值c语言实现神经网络算法,分别为0左右、-1左右和1左右。而且,Adam优化的BNN中有很多接近-1和1的实值参数。这种特殊的分布现象从实值参数在 BNN 中的作用和物理意义说起。在BNN中,由于二值化参数不能直接用幅度为10^-4左右的导数来更新,所以需要存储实值参数来累加这些小的导数值,然后每次计算loss时取前进的方向。将实值参数的符号作为二值化参数,然后将计算得到的损失和导数更新为实值参数,如下图所示。

因此,当这些实值参数接近零值时,它们很容易通过梯度更新改变符号,导致相应的二值化参数容易跳跃。当实值参数的绝对值较高时,为了改变相应二值参数的符号,需要在相反方向累积更多的梯度。因此,如 (Helwegen et al., 2019) 中所述,实值参数的绝对值的物理意义可以看作是其对应的二进制参数的置信度。实值参数,对应的Binary参数置信度较高,符号变化的可能性较小。从这一点来看,

当然,一个实值参数的绝对值代表其对应二值参数的置信度的推论,引出了另一个想法:BNN 中的实值参数是否应该应用权重衰减?

在实值网络中,对参数应用权重衰减以控制参数的大小并防止过拟合。在二值化网络中,实值参数的符号参与了网络计算,所以加在实值参数上的权重衰减不会影响二值化参数的大小,也就是说权重衰减在二进制值。价值网络中的角色也需要重新思考。

本文发现在二值化网络中使用权重衰减会带来一个困境:高权重衰减会减小实值参数的大小,从而导致二值化参数的符号可变和不稳定。低权重衰减或无权重衰减会使二值参数倾向于保持当前状态,这使得网络容易依赖初始值。

为了量化稳定性和初始值依赖性,本文引入了两个指标:衡量优化稳定性的参数翻转率(FF-ratio)和衡量初始化依赖性的初始值相关性(C2I)。-比率)。两者的公式如下,

FF-ratio 计算在第 t 次迭代更新后有多少参数改变了它们的符号,而 C2I-ratio 计算了有多少参数与它们的初始值有不同的符号。

从下表中不同权重衰减对网络稳定性和初始值依赖性的定量分析结果可以看出,随着权重衰减的增加,FF-ratio和C2I-ratio的变化趋势呈负相关,且FF比率呈指数增长,而C2I比率呈线性下降。这表明一些参数值来回跳跃对最终参数没有贡献,而只会影响训练稳定性。

那么有没有什么办法可以解开权重衰减带来的稳定性和初始值依赖的困境呢?论文发现,最近在 ReActNet (Liu et al., 2020) 和 Real-to-Binary Network (Brais) Martinez 提出的两阶段训练方法,2020) 结合合适的权重-decay 策略可以解决这个困境,这个策略是在训练的第一阶段,只对激活值进行二值化,而不是二值化参数。由于实值参数不必担心二值化参数的跳跃,可以加入权重衰减来减少初始值依赖。然后在训练的第二阶段,对激活值和参数进行二值化处理,第一步是用训练好的参数初始化二值网络中的实值参数,不应用权重衰减。这可以提高稳定性并使用预训练好的初始化来减少初始值依赖带来的弊端。通过观察FF-ratio和C2I-ratio,论文得出结论:第一阶段使用5e-6的重量衰减,第二阶段不应用重量衰减的效果最佳。

该论文整合了所有分析的训练策略,取得的结果比具有相同网络结构的最先进的 ReActNet 高出 1.1%。实验结果如下表所示。

更多分析和结果请参考原论文。

参考:

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论