写点什么

告别规范化!MIT 谷歌等提出全新残差学习方法,效果惊艳

  • 2019-03-11
  • 本文字数:3316 字

    阅读完需:约 11 分钟

告别规范化!MIT谷歌等提出全新残差学习方法,效果惊艳

现阶段最好的神经网络结构中,规范化(normalization)是一项重要技术。尽管规范化有利于网络训练的原因仍不清楚,但它已经被广泛的应用于提高模型的泛化能力、稳定训练过程、以及加速模型收敛,同时规范化也使得使用更高的学习率训练模型成为了可能。


近日,来自 MIT、谷歌大脑、斯坦福的三名研究人员提出了一项具有挑战性的工作(这项工作在 Facebook 工作期间完成),他们认为规范化的好处并不是唯一的。论文《Fixup Initialization: Residual Learning Without Normalization》中提出了一种固定更新初始化(fixed-update initialization,Fixup),该论文已被 ICLR2019 接收。我们对该方法做了简要介绍,本文是 AI 前线第 70 篇论文导读。

背 景

在人工智能应用发展火热的今天,创新的网络模型及其训练技巧成为了人工智能发展的核心技术。例如在 2016 年何凯明及其团队提出 ResNet 的残差学习结构后,大部分 SOTA 的识别系统都是基于这种在卷积网络与加性残差连接堆叠的结构上添加一些规范化机制而设计的。除了图像分类,多种类的规范化技术在很多其他领域,如机器翻译、生成模型等方面都扮演着重要的角色。


对于规范化技术能产生上述好处的原因,学术界目前还没有达成一种共识。这篇论文对以下这些方面进行了研究:


  1. 在不使用规范化的情况下,深度残差网络能否可靠地训练?

  2. 在不使用规范化的情况下,深度残差网络能否使用相同的学习率进行训练、能否以相同的速度收敛以及能够获得一样好的泛化能力,或者更好?


令人惊讶的是,研究人员发现对于上述的两个问题,回答是肯定的。同时,这篇论文也对以下几个问题进行了讨论(后文均使用第一人称编译):


  • 为什么规范化有助于训练过程。在残差网络的初始化过程中,我们对一种低边界的梯度范数进行了研究,这可以很好的解释为什么使用标准初始化、规范化技术对于深度残差网络在大学习率的情况下是必要的。

  • 在不使用规范化的情况下进行训练。我们提出了 Fixup 技术——一种通过修改网络的结构,对残差分支的标准初始化进行放缩的方法。Fixup 在不使用规范化对极深的残差网络训练时,可以使用最大的学习率。

  • 图像分类。我们使用 Fixup 代替了批规范化过程,在图像分类的基准数据库 CIFAR-10(Wide-ResNet)与 ImageNet(ResNet)上进行了验证。实验结果表明,在使用了适当的正则化后,使用 Fixup 的方法训练出的网络可以与使用规范化的方法训练的网络达到相同的效果。

  • 机器翻译。我们使用 Fixup 替代了规范化层,在机器翻译的基准数据库 IWSLT 和 WMT 使用 Transformer(一种发表于 2017 年 NeurIPS 的目前最好的机器翻译算法 )模型进行了训练。发现该方法可以超过基准线并在相同的框架下取得的目前最好的结果。



图 1:左:ResNet 标准残差块,红色表示批归一化层。中:一种简单的网络块,在堆叠时可以保持稳定。右:Fixup 结构,通过添加偏置更好地提升网络稳定性。

使用标准初始化的 ResNet 会导致梯度爆炸

标准初始化方法是为了初始化网络参数,防止发生梯度消失或梯度爆炸而提出的。然而,在不使用如 BatchNorm 等一些规范化的方法时,标准初始化并不能很好的解决残差连接中梯度爆炸的问题。针对该问题,Balduzzi 提出了一种 ReLU 网络,我们使用正定同质激活函数将 ReLU 网络的思想泛化到残差网络。不使用规范化层时,原始的 ResNet 中每个残差块的激活函数可以表达为:



为了便于分析,我们分析使用了正定同质函数,首先介绍两个定义:



