Res Net学习笔记

为什么会提出Res Net?

实际上,越深层次的网络会学到的特征也越核心,所以对于深度神经网络来说,我们是希望网络层次越深越好的。但人们在实验过程中却发现了一个问题,退化(degradation)
什么是退化问题?对浅层网络逐渐叠加层数后,模型在训练集和测试集的性能按理说应该变好,因为模型复杂度提高了,表达能力更强了,可以对潜在的映射关系拟合得更好。退化就是相反情况,给网络叠加更多的层后,性能却快速下降的情况。
所以Res Net要解决的是深度神经网络的degradation问题。

我们纯直观上理解,给网络叠加更多层后,浅层网络的解空间应该是包含在深层网络解空间的。
在这里插入图片描述

图1 梯度下降法求解图

在这里我先引用一个人博客里的理解。

如果想再加网络层数,我们是需要将增加的层数变成恒等映射,其他层的权重原封不动的copy浅层网络,就可以获得与浅层网络一样的性能。

直白一点,后面加了很多层网络但是其输出值还是要和没加这么多层网络之前的输出值一样,恒等映射就是这个意思。
但是实际上实验却不尽人意,我们找到的解更差,想象上图中的解在加了深层次网路之后开始偏离那个圆心了。
怎么解决呢?

  1. 调整求解方法,比如初始化更好,换改进的梯度下降法等等
  2. 调整模型结构,让模型更易于优化。

何凯明大神采用了后者,更改模型结构。
在这里插入图片描述

图2 残差块结构图

想想这是一个比较深层次网络中的一环,我们称之为block,我们原来的希望是学习一种映射F(x),通过不断更改其中的权重值,最终学到的映射是我们最想要的H(x)。但是实际中,通过这样的想法,我们并不是很好优化,找到的解也有可能不是很好。于是乎,作者就想着,与其让F(x)去学习H(x),不如让F(x)去学习H(x)-x。举个例子,如果我希望这个block学习一种恒等映射,那么H(x)=x,那么我学习的F(x)就要尽可能接近于0,相比于原来,我的F(x)是直接要学习x的。作者认为这样更易于优化
(其实我觉得仅仅这样理解还是很浅显的,还是没有说明白,为什么在激活函数之前加x就使得网络好像更好优化了)

Residual Block的设计

F(x)+x构成的block称之为Residual Block,即残差块,如上图所示,多个残差块串联而成会构成ResNet。一个残差块又分两条路径F(x)和x,F(x)路径拟合残差,x路径为恒等映射,路径有可以称之为“shortcut”,要求参与运算的F(x)和x的尺寸要相同,不然不好做相加运算。
在原论文中,残差路径分为两种,一种有bottleneck结构,即下图中的1×1卷积层,用于先降维再升维,主要出于降低计算复杂度的显示考虑。称之为“bottleneck block”,另一种没有bottleneck结构,称之为“basic block”。basic block由2个3×3卷积层构成。
在这里插入图片描述

图3 残差路径图

shortcut路径大致也可以分为2种,取决于残差路径是否改变了feature map的数量和尺寸,一种是将输入x原封不动地输出,另一种则需要经过1×1卷积来升维或者降维,主要作用是将输出与F(x)路径地输出保持一致性。
在这里插入图片描述

ResNet的网络结构

在这里插入图片描述

这里把Res-net和ResNet101特别提出,主要因为它们的出镜率很高,所以需要特别说明。
我们发现所有的网络都分成5大部分,分别是conv1,conv2_x,conv3_x,conv4_x,conv5_x,
101层网络仅仅指的是卷积或者全连接层,而激活层或者pooling层并没没有计算在内。
1+(3+4+23+3)×3+1=101(层)
ResNet的设计有如下特点:

  • 与plain net相比,ResNet多了很多“旁路”,即shortcut路径,其首尾圈出的layers构成一个Residual Block
  • ResNet中,所有的Residual Block都没有pooling层,降采样是通过conv的stride实现的
  • 分别在conv3_1、conv4_1和conv5_1 Residual Block,降采样1倍,同时feature map数量增加1倍,如图中虚线划定的block
  • 通过Average Pooling得到最终的特征,而不是通过全连接层
  • 每个卷积层之后都紧接着BatchNorm layer,为了简化,图中并没有标出。

ResNet结构非常容易修改和扩展,通过调整block内的channel数量以及堆叠的block数量,就可以很容易地调整网络的宽度和深度,来得到不同表达能力的网络,而不用过多地担心网络的“退化”问题,只要训练数据足够,逐步加深网络,就可以获得更好的性能表现

小结

ResNet的动机在于解决“退化”问题,残差块的设计让学习恒等映射变得容易,即使堆叠了过量的block,ResNet可以让冗余的block学习成恒等映射,性能也不会下降。所以,网络的“实际深度”是在训练过程中决定的,即ResNet具有某种深度自适应的能力。

参考博客

ResNet详解与分析
https://www.cnblogs.com/shine-lee/p/12363488.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值