首页 > 编程知识 正文

卷积神经网络的原理,卷积神经网络和神经网络

时间:2023-05-03 05:04:20 阅读:12888 作者:4549

文章目录CNN发展1.Alex net2. vggg3. Google net4. inception5. resnet6. x ception7. shuffle net8. se net9.cn总结10. CNN在NLP中的应用

CNN发展1. AlexNet

卷积核一定越大越好吗?-- 小卷积核

卷积首先在AlexNet中出现,也使用了1111、55卷积核等非常大的卷积核。 以前的观念认为,卷积核越大,接收场(感受场)越大,得到的图像信息越多,因此得到的特征越好。 但是,较大的卷积核会导致计算量的激增,不利于模型深度的增加,计算性能也下降。

2. VGG 卷积核一定越大越好?-- 33卷积核

VGG使用小卷积核代替大卷积核,利用两个33卷积核的组合比一个55卷积核更有效,同时降低了参数(33 ) 2vs551 )

3 .谷歌net http://www.Sina.com /

传统的层叠网络基本上是一个个卷积层的层叠,每个层只使用一个大小的卷积核。 例如,在VGG结构中使用了大量的33卷积层。 实际上,同一层中的每个“特性贴图”可以使用多个不同大小的卷积核心来获得不同比例的特征。 此外,这些特征的组合通常比使用单个卷积核心提供更好的特征。 谷歌的GoogleNet或Inception系列网络使用多个卷积核心的结构:

谷歌网的优势:一个输入的功能图分别同时经过11、33、55卷积内核的处理,将得到的特征进一步组合,获得更好的特征。

谷歌网络的缺点:这个结构有严重的问题。 参数比单个卷积核多得多,这样庞大的计算量会使模型效率低下。

4. Inception 每层卷积只能用一种尺寸的卷积核?-- 多尺寸卷积

发明GoogleNet的团队发现,简单地引入多个大小的卷积核会带来很多附加参数。 受网络中11卷积核的启发,为了解决这个问题,在Inception结构中添加了几个11卷积核,如图所示。

也就是说,引入bottleneck结构,在每个卷积内核的前面加入1x1卷积内核来降低参数量。

根据上图,试着进行比较计算吧。 feature map要求输入的维为256维,输出维也为256维。 有以下两个操作:

256维输入直接通过33256的卷积层,输出256维的特征图后,参数量为: 25633256=589,824256维输入首先通过1164的卷积层11卷积核也被认为是影响较大的操作,今后大型网络中将使用11卷积核来降低参数量。

5.resnet http://www.Sina.com /resnet残差网络

在传统的卷积层叠网络中,存在层数变深时网络性能降低的问题。 这是因为层数越深,梯度就越小,很难训练到反向传播浅层网络。

为了解决这个问题,何凯明大神想到了“残差网络”。 容易流向坡度较浅的网络,其“skip connection”可带来更多好处。

残差网络ResNet设计的残差模块可以训练更深的网络,如下图所示。

参考:

深网(ResNet/DenseNet ) : Skip Connection为什么有效,其他

为什么ResNet和DenseNet能做得这么深? 残差块为什么能解决梯度方差问题

6. Xception 怎样减少卷积层参数量?-- Bottleneck

的标准卷积过程可以看到上图。 一个22的卷积核在卷积时为越深的网络就越难训练吗?。 问题是,为什么必须同时考虑图像区域和通道? 为什么不能把通道和空间领域分开考虑?

Xception网络是基于以上问题发明的。 首先,对每个通道执行各自的卷积操作,以确定有多少个通道和多少个过滤器。 在获得新信道性能映射之后,现在对这些新信道性能映射执行标准11交叉信道卷积操作。 此操作简称为卷积操作时必须同时考虑通道和区域吗?-- DepthWise操作,简称为“DW”。

这个操作相当有效,

在imagenet 1000类分类任务中已经超过了InceptionV3的表现,而且也同时减少了大量的参数,我们来算一算,假设输入通道数为3,要求输出通道数为256,两种做法:

直接接一个3×3×256的卷积核,参数量为:3×3×3×256 = 6,912

DW操作,分两步完成,参数量为:3×3×3 + 3×1×1×256 = 795,又把参数量降低到九分之一!

因此,一个depthwise操作比标准的卷积操作降低不少的参数量,同时论文中指出这个模型得到了更好的分类效果。

7. ShuffleNet

分组卷积能否对通道进行随机分组?-- ShuffleNet

在AlexNet的Group Convolution当中,特征的通道被平均分到不同组里面,最后再通过两个全连接层来融合特征,这样一来,就只能在最后时刻才融合不同组之间的特征,对模型的泛化性是相当不利的。为了解决这个问题,ShuffleNet在每一次层叠这种Group conv层前,都进行一次channel shuffle,shuffle过的通道被分配到不同组当中。进行完一次group conv之后,再一次channel shuffle,然后分到下一层组卷积当中,以此循环。

ShuffleNet引入逐点分组卷积(pointwise group convolution)和通道混洗(channel shuffle),改进AlexNet中的Group Convolution。

经过channel shuffle之后,Group conv输出的特征能考虑到更多通道,输出的特征自然代表性就更高。另外,AlexNet的分组卷积,实际上是标准卷积操作,而在ShuffleNet里面的分组卷积操作是depthwise卷积,因此结合了通道洗牌和分组depthwise卷积的ShuffleNet,能得到超少量的参数以及超越mobilenet、媲美AlexNet的准确率!

8. SENet

通道间的特征都是平等的吗? – SEnet

无论是在Inception、DenseNet或者ShuffleNet里面,我们对所有通道产生的特征都是不分权重直接结合的,那为什么要认为所有通道的特征对模型的作用就是相等的呢?

SENet对特征权重重分配,使得特征显著性增强。

一组特征在上一层被输出,这时候分两条路线,第一条直接通过,第二条首先进行Squeeze操作(Global Average Pooling),把每个通道3维的特征压缩成一个1维,从而得到一个特征通道向量(每个数字代表对应通道的特征)。然后进行Excitation操作,把这一列特征通道向量输入两个全连接层和sigmoid,建模出特征通道间的相关性,得到的输出其实就是每个通道对应的权重,把这些权重通过Scale乘法通道加权到原来的特征上(第一条路),这样就完成了特征通道的权重分配。

论文:Squeeze-and-Excitation Networks
论文链接:https://arxiv.org/abs/1709.01507
代码地址:https://github.com/hujie-frank/SENet
PyTorch代码地址:https://github.com/miraclewkf/SENet-PyTorch
论文解读:https://www.jianshu.com/p/59fdc448a33f
参考资料:专栏 | Momenta详解ImageNet 2017夺冠架构SENet
参考资料:https://blog.csdn.net/liqiming100/article/details/82111115

9. CNN总结

CNN模型的发展趋势:从巨型网络到轻量化网络。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的MobileNet、ShuffleNet(体积能降低到0.5mb!)。

卷积核:

大卷积核用多个小卷积核代替;单一尺寸卷积核用多尺寸卷积核代替;固定形状卷积核趋于使用可变形卷积核;使用1×1卷积核(bottleneck结构)。

卷积层连接:

使用skip connection,让模型更深;densely connection,使每一层都融合上其它层的特征输出(DenseNet)

卷积层通道:

标准卷积用depthwise卷积代替;使用分组卷积;分组卷积前使用channel shuffle;通道加权计算。

启发

类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?

10. CNN在NLP的应用 TextCNN

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。