1,概念简介

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一。

卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),可以进行监督学习和非监督学习,其隐含层内的卷积核参数共享和层间连接的稀疏性使得卷积神经网络能够以较小的计算量对格点化(grid-like topology)特征,例如像素和音频进行学习、有稳定的效果且对数据没有额外的特征工程(feature engineering)要求,并被大量应用于计算机视觉、自然语言处理等领域。

卷积神经网络可用于分类,检索,识别(分类和回归),分割,特征提取,关键点定位(姿势识别)等等。

2,与神经网络的对比

左图为神经网络(全连接结构),右图为卷积神经网络。卷积神经网络组成:输入层;卷积层;激活函数;池化层;全连接层(INPUT - CONV - RELU - POOL - FC)

3,卷积层

卷积层是整个神经网络中最重要的一层,该层最核心的部分为过滤器,或者称为卷积核,卷积核有大小和深度两个属性,大小常用的有3X3、5X5,也有11X11的卷积核,而深度通俗一点理解就是卷积核的个数。卷积核的大小和深度均由人工指定,而权重参数则在初始化的时候由程序随机生成,并在后期训练过程中不断优化这些权重值,以达到最好的分类效果。卷积的过程就是用这些权重值不断的去乘这些图片的RGB值,以提取图片数据信息。

tf.nn.conv2d(i, k,strides,padding='VALID')

卷积不仅可以提取图片信息,也可以达到降维效果。如果希望卷积后的特征值维度和原图片一致,需要设置padding值(全零填充)为SAME(如果为VALID表示不填充),其中i为输入图片,k为卷积核大小,strides为移动步长(移动步长>1也可以达到降维的效果)。

假设输入图像的大小为(32,32,3),卷积核大小为(5,5,3)。卷积核的深度和输入图像的深度必须一致(这里为3)。

卷积(特征提取)的结果是对于特定大小的区域(大小和卷积核大小相同)提取一个特征值来代表该区域,遍历图片的所有区域便得到一个由特征值组成的特征图。在卷积过程中可指定卷积核的个数(大小都相同),便可得到多个特征图。

卷积的对象除了输入的图像外,还可以是特征图:
实际卷积的结果(根据提取特征的结果进一步完成分类或回归的任务):

卷积的计算示例:
输入图像大小(7,7,3),指定卷积核大小(3,3,3),通过卷积核窗口的移动(从左到右,由上至下)去遍历图像的所有区域(做内积运算,即对应元素相乘再求和),然后对各个深度的结果求和再加上偏置项b,得到最终结果。各个卷积核中的参数通过卷积神经网络的前向传播和反向传播调节

滑动步长(stride)

滑动步长越大,得到的特征图越小,一般情况希望特征值越多越好,因此滑动步长一般较小,但考虑到计算量,滑动步长不能过小。

在卷积过程中不同的像数点对结果贡献的信息量有可能不同。为了更好地利用边缘像素点的信息,在边缘外围增加若干个填充层(pading),下图为0填充:


计算输出大小:
输入大小为:W1 x H1 x D1;需要指定的超参数:filter个数(K),filter大小(F),步长(S),边界填充(P)
输出大小的公式:


卷积参数(权重)共享原则

每个特征图上所有的特征值都进行权重w共享,并拥有自己的偏置项b,故对于上图的卷积操作共涉及的参数个数计算如下:

卷积计算完成后,往往会加入一个修正线性单元ReLU函数,也就是把数据非线性化。为什么要把数据进行非线性化呢,这是因为非线性代表了输入和输出的关系是一条曲线而不是直线,曲线能够刻画输入中更为复杂的变化。比如一个输入值大部分时间都很稳定,但有可能会在某个时间点出现极值,但是通过ReLU函数以后,数据变得平滑,这样以便对复杂的数据进行训练。

ReLU是分段线性的,当输入为非负时,输出将与输入相同;而当输入为负时,输出均为0。它的优点在于不受“梯度消失”的影响,且取值范围为[0,+∞];其缺点在于当使用了较大的学习速率时,易受达到饱和的神经元的影响。

4,池化层

卷积层后一般会加入池化层,池化层可以非常有效地缩小矩阵的尺寸,从而减少最后全链层中的参数,使用池化层既可以加快计算速度也有防止过拟合问题的作用。

