ResNet残差网络的理解
来源:互联网 发布:qq空间模拟登录 php 编辑:程序博客网 时间:2024/05/06 07:22
1:恒等映射是指集合A到A自身的映射I,若使得I(x)=x对于一切x∈A成立,这样的映射I被称为A上的恒等映射
论文地址:Deep Residual Learning for Image Recognition
ResNet——MSRA何凯明团队的Residual Networks,在2015年ImageNet上大放异彩,在ImageNet的classification、detection、localization以及COCO的detection和segmentation上均斩获了第一名的成绩,而且Deep Residual Learning for Image Recognition也获得了CVPR2016的best paper,实在是实至名归。就让我们来观摩大神的这篇上乘之作。
ResNet最根本的动机就是所谓的“退化”问题,即当模型的层次加深时,错误率却提高了,如下图:
但是模型的深度加深,学习能力增强,因此更深的模型不应当产生比它更浅的模型更高的错误率。而这个“退化”问题产生的原因归结于优化难题,当模型变复杂时,SGD的优化变得更加困难,导致了模型达不到好的学习效果。
针对这个问题,作者提出了一个Residual的结构:
即增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化 会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。
这个Residual block通过shortcut connection实现,通过shortcut将这个block的输入和输出进行一个element-wise的加叠,这个简单的加法并不会给网络增加额外的参数和计算量,同时却可以大大增加模型的训练速度、提高训练效果,并且当模型的层数加深时,这个简单的结构能够很好的解决退化问题。
接下来,作者就设计实验来证明自己的观点。
首先构建了一个18层和一个34层的plain网络,即将所有层进行简单的铺叠,然后构建了一个18层和一个34层的residual网络,仅仅是在plain上插入了shortcut,而且这两个网络的参数量、计算量相同,并且和之前有很好效果的VGG-19相比,计算量要小很多。(36亿FLOPs VS 196亿FLOPs,FLOPs即每秒浮点运算次数。)这也是作者反复强调的地方,也是这个模型最大的优势所在。
模型构建好后进行实验,在plain上观测到明显的退化现象,而且ResNet上不仅没有退化,34层网络的效果反而比18层的更好,而且不仅如此,ResNet的收敛速度比plain的要快得多。
对于shortcut的方式,作者提出了三个选项:
A. 使用恒等映射,如果residual block的输入输出维度不一致,对增加的维度用0来填充;
B. 在block输入输出维度一致时使用恒等映射,不一致时使用线性投影以保证维度一致;
C. 对于所有的block均使用线性投影。
对这三个选项都进行了实验,发现虽然C的效果好于B的效果好于A的效果,但是差距很小,因此线性投影并不是必需的,而使用0填充时,可以保证模型的复杂度最低,这对于更深的网络是更加有利的。
进一步实验,作者又提出了deeper的residual block:
实际中,考虑计算的成本,对残差块做了计算优化,即将两个3x3的卷积层替换为1x1 + 3x3 + 1x1, 如下图。新结构中的中间3x3的卷积层首先在一个降维1x1卷积层下减少了计算,然后在另一个1x1的卷积层下做了还原,既保持了精度又减少了计算量。
这相当于对于相同数量的层又减少了参数量,因此可以拓展成更深的模型。于是作者提出了50、101、152层的ResNet,而且不仅没有出现退化问题,错误率也大大降低,同时计算复杂度也保持在很低的程度。
这个时候ResNet的错误率已经把其他网络落下几条街了,但是似乎还并不满足,于是又搭建了更加变态的1202层的网络,对于这么深的网络,优化依然并不困难,但是出现了过拟合的问题,这是很正常的,作者也说了以后会对这个1202层的模型进行进一步的改进。(想想就可怕。)
1:不收敛问题,有一些方法可以弥补,如归一初始化,各层输入归一化,使得可以收敛的网络的深度提升为原来的十倍。然而,虽然收敛了,但网络却开始退化了,即增加网络层数却导致更大的误差, 如下图。 这种deep plain net收敛率十分低下。
的确,通过在一个浅层网络基础上叠加y=x的层(称identity mappings,恒等映射),可以让网络随深度增加而不退化。这反映了多层非线性网络无法逼近恒等映射网络。
但是,不退化不是我们的目的,我们希望有更好性能的网络。 resnet学习的是残差函数F(x) = H(x) - x, 这里如果F(x) = 0, 那么就是上面提到的恒等映射。事实上,resnet是“shortcut connections”的在connections是在恒等映射下的特殊情况,它没有引入额外的参数和计算复杂度。 假如优化目标函数是逼近一个恒等映射, 而不是0映射, 那么学习找到对恒等映射的扰动会比重新学习一个映射函数要容易。
从下图可以看出,残差函数一般会有较小的响应波动,表明恒等映射是一个合理的预处理。
残差块的结构如下图,
它有二层,如下表达式,其中σ代表非线性函数ReLU
然后通过一个shortcut,和第2个ReLU,获得输出y
当需要对输入和输出维数进行变化时(如改变通道数目),可以在shortcut时对x做一个线性变换Ws,如下式,然而实验证明x已经足够了,不需要再搞个维度变换,除非需求是某个特定维度的输出,如文章开头的resnet网络结构图中的虚线,是将通道数翻倍。
实验证明,这个残差块往往需要两层以上,单单一层的残差块(y=W1x+x)并不能起到提升作用。
残差网络的确解决了退化的问题,在训练集和校验集上,都证明了的更深的网络错误率越小,如下图
- 关于残差网络Resnet的理解
- ResNet残差网络的理解
- ResNet残差网络
- 残差网络resnet
- 深度残差网络:ResNet
- 深度残差网络 ResNet
- 残差网络resnet学习
- 残差网络resnet学习
- 残差网络resnet学习
- tensorflow搭建自己的残差网络(ResNet)
- 残差resnet网络原理详解
- 深度残差网络(ResNet)浅析
- 深度残差网络(ResNet)浅析
- 残差网络的理解
- 从零开始搭建 ResNet 之 残差网络(持续更新)
- 对ResNet的理解
- 对ResNet的理解
- ResNet, AlexNet, VGG, Inception: 理解各种卷积网络的结构
- DL multi GPUs problem
- 含有不同正整数的数组是否可以分成两个和相等的数组JS算法实现
- 错失VIPKID,俞敏洪组团来教育领域“淘宝”
- 在一线城市,有多少人正在“被创业”?
- 比较大小
- ResNet残差网络的理解
- Struts 入门
- linux系统下的软件的使用
- C/C++经典面试题
- codeforces 867 C Ordering Pizza
- dubbo架构
- sort
- 虚拟机网络设置
- 【树状数组】【单点修改区间求和】【区间修改单点查询】【单点修改区间最大值查询】