ResNet-V2分析

ResNet-V2

Introduction

分析了在残差单元间的传播后,我们可以知道当我们用了恒等映射作为skip connection以及在addition之后做激活,信号在网络间的前向和后向传播可以直接从一个节点到另一个节点。
在残差神经网络的传播过程中,节点间的信息传递也十分重要,V2就在skip-connection以及activation在残差单元的位置做了全面的比较,并且提出了一个新的改进模型。在这里插入图片描述

y l = h ( x l ) + F ( x l , ω l ) y_l = h(x_l) + F(x_l, \omega_l) yl=h(xl)+F(xl,ωl)
x l + 1 = f ( y l ) x_{l+1} = f(y_l) xl+1=f(yl)

h(x) 是identity mapping, f是ReLu 函数。
如果h(x) 和 f(x)都是恒等映射,那么信号的传递会直接从一个节点到下一个节点,包括前向传递和后向传递。
恒等映射实现了最快的误差下降以及最低的训练误差。
放缩,gating,以及1*1的卷积做shortcut connection都会使训练误差上升。

在ResNet-V2中,提出了一个新的概念, pre-activation,也就是把激活函数(Relu以及BN)放在weight layer 之前,相比于传统的post-activation的概念来说,这样的概念创造了一个新的残差单元,这个设计提升了很多ResNet的性能。

Original Residual unit是:
y l = h ( x l ) + F ( x l , ω l ) y_l = h(x_l) + F(x_l, \omega_l) yl=h(xl)+F(xl,ωl)
x l + 1 = f ( y l ) x_{l+1} = f(y_l) xl+1=f(yl)

F是两个3*3的卷积层,f是Relu

假设我们把f 同样设置为恒等映射,也就是 x l + 1 ≡ y l x_{l+1}≡y_l xl+1yl, 这样我们就能将上述两个方程合并成

x l + 1 = x l + F ( x l , ω l ) x_{l+1} = x_l + F(x_l, \omega_l) xl+1=xl+F(xl,ωl)

那么我们递推下去之后,可以得到:
X L = x l + ∑ i = l L − 1 F ( x i , ω i ) X_L = x_l + \sum^{L-1}_{i=l}F(x_i, \omega_i) XL=xl+i=lL1F(xi,ωi)

任意深度的一层L都可以通过比他浅层的l层来加上他们之间累加的残差层得到。

这个递推式也可以让我们得到一个良好的后向传播的性质。我们把loss记做ε,根据链式法则,我们可以得到
∂ ϵ ∂ x l = ∂ ϵ ∂ x L ∂ x L ∂ x l = ∂ ϵ ∂ x L ( 1 + ∂ ϵ ∂ x l ∑ L − 1 i = l F ( x i , ω i ) ) \frac{\partial\epsilon}{\partial x_l} = \frac{\partial\epsilon}{\partial x_L}\frac{\partial x_L}{\partial x_l} = \frac{\partial\epsilon}{\partial x_L}(1+\frac{\partial\epsilon}{\partial x_l}\sum^{L-1}{i=l}F(x_i, \omega_i)) xlϵ=xLϵxlxL=xLϵ(1+xlϵL1i=lF(xi,ωi))

也就是说 ∂ ϵ ∂ x l \frac{\partial\epsilon}{\partial x_l} xlϵ可以通过分解得到两个相加式,一个是 ∂ ϵ ∂ x L \frac{\partial\epsilon}{\partial x_L} xLϵ, 直接信息传递,不考虑其他任何中间层的权重,另一个是 ∂ ϵ ∂ x L ( ∂ ϵ ∂ x l ∑ L − 1 i = l F ( x i , ω i ) ) \frac{\partial\epsilon}{\partial x_L}(\frac{\partial\epsilon}{\partial x_l}\sum^{L-1}{i=l}F(x_i, \omega_i)) xLϵ(xlϵL1i=lF(xi,ωi)), 这个是通过所有中间层的传播的。

第一个式子保证了信息可以反向传播至任意浅层l,也就是梯度在经过mini-batch之后,不会发生消失的问题,因为在整个mini-batch中的所有sample里 ∂ ϵ ∂ x l ∑ L − 1 i = l F ( x i , ω i ) \frac{\partial\epsilon}{\partial x_l}\sum^{L-1}{i=l}F(x_i, \omega_i) xlϵL1i=lF(xi,ωi)不会全部恰巧为-1。也就是说,就算权重都很小,梯度也不会消失。

综上所述,上述方程证明了信息可以在任意两个节点之间传播。上述方程是建立在h(x) 以及f(x)都是恒等映射的条件下的。

