CNN 全连接层与卷积层深刻理解
CNN 全连接层与卷积层
卷积和全连接关系
卷积取的是局部特征,全连接就是把以前的局部特征重新通过权值矩阵组装成完整的图。
因为用到了所有的局部特征,所以叫全连接
什么是全连接层
全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数层等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。在实际使用中,全连接层可由卷积操作实现:对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽。
在 CNN 中,全连接常出现在最后几层,用于对前面设计的特征做加权和。比如 mnist,前面的卷积和池化相当于做特征工程,后面的全连接相当于做特征加权。(卷积相当于全连接的有意弱化,按照局部视野的启发,把局部之外的弱影响直接抹为零影响;还做了一点强制,不同的局部所使用的参数居然一致。弱化使参数变少,节省计算量,又专攻局部不贪多求全;强制进一步减少参数。少即是多) 在 RNN 中,全连接用来把 embedding 空间拉到隐层空间,把隐层空间转回 label 空间等
例如经过卷积,relu后得到3x3x5的输出。
那它是怎么样把3x3x5的输出,转换成1x4096的形式?
很简单,可以理解为在中间做了一个卷积
从上图我们可以看出,我们用一个3x3x5的filter 去卷积激活函数的输出,得到的结果就是一个fully connected layer 的一个神经元的输出,这个输出就是一个值。因为我们有4096个神经元。我们实际就是用4096个3x3x5的卷积层去卷积激活函数的输出。
全连接与卷积的联系
全连接神经网络随着隐藏层和隐藏节点的增加,参数的增加量是十分巨大的。正是因为这些大量的参数,使得神经网络模型有着极强的学习能力,但是也造成了计算的困难。卷积神经网络的发明很好是解决了这一问题。为了很好的了解卷积的概念,我们可以先从生物学的角度进行理解。
当我们欣赏一幅图片的时候,大概有两种欣赏方式。其一是纵观全局,这便相当与全连接神经网络方式;其二是关注局部,然后保证观察角度不变,进行上下左右平移,来观察整张图片,这便相当于卷积神经网络。
每个圆圈可理解为隐藏层的结点,连线的角度可以抽象成权值W,连线所在图片中的对应点的像素值为X,加上偏置即为WX+b模型。当以全连接层方式观察时,每变换一个结点,相当于变换一个观察角度,所有的连线角度都会改变,造成了所有的W都不一样,所以全连接层的参数会很多。反观卷积层方式,当选定一个核(后面解释,即图中彩色长方形区域)大小时,变换每个结点时,通过核的上下左右移动来遍历整张图片,在此过程中,连线的角度不变,即权值的大小不变,由次可以解释卷积方式参数大量下降的原理。
卷积的核函数
g(x,y)即为核,每个小方格上都有一个标量代表权重w。f(x,y)为输入,每个小方格上都有一个标量代表该图片在该点上的像素值。卷积的定义是两个变量在某个范围内相乘后求和是结果。对应图中就是让核与输入两个平面平行对应,每个对应点进行相乘后求和,得到的值作为输出。
因为核是一个矩阵,其存在大小,所有经过卷积操作后的输出维度总是略小于输入维度。例如上图所示,一个3×3的单通道输入,经过一个3×3大小的核映射,得到的输出维度为1×1。
很多情况下,我们希望得到是输出与输入的大小格式保持一致,此时需要在输入的四周填充一圈空白,使核遍历图片后得到的映射输出大小不变。填充的空白大小与核的大小成正相关。步幅的作用是用来降维的,如图:当步幅为1时,将一个5×5的输入填充成7×7,再经过一个3×3的核映射,其输出维度不变。若此时将步幅调整为2,则只能得到一个3×3是输出维度。如下图所示:
通道
一般来说,我们会将一个图片抽象为思维[数量,长,宽,色彩]。例如对于一张3232像素的彩色照片来讲,我们一般将其抽象为向量[1,32,32,3]。
除此之外,为了保证模型的学习能力,我们一般会从多个观察角度对图片进行观察,即取不同的核,如下图,我们对一张32×32像素的彩色照片去四个核B进行映射(四个不同的观察角度),得到的输出格式是一个向量[1,30,30,4]
输入[1,32,32,3]:代表数量为1,大小为3232,色彩通道为3。
核[4,3,5,5]:代表4个不同的核,每个核映射出来的特征分布有3个分别对应3个不同的色彩通道,核的大小为55。
输出[1,30,30,4]:一般来说我们将3个色彩通道的像素值相加,即将3降维为1,输出大小为30*30,因为这里没有扩充边界,所以输出维度略小于输入维度。通道4解释为因为有4个核所以对应4个不同输出。
这里要明确格式中通道1和通道4的概念,1是色彩通道,不管输入是色彩通道为几维,我们最终都会将它相加成一维;4是核数量通道,建立模型时建立几个核,即有几个输出数量。
池化与采样
池化的主要用途是用来进行特征的降维,压缩数据和减少参数。在一定程度上可以减轻过拟合现象,同时提高模型的容错性。比如以(3,3)作为一个池化单位,其含义就是每次将33=9个特征值根据池化算法合并成一个特征值。采样方式分为上采样和下采样。常用的下采样池化算法有Average pooling和Max pooling。如图,当步长为2时,可以将一个44的特征分布(feature map)下采样为22的特征分布。
上采用比较简单易理解,可以起到将信息等比放大的作用,放大的倍数与池化的大小有关。
卷积神经网络的意义
卷积神经网络在图片识别上意义重大,它的意义远不止减少参数量这一点。实际上,对图片进行卷积操作就是把卷积模板(核)与原图片做点积操作。点积的数学解释可以解释为:两个向量之间的相似度。推广到这里,可以说成核与原图的相似度,卷积的结果越小,说明图片中某位置和核的相似度越小,反之亦然。如何把核作为特征算子或者特征向量,那么卷积的过程就是通过移动核在原图中的对应位置,不断去寻找是否有一部分是符合我这个特征向量的,这在图片识别中意义重大。
对图片是识别实际上就是对底层特征的不断提取。打个比方,我们判断一张图片是否为车子,它的底层特征为像素。假设我们的卷积模型设置了10个核,它们的特征可能代表[颜色,形状,轱辘,车窗,方向盘,人…]等待,通过核在原图上进行匹配进而综合判断该图片是否为车子。
实际上,深度卷积神经网络就是去求解这千千万万个核的这么一种网络。这些核不是凭借我们的经验随便定义的,而是通过不断的学习更新得来的,深度卷积神经网络就是不断地去学习,最终求得这些核。而神经网络的不易解释性就在于此,随着模型的复杂,抽象出的核千千万万,我们难以去解释每个核的具体含义,也难以介绍每个中间层和中间结点的含义
卷积神经网络总结
总的来说,卷积神经网络层级结构可大致分为五个结构,分别为输入层,卷积层,激励层,池化层和全连接层。
输入层:与传统的神经网络模型一样,模型的输入需要进行预处理操作,常见的预处理操作有:去均值,归一化,PCA/SVD降维等。
卷积层:生物角度解释其作用就是----局部感知:人的大脑在识别图片的过程中,并不是一下子识别一整张图片的,而是对图片中的每个局部特征进行有顺序的局部识别,不断提取底层信息抽象出高层特征,然后更高层次对局部进行综合操作,从而得到全局信息。
激励层,本质就是激活函数,设置一个阈值,对卷积层的输出结果做一个非线性映射。如果不适用激活函数,每一层的输入就是上一次的线性结果,容易得出,无论多少神经网络层,输出都是输入的线性组合,即最原始的感知机模型,不可处理非线性问题。
池化层:用途是特征的降维,压缩数据和减少参数。在一定程度上可以减少过拟合现象,同时提高模型的容错性。
输出层(全连接层),经过前面的网络层对数据的处理,模型会学到一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过多,学习能力过强,又可能出现过拟合现象。因此,在全连接层中一般使用Dropout操作来随机删除神经网络中部分神经元之间的链接,以此来降低全连接层的复杂度。当数据来到全连接层时,可以理解为一个简单的多分类网络(如BP神经网络),通过softmax函数得到最终预测输出,整个模型训练完成。
softmax函数
做过多分类任务的同学一定都知道softmax函数。softmax函数,又称归一化指数函数。它是二分类函数sigmoid在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。下图展示了softmax的计算方法:
下面为大家解释一下为什么softmax是这种形式。
首先,我们知道概率有两个性质:1)预测的概率为非负数;2)各种预测结果概率之和等于1。
softmax就是将在负无穷到正无穷上的预测结果按照这两步转换为概率的。
下图为y=exp(x)的图像,我们可以知道指数函数的值域取值范围是零到正无穷。softmax第一步就是将模型的预测结果转化到指数函数上,这样保证了概率的非负性。
为了确保各个预测结果的概率之和等于1。我们只需要将转换后的结果进行归一化处理。方法就是将转化后的结果除以所有转化后结果之和,可以理解为转化后结果占总数的百分比。这样就得到近似的概率。
下面为大家举一个例子,假如模型对一个三分类问题的预测结果为-3、1.5、2.7。我们要用softmax将模型结果转为概率。步骤如下:
1)将预测结果转化为非负数
y1 = exp(x1) = exp(-3) = 0.05
y2 = exp(x2) = exp(1.5) = 4.48
y3 = exp(x3) = exp(2.7) = 14.88
2)各种预测结果概率之和等于1
z1 = y1/(y1+y2+y3) = 0.05/(0.05+4.48+14.88) = 0.0026
z2 = y2/(y1+y2+y3) = 4.48/(0.05+4.48+14.88) = 0.2308
z3 = y3/(y1+y2+y3) = 14.88/(0.05+4.48+14.88) = 0.7666
总结一下softmax如何将多分类输出转换为概率,可以分为两步:
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。
CNN 全连接层与卷积层深刻理解相关推荐
- 全连接层替换为卷积层
原博客地址:https://blog.csdn.net/qq_31347869/article/details/89484343 以下为博主个人整理内容 在学习FCN时的一些疑惑 为什么要将全连接层变 ...
- CNN全连接层怎么转化成一维向量?
正如上一篇文章所述,CNN的最后一般是用于分类是一两个全连接层,对于前面池化层输出的二维特征图是怎么转化成一维的一个向量的呢? 从上图的结构中可以看到,最后两层是两个矩形,也就是一维向量,以MNIST ...
- 卷积神经网络全连接层转换为卷积层获得heatmap
理论部分 转自 http://blog.csdn.net/u010668083/article/details/46650877 实验部分 全连接层换卷积层的出处大约是yahoo的一篇论文" ...
- 全连接层与卷积层(总结)
全连接层与卷积层: 全连接鞥 卷积层 全连接层是使用图像的全局信息,全连接层的权重是固定的,要求输入的feature map的大小也有要求,所以网络开始输入图像的大小要固定.全连接层的每一个节点都有上 ...
- 全连接神经网络、卷积神经网络
全连接神经网络.卷积神经网络 前言 全连接神经网络 介绍 结构 损失函数 梯度下降 链式法则 反向传播 总结 卷积神经网络 背景 结构 卷积(Convolution) 池化(Max Pooling) ...
- 全连接神经网络VS卷积神经网络基本概念理解
文章目录 1.全连接神经网络 2.卷积神经网络 2.1走五子棋的例子 2.2卷积核 2.3通道 2.4池化 2.5全连接层 1.全连接神经网络 全连接神经网络中,对n-1层和n层而言,n-1层的任意一 ...
- 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)
[深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...
- 合并BN层到卷积层的原理及实验
1. 为什么要合并BN层 在训练深度网络模型时,BN(Batch Normalization)层能够加速网络收敛,并且能够控制过拟合,一般放在卷积层之后.BN 层将数据归一化后,能够有效解决梯度消失 ...
- 机器学习入门(15)— 全连接层与卷积层的区别、卷积神经网络结构、卷积运算、填充、卷积步幅、三维数据卷积、多维卷积核运算以及批处理
卷积神经网络(Convolutional Neural Network,CNN)CNN 被用于图像识别.语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础. 1. 全连 ...
最新文章
- 《STM32库开发实战指南:基于STM32F103(第2版)》——2.1节仿真器简介
- PHP 如何准确取得服务器地址IP[非代理]
- java中compare语句的用法_Java RuleBasedCollator compare()用法及代码示例
- ssl1257-产生数【图论,最短路】
- asp 连接mysql_如何在ASP中连接MySQL数据库
- PowerBI 应用时间智能(生成日期表)
- MsSql.RestApi - 构建ASP.NET REST API的最简单方法
- 有关SQL Server代理的常见问题和示例
- 摄像头YUV2格式详解
- BZOJ.4337.[BJOI2015]树的同构(树哈希)
- 油田生产中的几个“三”
- hibernate教程笔记5
- ST电机库 MCSDK-FUL_5.4.4 下载
- STM8L HALT与IWDG同时使用问题
- Vue引入Froala-Editor富文本编辑器
- uboot如何驱动SD卡
- 如何自动生成目录,并设置目录格式(一看就懂)
- 领克无线carplay适配方案展示
- 密码忘了用计算机来打开,电脑开机密码忘了怎么办 用U盘修改登录密码方法
- Windows 10 离线安装.NET Framework 3.5(包括.NET 2.0和3.0)
热门文章
- 【无需代码】利用Vuforia for Unity实现简单的AR功能
- Arcgis mxd文件的打包传输和转移
- nginx的ip_hash算法
- linux 迅雷 命令行,Linux系统下使用wine运行迅雷5的方法
- IOS数据存储5种方式
- python牛顿法寻找极值_【Python讲优化】S06E10 利用牛顿法求多元函数的极值
- edward_mj退役经验帖(浙大2届Final队员陈伟杰的退役贴)
- Nginx 安装keepalived
- Matlab randint()函数用法
- JTable表头的行高是怎样设置的