机器学习笔记

1.全连接层的作用是什么?

https://www.zhihu.com/question/41037974

 

作者:胡孟
链接:https://www.zhihu.com/question/41037974/answer/150585634
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在卷积神经网络尚未火热的年代,人们使用haar/lbp + adaboost级连的组合方式检测人脸,hog+svm的组合方式检测行人。这种传统的目标检测方法一个认知上的优势就是: 模块的功能明确,划分得很清晰,符合人们的理解方式。其中,haar,lbp,hog等手工设计的特征提取算子用于提取特征,adaboost,svm用于对提取的特征分类。

而早期的全连接神经网络,就是属于用于对提取的特征进行分类的模块,我们也可以同样将神经网络替换掉adaboost,svm用于分类。

后来将神经网络用于图像分类中,面对早期的小分辨率图片,我们依旧可以使用特征提取+神经网络分类的模式,也可以直接将每个像素点作为特征输入用于神经网络的分类。但面对后期的大分辨率图像,如果依旧使用逐像素点输入的方式,很明显将会导致全连接中的权值过于稀疏,造成模型训练的困难。

而卷积神经网络中conv+relu(早期为sigmoid)+pooling(以下称三剑客)的组合,不仅可以替代手工设计特征算子的繁琐,而且局部感受野+权值共享的设计思想也能避免全连接网络中的种种弊端。此时人们将三剑客的组合视为特征提取的过程,如果按照早期人们特征提取+分类的设计思路,那么分类使用全连接的设计方式,就可以刚好实现了一个end-to-end的架构,也即早起卷积神经网络的原型。

但必须明白的是,虽然模型完成了一个end-to-end的设计架构,可以直接用于训练和分类,但在人们的认知上,特征提取和分类依然是分开的,也就是说三剑客用于特征提取,全连接用于分类。

后来随着更优秀分类网络的出现(alexnet,vgg等),人们不再仅仅满足于分类准确率的提升,面对动辄两三百M的模型,人们思考能否减少模型的大小。人们通过研究发现,在包含全连接的网络中,全连接的参数占据了所有参数中的大部分比例,这样使得精简全连接参数变得刻不容缓。

于是一部分优秀的人们想到了使用svd等方式减少参数,另一部分优秀的人们开始思考: 是否真的需要使用全连接层,或者有无可以替代全连接层的方法?

于是就出现了如nin,squeezenet中,直接使用global average pooling的方式,直接替代全连接层。人们发现不使用全连接层,模型的检准率并没有降低,而模型的大小却极大的减少(当然了,也包括以上网络中其他模块优化的功劳,如1*1卷积的使用等)。

另一方面,同样在nin,以及用于图像分类的fcn中,人们发现使用1*1卷积,也可以达到与全连接层同样的功效,依然能保证同样的检准率(经评论区

@机器学习

的提醒,1*1卷积的使用,对比fc并不能 减少模型参数,特此说明)。

这时候人们就又开始重新思考,全连接层在卷积神经网络中真正的作用是什么了。于是就又有了

@魏秀参

回答中新的探索。最后总结就是,卷积神经网络中全连接层的设计,属于人们在传统特征提取+分类思维下的一种"迁移学习"思想,但在这种end-to-end的模型中,其用于分类的功能其实是被弱化了,而全连接层参数过多的缺点也激励着人们设计出更好的模型替代之达到更好的效果。同时,也将促进我们更深入地探讨其中的奥秘。

 

 

 

 

作者:魏秀参
链接:https://www.zhihu.com/question/41037974/answer/150522307
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

全连接层到底什么用?我来谈三点。

  • 全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽(注1)。
  • 目前由于全连接层参数冗余(仅全连接层参数就可占整个网络参数80%左右),近期一些性能优异的网络模型如ResNet和GoogLeNet等均用全局平均池化(global average pooling,GAP)取代FC来融合学到的深度特征,最后仍用softmax等损失函数作为网络目标函数来指导学习过程。需要指出的是,用GAP替代FC的网络通常有较好的预测性能。具体案例可参见我们在ECCV'16(视频)表象性格分析竞赛中获得冠军的做法:「冠军之道」Apparent Personality Analysis竞赛经验分享 - 知乎专栏 ,project:Deep Bimodal Regression for Apparent Personality Analysis
  • 在FC越来越不被看好的当下,我们近期的研究(In Defense of Fully Connected Layers in Visual Representation Transfer)发现,FC可在模型表示能力迁移过程中充当“防火墙”的作用。具体来讲,假设在ImageNet上预训练得到的模型为\mathcal{M} ,则ImageNet可视为源域(迁移学习中的source domain)。微调(fine tuning)是深度学习领域最常用的迁移学习技术。针对微调,若目标域(target domain)中的图像与源域中图像差异巨大(如相比ImageNet,目标域图像不是物体为中心的图像,而是风景照,见下图),不含FC的网络微调后的结果要差于含FC的网络。因此FC可视作模型表示能力的“防火墙”,特别是在源域与目标域差异较大的情况下,FC可保持较大的模型capacity从而保证模型表示能力的迁移。(冗余的参数并不一无是处。)

