百面AI,致力构建起最强AI算法面经!欢迎关注我们!
首先在了解ResNet
之前,我们需要知道目前CNN
训练存在两大问题:
、
BN等Tricks)处理了。ResNet本身是一种拟合残差的结果,让网络学习任务更简单,可以有效地解决梯度弥散的问题。
ResNet网络变种包括ResNet V1、ResNet V2、ResNext`以及Res2Net网络等。
ResNet残差块的结构如图所示。
ResNet
网络的优点有:
1000
层以上。同样,ResNet
网络的设计技巧有:
通过分析ResNet
网络可以知道,ResNet
可以被看做许多路径的集合,通过研究ResNet
的梯度流表明,网络训练期间只有短路径才会产生梯度流,深的路径不是必须的,通过破坏性试验可以知道,路径之间是相互依赖的,这些路径类似集成模型,其预测准确率平滑地与有效路径的数量有关。
由于ResNet
网络中存在很多short cut
,所以ResNet
又可以被视为很多路径的集合网络。相关实验表明,在ResNet
网络训练期间,只有短路径才会产生梯度流动,说明深的路径不是必须的。通过破坏网络中某些short cut
实验可以看出,在随机破坏了ResNet
网络中的某些short cut
后,网络依然可以训练,说明在网络中,即使这些路径是共同训练的,它们也是相互独立,不相互依赖的,可以将这些路径理解为集成模型,这也是理解ResNet
网络的性能较好的一个方向。
首先,需要看下组对于主干以及分支网络的各种设计:
模块,
移动到了
之后,
.
移动到
之前,则
移动到残差块之前,
和
移动到残差块之前,
在图中,
会改变数据的分布,
会改变值的大小,上面五个图都是work的,但是第五个图效果最好,具体效果如下:
具体效果为什么第五个好呢?先看下面的梯度求导吧!
推导一下ResNet
的前向与反向,步骤如下:
ResNet
的公式:在这里,简化以上公式,令所有identity分支都是
以及
,那么我们就可以得到:
则,不失一般性:
我们从上面公式可以看到深层
与浅层
之间的关系;则,假设损失函数为
,那么反向传播公式为:
而
的值的值不会轻易抵消。因为在一个mini-batch中,
不会一直都是-1
从上式我们可以看到,ResNet
有效得防止了:“当权重很小时,梯度消失的问题”。同时,上式中的优秀特点只有在假设
以及
成立时才有效。所以,ResNet需要尽量保证亮点:
因此,在上面五组实验中,第五个(图e)效果最好的原因是:1) 反向传播基本符合假设,信息传递无阻碍;2)BN层作为pre-activation,起到了正则化的作用。
对于图(b),是因为
在
之后会改变分布,影响传递,出现训练初期误差下降缓慢的问题!
对于图(c),是因为这样做导致了
的分支的分布为负,影响了模型的表达能力。
对图(d),与图(a)在网络上相当于是等价的,指标也基本相同。
而除了像是从梯度反传的角度说明 ResNet
比较好的解决了梯度弥散的问题,还有一些文章再探讨这些个问题。比如The Shattered Gradients Problem: If resnets are the answer, then what is the question? 这篇工作中认为,即使BN过后梯度的模稳定在了正常范围内,但梯度的相关性实际上是随着层数增加持续衰减的。
而经过证明,ResNet可以有效减少这种相关性的衰减。对于
层的网络来说,没有残差表示的Plain Net梯度相关性的衰减在
,而ResNet的衰减却只有
。这也验证了ResNet论文本身的观点,网络训练难度随着层数增长的速度不是线性,而至少是多项式等级的增长
在现有的经验上,网络的设计一般都是往深处设计,作者认为一味的增加深度不是一个有效的方法,residual block
的宽度对网络的性能同样很有帮助,所以切入点在每一层的宽度上。
上图为论文中的图,原始的ResNet
如图(a)与(b)所示,(b)是使用了bottleneck
的residual block
,而(c)与(d)是WRN
的结构,主要是通道在原始ResNet
通道数上加宽了k
倍。
具体参数如下表:
而随着网络深度与宽度的加深,训练参数量过大会导致过拟合,作者提出在residual block
里面加入dropout
,也是就开头讲到的(d)。
从实验结果看,也能说明,当网络层数depth
较浅,或者宽度 k
较小时,网络还不需要加dropout
,但是当层数增加,宽度增加,参数量指数增大时,加入dropout
可以有效防止model
的overfitting
。
在ResNet
提出deeper
可以带来网络性质提高的同时,WideResNet
则认为Wider
也可以带来深度网络性能的改善。为了打破或deeper
,或wider
的常规思路,ResNeXt则认为可以引入一个新维度,称之为cardinality
。
上图中左边为ResNet
结构,右边为cardinality=32
的ResNeXt
结构(也就是含32个group
)。其等效结构如下:
目前现有的特征提取方法大多都是用分层方式表示多尺度特征。分层方式即要么对每一层使用多个尺度的卷积核进行提特征(如目标检测中的SPPNet
),要么就是对每一层提取特征进行融合(如FPN
)。
本文提出的Res2Net
在原有的残差单元结构中又增加了小的残差块,在更细粒度上,增加了每一层的感受野大小。Res2Net
也可以嵌入到不同的特征提取网络中,如ResNet, ResNeXt
等等。
在Res2Net
中提出了一个新维度叫做scale
。Res2Net
的结构如下图所示:
上图左边是最基本的卷积模块。右图是针对中间的3x3卷积进行的改进。
首先对经过1x1输出后的特征图按通道数均分为
)(图中
))块,每一部分是
每一个
都会具有相应的3x3卷积,由
表示。我们用
表示
的输出。
特征子集
与
的输出相加,然后送入
。为了在增加
的同时减少参数,我们省略了
的3x3卷积,这样也可以看做是对特征的重复利用。
当然,Res2Net
可以与像SE
模块进行复用。
最后,论文中也给出了关于depth
,cardinality
以及scale
的效果对比,如下图所示:
作者首先提出了,在传统网络的设计的中可能会存在Representational Bottleneck问题,并且该问题会导致模型性能的降低。其次,通过数学和实验研究探讨网络中出现的Representational Bottleneck问题。
论文中,先给定一个深度为L层的网络,通过
维的输入
可以得到个被编码为
的特征,其中
为权重。
这里称
的层为expand层。称
的层为condense层。
为第i个点出的非线性函数,比如带有BN层的ReLU层,每个
表示第i个点非线性,如带有批归一化(BN)层的ReLU,
为Softmax函数。
当训练模型的时候,每一次反向传播都会通过输入得到的输出与Label矩阵(
)之间的Gap来进行权重更新。
因此,这便意味着Gap的大小可能会直接影响特征的编码效果。这里对CNN的公式做略微的改动为
;式中
和
分别为卷积运算和第i个卷积层核的权值。用传统的
重新排序来重写每个卷积,其中
和
重新排序的特征,这里将第个特征写成:
作者抛出了两个问题:
,其秩以
的秩为界,即
。由于输入维度
小于输出维度
,编码后的特征由于秩不足而不能完全表征所有类别。这解释了Softmax层的一个Softmax bottleneck实例。能否通过引入非线性函数来缓解Softmax层的秩不足,性能得到了很大的改善?
秩来缓解中间层的Representational bottleneck问题? 给定某一层生成的第
个特征,
,
的阈值为
(假设
)。这里
,其中
表示与另一个函数
的点乘。在满足不等式
的条件下,特征的秩范围为:
因此,可以得出结论,秩范围可以通过增加
的秩和用适当的用具有更大秩的函数
来替换展开,如使用
或
激活函数,这与前面提到的非线性的解决方法类似。 当
固定时,如果将特征维数
调整到接近
,则上式可以使得秩可以无限接近到特征维数。对于一个由连续的1×1,3×3,1×1卷积组成的bottleneck块,通过考虑bottleneck块的输入和输出通道大小,用上式同样可以展开秩的范围。
针对Layer-Level秩
作者生成一组由单一层组成的随机网络
:其中
,
随机采样,
则按比例进行调整,来判断Layer-Level秩。
特征归一化后的秩
是由每个网络产生。为了研究
而广泛使用了非线性函数。对于每种标准化Channel大小,作者以通道比例
在[0.1, .0]之间 和每个非线性进行10,000个网络的重复实验。图a和b中的标准化秩的展示图。
针对通道配置
随机生成具有expand层(即
)的L-depth网络,以及使用少量的condense层的设计原则使得
,这里使用少量的condense层是因为condense层直接降低了模型容量。在这里作者将expand层数从0改变为
,并随机生成网络。例如,一个expand层数为0的网络,所有层的通道大小都相同(除了stem层的通道大小)。作者对每个随机生成的10,000个网络重复实验,并对归一化秩求平均值。结果如图c和d所示。
此外,作者测试了采样网络的实际性能,每个配置有不同数量的expand层,有5个bottleneck,stem通道大小为32。数据集用CIFAR100,在表1中给出了5个网络的平均准确率。
因此,作者这里给出了扩展给定网络秩的设计原则:
结论:表征瓶颈(representation bottleneck)将发生在这些扩展层和倒数第2层
解决方案:
- 中间层处理;扩大卷积层的输入通道大小,替换ReLU6s来细化每一层
- 替换ReLU6s来细化每一层;作者扩大了倒数第2层的输入通道大小,并替换了ReLU6
关于ResNet
的变种网络,之后再进行变种的其实还有蛮多的,后面我们会说到提高感受野的时候,再进行扩展,如unipose(魔改res2net)等。还有一些比较硬核的如HO-ResNet,结合了数值微分方程相关的,各位感兴趣的可以看看,基本上面试上问到的可能性不大。
还有一些网络,可能我也没有看到,欢迎各位在留言区留言,我们一起维护好这个答案。
你好,我是灿视。目前我正致力于做出最强的AI算法面经。如果你从业算法,或者打算从业算法,可以关注我们哦!