ResNet是否只是一个深度学习的trick?

作者 | 椿楸  编辑 | 汽车人

原文链接:https://www.zhihu.com/question/459892388/answer/1922833488

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【全栈算法】技术交流群

它最初是,但现在不是

回答这个题需要解决三个问题:

  1. ResNet 解决了什么问题

  2. 怎么解决的

  3. 它带来了什么

一、ResNet解决了什么问题?

e7d63fc83d5a933e99501c16659c8c2f.png

其实看resnet原文的话很明确,在introduction部分就解释清楚了,bn有效解决了梯度消失的问题,但是没有解决网络退化的问题。resnet的提出是用来解决网络退化问题的,也就是深层网络的效果反而比浅层网络更差。

如图,两张图是CIFAR-10上的training error和test error,深层网络的error都显著大于浅层网络。这个很明显是不合理的,因为深层网络意味着更多的参数,更复杂的结构。所以ResNet就要解决这个问题,怎么去解决深层网络退化这一问题。

重要的事情说三遍:

ResNet的出现是解决训练优化问题,而不是一个直接提升模型效果的机制

ResNet的出现是解决训练优化问题,而不是一个直接提升模型效果的机制

ResNet的出现是解决训练优化问题,而不是一个直接提升模型效果的机制

原文如下:

The degradation (of training accuracy) indicates that not all systems are similarly easy to optimize. ……(省略介绍恒等变化)In this paper, we address the degradation problem by introducing a deep residual learning framework.

看到了吗,address the degradation problem,这就是ResNet最直接的目的:解决退化问题理论上如果是全局最优,ResNet并不能得到更好的效果,但问题就出在DL训练不可能全局最优,而深层网络由于训练问题甚至达不到较好的局部最优。

我再解释下,我这里说不能达到更好的效果是基于他解决的问题和微软写的故事来的,我们假设他只能解决恒等层问题的话,ResNet在优化到极值点的情况下,并不能比不带残差的模型更好。

从这个角度来看,我们也可以说skip connection像是一个trick

二、ResNet怎么解决的?

补充一下上面省略的原文:

The degradation (of training accuracy) indicates that not all systems are similarly easy to optimize. Let us consider a shallower architecture and its deeper counterpart that adds more layers onto it. There exists a solution by construction to the deeper model: the added layers are identity mapping, and the other layers are copied from the learned shallower model. The existence of this constructed solution indicates that a deeper model should produce no higher training error than its shallower counterpart. But experiments show that our current solvers on hand are unable to find solutions that are comparably good or better than the constructed solution (or unable to do so in feasible time).

懒得看的我大致说一下ResNet的思路,它用的类似于“反证法”

首先我们现在有一个浅一点的网络,并且已经训练好了

我们不是想要一个深一点的网络吗,那我们就在S的基础上往后添几层不就行了吗,如果这个时候我们填的这些层都是恒等层(identity mapping),即输出=输入,那么模型的效果就没有发生改变。这说明了,深的模型效果不应该比浅的模型更差

那为什么深的模型退化了呢,原句:But experiments show that our current solvers on hand are unable to find solutions that are comparably good or better than the constructed solution (or unable to do so in feasible time). 说白了就是训练优化问题,模型学不出来这样的参数。

那么好了,我们让模型更容易学出这样效果不就行了吗

恒等层不好学,0还不好学吗?

dfb20231aad81d332587704a56b96e91.png

To the extreme, if an identity mapping were optimal, it would be easier to push the residual to zero than to fit an identity mapping by a stack of nonlinear layers.

我们去学习残差不就好了,其实比起上面这张图,把X和F(x)的位置反过来我觉得会更好理解一些。我们原本想要添加的层达到的效果,就是右侧的那个弯的X(identity)。但是恒等层难学,那我就把X直接传递过去,再让卷积去学习残差,残差在恒等层相当于全是0,那么这肯定更好学。

这就是ResNet的核心思想,它的初衷是为了让模型能学到恒等层来保证深层的效果不弱于浅层网络。当然训练的结果不可能是浅层跟只训练浅层一样,深层全是恒等层。所以ResNet也还是有一定玄学的,之前在哪听说Google也做了好多不同的结构来试验,结果ResNet这个成了(说白了肯定还有很多结构说着也有道理,但实验结果不咋地)

不管怎么说ResNet效果非常非常好,现在几乎没有模型不带skip connection的

三、ResNet不止是trick

我们一般称一个小的改动叫trick

但没他不行的时候,我们就会用mechanism

换句话说,如果skip connection可有可无,只涨个千分之几的点,我们就会叫他trick

至于特征融合等等,其实就是解释了resnet为什么能带来好的表现。也可以说因为有这些现象,resnet才不仅被当做trick,但是如果它在最初实验上表现不好,根本没有人会去探究它的原理。而如果它表现的好,一定会有人会探究它为什么好(而且它肯定也在某些方面有很大的好处)。所以实际上是一回事(我没有说这个解释不重要,主要想表达可以从两个方面来切入为什么它不仅被当做trick)

a829fcc4ac7e41068918af03336c4941.png

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、硬件配置、AI求职交流等方向;

9333c362dede7793605cfbfed1a1194b.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值