机器学习笔记

1.全链接层的做用是什么?html

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用于分类。dom

后来将神经网络用于图像分类中,面对早期的小分辨率图片,咱们依旧可使用特征提取+神经网络分类的模式,也能够直接将每一个像素点做为特征输入用于神经网络的分类。但面对后期的大分辨率图像,若是依旧使用逐像素点输入的方式,很明显将会致使全链接中的权值过于稀疏,形成模型训练的困难。机器学习

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

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

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

因而一部分优秀的人们想到了使用svd等方式减小参数,另外一部分优秀的人们开始思考: 是否真的须要使用全链接层,或者有无能够替代全链接层的方法?tornado

因而就出现了如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:这主要取决于你特征的非线性组合。全部的特征均可能是好的(假设你没有死掉的特征),那么这些特征的组合就可能更好。