首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

图像识别与处理

卷积神经网络结构

卷积神经网络层次结构包括:数据输入层/ Input layer ,卷积计算层/ CONV layer ,激励层 / ReLU layer ,池化层 / Pooling layer ,全连接层 / FC layer

结构如图:

然而由于在神经网络中百分之九十以上的参数都集中在全连接层,全连接层有一个非常致命的弱点就是参数量过大,特别是与最后一个卷积层相连的全连接层。一方面增加了Training以及testing的计算量,降低了速度;另外一方面参数量过大容易过拟合。虽然使用了类似dropout等手段去处理,但是毕竟dropout是hyper-parameter, 不够优美也不好实践而且还有认为因数的干扰。而全局池化就可以很好的解决这一问题。

Fully Connected layer

很长一段时间以来,全连接网络一直是CNN分类网络的标配结构。一般在全连接后会有激活函数来做分类,假设这个激活函数是一个多分类softmax,那么全连接网络的作用就是将最后一层卷积得到的feature map stretch成向量,对这个向量做乘法,最终降低其维度,然后输入到softmax层中得到对应的每个类别的得分。全连接层如此的重要,以至于全连接层过多的参数重要到会造成过拟合,所以也会有一些方法专门用来解决过拟合,比如dropout。

什么是Dropout?

在2012年,Hinton在其论文《Improving neural networks by preventing co-adaptation of feature detectors》中提出Dropout。当一个复杂的前馈神经网络被训练在小的数据集时,容易造成过拟合。为了防止过拟合,可以通过阻止特征检测器的共同作用来提高神经网络的性能。 Dropout是一种在深度学习环境中应用的正规化手段。它是这样运作的:在一次循环中我们先随机选择神经层中的一些单元并将其临时隐藏,然后再进行该次循环中神经网络的训练和优化过程。在下一次循环中,我们又将隐藏另外一些神经元,如此直至训练结束。

结构原理图 :

当前Dropout被大量利用于全连接网络,而且一般人为设置为0.5或者0.3,而在卷积隐藏层由于卷积自身的稀疏化以及稀疏化的ReLu函数的大量使用等原因,Dropout策略在卷积隐藏层中使用较少。 DNN网络将Dropout率设置为 p,也就是说,一个神经元被保留的概率是 1-p。当一个神经元被丢弃时,无论输入或者相关的参数是什么,它的输出值就会被设置为0。丢弃的神经元在训练阶段,对BP算法的前向和后向阶段都没有贡献。因为这个原因,所以每一次训练,它都像是在训练一个新的网络。然而在设计p的时候有认为的干扰,但具体用到哪里、训练一开始就用还是后面才用、dropout_ratio取多大,还要自己多多尝试。有时添加Dropout反而会降低性能。

什么是全局池化?

对学习Class Activation Mapping(CAM)原文献的时候提到的全局平均池化GAP方法做个简单的知识补充。 所谓的全局就是针对常用的平均池化而言,平均池化会有它的filter size,比如 2 * 2,全局平均池化就没有size,它针对的是整张feature map.全局平均池化(Global average Pooling)由 M. Lin, Q. Chen, and S. Yan. Network in network. Interna-tional Conference on Learning Representations, 2014.提出来。

Global Average Pooling

有了上面的基础,再来看看global average poolilng。既然全连接网络可以使feature map的维度减少,进而输入到softmax,但是又会造成过拟合,是不是可以用pooling来代替全连接。答案是肯定的,Network in Network工作使用GAP来取代了最后的全连接层,直接实现了降维,更重要的是极大地减少了网络的参数(CNN网络中占比最大的参数其实后面的全连接层)。Global average pooling的结构如下图所示:

每个讲到全局池化的都会说GAP就是把avg pooling的窗口大小设置成feature map的大小,这虽然是正确的,但这并不是GAP内涵的全部。GAP的意义是对整个网络从结构上做正则化防止过拟合。既要参数少避免全连接带来的过拟合风险,又要能达到全连接一样的转换功能,怎么做呢?直接从feature map的通道上下手,如果我们最终有1000类,那么最后一层卷积输出的feature map就只有1000个channel,然后对这个feature map应用全局池化,输出长度为1000的向量,这就相当于剔除了全连接层黑箱子操作的特征,直接赋予了每个channel实际的类别意义。

相比于全连接和Dropout等,全局池化有以下的优势:

(1) 通过加强特征图与类别的一致性,让卷积结构更简单

(2)不需要进行参数优化,所以这一层可以避免过拟合

(3)它对空间信息进行了求和,因而对输入的空间变换更具有稳定性

1. 迁移学习的四种情况

在迁移学习中,有四种情况决定着该如何训练pre-trained neural network以便将其应用于新的问题。而这取决于两个因素:新数据集的大小以及新数据集与原始数据集(指训练pre-trained neural network使用的数据集)的相似程度。

假设该训练好的网络第一层卷积用于检测边沿信息,第二层用于检测形状信息,第三层用于检测更为高级的特征。三个全连接层对高级特征组合后进行softmax分类。

1.1 新数据集小并且与原始数据集相似

在这种情况下(Feature extraction):

先去掉pre-trained neural network的最后一个全连接层。

新增加符合新数据集类别个数的全连接层。

其他预训练层的权值不动,只随机初始化新增加层的权值。

使用新数据集来训练新的全连接层。

为什么这样修改呢?因为新数据集小,首要考虑的一点就是防止过拟合,所有就保持原网络层的权值不动。另外因为数据集之间是相似的,那么也就可以认为网络之前在旧数据集上学得的高级特征(权值)也可用于新数据集。

1.2 新数据集小且数据集间不相似

在这种情况下:

只保留前几层卷积层,后面的其它层全部去掉。

然后添加一个新的全连接层,其神经元个数符合新数据集的类别数。

其他预训练层的权值不动,只随机初始化新增加层的权值。

使用新数据集来训练新的全连接层。

因为数据集小,所以首要考虑的还是防止发生过拟合,所以原网络层的权值不动。但是由于数据集已经不相似了,原网络中深层卷积所检测的高级特征就不能应用于新数据集了,所以就将其去掉。但由于原网络一般都在大量的训练集上训练,所以低级特征的检测,也就是前几层卷积还是可以用于新数据集的

1.3 新数据集大且数据集间相似

在这种情况下(Fine tune):

先去掉pre-trained neural network的最后一个全连接层,然后添加一个新的全连接层,其神经元个数符合新数据集的类别数。

随机初始化新添加的全连接层的权值。

将预训练网络其它层的权值作为初始值。

在新数据集上训练网络。

此时,因为数据量大,并不容易发生过拟合,所以可以重训练整个网络。此外由于数据集相似,原网络层检测到的特征可用于新数据集,所以网络层上的原权值可以用来作为初始值,这样可以加快训练的速度。

1.4 新数据集大且数据集间不相似

这时可以:

·先去掉pre-trained neural network的最后一个全连接层,然后添加一个新的全连接层,其神经元个数符合新数据集的类别数。

·随机初始化全部层的权值,然后再新数据集上训练。

·或者,像1.3中一样,将原网络权值作为初始值进行训练。虽然此时数据集并不相同,但是使用原网络权值也可能会加快训练速度。如果这样不行,那就重新随机初始化权值。

·迁移学习网址;

·https://www.jianshu.com/p/07426ba049b6

·http://transferlearning.xyz/

如有任何问题

您可以发送邮件至

或关注微博/知乎/微信后台留言

我们期待您的提问!

微博:数据智农

知乎:数据智农

制作:王琳雅

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190112G02S1J00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券