注1: 有关卷积操作“实现”全连接层,有必要多啰嗦几句。

以VGG-16为例,对224x224x3的输入,最后一层卷积可得输出为7x7x512,如后层是一层含4096个神经元的FC,则可用卷积核为7x7x512x4096的全局卷积来实现这一全连接运算过程,其中该卷积核参数如下:

“filter size = 7, padding = 0, stride = 1, D_in = 512, D_out = 4096”

经过此卷积操作后可得输出为1x1x4096。

如需再次叠加一个2048的FC,则可设定参数为“filter size = 1, padding = 0, stride = 1, D_in = 4096, D_out = 2048”的卷积层操作。

 

 

 

2. CNN各层的分析:

 

 

1 卷积神经网络的组成部分

套路是一样的,先介绍一下深度学习的卷积神经网络(ConvNet)的组成吧。

1.1 卷积层(Convolutional Layer)

这个不多说,学过信号的都大概知道卷积是个什么玩意儿,不懂的话可以参考额。。。别参考了,好好学基础知识去吧要说明的一点是这个卷积的过程很好地模拟了人的视觉神经系统的过程,听老师说人眼看东西也就是一个卷积的过程哦,这个我可不能保证哦

卷积的动态过程

1.2 降采样层(Pooling Layer)

降采样就是用一个值来代替一块区域,这个值可以是区域的平均值,最大值,最小值等等,反正有代表性就好了,这个层的目的就是减少数据量。

降采样过程

1.3 激活函数层(Activation Layer)

激活函数的作用是把卷积后的结果压缩到某一个固定的范围,这样可以一直保持一层一层下去的数值范围是可控的。比如一些常见的激活函数

  • sigmoid:控制在[0, 1]
  • tanh:控制在[-1, 1]
  • ReLU:控制在[0, 正无穷]
  • 还有好多新的激活函数,这儿就不举例了,知道它们的作用就OK

    我用的是ReLU激活函数

1.4 标准化层(Normalization Layer)

没什么大不了的,就用了个公式来标准化一下

1.5 全连接层(Full Connected Layer)

全连接层给人的感觉就是人工神经网络的那样,把所有的网络结点都用一些带权重的值连接起来。这个层一般出现在CNN的后面部分,这个层很长,可以作为图像的特征向量来用,也有论文是把全连接层放到SVM,RF,Adaboost,ANN等传统的分类器里头分类,来代替CNN最后的softmax层,那我也做过这个实验,得到的结果并不好,我不知道这些大牛是怎么弄的。这儿打个问号?

顾名思义,所有的结点都是连接起来的,这儿的权重会特别多,因为全连接了嘛

1.6 扔掉层(Dropout Layer)