池化层也存在一个过滤器,但是过滤器对于输入的数据的处理并不是像卷积核对输入数据进行节点的加权和,而只是简单的计算最大值或者平均值。过滤器的大小、是否全0填充、步长等也是由人工指定,而深度跟卷积核深度不一样,卷积层使用过滤器是横跨整个深度的,而池化层使用的过滤器只影响一个深度上的节点,在计算过程中,池化层过滤器不仅要在长和宽两个维度移动,还要在深度这个维度移动。使用最大值操作的池化层被称之为最大池化层,这种池化层使用得最多,使用平均值操作的池化层被称之为平均池化层,这种池化层的使用相对要少一点。

Tensorflow程序很容易就可以实现最大值池化层的操作:

pool = tf.nn.max_pool(i, ksize=[1,3,3,1], stride=[1,2,2,1], padding='SAME')# i为输入矩阵
# ksize为过滤器尺寸,其中第一个和第四个值必须为1,表示过滤器不可以垮不同的输入样列和节点矩阵深度。中间的两个值为尺寸,常使用2*2或3*3。
# stride为步长,第一个值和第四个值与ksize一样
# padding为全0填充,‘SAME’表示使用全0填充,‘VALID’表示不使用全0填充

池化层(Pooing layer)一般是对特征图进行特征压缩(利用区域内均值或最大值代表该区域,无权重参数)操作(下采样)。

Pooing操作结果示例:
5,全连接层

在KNN或线性分类中有对数据进行归一化处理,而在神经网络中,也会做数据归一化的处理,原因和之前的一样,避免数据值大的节点对分类造成影响。归一化的目标在于将输入保持在一个可接受的范围内。例如,将输入归一化到[0.0,1.0]区间内。在卷积神经网络中,对数据归一化的处理我们有可能放在数据正式输入到全连接层之前或之后,或其他地方,每个网络都可能不一样。

全链层的作用就是进行正确的图片分类,不同神经网络的全连接层层数不同,但作用确是相同的。输入到全连接层的神经元个数通过卷积层和池化层的处理后大大的减少了,比如以AlexNet为例,一张227*227大小,颜色通道数为3的图片经过处理后,输入到全连接层的神经元个数有4096个,最后softmax的输出,则可以根据实际分类标签数来定。

在全连接层中,会使用dropout以随机的去掉一些神经元,这样能够比较有效地防止神经网络的过拟合。相对于一般如线性模型使用正则的方法来防止模型过拟合,而在神经网络中Dropout通过修改神经网络本身结构来实现。对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个数不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。

6,前向传播和反向传播原理

6.1 卷积层的前向传播:

这里输入图像的数据x有4个维度分别代表编号(一般在实际操作中都是通过batch对输入数据进行批量操作的,这里是去一个batch中的第一个图片举例说明),图片通道数(RGB),图片高h,图片宽w。上图选择3个卷积核,其中4个维度分别代表卷积核的编号,与图片通道数相对应的编号,卷积核的高和宽。

6.2 卷积层的反向传播:

卷积层的反向传播的目的是为了更新权重参数w,上图展示了第一个卷积核的反向传播过程,为了更新参数w。因此要先算出dJ/dw。假设上一层会传过来一个梯度dJ/dout,根据链式求导法则,因此dJ/dw = dJ/dout * dout/dw =dJ/dout * x 。在计算机中方便为变量命名的缘故,将dJ/dout记为dout,dJ/dw记为dw,即图中的情况。后面也用这个记号来讲。

首先要清楚:dw 和 w 的尺寸是一样的。一个点乘以一个区域还能得到一个区域。那么反向传播过程就相当于:用dout中的一个元素乘以输入层划窗里的矩阵便得到一个dw矩阵;然后滑动滑窗,继续求下一个dw,依次下去,最后将得到的多个dw相加,执行 w = w - dw 就完成了反向传播的计算。

6.3 池化层的前向传播和反向传播

上图分别对应mean和max两种池化方式前向传播和反向传播的结果。对于mean池化方式在反向传播时是将对应值直接均摊到对应区域;对于max池化方式在反向传播时是只在原来最大值处有值(前后相同),对应区域的其他位置均为0。

