点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达
作者 | 椿楸 编辑 | 汽车人
原文链接:https://www.zhihu.com/question/459892388/answer/1922833488
它最初是,但现在不是
回答这个题需要解决三个问题:
ResNet 解决了什么问题
怎么解决的
它带来了什么
一、ResNet解决了什么问题?
其实看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还不好学吗?
“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)
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~