机器之心报道
机器之心编辑部
优化技术对于深度神经网络(DNN)的高效训练至关重要。以往的研究表明,使用一阶和二阶统计量(如平均值和方差)在网络激活或权重向量上执行Z-score标准化(如批归一化BN和权重标准化WS)可以提升训练性能。
已有方法大多基于激活或权重执行,最近阿里达摩院的研究人员另辟蹊径提出了一种新型优化技术——梯度中心化(gradientcentralization,GC),该方法通过中心化梯度向量使其达到零均值,从而直接在梯度上执行。
我们可以把GC方法看做对权重空间和输出特征空间的正则化,从而提升DNN的泛化性能。此外,GC还能提升损失函数和梯度的Lipschitz属性,从而使训练过程更加高效和稳定。
GC的实现比较简单,只需一行代码即可将GC轻松嵌入到现有基于梯度的DNN优化器中。它还可以直接用于微调预训练DNN。研究者在不同应用中进行了实验,包括通用图像分类和微调图像分类、检测与分割,结果表明GC可以持续提升DNN学习性能。

论文地址:
项目地址:
不同于基于激活或权重向量运行的技术,该研究提出了一种基于权重向量梯度的简单而有效的DNN优化技术——梯度中心化(GC)。
如图1(a)所示,GC只是通过中心化梯度向量使其达到零均值。只需要一行代码,即可将其轻松嵌入到当前基于梯度的优化算法(如SGDM、Adam)。
尽管简单,但GC达到了多个期望效果,比如加速训练过程,提高泛化性能,以及对于微调预训练模型的兼容性。

图1:(a)使用GC的示意图。W表示权重,L表示损失函数,∇_WL表示权重梯度,Φ_GC(∇_WL)表示中心梯度。如图所示,用Φ_GC(∇_WL)替换∇_WL来实现GC到现有网络优化器的嵌入,步骤很简单。(b)全连接层(左)和卷积层(右)上梯度矩阵/权重张量的GC运算。GC计算梯度矩阵/张量的每列/slice的平均值,并将每列/slice中心化为零均值。
研究贡献
该研究的主要贡献有:
提出了一种通用网络优化技术——梯度中心化(GC),GC不仅能够平滑和加速DNN的训练过程,还可以提升模型的泛化性能。
分析了GC的理论性质,指出GC通过对权重向量引入新的约束来约束损失函数,该过程对权重空间和输出特征空间进行了正则化,从而提升了模型的泛化性能。此外,约束损失函数比原始损失函数具备更好的利普希茨属性,使得训练过程更加稳定高效。
梯度中心化
研究动机
研究者提出了这样的疑问:除了对激活和权重的处理外,是否能够直接对梯度进行处理,从而使训练过程更加高效稳定呢?一个直观的想法是,类似于BN和WS在激活与权重上的操作,使用Z-score标准化方法对梯度执行归一化。不幸的是,研究者发现单纯地归一化梯度并不能提高训练过程的稳定性。于是,研究者提出一种计算梯度向量均值并将梯度中心化为零均值的方法——梯度中心化。该方法具备较好的利普希茨属性,能够平滑DNN的训练过程并提升模型的泛化性能。
GC公式
对于全连接层或卷积层,假设已经通过反向传播获得梯度,那么对于梯度为∇_w_iL(i=1,2,,N)的权重向量w_i,GC的公式如下所示:

其中

GC的公式很简单。如图1(b)所示,只需要计算权重矩阵列向量的平均值,然后从每个列向量中移除平均值即可。
公式1的矩阵表述如下所示:

在实际实现中,我们可以从每个权重向量中直接移除平均值来完成GC操作。整个计算过程非常简单高效。
GC嵌入到SGDM/Adam中,效果如何?
GC可以轻松嵌入到当前的DNN优化算法中,如SGDM和Adam。在得到中心化梯度Φ_GC(∇_wL)后,研究者直接使用它更新权重矩阵。算法1和算法2分别展示了将GC嵌入两大最流行优化算法SGDM和Adam的过程。此外,如要使用权重衰减,可以设置

,其中λ表示权重衰减因子。
将GC嵌入到大部分DNN优化算法仅需一行代码,就可以微小的额外计算成本执行GC。例如,研究者使用ResNet50在CIFAR100数据集上进行了一个epoch的训练,训练时间仅增加了0.6秒(一个epoch耗时71秒)。

GC的特性
提升泛化性能
我们可以把GC看作具备约束损失函数的投影梯度下降方法。约束损失函数及其梯度的利普希茨属性更优,从而使训练过程更加高效稳定。
之前的研究已经说明了投影梯度方法的特性,即投影权重梯度将限制超平面或黎曼流形的权重空间。类似地,我们也可以从投影梯度下降的角度看待GC的作用。下图2展示了使用GC方法的SGD:

