赞
踩
最近在看论文的时候,总是时不时会看到residual block、bottleneck、skip connection等术语,于是花了点时间找了几篇高质量的问答贴看了一下(链接附在本文末尾),并将一些比较重要的点在此记录一下。它们其实都和一篇卷积神经网络经典论文有关:Deep Residual Learning for Image Recognition,也就是大名鼎鼎的ResNet。
residual block直译为残差块。在ResNet论文中,residual block有两种形式,一种叫BasicBlock,一种叫Bottleneck,如下图所示:
其中,左图是BasicBlock,右图是Bottleneck。图中的⊕表示逐元素的加法,这就要求相加的两个张量维度必须完全一致。比如一个tensor A56×56×64与一个tensor B56×56×64相加,有A⊕B=C,得到的tensor C维度也是56×56×64。BasicBlock的输入和输出的维度是一样的,而Bottleneck结构通过1×1的卷积来进行升维/降维,其输出维度是输入维度的4倍。
residual block与普通的Plain Net的区别就在于它多了一个skip connection(跳连接)的操作,也就是上图中主路右侧的弧线。使用skip connection可以有效减少梯度弥散(Gradient Vanishing)和网络模型退化的问题。因此,这种结构可以用来构建非常深的网络(关于skip connection的详细描述,可以参考这篇文章)。当去掉了这些skip connection之后,ResNet就与经典VGG网络的设计思路一样了,都是在间隔一定的层数之后,空间上/2(下采样)但深度翻倍。需要注意的是,深度上和空间上维度的升降是分开进行的。
说到梯度弥散/消失,Batch Normalization(批标准化)就是一种常用的解决方法(关于Batch Normalization,可以参考Batch Normalization的通俗解释、什么是批标准化 (Batch Normalization)、谈一谈Skip Connection和Normalization)。那么,既然Batch Normalization也可以解决梯度消失问题,那为什么还要skip connection呢?这是因为,即使Batch Normalization过后梯度的模稳定在了正常范围内,但梯度的相关性实际上是随着层数增加持续衰减的。而经过证明,ResNet可以有效减少这种相关性的衰减。对于拥有L层的网络来说,没有残差表示的Plain Net梯度相关性的衰减系数为1/2L,而ResNet的衰减却只有1/√L。
关于skip connection,还有一张更为形象生动的说明图,如下图所示。正常来说,梯度需要一层一层地往前传递,而由于前向传播过程中使用的激活函数使传递的信息带有损失,所以在回传过程中梯度也是会逐渐减小的(也就可能导致梯度消失)。而skip connection就像是直接又开了一个快车道,它可以直接把梯度回传到某个位置,这样回传梯度的损失也就减小了。
除了上面对于skip connection的直观理解,这篇问答还提到了另外两种更为有说服力的看法:
skip connection的用法有很多,不仅仅局限于ResNet中在某个残差块内的连接,它还可以在不同的块之间,连接的间隔也可以是很多层,比如DenseNet。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。