【CNN】经典模型总结及Resnet理解
之前⼀直都是看,没有⾃⼰完整总结⼀遍,现在做⼀个简单的总结。
并主要针对Resnet做⼀个介绍。
主要参考于:
⼀、Lenet
第⼀个CNN,94年提出,98年在论⽂Gradient-Bad Learning Applied to Document Recognition中得到实现。
使⽤卷积、池化(tanh或者sigmoid)、⾮线性映射。
⼆、Alexnet
2012年,在ImageNet⽐赛中获得第⼀,远甩其他⽹络。哪些国家也过春节
特点:人中不长胡子
引⼊了Relu激活函数,部分解决了sigmoid在较深⽹络时出现梯度弥散问题。
使⽤了Dropout,随机抑制⼀部分神经元,避免过拟合。形容词变副词的规则
使⽤了GPU训练。
进⾏data argumentation,训练时随机从256x256截取224x224,并进⾏⽔平翻转;预测时,取四个⾓和中间位置并进⾏左右翻转(共10张),取平均预测效果。
三、VGG Net
2014年,ImageNet第⼆名。(Very Deep Convolutional Networks for Large-Scale Image Recognition),是⽜津⼤学计算机视觉组(Visual Geometry Group)和Google DeepMind公司的研究员⼀起研发的的深度卷积神经⽹络。
特点:
使⽤更⼩的卷积核,3X3卷积核,两个3x3卷积核相当于⼀个5x5卷积核,但前者⽐后者参数量少,并且可⾏进⾏更多地⾮线性变换,获得更多的复杂特征和特征组合。
提出Multi Scale,训练时将原始图像缩放⾄不同的S,S属于[256, 512],再随机切成224x224,做data argumentation;预测时,利⽤滑动窗⼝的形式预测,取所有窗⼝的平均预测值。
⽹络结构简洁快速抑制呕吐感
四、google Inception Net
2014年,ImageNet第⼀名。引⼊Inception module。
特点:
搞定客户
采⽤了1x1卷积核,性价⽐⾼,⽤很少的计算量既可以增加⼀层的特征变换和⾮线性变换。
提出Batch Normalization,通过⼀定的⼿段,把每层神经元的输⼊值分布拉到均值0⽅差1的正太分布,使其落⼊激活函数的敏感区,避免梯度消失,加快收敛。
引⼊Inception module,4个分⽀结合的结构,每个分⽀采⽤1x1的卷积核。欧美图片网
去除了最后的全连接层,改⽤全局平均池化层来代替(图像尺⼨变为1x1),即⼤⼤减少计算量。
Inception module:
五、Resnet
2015年,ImageNet第⼀名,(Deep Residual Learning for Image Recognition)微软的残差神经⽹络,引⼊了highway network结构,使⽹络变得更深。供给两个连续卷积层的输出,并分流(bypassing)输⼊进⼊下⼀层。
下⾯详细介绍⼀下这个⽹络结构。
我们已知,越深的⽹络⼀般有越⾼等级的特征,拥有强⼤的表达能⼒。但是事实上,在实验中,随着⽹络的加深,会出现两个问题:梯度弥散/消失、性能退化问题。
那如何解决呢?
提出恒等映射
图中浅层已经得到最优效果,那么深层⽹络如果不能做好附加层的恒等映射,很难得到和浅层相同的的误差。(这⾥我有个疑问,既然深层的误差更⼤,为什么不直接⽤浅层好了,我的理解是,深层可以得到更多的特征及特征组合,如果能保持与浅层相同的误差还能得到更多的特征当然能更好的做拟合)
那如何解决这个恒等映射呢,在训练使得这些附加层的权重维持1很难做。
下图是plain ⽹络中的任意两层,我们希望输⼊x经过这两层后能够完美拟合H(x),
白泽神兽图片
解决⽅法是提出Redisual ⽹络,下图结构,使H(x)=F(x)+x,这样只要使F(x)去拟合0就可以达到上⾯的要求,这⾥的F(x)就是残差。
沙发怎么清洗⽽且论⽂中说,F(x)->0 ⽐ x->H(x)要容易的多。(⼀种猜想是Relu会过滤掉⼩于0的信息流,加速了f(x)趋近于0。(这个结构的意思类似于传话游戏,有时⼈越多,⼜容易出错,这⾥就相当于多加了⼀个让第⼀个⼈把话传给第三个⼈的过程)
那这个结构是如何解决了梯度弥散的问题呢?⽹络中加⼊了⼀个x,在求梯度时,总有个导数是等于1的,这样避免了每个梯度会⼩于0的情况。
这⾥引⽤:
此外,针对50层以上的resnet,改⽤以下结构,减训练参数。
好的,到这⾥就介绍完resnet的原理了,随着⽹络深度加深,解决了梯度弥散和性能退化的问题。
⼀些其他理解:
1、刚开始看到resnet结构时,个⼈觉得与RNN、LSTM这种结构有点类似,都是保持了⼀些需要长期保留的信息,增加了特征信息。
2、另⼀理解是,很多⽹络并⾏组成了,起到了enmble的效果。
最后,resnet的⼀些其他特征(这段是参考的⼀篇博客,但是找不出处了,如果侵权,请告知):
⽹络较深,控制了参数数量。
存在明显层级,特征图个数层层递进,保证输出特征的表达能⼒。
使⽤较少池化层,⼤量采⽤下采样,提⾼传播效率。
没有使⽤dropout,利⽤BM和全局平均池化进⾏正则化,加快训练速度。
层数较⾼时减少了3x3卷积核的个数,⽤1x1卷积核控制3x3卷积的输⼊输出特征map的数量。
以上。