赞
踩
在学习Yolo v3的过程中,了解到它借鉴了残差网络的快捷链路(shortcut connection),因此为了更好的理解yolo3,我对ResNet展开了学习,并阅读其论文。
ResNet—— Residual Network残差神经网络,是何恺明大神(Faster RCNN的作者)于2015年提出,在当年多个大赛中用此网络获得了第一名。
在深度神经网络中存在一个问题,大家都知道,网络层数加深,参数增多,网络表现能力理应更好。但随着深度的不断增加,会出现网络退化现象。
神经网络随着层数加深,首先训练准确率会逐渐趋于饱和;若层数继续加深,反而训练准确率下降,效果不好了。
说通俗一点就是,我给孩子报了课外补习班(多加了好多层网络),但却发现我的孩子学习成绩反而没有参加课外补习班的孩子成绩好。
这既不是梯度爆炸、梯度消失造成,也不是过拟合造成。
梯度爆炸、梯度消失:梯度消失/爆炸是因为神经网络在反向传播的时候,反向连乘的梯度小于1(或大于1),导致连乘的次数多了之后(网络层数加深),传回首层的梯度过小甚至为0(过大甚至无穷大),这就是梯度消失/爆炸的概念。(我们已经在网络中加入了BN层(Batch Normalize),他可以通过规整数据的分布基本解决梯度消失/爆炸的问题,所以这个问题也不是导致深层网络退化的原因)
过拟合:网络在训练集上表现很好,在训练集上表现差。(如下图可见,无论是在训练集还是测试集中,拥有更深层次的网络表现均比浅层次的网络差,那显然就不是过拟合导致的)
如此图所示,从56层的表现反而比20层差。
在MobileNet V2的论文中提到,由于非线性激活函数Relu的存在,每次输入到输出的过程都几乎是不可逆的,这也造成了许多不可逆的信息损失。我们试想一下,一个特征的一些有用的信息损失了,那他的表现还能做到持平吗?答案是显然的。
说通俗一点就是中间商赚差价。层数增多之后,信息在中间层损失掉了。
而ResNet正能解决网络退化问题。
我们选择加深网络的层数,是希望深层的网络的表现能比浅层好,或者是希望它的表现至少和浅层网络持平(相当于直接复制浅层网络的特征)
如何持平看下图
我们把右边的网络理解为左边浅层网络加深了三层(框起来的部分)
假如我们希望右边的深层网络与左边的浅层网络持平,即是希望框起来的三层跟没加一样,也就是加的三层的输入等于输出。
我们假设这三层的输入为 x x x,输出为 H ( x ) H(x) H(x),那么深层网络与浅层网络表现持平的直观理解即是: H ( x ) = x H(x)=x H(x)=x,这种让输出等于输入的方式,就是论文中提到的恒等映射(identity mapping)。
所以ResNet的初衷,就是让网络拥有这种恒等映射的能力,能够在加深网络的时候,至少能保证深层网络的表现至少和浅层网络持平。
说通俗一点就是,我给孩子报了课外补习班(加的3层网络),我希望他的成绩要么就是提升,要么至少不要比没有上课外补习班的孩子成绩差。
ResNet是通过残差模块实现的,保留原本分支和学习过的分支中好的一个。
我们看一下残差结构与正常结构对比图。
普通的神经网络如图所示:
残差模块的结构图如图所示:
如下图展示的是ResNet34的网络结构。
ResNet论文pdf地址:https://arxiv.org/pdf/1512.03385.pdf
反正在各类的比赛中都获得很好地成绩(第一名),所以这个残差网络的普适性是很好的,可以应用与各类视觉问题或非视觉问题中。
残差
shortcut connection:就像门控函数一样,门关了就不学习新的,门开了就学习一些新的有用的。
但网络也不能一味地去加深。如下图所示,当加深到ResNet-1202是,错误率增加了。推测是由于过拟合造成的。需要增加数据量去训练。
此篇文章借鉴了很多前辈的博客,我贴出一些我觉得还不错的。
https://zhuanlan.zhihu.com/p/106764370
推荐B站同济子豪兄讲解ResNet的视频。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。