有这么多的优化技术!例如,batchnormalization、weightstandardization等。然而,现有的优化方法大多是基于激活或权重执行。近日,阿里达摩院的研究人员发现了一种直接从梯度入手的新方法,提出了一种新的梯度中心化方法。只需一行代码即可嵌入现有的DNN优化器,并直接微调预训练模型。优化技术对于深度神经网络(DNN)的高效训练至关重要。先前的研究表明,使用一阶和二阶统计量(例如均值和方差)对网络激活或权重向量执行Z分数归一化(例如批量归一化BN和权重归一化WS)可以提高训练性能。大多数现有方法都是基于激活或权重执行。近日,阿里达摩研究院的研究人员提出了一种新的优化技术——梯度中心化(GC),通过中心化梯度向量来实现零均值,因此直接在梯度上执行。我们可以认为GC方法是对权重空间和输出特征空间的正则化,从而提高DNN的泛化性能。此外,GC还可以改善损失函数和梯度的Lipschitz特性,使训练过程更加高效和稳定。GC的实现比较简单,只需一行代码就可以很容易地将GC嵌入到现有的基于梯度的DNN优化器中。它还可以直接用于微调预训练的DNN。研究人员在不同的应用中进行了实验,包括一般图像分类和微调图像分类、检测和分割,结果表明GC可以不断提高DNN的学习性能。论文地址:https://arxiv.org/pdf/2004.01461.pdf项目地址:https://github.com/Yonghongwei/Gradient-Centralization不同于基于激活或权重向量操作的技术,本研究提出了一种基于一种简单而有效的权重向量梯度DNN优化技术-梯度集中化(GC)。如图1(a)所示,GC只是将梯度向量集中到零均值。只需一行代码,即可轻松嵌入到当前基于梯度的优化算法(如SGDM、Adam)中。尽管GC很简单,但它实现了多种预期效果,例如加快训练过程、提高泛化性能以及与微调预训练模型的兼容性。图1:(a)使用GC的示意图。W代表权重,L代表损失函数,?_WL代表权重梯度,Φ_GC(?_WL)代表中心梯度。如图,用Φ_GC(?_WL)代替?_WL,实现了将GC嵌入到现有的网络优化器中,步骤非常简单。(b)梯度矩阵/权重张量在全连接层(左)和卷积层(右)上的GC操作。GC计算梯度矩阵/张量的每个列/切片的平均值,并将每个列/切片居中到零均值。研究贡献本研究的主要贡献是:提出了一种通用的网络优化技术——梯度集中化(GC)。GC不仅可以平滑和加速DNN的训练过程,还可以提高模型的泛化性能。分析了GC的理论性质,指出GC通过对权向量引入新的约束来约束损失函数。这个过程规范了权重空间和输出特征空间,从而提高了模型的泛化性能。此外,约束损失函数比原始损失函数具有更好的Lipschitz特性,使训练过程更加稳定和高效。Gradientcentralizationresearchmotivation研究者提出了一个问题:除了对activation和weights的处理之外,是否可以直接对gradient进行处理,让训练过程更加高效稳定?一个直观的想法是使用Z-score归一化来归一化梯度,类似于BN和WS如何对激活和权重进行操作。不幸的是,研究人员发现简单地归一化梯度并不能提高训练过程的稳定性。因此,研究人员提出了一种计算梯度向量的均值并将梯度居中为零均值的方法——梯度居中。该方法具有良好的Lipschitz特性,可以平滑DNN的训练过程,提高模型的泛化性能。GC公式对于全连接层或卷积层,假设梯度已经通过反向传播得到,那么对于梯度为?_w_iL(i=1,2,...,N)的权重向量w_i,则GC的公式如下说明:GC的公式很简单。如图1(b)所示,只需要计算权重矩阵的列向量的平均值,然后从每个列向量中去除平均值。等式1的矩阵表示如下:在实际实现中,我们可以直接对每个权重向量取均值来完成GC操作。整个计算过程非常简单高效。SGDM/Adam中嵌入GC的效果如何?GC可以很容易地嵌入到当前的DNN优化算法中,例如SGDM和Adam。在得到中心化梯度Φ_GC(?_wL)后,研究人员直接用它来更新权重矩阵。算法1和算法2分别展示了将GC嵌入到两种最流行的优化算法SGDM和Adam中的过程。另外,如果要使用weightdecay,可以设置,其中λ代表weightdecayfactor。将GC嵌入到大多数DNN优化算法中只需要一行代码,并且可以以很小的额外计算成本执行GC。例如,研究人员使用ResNet50在CIFAR100数据集上训练了一个epoch,训练时间仅增加了0.6秒(一个epoch耗时71秒)。GC属性提高泛化能力我们可以将GC视为具有约束损失函数的投影梯度下降法。约束损失函数及其梯度的Lipschitz性质更好,使训练过程更加高效和稳定。先前的研究已经说明了投影梯度方法的性质,即投影权重梯度将约束超平面或黎曼流形的权重空间。同样,我们也可以从projectedgradientdescent的角度来看GC的作用。下面的图2演示了使用GC方法的SGD:图2:GC方法的几何解释。将梯度投影到超平面e^T(w?w^t)=0上,投影梯度用于更新权重。加速训练过程优化图像平滑:之前的研究表明BN和WS可以平滑优化的图像。尽管BN和WS在激活和权重上执行,但它们隐含地限制了权重梯度,使权重梯度在快速训练期间更可预测且更稳定。类似的结论也适用于GC方法,研究人员比较了等式4中原始损失函数L(w)和约束损失函数的Lipschitz性质,以及函数梯度的Lipschitz性质。GradientExplosionSuppression:GC对DNN训练的另一个好处是避免梯度爆炸,让训练更稳定。此属性类似于渐变裁剪。太大的梯度会导致权重在训练过程中发生剧烈变化,导致损失剧烈震荡,难以收敛。为了研究GC对梯度裁剪的影响,研究人员在图4中展示了使用和不使用GC方法(在CIFAR100上训练)的ResNet50的第一卷积层和全连接层的梯度矩阵的最大值以及L2范数。从图中我们可以看出,在训练过程中使用GC方法降低了梯度矩阵的最大值和L_2范数。图4:作为迭代函数的梯度矩阵或张量的L_2范数(对数尺度)和最大值(对数尺度)。此处使用在CIFAR100上训练的ResNet50作为DNN模型。左边两幅图是第一个卷积层上的结果,右边两幅图是全连接层上的结果。红点代表没有使用GC方法的训练结果,蓝点则相反。实验结果下图5显示了四种组合的训练损失和测试精度曲线。与BN相比,BN+GC的trainingloss下降更快,而testaccuracy上升更快。对于BN和BN+WS,GC可以进一步加速他们的训练。此外,我们可以看到BN+GC达到了最高的测试精度,这验证了GC可以加快训练过程,同时增强泛化性能。图5:Mini-ImageNet数据集上训练阶段的训练损失(左)和测试精度(右)曲线。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在CIFAR100数据集上使用不同学习率测试SGDM和Adam的准确性。下面的图6显示了ResNet50的训练和验证误差曲线(GN用于特征归一化)。我们可以看到,在GN的帮助下,GC可以大大加快训练过程。图6:ImageNet数据集上训练时期的训练误差(左)和验证误差(右)曲线。下面的图7显示了SGDM和SGDM+GC在前40个时期在4个细粒度图像分类数据集上的训练和测试精度。图7:4个细粒度图像分类数据集的训练精度(实线)和测试精度(虚线)曲线。下面的表8显示了FasterR-CNN的平均精度(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,其对应的实现在SGD.py中提供。以“_GC”为后缀的优化器使用GC优化卷积层和全连接层,而以“_GCC”为后缀的优化器只能用于卷积层。使用这些优化器非常简单,只需使用以下命令导入相应的模块即可。来自SGDimportSGD_GC作者信息HongweiYong(雷宏娜)分别于2013年和2016年获得西安交通大学本科和硕士学位,目前是香港理工大学电子计算系博士生。主要研究领域包括图像建模和深度学习等,第一篇论文由洪伟勇撰写。其余三位作者均在阿里巴巴达摩院工作,其中黄健强(HuangJianqiang)为达摩院资深算法专家,华显生(HuaXiansheng)为达摩院城市大脑实验室负责人,张磊(ZhangLei)是达摩院城市大脑实验室高级研究员。