卷积神经网络原理简介相关推荐

  1. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  2. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)

    DL之CNN:卷积神经网络算法简介之原理简介--CNN网络的3D可视化(LeNet-5为例可视化) CNN网络的3D可视化 3D可视化地址:http://scs.ryerson.ca/~aharley ...

  3. DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略

    DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图).七大层级结构(动态图详解卷积/池化+方块法理解卷积运算).CNN各层作用及其可视化等之详细攻略 目录 CNN 的层级结构及相关概念 ...

  4. 卷积神经网络原理图文详解

    卷积神经网络原理详解 前言 卷积(convolution) 池化(pooling) 正则化(normalization)/ReLU 全连接(fully connect) 全连接的另一种解释方式 神经网 ...

  5. 卷积神经网络(CNN)简介

    卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...

  6. 解析深度学习:卷积神经网络原理与视觉实践

    解析深度学习:卷积神经网络原理与视觉实践 魏秀参 著 ISBN:9787121345289 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2018-11-01

  7. DL之CNN:卷积神经网络算法简介之卷积矩阵、转置卷积(反卷积Transpose)、膨胀卷积(扩张卷积Dilated/带孔卷积atrous)之详细攻略

    DL之CNN:卷积神经网络算法简介之卷积矩阵.转置卷积(反卷积Transpose).膨胀卷积(扩张卷积Dilated/带孔卷积atrous)之详细攻略 目录 卷积矩阵的简介 卷积.转置卷积--Tran ...

  8. 脉冲神经网络原理及应用pdf_CNN卷积神经网络原理讲解+图片识别应用(附源码)...

    一.机器如何识图 先给大家出个脑筋急转弯:在白纸上画出一个大熊猫,一共需要几种颜色的画笔?--大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来. ...

  9. 【深度学习】5:CNN卷积神经网络原理

    前言:先坦白的说,深度神经网络的学习在一开始对我造成的困扰还是很大的,我也是通过不断地看相关的视频资料.文献讲解尝试去理解记忆.毕竟这些内容大多都是不可查的,我们看到的都只是输入输出的东西,里面的内部 ...

  10. 深度学习 卷积神经网络原理

    深度学习 卷积神经网络原理 一.前言 二.全连接层的局限性 三.卷积层 3.1 如何进行卷积运算? 3.2 偏置 3.3 填充 3.4 步长 3.5 卷积运算是如何保留图片特征的? 3.6 三维卷积 ...

最新文章

  1. iOS 获取指定时间的前后N个月
  2. Python使用matplotlib可视化面积图(Area Chart)、通过给坐标轴和曲线之间的区域着色可视化面积图、在面积图的指定区域添加箭头和数值标签
  3. 我与AI:我的“机器学习”过程
  4. flutter image boxfit
  5. iTextSharp应用,生成pdf
  6. Class的getResource与ClassLoader的getResource路径/问题
  7. 华为荣耀30pro鸿蒙内测版,荣耀手机用户放心了 消息称荣耀30 Pro正在内测华为鸿蒙OS...
  8. linux的日记文件放哪,linux的日记文件在哪_网站服务器运转保护,linux
  9. tortoise清理本地分支_使用TortorliseGit(小乌龟)删除本地分支,远程分支
  10. 定义m是第一个数,之后的每个数都是前一个的平方根,一共有n个数,计算总和。
  11. mx350显卡天梯图_五月显卡性能排行 台式显卡天梯图2020年5月最新版
  12. Error: java.lang.RuntimeException: Some file crunching failed, see logs for details
  13. WhereDidMyTimeGo - 一款帮你记录每天的时间分配的MacOS app
  14. MVC、MVP、MVI、MVVM 和 VIPER 设计模式
  15. Flutter之Card组件
  16. 2021年全球运动文胸收入大约10690百万美元,预计2028年达到21150百万美元
  17. 扒取网页的mp3资源
  18. vista下安装delphi7
  19. 一招搞定GitHub下载加速!通过gitee下载
  20. AutoCAD2023软件安装教程+安装包下载

热门文章

  1. 十代主板改win7_微星(MSI)z490主板装win7系统及bios设置教程(支持10代usb驱动)
  2. jspx学习笔记(一)
  3. 最小二乘支持向量机(基于MATLAB)
  4. python—Django面试题汇总
  5. 数据加密 第四篇:对称密钥
  6. 织梦插件,dede采集、发布、翻译伪原创插件
  7. linux 中文乱码 解决方法
  8. 智慧交通信号控制系统梗概
  9. JQ6500语音模块
  10. 电容屏和电阻屏的区别