ResNet模型学习笔记

从经验来看,网络的深度对模型的性能至关重要,当增加网络层数后,网络可以进行更加复杂的特征模式的提取,所以当模型更深时理论上可以取得更好的结果。但是更深的网络其性能一定会更好吗?实验发现深度网络出现了退化问题(Degradation problem):网络深度增加时,网络准确度出现饱和,甚至出现下降。深层网络存在着梯度消失或者爆炸的问题,这使得深度学习模型很难训练。但是现在已经存在一些技术手段如BatchNorm来缓解这个问题。因此,出现深度网络的退化问题是非常令人诧异的。

深度网络的退化问题至少说明深度网络不容易训练。但是我们考虑这样一个事实:现在你有一个浅层网络,你想通过向上堆积新层来建立深层网络,一个极端情况是这些增加的层什么也不学习,仅仅复制浅层网络的特征,即这样新层是恒等映射(Identity mapping)。在这种情况下,深层网络应该至少和浅层网络性能一样,也不应该出现退化现象。

深层网络难以实现恒等变换:与传统的机器学习相比,深度学习的关键特征在于网络层数更深、非线性转换(激活)、自动的特征提取和特征转换,其中,非线性转换是关键目标,它将数据映射到高纬空间以便于更好的完成“数据分类”。随着网络深度的不断增大,所引入的激活函数也越来越多,数据被映射到更加离散的空间,此时已经难以让数据回到原点(恒等变换)。或者说,神经网络将这些数据映射回原点所需要的计算量,已经远远超过我们所能承受的。

因此提出了残差学习:对于一个堆积层结构(几层堆积而成)当输入为x时,其学习到的特征记为H(x),现在我们希望其可以学习到残差F(x)=H(x)-x,这样其实原始的学习特征是F(x)+x。之所以这样是因为残差学习相比原始特征直接学习更容易。当残差为0时,此时堆积层仅仅做了恒等映射,至少网络性能不会下降,实际上残差不会为0,这也会使得堆积层在输入特征基础上学习到新的特征,从而拥有更好的性能。残差学习的结构如图4所示。这有点类似与电路中的“短路”,所以是一种短路连接(shortcut connection)。

普通神经网络前向传播。前向传播将数据特征逐层抽象,最终提取出完成任务所需要的特征/表示。

a^{l_{2}}=F(a^{l_{2}-1})=F(F(a^{l_{2}-2}))=...

残差网络前向传播。输入信号可以从任意低层直接传播到高层。由于包含了一个天然的恒等映射,一定程度上可以解决网络退化问题。

a^{l_{2}}=a^{l_{2}-1}+F(a^{l_{2}-1})=(a^{l_{2}-2}+F(a^{l_{2}-2}))+F(a^{l_{2}-1})=...=a^{l_{1}}+\sum_{i=l_{1}}^{l_{2}-1}F(a^{i})

最终的损失\epsilon对某低层输出的梯度可以展开为

普通神经网络反向传播。梯度涉及两层参数交叉相乘,可能会在离输入近的网络中产生梯度消失的现象。

\frac{\partial \epsilon }{\partial a^{l_{1}}}=\frac{\partial \epsilon }{\partial a^{l_{2}}}\frac{\partial a^{l_{2}}}{\partial a^{l_{1}}}=\frac{\partial \epsilon }{\partial a^{l_{2}}}\frac{\partial a^{l_{2}}}{\partial a^{l_{2}-1}}...\frac{\partial a^{l_{1}+1}}{\partial a^{l_{1}}}

残差网络反向传播\frac{\partial\epsilon }{\partial a^{l_{2}}}表明,反向传播时,错误信号可以不经过任何中间权重矩阵变换直接传播到低层,一定程度上可以缓解梯度弥散问题(即便中间层矩阵权重很小,梯度也基本不会消失)。

 \frac{\partial \epsilon}{\partial a^{l_{1}}}=\frac{\partial \epsilon}{\partial a^{l_{2}}}(1+\frac{\partial \sum_{i=l_{1}}^{l_{2}-1}F(a^{i})}{a^{l_{1}}})

所以可以认为残差连接使得信息前后向传播更加顺畅。

从集成学习的角度,残差网络可以被看作是一系列路径集合组装而成的一个集成模型,其中不同的路径包含了不同的网络层子集。

Andreas Veit等人展开了几组实验,在测试时,删去残差网络的部分网络层(即丢弃一部分路径)、或交换某些网络模块的顺序(改变网络的结构,丢弃一部分路径的同时引入新路径)。实验结果表明,网络的表现与正确网络路径数平滑相关(在路径变化时,网络表现没有剧烈变化),这表明残差网络展开后的路径具有一定的独立性和冗余性,使得残差网络表现得像一个集成模型。

作者还通过实验表明,残差网络中主要在训练中贡献了梯度的是那些相对较短的路径,从这个意味上来说,残差网络并不是通过保留整个网络深度上的梯度流动来抑制梯度弥散问题。

链接:https://www.zhihu.com/question/53224378/answer/2296306308


ResNet的网络结构

ResNet网络是参考了VGG19网络,在其基础上进行了修改,并通过短路机制加入了残差单元。

ResNet网络详解:n-layer确定的情况下,称i阶段为convi_x过程,i∈{2,3,4,5}

ResNet使用两种残差单元,图左18,34-layer的基本模块记为Basicblock,包含2次卷积;图右50,101,152layer的基本模块记为Bottleneck,包含3次卷积。

Bottleneck中使用了1×1卷积层。如输入通道数为256,1×1卷积层会将通道数先降为64,经过3×3卷积层后,再将通道数升为256。1×1卷积层的优势是在更深的网络中,用较小的参数量处理通道数很大的输入。

对于深度网络来说:

conv2_x阶段堆叠的残差块完全相同。 因为输入到输出是56→56,无下采样过程。

conv3_x至conv5_x阶段堆叠的第一个残差块和其余残差块是不同的。

解释:conv3_x至conv5_x每个阶段均对特征图像大小进行下采样。以50layer–conv3_x为例,下采样过程发生在4个堆叠残差块中的第一个,因为这里实现了特征图尺寸从56→28的过程;而对于其余3个残差块,特征图的维度全部是28→28,因此这3个的结构是完全相同的。

(channel)、高(height)和宽(width),即(C,H,W)

BTNK1:降采样残差模块

BTNK2:残差模块

stage1中的btnk1模块等同于btnk2模块。(因为Stage 0中刚刚对网络输入进行了卷积和最大池化,还没有进行残差学习,此时直接下采样会损失大量信息;而后3个stage直接进行下采样时,前面的网络已经进行过残差学习了,所以可以直接进行下采样。)

stage2-4中的btnk1模块进行了下采样,输入尺寸是输出尺寸的2倍。

链接:ResNet50网络结构图及结构详解 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值