先spoil一下= = 其实并不是一篇resnet科普文,只是解惑一些我认为的重难点的部分~
所以这篇文的观众姥爷群体是看了paper或了解resnet但是对于一些重难点有疑问的选手
让我美东第一安琪拉带带你们!(虚实
res代表residual 意为残差,理解为剩余也可以
其实ResNet的目的很单纯,就是解决degradation problem。degradation问题,它与overfitting,梯度消失和梯度爆炸没什么直接的联系。
degradation的表现:“深度越深,accuracy越饱和“
degradation的内核:深度学习最难的问题之一,就是怎么让网络什么都不做(或者可以理解为在optimal solution的时候选择不干预的继续)
identity mapping。每一个block在得到一个输入x时,都precondition on x,思考“我现在已经有了x,我要再动用剩下的map(也就是residual)作为添加效果呢,还是这个x已经很不错了,我剩下的(residual)什么都不用做,直接传个zero就好“
公式是杰样子的:
嗯长得好看的都能看出来,左边这一部分就是上文所说的“剩下的”(residual)加成,右边就是我们的输入x,也就是上一层的输出,在paper中被称为short cut或highway。
shortcut的具体执行方式: Identity vs. Projection Shortcuts
我们先看一段摘自paper中,对于shortcut几种执行方式的描述
我们可以把它简单的归类为两种shortcut: identity和projection
(1)identity shortcut: 一种不需要extra parameters的shortcut
(2)projection shortcut: 一种需要extra parameters的shortcut
有的人可能开始叫嚣了: 你这算哪门子解释? 而且identity shortcut不就是原封不动把x传出去吗非装什么13啊!
然并卵
block的上下可能维度不一样,因为网络中充满了downsample和16-32-64 的channel的逐渐加深。
那我们分两种情况讨论,来更具体的描述identity和projection到底是什么玩意
(1)在输入输出维度一样的时候:比如14x14x64 -- > 14x14x64
identity shortcut会干什么:原封不动把x传出去,输入输出一毛一样
projection shortcut会干什么:通过64个1x1x64的filter,映射到输出。这些projection 的filters都是需要learn的,所以要搞清楚,并不是shortcut就是(啊啊啊 原封不动送出去就行了)。尤其是p
(2)在输入输出维度不一样的时候: 比如14x14x64 -- > 7x7x128
identity shortcut会干什么:(这一点我不太确定,请大佬纠正或自寻reference)先把14x14x64 downsample到7x7x64。 然后和输出差的那64个feature map全部zero padding补上,以实现free of parameters的前提。所以实现起来比较容易方便
projection shortcut会干什么:用128个1x1x64的filters搭配上stride 2实现空间降维 深度升维的骚操作。然而这个也是需要learn的
Resnet到底在解决一个什么问题呢? - 薰风初入弦的回答 - 知乎 https://www.zhihu.com/question/64494691/answer/786270699