ResNet-V2的改动主要体现在两个方面:

  1. skip fucntion的选择
  2. activation function的选择

skip function的选择

接下来讨论其他 skip connection 的函数:
第一种考虑: h ( x l ) = λ l x l h(x_l) = \lambda_l x_l h(xl)=λlxl
x l + 1 = λ l x l + F ( x l , ω l ) x_{l+1} = \lambda_l x_l + F(x_l, \omega_l) xl+1=λlxl+F(xl,ωl)

这里 λ l \lambda_l λl是一个放缩变量,我们可以通过递推得到新的表达式:
x L = ( ∏ i = l L − 1 λ i ) + ∂ ϵ ∂ x l ∑ i = l L − 1 F ^ ( x i , ω i ) x_L = (\prod \limits^{L-1}_{i=l} \lambda_i) + \frac{\partial\epsilon}{\partial x_l}\sum\limits^{L-1}_{i=l}\hat{F}(x_i, \omega_i) xL=(i=lL1λi)+xlϵi=lL1F^(xi,ωi)
F ^ = ∏ j = i + 1 L − 1 λ j F \hat{F} = \prod\limits^{L-1}_{j=i+1}\lambda_jF F^=j=i+1L1λjF
当我们对这个表达式做偏导,获取梯度。可以得到
∂ ϵ ∂ x l = ∂ ϵ ∂ x L ( ( ∏ i = l L − 1 λ i ) + ∂ ϵ ∂ x l ∑ L − 1 i = l F ( x i , ω i ) ) \frac{\partial\epsilon}{\partial x_l} = \frac{\partial\epsilon}{\partial x_L}((\prod\limits^{L-1}_{i=l}\lambda_i) + \frac{\partial\epsilon}{\partial x_l}\sum\limits^{L-1}{i=l}F(x_i, \omega_i)) xlϵ=xLϵ((i=lL1λi)+xlϵL1i=lF(xi,ωi))

也就是说第一个式子多了一个系数 ∏ i = l L − 1 λ i \prod\limits^{L-1}_{i=l}\lambda_i i=lL1λi, 对于一个非常深的网络来说,如果 λ i \lambda_i λi>1,那么之后系数会指数级爆炸。如果λ_i<1的情况,那么这个系数会变得十分小,甚至消失,这样的话,shortcut 就不太能传递信息,迫使所有的信息流从weight layer走了。

所以我们可以看出,如果我们改变h(xl)为gating或者1*1的卷积,都会使h(x)递推为 ∏ i = l L − 1 h i \prod\limits^{L-1}_{i=l}h_i i=lL1hi, 可能会阻挡信息的传递,甚至损害训练的过程。

文中提出了六种shortcut connection 的模型
在这里插入图片描述
在六个模型都进行实验之后,我们得到效果最好的是identity mapping。这里省略了BN层,都是在权重层之后的。
下面是实验数据
虽然在分析中,将f作为identity mapping 处理,更为简便。
但在实验中,我们将其作为ReLu来做,因为这样是根据ResNet原先的实验设置来做的。

实验结果如下表:在这里插入图片描述
常量放缩:
我们设置 λ \lambda λ=0.5,同时讨论两种F的放缩,第一种是F没有放缩,第二种是被 1-λ=0.5的放缩,与highway gating 相似,但是为frozen gating。
前者F不放缩的情况下,不能很好的收敛。而第二种放缩F之后,我们得到的test error为12.35%,比原先ResNet110的模型误差高很多。同时训练误差也高很多。

所以说,优化在常量放缩了shortcut 之后,会高很多。

Exclusive gating (排他门):
根据highway networks的模型,设计了门机制,在原先的模型里,一个门函数是 g ( x ) = σ ( W g x + b g ) g(x) = \sigma(W_g x + b_g) g(x)=σ(Wgx+bg),这里做一个线性变换之后再通过一层sigmoid函数 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1, 在卷积神经网络里,g(x)就是一个1*1的卷积层。

在其他的论文模型中, exclusive gating的用法是, F是被g(x)放缩,而shortcut path是被1-g(x)放缩的,在这个模型之下,biases 的选择就比较重要了。通过超参数搜索,在biases从0到-10的一个步长为-1的交叉验证。最后得到结果是bias = -6 的情况下,表现最优,但也会得到8.7%的测试误差,这比ResNet110的基本模型表现都差很多。 Exclusive gating在bias初始化不合适的时候,甚至都不会收敛到一个好的结果。

Exclusive gating 的缺点在于two-fold, 当1-g(x)趋近于1的时候,加了门的shortcut 就会趋向于恒等映射,但这种情况下,g(x)会趋向于0,这样会将残差方程的流基本变为0。