这个层我不知道怎么翻,反正作用就是把一些没用的结点给扔掉。

  • 这个思路参考了人的大脑的实际运行状态,研究表明大脑在分析图像的过程中真正被激活的神经元并不多,具体哪些被激活靠得就是先前的学习,和留下来的记忆。那如果没有这个dropout层,我们的CNN在判断所有的图像是相当于所有的结点都激活了,这样和现实的情况不符,所以我们要模拟大脑,把一下没什么用的结点给扔掉。
  • 这个层的作用是加快运算速度,防止过拟合,让网络更加的普适,更加有所谓的“鲁棒性”——装个逼,其实就是更好哈哈:)
  • 实现的方法是设置一个阈值,如果这个结点与结点之间的权重高于这个值,那么说明这是强关系,我们保留,如果权重低于这个值,说明关系不大,我们把它扔掉得了。!!这个实现方法说错了,特别感谢@hzzzol同学的指正,正确的解释应该是:
  • Dropout是在训练过程中以一定概率1-p将隐含层节点的输出值清0,而用bp更新权值时,不再更新与该节点相连的权值。什么意思,就是这个就是个概率问题,和权值的大小,激活程度无关哦,被抽中的结点无条件被丢掉。(Dropout简单理解DropConnect简单理解

作者:MrGiovanni 链接:http://www.jianshu.com/p/58168fec534d 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

3 激活函数的作用

 

作者:lee philip
链接:https://www.zhihu.com/question/22334626/answer/21036590
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

翻译为激活函数(activation function)会更好。

激活函数是用来加入非线性因素的,因为线性模型的表达能力不够。

以下,同种颜色为同类数据。

某些数据是线性可分的,意思是,可以用一条直线将数据分开。比如下图:

这时候你需要通过一定的机器学习的方法,比如感知机算法(perceptron learning algorithm) 找到一个合适的线性方程。

但是有些数据不是线性可分的。比如如下数据:

第二组数据你就没有办法画出一条直线来将数据区分开。

这时候有两个办法,第一个办法,是做线性变换(linear transformation),比如讲x,y变成x^2,y^2,这样可以画出圆形。如图所示:


如果将坐标轴从x,y变为以x^2,y^2为标准,你会发现数据经过变换后是线性可分的了。大致示意图如下:
另外一种方法是引入非线性函数。我们来看异或问题(xor problem)。以下是xor真值表

这个真值表不是线性可分的,所以不能使用线性模型,如图所示


我们可以设计一种神经网络,通过激活函数来使得这组数据线性可分。
激活函数我们选择阀值函数(threshold function),也就是大于某个值输出1(被激活了),小于等于则输出0(没有激活)。这个函数是非线性函数。

神经网络示意图如下:


其中直线上的数字为权重。圆圈中的数字为阀值。第二层,如果输入大于1.5则输出1,否则0;第三层,如果输入大于0.5,则输出1,否则0.

我们来一步步算。

第一层到第二层(阀值1.5)

第二层到第三层(阀值0.5)


可以看到第三层输出就是我们所要的xor的答案。

经过变换后的数据是线性可分的(n维,比如本例中可以用平面),如图所示:

总而言之,激活函数可以引入非线性因素,解决线性模型所不能解决的问题。

 

 

 

 

 

4 各种神经网络的结构图:

http://www.infoq.com/cn/articles/teach-you-how-to-read-all-kinds-of-neural-networks

 

from https://blog.csdn.net/BlueBlueSkyZ/article/details/80558252

前言

一般来说,卷积神经网络会有三种类型的隐藏层——卷积层、池化层、全连接层。卷积层和池化层比较好理解,主要很多教程也会解释。

  • 卷积层(Convolutional layer)主要是用一个采样器从输入数据中采集关键数据内容;
  • 池化层(Pooling layer)则是对卷积层结果的压缩得到更加重要的特征,同时还能有效控制过拟合。

但是可怜的全连接层(Fully Connected layer)很多时候都被忽略了,可能大佬们觉得我们都能懂吧。。查阅了一下资料,大概理解了全连接层的作用,即将前面经过多次卷积后高度抽象化的特征进行整合,然后可以进行归一化,对各种分类情况都输出一个概率,之后的分类器(Classifier)可以根据全连接得到的概率进行分类。 
这是我理解过后的总结,如有不当之后也敬请指正。当然结合了国内外很多篇文章才最终大概理解了全连接层的作用。最近又沉迷翻译,这篇文章就准备翻译下stackexchange里面关于CNN中FC layer的作用。 
水平有限,欢迎各位指正。 
原文链接

卷积神经网络中全连接层作用(What do the fully connected layers do in CNNs?)

Question:我理解了卷积层和池化层的作用,但是我不能理解卷积神经网络中全连接层的作用。为什么不能将前一层直接输出到输出层呢?

Answer:卷积层的输出代表着数据的高级特征。当输出可以被扁平化并且能够被连接到输出层时,添加一个全连接层通常能以简易的方式学习到这些非线性组合特征。 
实质上,卷积层提供了一个有意义、低维度且几乎不变的特征空间,然后全连接层在这个空间里学习一个(非线性)方程。 
注:从全连接层转换为卷积层是很方便的。将这些顶层全连接层转换为卷积层是很有帮助的。

Q:所以我们通过反向传播来学习连接层之间的权重,这是否正确?

A:是的,错误通过反向传播从全连接层传播到卷积层和池化层。

Q:所以,全连接层的目的就是就像PCA(主成分分析),它通过学习全部的权重来整合了“好”的特征并减少其他特征。

A:这主要取决于你特征的非线性组合。所有的特征都可能是好的(假设你没有死掉的特征),那么这些特征的组合就可能更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值