图2:GC方法的几何解释。梯度被投影在超平面e^T(w−w^t)=0上,投影梯度被用于更新权重。
加速训练过程
优化图景平滑:之前的研究表明BN和WS可以平滑优化图景。尽管BN和WS在激活和权重上执行,但它们隐式地限制了权重梯度,从而使权重梯度在快速训练时更具预测性,也更加稳定。
类似的结论也适用于GC方法,研究者对比了原始损失函数L(w)和公式4中约束损失函数的利普希茨属性,以及函数梯度的利普希茨属性。
梯度爆炸抑制:GC对于DNN训练的另一个好处是避免梯度爆炸,使训练更加稳定。这一属性类似于梯度剪裁。梯度太大会导致权重在训练过程中急剧变化,造成损失严重振荡且难以收敛。
为了研究GC对梯度剪裁的影响,研究者在图4中展示了,在使用和不使用GC方法时(在CIFAR100上训练得到的)ResNet50第一个卷积层和全连接层的梯度矩阵最大值和L2范数。从图中我们可以看到,在训练过程中使用GC方法使得梯度矩阵的最大值和L_2范数有所降低。

图4:梯度矩阵或张量的L_2范数(对数尺度)和最大值(对数尺度)随迭代次数的变化情况。此处使用在CIFAR100上训练得到的ResNet50作为DNN模型。左侧两幅图展示了在第一个卷积层上的结果,右侧两幅图展示了全连接层上的结果。红点表示不使用GC方法的训练结果,蓝点反之。
实验结果
下图5展示了四种组合的训练损失和测试准确率曲线。
与BN相比,BN+GC的训练损失下降得更快,同时测试准确率上升得也更快。对于BN和BN+WS而言,GC能够进一步加快它们的训练速度。此外,我们可以看到,BN+GC实现了最高的测试准确度,由此验证了GC能够同时加速训练过程并增强泛化性能。

图5:在Mini-ImageNet数据集上,训练损失(左)和测试准确率(右)曲线随训练epoch的变化情况。ResNet50被用作DNN模型。进行对比的优化方法包括BN、BN+GC、BN+WS和BN+WS+GC。
下表3展示了不同权重衰减设置下的测试准确率变化,包括0、1e^-4、2e^-4、5e^-4和1e^-3。优化器是学习率为0.1的SGDM。从表中可以看到,权重衰减的性能通过GC实现了持续改善。

表3:在不同权重衰减设置下,使用ResNet50在CIFAR100数据集上的测试准确率。
下表4展示了SGDM和Adam在不同学习率下的测试准确率变化。

表4:使用ResNet50,不同学习率的SGDM和Adam在CIFAR100数据集上的测试准确率。
下图6展示了ResNet50的训练和验证误差曲线(GN被用于特征归一化)。我们可以看到,借助于GN,GC可以大大加速训练过程。

图6:在ImageNet数据集上,训练误差(左)和验证误差(右)曲线随训练epoch的变化情况。
下图7展示了在4个细粒度图像分类数据集上执行前40个epoch时,SGDM和SGDM+GC的训练和测试准确率。

图7:在4个细粒度图像分类数据集上,训练准确率(实线)和测试准确率(虚线)曲线随训练epoch的变化情况。
下表8展示了FasterR-CNN的平均精度(AveragePrecision,AP)。我们可以看到,在目标检测任务上,使用GC训练的所有骨干网络均实现了约0.3%-0.6%的性能增益。

表8:使用Faster-RCNN和FPN,不同骨干网络在COCO数据集上的检测结果。
下表9展示了边界框平均精度(AP^b)和实例分割平均精度(AP^m)。我们可以看到,目标检测任务上的AP^b提升了0.5%-0.9%,实例分割任务上的AP^m提升了0.3%-0.7%。

表9:使用Mask-RCNN和FPN,不同骨干网络在COCO数据集上的检测和分割结果。
使用方法
研究者开源了论文中所提方法,使用PyTorch实现。包括SGD_GC、SGD_GCC、SGDW_GCC、Adam_GC、Adam_GCC、AdamW_GCC和Adagrad_GCC多种优化器,其相应实现在中提供。后缀为「_GC」的优化器使用GC对卷积层和全连接层进行优化,而后缀为「_GCC」的优化器仅可用于卷积层。
而想要使用这些优化器非常简单,只需使用如下命令import对应的模块即可。
fromSGDimportSGD_GC
论文一作HongweiYong(雍宏巍)分别在2013年和2016年取得了西安交通大学的本科与硕士学位,目前是香港理工大学电子计算系博士生。他的主要研究领域包括图像建模和深度学习等。

论文一作HongweiYong。
其余三位作者均供职于阿里达摩院,其中JianqiangHuang(黄建强)为达摩院资深算法专家,XianshengHua(华先胜)为达摩院城市大脑实验室负责人,LeiZhang(张磊)为达摩院城市大脑实验室高级研究员。