p.h.函数的例子在神经网络中是大量存在的。包括很多无偏的线性操作,例如全连接层、卷积层、池化层、串联层和 dropout 等,当然也包括 ReLU 这种非线性函数。此外,我们还引入了以下两个命题:



  1. 猜想 1 一个使用交叉熵损失的分类网络 f 可以看成是一个若干个网络块组成的集合,其中每个网络块都是一个 p.h.函数

  2. 猜想 2 FC 层的权重是从零均值对称分布中独立同分布采样得到的。


在一个使用了 ReLU 函数的残差网络中,如果我们移除了所有的规范化层,根据这些猜想可得到所有的偏置都被初始化为 0。


我们的结论可以总结为如下两条,证明过程在论文的附件中:



在图 2 中,我们提供了不使用规范化时 ResNet 中的三种 p.h.集合的例子。基于理论 2,如果未归一化概率值 z 在初始化的时候被放大了,这三个例子都有可能会遭遇梯度爆炸问题。而在 ResNet 中,如果不使用规范化,而使用传统方法初始化参数,上述情况是很有可能出现的。这就是我们提出一种新的初始化方法的动机。



图 2:ResNet 中不使用规划范时 p.h.集的例子。(1)最大池化前的第一个卷积层;(2)softmax 层之前的全连接层;(3)主干网络中的空间降采样层和与其相对应的残差分支中的卷积层。

Fixup:在 SGD 的每一步更新残差网络

在这一部分,我们提出了一种由上至下的新的初始化方法。通过对标准初始化简单地放缩,可以保证在合适的范围更新网络函数。首先,我们假设学习率η并设定我们的目标:



从另一个角度讲,我们的目标是设计一种初始化方法,从而使 SGD 可以不依赖深度且以正确的比例对网络函数进行更新。


我们将捷径(Shortcut)定义为残差网络中从输入到输出的最短路径。捷径是一种典型的可训练的浅层网络。假设使用标准方法对捷径进行初始化,我们来分析一下残差分支的初始化情况。

残差分支同步更新网络。

最初,我们发现 SGD 在更新每个残差分支的时,会在高度相关的方向上改变网络的输出。这意味着,如果一个残差网络含有 L 个残差分支,那么每个残差分支在一次迭代中,应当对网络的输出平均改变Θ(η/L)从而达到对整个网路输出改变为Θ(η)。

对于标量分支的研究。


最终我们可以得到,当且仅当满足以下条件时:



偏置和乘法器的影响。

通过对残差分支中权重的放缩,一个残差网络在 SGD 的每一步更新值为Θ(η),到这里我们的目标已经达成了。然而,为了使训练性能与使用规范化时相匹配,我们还需要考虑偏置和乘法器的情况。


在全连接层和卷积层使用偏置是一种很通用的方法。在规范化方法中,偏置和缩放参数被用来重建特征经过规范化操作后的表征能力。因为权重层与激活层的输入/输出均值可能不同,因此在不使用规范化的残差网络中插入偏置项同样可以有助于训练网络。我们发现在每个权重层和非线性激活层前仅插入一个标量偏置可以显著地提高训练性能。


乘法器会对残差分支的输出进行放缩,这与批规范化中的放缩参数功能类似(批规范化中两个重要参数为:scale 和 shift,即放缩与滑动)。我们发现,在每个残差分支中插入一个标量乘法器可以模仿使用规范化的网络中权重模值动态变化的过程。最终,我们得到了训练不使用规范化方法的残差网络的完整方法:


Fixup 初始化


实 验

我们在 CIFAR-10 数据库上测试了第一轮迭代(即数据库中所有图像通过模型一次)结束后模型的测试准确率,发现对于多种深度的卷积神经网络,在学习率相同的情况下 Fixup 可以达到与 BatchNorm 相同的效果。实验结果如下图所示:



图 1 CIFAR-10 数据库上各种方法的训练结果比较,值越大表示结果越好。


此外,我们还对比了使用 Fixup 训练不同深度的 ResNet 和其他方法在 ImageNet 数据库上的结果,实验结果如下表所示:



可以看出 Fixup 与组规范化方法的性能不相上下,该实验中通过交叉验证得到了三种方法的最优偏置标量,对于批规范化、组规范化和 Fixup 分别为 0.2,0.1 和 0.7。


