热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【学习笔记】深度学习之CNN卷积神经网络

什么是CNNCNNCNN(卷积神经网络)?定义卷积神经网络(ConvolutionalNeuralNetworkConvolutionalNeuralNetworkConvolut

什么是CNNCNN(卷积神经网络)?

定义

卷积神经网络(ConvolutionalNeuralNetworkConvolutional Neural Network, CNNCNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。

卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重池化层PoolingLayerPooling Layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络在图像语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网络,卷积神经网络需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

作为深度学习中比较重要也广为人知的一种网络结构——卷积神经网络——是非常令人吃惊的。它变成了一种颠覆性的技术,打破了从文本、视频到语音等多个领域所有最先进的算法,远远超出了其最初在图像处理的应用范围。

神经网络,顾名思义,是科学家们类比生物神经网络搭建的一种人工网络,模仿生物进行图像、音频等信息进行处理从而快速得到我们想要的信息。

卷积,则是指在人工神经网络处理信息的过程中使用了卷积这种数学上的运算方法。卷积网络是一种特殊的神经网络,它们在至少一个层中使用卷积代替一般矩阵乘法。

CNNCNN的结构

卷积神经网络由一个输入层和一个输出层以及多个隐藏层组成。CNNCNN的隐藏层通常由一系列与乘法或其他点积卷积的卷积层组成。

**函数通常是ReLUReLU层,随后是其他卷积。

例如池化层,全连接层和归一化层(SoftmaxSoftmaxSigmoidSigmoid),称为隐藏层,因为它们的输入和输出被**函数和最终卷积掩盖了。
【学习笔记】深度学习之CNN卷积神经网络
卷积神经网络的结构:输入层(InputLayerInput Layer)—卷积层(ConvolutionalLayerConvolutional Layer)—池化层(PoolingLayerPooling Layer)—卷积层—池化层(降采样层)—…—全连接层—全连接层—…—输出层(全连接层+SoftmaxSoftmax**)

其中,卷积和池化次数依据需求来定,全连接层同理。

卷积-池化-全连接只是最基础的CNNCNN

随着人工智能的不断发展,现在已经由许多种由此衍生出来的CNNCNN(卷积方式、信息传递的flowflow等有所不同),但是其根本结构还是大同小异的。

【学习笔记】深度学习之CNN卷积神经网络

卷积层

作用:提取图像的底层特征

卷积层是一组平行的特征图(feature map),它通过在输入图像上滑动不同的卷积核并执行一定的运算而组成。此外,在每一个滑动的位置上,卷积核与输入图像之间会执行一个元素对应乘积并求和的运算以将感受野内的信息投影到特征图中的一个元素。这一滑动的过程可称为步幅 stridestride,步幅stridestride 是控制输出特征图尺寸的一个因素,是我们需要设置的一个超参数。卷积核的尺寸要比输入图像小得多,且重叠或平行地作用于输入图像中,一张特征图中的所有元素都是通过一个卷积核计算得出的,也即一张特征图共享了相同的权重和偏置项。

【学习笔记】深度学习之CNN卷积神经网络
该动图演示的是在输入图像上滑动一个3×33\times3的卷积核,且其步长设为1,感受野为7×77\times7

卷积核是一种特征发现器,我们通过卷积层可以很容易地发现图像中的各种边缘

但是卷积层发现的特征往往过于精确,我们即使高速连拍拍摄一个物体,照片中的物体的边缘像素位置也不大可能完全一致,因此,我们需要通过池化层来降低卷积层对边缘的敏感性。

卷积后的图像尺寸

我们假定输入图片尺寸为 m x n,输出的图片尺寸为 l x c,跨度用 stride 表示,卷积核大小用 k 表示,则有下面公式。

l=(mk)/stride+1c=(nk)/stride+1\begin{array}{l} l=(m-k) / \text {stride}+1 \\ \\c=(n-k) / \text {stride}+1 \end{array}

池化层

作用:缩小数据维度(防止数据爆炸,节省运算量和运算时间),防止过拟合(防止过学习,即防止培养出高分低能,在考场(训练集)称霸但在社会上(测试集)混不下去的人工智障)

池化,也叫做下采样(subsampling),用一个像素代替原图上邻近的若干像素,在保留feature map特征的同时压缩其大小。

池化实际上是一种非线性形式的降采样。有多种不同形式的非线性池化函数,主要有两种:Maximum Pooling和Average Pooling

而其中“最大池化(Max Pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。

【学习笔记】深度学习之CNN卷积神经网络
可以看出,如果向下面动图演示的一样进行池化,那么会大大减少参数的数量,在尽可能保留原始特征的同时提高系统的运行速度。

【学习笔记】深度学习之CNN卷积神经网络

全连接层

全连接层:输出的每个神经元都和上一层每一个神经元连接。
【学习笔记】深度学习之CNN卷积神经网络

汇总经过前面处理得到的信息,并进行输出

最后,在经过几个卷积和池化层之后,神经网络中的高级推理通过全连接层来完成。就和常规的非卷积人工神经网络中一样,全连接层中的神经元与前一层中的所有**都有联系。
输出可以是Softmax输出,也可以是Sigmoid二分类输出

【学习笔记】深度学习之CNN卷积神经网络
上图中箭头所指即为全连接层。可以看到,神经网络对处于最底部的输入层(手写数字33)进行卷积、池化、全连接等操作,最后进行归一化,在090-9十个数字中,选出概率最大的数,即为目标数字33
【学习笔记】深度学习之CNN卷积神经网络
该图是CNN的输出层。

名词解释

卷积核

卷积核并没有什么神秘的,它是一个 22 维数组。它的行数和列数相同并且数值为奇数
【学习笔记】深度学习之CNN卷积神经网络
上面就是一个 3x33x3 的卷积核,它的核大小(kernel size) 为 33。它里面的元素值代表不同的权值。

一般而言,卷积核里面所有元素之和等于 11,当然也可以不让它等于 11,大于11时生成的图片亮度会增加,小于 00 时生成的图片亮度会降低。

那么,卷积核是如何作用呢?

一句话描述就是:针对输入层中单个元素,将它的值由周围邻近的元素值加权平均。而这种加权平均的操作产生的新的元素值按照次序可以产生一个新的输出层。

【学习笔记】深度学习之CNN卷积神经网络

需要注意的是,在深度学习当中,只需要逐元素相乘再相加就可以了,不需要对结果取均值。

感受野

在机器视觉领域的深度神经网络中有一个概念叫做感受野,用来表示网络内部不同位置的神经元对原图像的感受范围的大小。

神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和池化层,层与层之间均为局部相连(通过slidingfiltersliding filter)。

神经元感受野的值越大,表示其能接触到的原始图像范围就越大,也意味着他可能蕴含更为全局、语义层次更高的特征;值越小则表示其所包含的特征越趋向于局部和细节。

因此感受野的值可以大致用来判断每一层的抽象层次。

【学习笔记】深度学习之CNN卷积神经网络
可以看到在Conv1Conv1中的每一个单元所能看到的原始图像范围是3×33 \times 3,而由于Conv2Conv2的每个单元都是由2×22 \times 2范围的Conv1构成,因此回溯到原始图像,其实是能够看到 5×55 \times 5的原始图像范围的。

因此我们说Conv1Conv1的感受野是33Conv2Conv2的感受野是55. 输入图像的每个单元的感受野被定义为11,这应该很好理解,因为每个像素只能看到自己。

步长

滑动卷积核时,我们会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,我们将每次滑动的行数和列数称为Stride,下面两张动图中,步长分别为Stride=1;Stride=2。

【学习笔记】深度学习之CNN卷积神经网络
卷积过程中,有时需要通过padding来避免信息损失,有时也要在卷积时通过设置的步长(Stride)来压缩一部分信息,或者使输出的尺寸小于输入的尺寸。

【学习笔记】深度学习之CNN卷积神经网络
stride的作用:是成倍缩小尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3。以此类推。

【卷积核的大小一般为奇数】 1×11\times13×33\times35×55\times57×77\times7都是最常见的。这是为什么呢?为什么没有偶数?

(1)更容易padding

在卷积时,我们有时候需要卷积前后的尺寸不变。这时候我们就需要用到padding。假设图像的大小,也就是被卷积对象的大小为n×nn \times n,卷积核大小为k×kk \times k,padding的幅度设为 (k1)2\frac{(k-1)}{2} 时,卷积后的输出就为nk+2×k121+1=n\frac{n-k+2\times\frac{k-1}{2}}{1}+1=n
即卷积输出为n×nn \times n,保证了卷积前后尺寸不变。但是如果kk是偶数的话, (k1)2\frac{(k-1)}{2}就不是整数了。

(2)更容易找到卷积锚点

在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积核模块的中心。若卷积核为奇数,卷积锚点很好找,自然就是卷积模块中心,但如果卷积核是偶数,这时候就没有办法确定了,让谁是锚点似乎都不怎么好。

【卷积的计算公式】

输入图片的尺寸:一般用n×nn \times n表示输入的image大小。

卷积核的大小:一般用 f×ff \times f表示卷积核的大小。

填充(Padding):一般用 pp 来表示填充大小。

步长(Stride):一般用 ss 来表示步长大小。

输出图片的尺寸:一般用 oo 来表示。

如果已知 nnffppss 可以求得 oo ,计算公式如下:o=n+2pfs+1o=\left\lfloor\frac{n+2 p-f}{s}\right\rfloor+1

其中" \lfloor \rfloor"是向下取整符号,用于结果不是整数时进行向下取整。

PaddingPadding

Padding,意为填充。可以发现,输入图像与卷积核进行卷积后的结果中损失了部分值,输入图像的边缘被“修剪”掉了(边缘处只检测了部分像素点,丢失了图片边界处的众多信息)。

这是因为边缘上的像素永远不会位于卷积核中心,而卷积核也没法扩展到边缘区域以外。

这个结果我们是不能接受的,有时我们还希望输入和输出的大小应该保持一致。

为解决这个问题,可以在进行卷积操作前,对原矩阵进行边界填充(Padding),也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常都用“00”来进行填充的。【学习笔记】深度学习之CNN卷积神经网络

通过填充的方法,当卷积核扫描输入数据时,它能延伸到边缘以外的伪像素,从而使输出和输入size相同。

常用的两种padding:

(1)valid padding:不进行任何处理,只使用原始图像,不允许卷积核超出原始图像边界

(2)same padding:进行填充,允许卷积核超出原始图像边界,并使得卷积后结果的大小与原来的一致

权值共享

权值共享:卷积核扫过整张图片的过程中,卷积核参数不变。

下图的动画中,绿色表示原图像素值,红色数字表示卷积核中的参数,黄色表示卷积核在原图上滑动。右图表示卷积运算之后生成的feature map。
【学习笔记】深度学习之CNN卷积神经网络
下图展示了RGBRGB三个通道图片的卷积运算过程,共有两组卷积核,每组卷积核都有三个filter分别与原图的RGBRGB三个通道进行卷积。每组卷积核各自生成一个feature map。
【学习笔记】深度学习之CNN卷积神经网络

原图最外圈补0:zero padding,便于提取图像边缘的特征。

局部连接

feature map上每个值仅对应着原图的一小块区域,原图上的这块局部区域称作感受野(receptive field)。局部连接的思想,受启发于生物学里面的视觉系统,视觉皮层的神经元就是局部接受信息的。
【学习笔记】深度学习之CNN卷积神经网络
【学习笔记】深度学习之CNN卷积神经网络

多通道卷积

上述例子都只包含一个输入通道。实际上,大多数输入图像都有 RGB 3个通道。

【学习笔记】深度学习之CNN卷积神经网络
这里就要涉及到“卷积核”和“filter”这两个术语的区别。在只有一个通道的情况下,“卷积核”就相当于“filter”,这两个概念是可以互换的。但在一般情况下,它们是两个完全不同的概念。每个“filter”实际上恰好是“卷积核”的一个集合,在当前层,每个通道都对应一个卷积核,且这个卷积核是独一无二的。

多通道卷积的计算过程:将矩阵与滤波器对应的每一个通道进行卷积运算,最后相加,形成一个单通道输出,加上偏置项后,我们得到了一个最终的单通道输出。如果存在多个filter,这时我们可以把这些最终的单通道输出组合成一个总输出。

这里我们还需要注意一些问题——滤波器的通道数、输出特征图的通道数。

某一层滤波器的通道数 = 上一层特征图的通道数。如上图所示,我们输入一张 6×6×36\times6\times3的RGB图片,那么滤波器(3×3×33\times3\times3)也要有三个通道。

某一层输出特征图的通道数 = 当前层滤波器的个数。如上图所示,当只有一个filter时,输出特征图(4×44\times4)的通道数为1;当有2个filter时,输出特征图(4×4×24\times4\times2)的通道数为2。

Conferences

1.How Convolutional Neural Networks work
2.大白话讲解卷积神经网络工作原理
3.卷积神经网络(CNN,ConvNet)及其原理详解
4.【子豪兄】深度学习之卷积神经网络
5.【深度学习入门】——亲手实现图像卷积操作
6.手写数字识别3D可视化网站
7.深度神经网络中的感受野(Receptive Field)
8.CNN基础知识——卷积(Convolution)、填充(Padding)、步长(Stride)
9.TensorFlow中CNN的两种padding方式“SAME”和“VALID”


推荐阅读
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
author-avatar
上床后悔_155
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有