Backbone 网络-ResNet v2 详解
目录
前言
本文的主要贡献在于通过理论分析和大量实验证明使用恒等映射(
identity mapping
)作为快捷连接(skip connection
)对于残差块的重要性。同时,将BN/ReLu
这些activation
操作挪到了Conv
(真正的weights filter操作)之前,提出“预激活“操作,并通过与”后激活“操作做对比实验,表明对于多层网络,使用了预激活残差单元(Pre-activation residual unit
) 的resnet v2
都取得了比resnet v1
(或 resnet v1.5)更好的结果。
摘要
近期已经涌现出很多以深度残差网络(deep residual network)为基础的极深层的网络架构,在准确率和收敛性等方面的表现都非常引人注目。本文主要分析残差网络基本构件(residual building block
)中的信号传播,本文发现当使用恒等映射(identity mapping)作为快捷连接(skip connection)并且将激活函数移至加法操作后面时,前向-反向信号都可以在两个 block 之间直接传播而不受到任何变换操作的影响。同时大量实验结果证明了恒等映射的重要性。本文根据这个发现重新设计了一种残差网络基本单元(unit),使得网络更易于训练并且泛化性能也得到提升。
注意这里的实验是深层 ResNet(\(\geq\) 110 layers) 的实验,所以我觉得,应该是对于深层 ResNet,使用”预激活”残差单元(
Pre-activation residual unit
)的网络(ResNet v2)更易于训练并且精度也更高。
1、介绍
深度残差网络(ResNets
)由残差单元(Residual Units
)堆叠而成。每个残差单元(图1 (a))可以表示为:
其中,\(x_l\) 和 \(x_{l+1}\) 是 第 \(l\) 个残差单元的输入和输出,\(F\) 是残差函数。在 ResNet 中,\(h(x_{l})= x_{l}\) 是恒等映射(identity
),\(f\) 是 ReLU
激活函数。在 ImageNet
数据集和 COCO
数据集上,超过 1000
层的残差网络都取得了当前最优的准确率。残差网络的核心思想是在 \(h(x_{l})\) 的基础上学习附加的残差函数 \(F\),其中很关键的选择就是使用恒等映射 \(h(x_{l})= x_{l}\),这可以通过在网络中添加恒等快捷连接(skip connection) shortcut
来实现。
本文中主要在于分析在深度残差网络中构建一个信息“直接”传播的路径——不只是在残差单元直接,而是在整个网络中信息可以“直接”传播。如果 \(h(x_{l})\) 和 \(f(y_{l})\) 都是恒等映射,那么信号可以在单元间直接进行前向-反向传播。实验证明基本满足上述条件的网络架构一般更容易训练。本文实验了不同形式的 \(h(x_{l})\),发现使用恒等映射的网络性能最好,误差减小最快且训练损失最低。这些实验说明“干净”的信息通道有助于优化。各种不同形式的 \(h(x_{l})\) 见论文中的图 1、图2 和 图4 中的灰色箭头所示。
为了构建 \(f(y_l)=y_l\) 的恒等映射,本文将激活函数(ReLU
和 BN
)移到权值层(Conv
)之前,形成一种“预激活(pre-activation
)”的方式,而不是常规的“后激活(post-activation
)”方式,这样就设计出了一种新的残差单元(见图 1(b)
)。基于这种新的单元我们在 CIFAR-10/100
数据集上使用1001
层残差网络进行训练,发现新的残差网络比之前(ResNet
)的更容易训练并且泛化性能更好。同时还考察了 200
层新残差网络在 ImageNet
上的表现,原先的残差网络在这个层数之后开始出现过拟合的现象。这些结果表明网络深度这个维度还有很大探索空间,毕竟深度是现代神经网络成功的关键。
2、深度残差网络的分析
原先 ResNets
的残差单元的可以表示为:
在 ResNet
中,函数 \(h\) 是恒等映射,即 \(h(x_{l}) = x_{l}\)。公式的参数解释见下图:
如果函数 \(f\) 也是恒等映射,即 \(y_{l}\equiv y_{l}\),公式 (1)(2)
可以合并为:
那么任意深层的单元 \(L\) 与浅层单元 \(l\)之间的关系为:
公式 (4)
有两个特性:
- 深层单元的特征可以由浅层单元的特征和残差函数相加得到;
- 任意深层单元的特征都可以由起始特征 \(x_0\) 与先前所有残差函数相加得到,这与普通(
plain
)网络不同,普通网络的深层特征是由一系列的矩阵向量相乘得到。残差网络是连加,普通网络是连乘。
公式 (4)
也带来了良好的反向传播特性,用 $\varepsilon $ 表示损失函数,根据反向传播的链式传导规则,反向传播公式如下:
从公式 (5)
中可以看出,反向传播也是两条路径,其中之一直接将信息回传,另一条会经过所有的带权重层。另外可以注意到第二项的值在一个 mini-batch
中不可能一直是 -1
,也就是说回传的梯度不会消失,不论网络中的权值的值再小都不会发生梯度消失现象。
3、On the Importance of Identity Skip Connection
考虑恒等映射的重要性。假设将恒等映射改为 \(h(x_{l}) = \lambda_{l}x_{l})\),则:
像公式 (4)
一样递归的调用公式 (3)
,得:
其中,\(\hat{F}\) 表示将标量合并到残差函数中,与公式 (5)
类似,反向传播公式如下:
与公式 (5)
不同,公式 (8)
的第一个加法项由因子 \(\prod_{i=l}^{L-1}\lambda_{i}\) 进行调节。对于一个极深的网络(\(L\) 极大),考虑第一个连乘的项,如果所有的 \(\lambda\) 都大于 1
,那么这一项会指数级增大;如果所有 \(\lambda\) 都小于 1
,那么这一项会很小甚至消失,会阻断来自 shortcut
的反向传播信号,并迫使其流过权重层。本文通过实验证明这种方式会对模型优化造成困难。
另外其他不同形式的变换映射也都会阻碍信号的有效传播,进而影响训练进程。
4、On the Usage of Activation Functions
第 3
章考察使用不同形式映射(见图 2
)来验证函数 \(h\) 是恒等映射的重要性,这章讨论公式(2)
中的 \(f\),如果 \(f\) 也是恒等映射,网络的性能会不会有所提升。通过调节激活函数 (ReLU and/or BN
) 的位置,来使 \(f\) 是恒等映射。图 4
展示了激活函数在不同位置的残差单元结构图去。
图
4(e)
的”预激活“操作是本文提出的一种对于深层残差网络能够更有效训练的网络结构(ResNet v2
)。
4.1、Experiments on Activation
本章,我们使用 ResNet-110
和 164
层瓶颈结构(称为 ResNet-164
)来进行实验。瓶颈残差单元包含一个 \(1\times 1\) 的层来降维,一个 \(3\times 3\) 的层,还有一个 \(1\times 1\) 的层来恢复维度。如 ResNet
论文中描述的那样,它的计算复杂度和包含两个 \(3\times 3\) 卷积层的残差单元相似。
BN after addition
效果比基准差,BN 层移到相加操作后面会阻碍信号传播,一个明显的现象就是训练初期误差下降缓慢。
ReLU before addition
这样组合的话残差函数分支的输出就一直保持非负,这会影响到模型的表示能力,而实验结果也表明这种组合比基准差。
Post-activation or pre-activation
原来的设计中相加操作后面还有一个 ReLU
激活函数,这个激活函数会影响到残差单元的两个分支,现在将它移到残差函数分支上,快捷连接分支不再受到影响。具体操作如图 5
所示。
根据激活函数与相加操作的位置关系,我们称之前的组合方式为“后激活(post-activation
)”,现在新的组合方式称之为“预激活(pre-activation
)”。原来的设计与预激活残差单元之间的性能对比见表 3
。预激活方式又可以分为两种:只将 ReLU
放在前面,或者将 ReLU
和 BN
都放到前面,根据表 2
中的结果可以看出 full pre-activation
的效果要更好。
4.2、Analysis
使用预激活有两个方面的优点:1) \(f\) 变为恒等映射,使得网络更易于优化;2)使用 BN
作为预激活可以加强对模型的正则化。
Ease of optimization
这在训练 1001
层残差网络时尤为明显,具体见图 1。使用原来设计的网络在起始阶段误差下降很慢,因为 \(f\) 是 ReLU
激活函数,当信号为负时会被截断,使模型无法很好地逼近期望函数;而使用预激活网络中的 \(f\) 是恒等映射,信号可以在不同单元直接直接传播。本文使用的 1001
层网络优化速度很快,并且得到了最低的误差。
\(f\) 为 ReLU
对浅层残差网络的影响并不大,如图 6-right
所示。本文认为是当网络经过一段时间的训练之后权值经过适当的调整,使得单元输出基本都是非负,此时 \(f\) 不再对信号进行截断。但是截断现象在超过 1000
层的网络中经常发生。
Reducing overfitting
观察图 6-right
,使用了预激活的网络的训练误差稍高,但却得到更低的测试误差,本文推测这是 BN
层的正则化效果所致。在原始残差单元中,尽管BN
对信号进行了标准化,但是它很快就被合并到捷径连接(shortcut
)上,组合的信号并不是被标准化的。这个非标准化的信号又被用作下一个权重层的输入。与之相反,本文的预激活(pre-activation
)版本的模型中,权重层的输入总是标准化的。
5、Results
表 4
、表 5
分别展示了不同深层网络在不同数据集上的表现。使用的预激活单元的且更深层的残差网络(ResNet v2
)都取得了最好的精度。
6、结论
恒等映射形式的快捷连接和预激活对于信号在网络中的顺畅传播至关重要。
参考资料
- [DL-架构-ResNet系] 002 ResNet-v2
- Identity Mappings in Deep Residual Networks(译)
- Identity Mappings in Deep Residual Networks
Backbone 网络-ResNet v2 详解的更多相关文章
- Centos7 配置网络步奏详解
Centos7 配置网络步奏详解 编辑网卡配置文件 vi /etc/sysconfig/network-script/ifcfg-ens01 备注:这里的ens01不是所有系统都叫这个,有的可能叫其他 ...
- Android热门网络框架Volley详解[申明:来源于网络]
Android热门网络框架Volley详解[申明:来源于网络] 地址:http://www.cnblogs.com/caobotao/p/5071658.html
- CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
CAS (6) -- Nginx代理模式下浏览器访问CAS服务器网络顺序图详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1. ...
- Iperf3网络性能测试工具详解教程
Iperf3网络性能测试工具详解教程 小M 2020年4月17日 运维 本文下载链接 [学习笔记]Iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保 ...
- 【山外笔记-工具框架】iperf3网络性能测试工具详解教程
[山外笔记-工具框架]iperf3网络性能测试工具详解教程 本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...
- VMware 虚拟机的网络连接方式详解
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作 ...
- VMware虚拟网络连接模式详解(NAT,Bridged,Host-only)
序言 如果你使用VMware安装虚拟机,那么你必定会选择网络连接,那么vmware提供主要的3种网络连接方式,我们该如何抉择呢?他们有什么不同呢?这篇我们就做一个深入. 首先打开虚拟机设置里面的网络适 ...
- 网络基础 cookie详解
cookie详解 by:授客 QQ:1033553122 cookie干嘛用的? 参见文章http 会话(session)详解: 网络基础 http 会话(session)详解 cookie分类 ...
- 【转】VMware虚拟机三种网络模式超详解
[原文]https://www.toutiao.com/i6596228488666022403/ 由于Linux目前很热门,越来越多的人在学习Linux,但是买一台服务放家里来学习,实在是很浪费.那 ...
- java网络编程(UDP详解)
UDP详解 一,TCP/IP协议栈中,TCP协议和UDP协议的联系和区别? 联系: TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服 ...
随机推荐
- 使用docker-compose.yml安装rabbitmq集群
1.拉取镜像 集群中每个节点都需要执行 docker pull rabbitmq:3.8.3-management 2.上传docker-compose文件,设置可执行权限 相关文地址:https:/ ...
- 记一次TIME_WAIT网络故障
文章转载自:https://blog.51cto.com/dngood/988968
- 3_Nginx
一. Nginx介绍 1.1 引言 为什么要学Nginx 问题1: 客户端到底要将请求发送给哪台服务器 问题2: 如果所有客户端的请求都发送给了服务器1 问题2: 客户端发送的请求可能是申请动态资源的 ...
- 持续集成指南:GitLab 的 CI/CD 工具配置与使用
前言 写代码这项工作,本质就是将工作自动化,减少手工操作提供效率,因为人的本质都是懒狗,程序员也不能例外,为了各种意义的效率提升(懒),我们需要持续集成工具,将代码测试.编译.发布这些重复性很高的工作 ...
- Tubian-Win上线!Tubian官方的Windows软件适配项目
Sourceforge.net下载:https://sourceforge.net/projects/tubian/ 123网盘下载: https://www.123pan.com/s/XjkKVv- ...
- windows C++ 异常调用栈简析
楔子 以win11 + vs2022运行VC++ 编译观察的结果. 如果安装了Visual Studio 2022,比如安装在D盘,则路径: D:\Visual Studio\IDE\VC\Tools ...
- bat批处理命令语法总结
::1. 关闭回显表示不显示命令本身只显示输出部分 @echo off ::2. 设置变量注意等号间不能有空格 set num=10 ::3. 使用变量 echo %num% ::4. call 调用 ...
- 洛谷 P5607 [Ynoi2013] 无力回天 NOI2017
人生第一道Ynoi,开心 Description https://www.luogu.com.cn/problem/P5607 Solution 拿到这个题,看了一下,发现询问要求最大异或和,怎么办? ...
- 创建Vue工程常用的命令
创建一个vue项目的步骤 1.创建一个名称为myapp的工程 vue init webpack myapp 2.进入工程目录 cd myapp 3.安装 vue-router npm install ...
- 十一、Pod的健康检查-探针
Pod 的健康检查-探针 一.Pod 的健康检查-探针 1.1.探针基本概念 探针是由 kubelet 对容器执行的定期诊断.要执行诊断,kubelet 调用由容器实现的 Handler 有三种类型 ...