Shortcut only gate:
在这种情况下,残差方程的路径不加以放缩,只有shortcut 被1-g(x)放缩,在这种情况下,bias 仍旧非常重要,如果初始的bias是0的话,那么1-g(x)的数学期望就是0.5。网络的表现很差, 有12.86%的误差。

当bias取负数,比如说-6的时候,1-g(x)的值趋向于1,而这样也非常接近恒等映射,结果与baseline model也就近似了。

1*1 convolutional shortcut:
用1*1的卷积层替代恒等映射层,这个结果在ResNet34表现良好,但是在更深的残差神经网络上,他的表现就差强人意了。

Dropout shortcut:
在使用ratio = 0.5 的dropout 之后,也很难收敛到一个好的结果。类似于λ=0.5的常量放缩,它同样也阻止了一部分信号的传播。

所以我们可以看出,shortcut connections 是最直接的传播信息的通道。其他做乘运算的操作(缩放,门运算和卷积以及dropout)都会阻碍信息的传播,影响网络的优化。

但是门运算和卷积的shortcut会有更多的参数,有比恒等映射更好的特征表现能力,但是会有更高的训练误差,也就是说,退化问题是由于优化问题导致的而不是表现能力导致的。

Activation function的选择

在这里插入图片描述
在原先的残差单元里,BN是跟在权重层后面的,ReLu是跟在BN层后面的,在最后做addition之后,还会加一个ReLu层。

但是在ResNet-V2中提出了一个新的模型概念,pre-activation。

首先尝试几个模型:
BN after addition:
我们把BN层从addition之前拿到addition之后,这样也会导致信息的传播在shortcut path上会被阻挡。

ReLU before addition:
如果我们将ReLu放在addition 之前的话,会导致残差流过来的时候输出的结果是非负的,但实际上我们需要残差的输出是在(-∞,+∞)的。也就是说,对于正向传播来说,这样的处理会让输出单调上升,这样会影响网络的表现能力。而且结果表现也不太好。

Post-activation Or pre-activation?
y l = h ( x l ) + F ( x l , ω l ) y_l = h(x_l) + F(x_l, \omega_l) yl=h(xl)+F(xl,ωl)
x l + 1 = f ( y l ) x_{l+1}=f(y_l) xl+1=f(yl)
原先的激活函数影响了两个通道
y l = f ( x l ) + F ( f ( x l ) , ω l ) y_l = f(x_l) + F(f(x_l), \omega_l) yl=f(xl)+F(f(xl),ωl)
之后又提出了一个非对称模型,也就是激活函数只影响残差通道。也就是
y l + 1 = y l + F ( f ^ ( y l ) , ω l + 1 ) y_{l+1}=y_l+F(\hat{f}(y_l), \omega_{l+1}) yl+1=yl+F(f^(yl),ωl+1)
x l + 1 = x l + F ( f ^ ( x l ) , ω l ) x_{l+1}=x_l+F(\hat{f}(x_l), \omega_{l}) xl+1=xl+F(f^(xl),ωl)
在这里插入图片描述
对于一个普通的前向神经网络来说,他的BN和ReLu是 pre-activation还是post-activation都不是很重要,但是如果对于有分支的神经网络来说,激活层的位置就比较重要了。

V2的版本提出了两种pre-activation的概念,一个是将ReLu层提前,但是BN层仍旧放在post位置。
第二个是将BN层和ReLu层都放在pre位置。

第一种relu-only pre-activation的效果跟baseline差不多,这种情况下,ReLu层不能享受到BN层的好处。

第二种,当两个激活层都提前的时候,效果出人意料的好。原因有两方面:第一方面是优化的简略性,另一方面就是可以降低过拟合。

优化的过程被简单化了,因为f变成了恒等映射。其次,BN作为pre-activation提高了模型的正则化度。

如果在原先的设计中,f = ReLu的话,会将负信号给屏蔽掉,如果有很多残差单元的情况下,这个影响就会变得很大。当f是恒等映射的时候,神经网络就可以很快的去做误差下降。在层数比较低的时候,f=ReLu表现良好,因为权重层会调整到使yl尽可能大于0,这样就不会被relu给过滤掉。

在原先的模型里,虽然被BN层正则化了,但是马上添加了shortcut层,然后合并的信号是非正则化的,这个非正则化的信号马上又作为下一个残差单元的输入,所以效果没这么好。而新proposed model就可以解决这个问题,所有输入在权重层之前都被正则化过了。

原paper链接:

https://arxiv.org/abs/1603.05027

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值