此外,在机器翻译的 SOTA 方法中我们同样使用 Fixup 代替规范化层进行了实验。我们惊奇地发现,当使用 Fixup 代替规范化层可以更好地防止模型过拟合,我们认为这要归功于 dropout 操作的正则化。在两个数据库上,使用 Fixup 都取得了目前最好的结果,实验结果如下表:


结 论

Fixup 通过对标准初始化进行适当的放缩来解决训练过程中梯度爆炸和梯度消失的问题。在不使用规范化的情况下,使用 Fixup 训练的残差网络可以达到与使用规范化训练时相同的稳定性,甚至在网络层数达到了 10000 层时也可以不相上下。此外,在使用了合适正则化方法的情况下,通过 Fixup 训练的不使用规范化的残差网络在图像分类和机器翻译上达到了目前最好的水平。在理论和应用两方面,这篇工作都给出了一种新的尝试。在理论层面,去除规范化有利于更简便地分析残差网络。在应用层面,Fixup 对于发展正则化方法提供了可能,比如结合 ZeroInit 等。


论文链接:https://arxiv.org/pdf/1901.09321.pdf



2019-03-11 10:026802

评论

发布
暂无评论
发现更多内容

一款好用的FAQ搭建工具

Geek_da0866

Java J.U.C 学习笔记-使用篇(一)

U2647

数据中台建设(八):数据服务体系建设

Lansonli

数据中台 8月月更

SAP Analytics Cloud 和 SAP Cloud for Customer 两款 SaaS 软件的集成

汪子熙

SaaS 云平台 系统集成 8月月更

2022-Java后端工程师必会知识点-(Lunix)

自然

Lniux 8月月更

SRv6网络演进面临的挑战

穿过生命散发芬芳

8月月更 SRv6

Serverless开源架构方案

阿泽🧸

Knative 8月月更

不想当Window的Dialog不是一个好Modal,弹窗翻身记...

hiisea

前端 前端开发 前端架构 antd 前端框架

【LeetCode】使数组中所有元素都等于零Java题解

Albert

LeetCode 8月月更

4KMILES加入艾盛集团,以更强劲的数字商务能力,加速中国跨境电商的全域全效增长

Geek_2d6073

Axure9的元件用法

乔乔

签约计划第三季 8月月更

git 安装与体验

Jason199

git 签约计划第三季 8月月更

浅聊缓存函数

掘金安东尼

前端 8月月更 高阶函数

行业 SaaS 微服务稳定性保障实战

阿里巴巴云原生

阿里云 微服务 云原生 可观测

【高并发项目实战】千万级并发的购物车系统设计与代码详解

小明Java问道之路

架构 高可用 高并发 签约计划第三季 8月月更

linux重要的目录之etc

入门小站

磁盘管理-Linux系统磁盘管理

Albert Edison

Linux 磁盘 8月月更

手撸Router,还要啥Router框架?让react-router/vue-router躺一边凉快去

hiisea

vue.js 前端 开源项目 前端框架 React

关于 01 背包问题

HelloWorld杰少

8月月更

程序员常说的“左手锟斤拷,右手烫烫烫”是怎么回事?

桑榆

bug 8月月更

鲲鹏devkit开发套件

乌龟哥哥

8月月更

面试突击71:GET 和 POST 有什么区别?

王磊

Java 常见面试题

MOSN 反向通道详解

SOFAStack

开源 网络安全 Go 语言 社区贡献 MOSN

是什么,让中国成为一台超级计算机?

脑极体

2021-Java后端工程师必会知识点-(分布式RPC框架Dubbo)

自然

RPC 8月月更

万物智联时代,悄然走入生活

这不科技

鸿蒙 OpenHarmony

C++面向对象封装特性的实例分析与应用扩展(一)

CtrlX

c++ 面向对象 后端 代码 8月月更

Nacos配置中心之事件订阅

急需上岸的小谢

8月月更

2022-Java后端工程师必会知识点-(Docker)

自然

Docker 镜像 8月月更

开源一夏 | VuePress的简单使用

坚果

开源 8月月更

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之二:编码实现

程序员欣宸

Java LeetCode 8月月更

告别规范化!MIT谷歌等提出全新残差学习方法,效果惊艳_AI&大模型_Hongyi Zhang 等_InfoQ精选文章