【深度学习】卷积神经网络(CNN)原理
【深度学习】卷积神经网络原理
- 1. 卷积神经网络的组成
- 2. 卷积层
- 2.1 卷积运算过程
- 3. padding-零填充
- 3.1 Valid and Same卷积
- 3.2 奇数维度的过滤器
- 4. stride-步长
- 5. 多通道卷积
- 5.1 多卷积核(多个Filter)
- 6. 卷积总结
- 7. 池化层(Pooling)
- 8. 全连接层
- 9. 总结
1. 卷积神经网络的组成
- 定义
- 卷积神经网络由一个或多个卷积层、池化层以及全连接层等组成。与其他深度学习结构相比,卷积神经网络在图像等方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他浅层或深度神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。
我们来看一下卷积网络的整体结构什么样子。
其中包含了几个主要结构
- 卷积层(Convolutions)
- 池化层(Subsampling)
- 全连接层(Full connection)
- 激活函数
2. 卷积层
- 目的
- 卷积运算的目的是提取输入的不同特征,某些卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网路能从低级特征中迭代提取更复杂的特征。
- 参数:
- size:卷积核/过滤器大小,选择有1 * 1, 3 * 3, 5 * 5(为什么是奇数个)
- padding:零填充,Valid 与Same
- stride:步长,通常默认为1
- 计算公式
2.1 卷积运算过程
对于之前介绍的卷积运算过程,我们用一张动图来表示更好理解些。一下计算中,假设图片长宽相等,设为N
- 一个步长,3 X 3 卷积核运算
假设是一张5 X 5 的单通道图片,通过使用3 X 3 大小的卷积核运算得到一个 3 X 3大小的运算结果(图片像素数值仅供参考)
我们会发现进行卷积之后的图片变小了,假设N为图片大小,F为卷积核大小
相当于N−F+1=5−3+1=3N - F + 1 = 5 - 3 + 1 = 3N−F+1=5−3+1=3
如果我们换一个卷积核大小或者加入很多层卷积之后,图像可能最后就变成了1 X 1 大小,这不是我们希望看到的结果。并且对于原始图片当中的边缘像素来说,只计算了一遍,二对于中间的像素会有很多次过滤器与之计算,这样导致对边缘信息的丢失。
- 缺点
- 图像变小
- 边缘信息丢失
3. padding-零填充
零填充:在图片像素的最外层加上若干层0值,若一层,记做p =1。
- 为什么增加的是0?
因为0在权重乘积和运算中对最终结果不造成影响,也就避免了图片增加了额外的干扰信息。
这张图中,还是移动一个像素,并且外面增加了一层0。那么最终计算结果我们可以这样用公式来计算:
5+2∗p−3+1=55 + 2 * p - 3 + 1 = 55+2∗p−3+1=5
P为1,那么最终特征结果为5。实际上我们可以填充更多的像素,假设为2层,则
5+2∗2−3+1=75 + 2 * 2 - 3 + 1 = 75+2∗2−3+1=7,这样得到的观察特征大小比之前图片大小还大。所以我们对于零填充会有一些选择,该填充多少?
3.1 Valid and Same卷积
有两种形式,所以为了避免上述情况,大家选择都是Same这种填充卷积计算方式
- Valid :不填充,也就是最终大小为
- (N−F+1)∗(N−F+1)(N - F + 1) * (N - F + 1)(N−F+1)∗(N−F+1)
- Same:输出大小与原图大小一致,那么 NNN 变成了N+2PN + 2PN+2P
- (N+2P−F+1)∗(N+2P−F+1)(N + 2P - F + 1) * (N + 2P - F + 1)(N+2P−F+1)∗(N+2P−F+1)
那也就意味着,之前大小与之后的大小一样,得出下面的等式
(N+2P−F+1)=N(N + 2P - F + 1) = N(N+2P−F+1)=N
P=F−12P = \frac{F -1}{2}P=2F−1
所以当知道了卷积核的大小之后,就可以得出要填充多少层像素。
3.2 奇数维度的过滤器
通过上面的式子,如果F不是奇数而是偶数个,那么最终计算结果不是一个整数,造成0.5,1.5…这种情况,这样填充不均匀,所以也就是为什么卷积核默认都去使用奇数维度大小
1 x 1,3 x 3, 5 x 5,7 x 7
另一个解释角度
- 奇数维度的过滤器有中心,便于指出过滤器的位置
当然这个都是一些假设的原因,最终原因还是在F对于计算结果的影响。所以通常选择奇数维度的过滤器,是大家约定成俗的结果,可能也是基于大量实验奇数能得出更好的结果。
4. stride-步长
以上例子中我们看到的都是每次移动一个像素步长的结果,如果将这个步长修改为2,3,那结果如何?
这样如果以原来的计算公式,那么结果
N+2P−F+1=6+0−3+1=4N + 2P - F + 1 = 6 + 0 -3 +1 = 4N+2P−F+1=6+0−3+1=4
但是移动2个像素才得出一个结果,所以公式变为
N+2P−F2+1=1.5+1=2.5\frac{N + 2P - F}{2} + 1 = 1.5 + 1 = 2.52N+2P−F+1=1.5+1=2.5,如果相除不是整数的时候,向下取整,为2。这里并没有加上零填充。
所以最终的公式就为:
对于输入图片大小为N,过滤器大小为F,步长为S,零填充为P,
(N+2P−FS+1),(N+2P−FS+1)(\frac{N + 2P - F}{S} + 1),(\frac{N + 2P - F}{S} + 1)(SN+2P−F+1),(SN+2P−F+1)
5. 多通道卷积
当输入有多个通道(channel)时(例如图片可以有 RGB 三个通道),卷积核需要拥有相同的channel数,每个卷积核 channel 与输入层的对应 channel 进行卷积,将每个 channel 的卷积结果按位相加得到最终的 Feature Map。
5.1 多卷积核(多个Filter)
当有多个卷积核时,可以学习到多种不同的特征,对应产生包含多个 channel 的 Feature Map, 例如上图有两个 filter,所以 output 有两个 channel。这里的多少个卷积核也可理解为多少个神经元。
相当于我们把多个功能的卷积核的计算结果放在一起,能够检测到图片中不同的特征(边缘检测)
6. 卷积总结
我们来通过一个例子看一下结算结果,以及参数的计算
- 假设我们有10 个Filter,每个Filter3 X 3 X 3(计算RGB图片),并且只有一层卷积,那么参数有多少?
计算:每个Filter参数个数为:3 * 3 * 3 + 1 bias = 28个权重参数,总共28 * 10 = 280个参数,即使图片任意大小,我们这层的参数也就这么多。
- 假设一张200 * 200 * 3的图片,进行刚才的FIlter,步长为1,最终为了保证最后输出的大小为200 * 200,需要设置多大的零填充
(N+2P−Fs+1)=N(\frac{N + 2P - F}{s} + 1) = N(sN+2P−F+1)=N
P=(N−1)∗s+F−N2=199+3−2002=1P = \frac{(N -1) * s + F - N}{2} = \frac{199 + 3 - 200}{2} = 1P=2(N−1)∗s+F−N=2199+3−200=1
卷积层充当特征提取的角色,但是并没有减少图片的特征数量,在最后的全连接层依然面临大量的参数,所以需要池化层进行特征数量的减少
7. 池化层(Pooling)
池化层主要对卷积层学习到的特征图进行亚采样(subsampling)处理,主要由两种:
- 最大池化:Max Pooling,取窗口内的最大值作为输出
- 平均池化:Avg Pooling,取窗口内的所有值的均值作为输出
意义在于:
- 降低了后续网络层的输入维度,缩减模型大小,提高计算速度
- 提高了Feature Map 的鲁棒性,防止过拟合
对于一个输入的图片,我们使用一个区域大小为2 * 2,步长为2的参数进行求最大值操作。同样池化也有一组参数,f,sf, sf,s,得到2 * 2的大小。当然如果我们调整这个超参数,比如说3 * 3,那么结果就不一样了,通常选择默认都是f=2∗2,s=2f = 2 * 2, s = 2f=2∗2,s=2
池化超参数特点:不需要进行学习,不像卷积通过梯度下降进行更新。
如果是平均池化则:
8. 全连接层
卷积层+激活层+池化层可以看成是CNN的特征学习/特征提取层,而学习到的特征(Feature Map)最终应用于模型任务(分类、回归):
- 先对所有 Feature Map 进行扁平化(flatten, 即 reshape 成 1 x N 向量)
- 再接一个或多个全连接层,进行模型学习
9. 总结
- 掌握卷积神经网路的组成
- 掌握卷积的计算过程
- 卷积过滤器个数
- 卷积过滤器大小
- 卷积过滤器步数
- 卷积过滤器零填充
- 掌握池化的计算过程原理
【深度学习】卷积神经网络(CNN)原理相关推荐
- 深度学习--卷积神经网络CNN
主要内容 1. 神经网络 1.1 感知器 1.2 Sigmoid神经元 1.3 神经网络 2. 卷积神经网络CNN 2.1 卷积神经网络结构 2.2 数据输入层 2.3 卷积层 2.3.1 局部感知( ...
- 深度学习——卷积神经网络CNN
这两天看了不少讲卷积神经网络的文章和视频,由于我本人才疏学浅,在学习过程中基本上是一头雾水,导致的结果就是不过幸好,在快要绝望的时候,我在知乎上发现了一篇宝藏文章卷积神经网络CNN完全指南终极版这篇文 ...
- 深度学习 --- 卷积神经网络CNN(LeNet-5网络学习算法详解)
上一节我们详细探讨了LeNet-5网络的架构,但是还没有解释该网络是如何进行学习的,如何更新权值的,本节将接着上一节进一步CNN的学习机制和权值更新过程,这里请大家一定要对CNN网络有一个清晰的认识, ...
- 深度学习 --- 卷积神经网络CNN(LeNet-5网络详解)
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈型的神经网络,其在大型图像处理方面有出色的表现,目前已经被大范围使用到图像分类.定位等领域中.相比于其他神经网 ...
- 一种基于深度学习(卷积神经网络CNN)的人脸识别算法-含Matlab代码
目录 一.引言 二.算法的基本思想 三.算法数学原理 3.1 权值共享 3.2 CNN结构 四.基于卷积神经网络的人脸识别算法-Matlab代码 五.Matlab源代码获取 一.引言 在工程应用中经常 ...
- 深度学习卷积神经网络CNN之 VGGNet模型主vgg16和vgg19网络模型详解说明(理论篇)
1.VGG背景 2. VGGNet模型结构 3. 特点(创新.优缺点及新知识点) 一.VGG背景 VGGNet是2014年ILSVRC(ImageNet Large Scale Visual R ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(1)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习 卷积神经网络原理
深度学习 卷积神经网络原理 一.前言 二.全连接层的局限性 三.卷积层 3.1 如何进行卷积运算? 3.2 偏置 3.3 填充 3.4 步长 3.5 卷积运算是如何保留图片特征的? 3.6 三维卷积 ...
- [Python人工智能] 八.卷积神经网络CNN原理详解及TensorFlow编写CNN
从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章介绍了什么是过拟合,并采用droput解决神经网络中过拟合的问题,以TensorFlow和sklearn的lo ...
- 卷积神经网络CNN原理详解(一)——基本原理
卷积神经网络CNN原理详解(一)--基本原理 转载过来为了自己以后学习方便,大家请看原文章 为什么要用神经网络? 特征提取的高效性. 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做, ...
最新文章
- 多视角透析Struts2
- 1.1 MySQL OCP 实战环境准备
- JVM实用参数(七)CMS收集器
- Mongodb和redis书籍调研
- JavaScript --- this
- bzoj4144【AMPPZ2014】Petrol
- python数据可视化 - matplotlib专题:带数据标签的双batch的Bar图绘制示例
- 2012年2月份第1周51Aspx源码发布详情
- 数据结构 C++实现 基于不同策略的英文单词的词频统计和检索系统(糅合版)
- Modelica生态工具开发利器——MWorks.SDK 2.0
- simpleDateFormat 和 TimeZone
- mac使用word怎么显示左侧目录树
- 5g是多大一勺_5g是多大一勺(5克的勺子有多大)
- 关于纳什均衡与博弈论
- 姿态估计1-07:FSA-Net(头部姿态估算)-源码无死角讲解(2)-网络框架整体结构分析
- [独家提供][亲自制作]完美ie8绿色中文版版支持win7x64
- 计算机最主要的硬盘,电脑硬盘应该分几个区比较合适?
- 哪有什么岁月静好,只是有人在替你负重前行。致敬消防员、医护工作者、平凡英雄,感恩有你们。
- Java线程安全(卖票案例) 如何解决线程安全(synchronized ,显示锁Lock)
- 折磨人的商业计划书 (ZT)