首页 > 其他分享 >CNN 卷积神经网络

CNN 卷积神经网络

时间:2024-02-26 14:59:40浏览次数:19  
标签:卷积 局部 像素 神经网络 池化 图像 CNN

个人学习所用,内容来源于网络,侵权删

1. CNN定义

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一,擅长处理图像特别是图像识别等相关机器学习问题。

2. 卷积
CNN的核心即为卷积运算,其相当于图像处理中的滤波器运算。对于一个\(m\times n\)大小的卷积核,

\[W=\begin{bmatrix} w_{11}&w_{12}&...&w_{1n}\\ w_{21}&w_{22}&...&w_{2n}\\ &&...&\\ w_{m1}&w_{m2}&...&w_{mn}\\ \end{bmatrix}_{(m\times n)}\]

卷积核\(W\)中的每一个权值\(w\)分别与原图像\(X\)中对应位置的像素\(x\)相乘,然后再求和,

\[z=w_1x_1+w_2x_2+...+w_{mn}x_{mn}=\sum_{k=1}^{mn}w_kx_k=W^TX \]

卷积过程如下所示,

对于一个大小为\(n\)的原图像,经过大小为\(f\)的卷积运算后,其输出图像的尺寸为\(n-f+1\)。

3. 步长

卷积核每计算一次都需要滑动一段距离,以覆盖下一部分像素,这个滑动的距离就是步长(stride),经过步长\(s\)的滑动之后,其输出的图像尺寸为:

\[\left \lfloor \frac{n-f}{s} \right \rfloor+1 \]

其中\(n\)是图像大小,\(f\)是卷积核大小,\(s\)是步长。

stride = 1 表示卷积核滑过每一个相距是 1 的像素,是最基本的单步滑动,作为标准卷积模式。Stride 是 2 表示卷积核的移动步长是 2,跳过相邻像素,输出图像缩小为原来的 1/2。Stride 是 3 表示卷积核的移动步长是 3,跳过 2 个相邻像素,图像缩小为原来的 1/3,以此类推。。。

详细计算过程可参考如下链接:
CNN中卷积层的计算细节

4. 填充(padding)

在标准的卷积过程中,存在两个问题:

  • 每次卷积运算后,图像就会缩小尺寸。在经历多次运算后,图像最终会失去其本来的形状,变为 \(1\times1\)的 “柱状”。
  • 对于图像边缘的像素,只被一个输出使用,但图像中间的像素,则被多个输出使用。这意味着卷积过程丢掉了图像边缘位置的许多信息。

对于这个问题,可以采用额外的 “假” 像素(通常值为0,因此经常使用的术语 零填充 )填充边缘。这样,在滑动时的卷积核可以允许原始边缘像素位于其中心,同时延伸到边缘之外的假像素。假设填充的像素大小为\(p\),则\(n\)就变成了\(n+2p\),故其输出图像的尺寸为\(\left \lfloor \frac{n+2p-f}{s} \right \rfloor\)。

至于是否选择填充像素,通常有两个选择,分别叫做 Valid 卷积和 Same 卷积。

  • Valid 卷积意味着不填充,即图像会通过卷积并逐渐缩小,输出的图像尺寸即为上述公式:\(\left \lfloor \frac{n+2p-f}{s} \right \rfloor +1\)
  • Same卷积意味填充,输出图像的尺寸与输入图像的尺寸相同。

根据上述尺寸的计算公式,令\(\left \lfloor \frac{n+2p-f}{s} \right \rfloor +1=n\),可得到\(p=\frac{(n-1)s-n+f}{2}\)。当\(s=1\)时,\(p=\frac{f-1}{2}\)。

5. 池化(Pooling)

随着模型网络不断加深,卷积核越来越多,要训练的参数还是很多,而且直接拿卷积核提取的特征直接训练也容易出现过拟合的现象。CNN使用的另一个有效的工具被称为“池化(Pooling)”出现并解决了上面这些问题,为了有效地减少计算量,池化就是将输入图像进行缩小,减少像素信息,只保留重要信息;为了有效地解决过拟合问题,池化可以减少数据,但特征的统计属性仍能够描述图像,而由于降低了数据维度,可以有效地避免过拟合。

给出池化的定义,对不同位置区域提取出有代表性的特征(进行聚合统计,例如最大值、平均值等),这种聚合的操作就叫做池化,池化的过程通常也被称为特征映射的过程(特征降维)。听起来很高深,其实简单地说就是下采样。

池化的过程如下图所示:

池化主要有两种,除了最大值池化(Max Pooling)之外,还有平均值池化(Average pooling),CNN中随机池化使用的较少。

最大池化是对局部的值取最大;平均池化是对局部的值取平均;随机池化是根据概率对局部的值进行采样,采样结果便是池化结果。概念非常容易理解,其示意图如下所示:

三种池化的意义:

  • 最大池化可以获取局部信息,可以更好保留纹理上的特征。如果不用观察物体在图片中的具体位置,只关心其是否出现,则使用最大池化效果比较好。

  • 平均池化往往能保留整体数据的特征,能凸出背景的信息。

  • 随机池化中元素值大的被选中的概率也大,但不是像最大池化总是取最大值。随机池化一方面最大化地保证了Max值的取值,一方面又确保了不会完全是max值起作用,造成过度失真。除此之外,其可以在一定程度上避免过拟合。

6. 激活函数

为了使神经网络能够拟合出各种复杂的函数,必须使用非线性激活函数,用来加入非线性因素,把卷积层输出结果做非线性映射。

使用激活函数的意义参考激活函数

7. 局部感知

为什么要采用局部感知呢?因为可以降低参数量级。为什么要降低参数量级呢?因为如果采用经典的神经网络模型,如下图所示:

则需要读取整幅图像作为神经网络模型的输入(即全连接的方式),当图像的尺寸越大时,其连接的参数将变得很多,从而导致计算量非常大。比如对于一张1000x1000像素的图片,如果我们有1M隐藏层单元,那么一共有\(10^{12}\)个参数,这显然无法接受。

而人类对外界的认知一般是从局部到全局、从片面到全面,先对局部有感知的认识,再逐步对全体有认知,这是人类的认识模式。类似的,在机器识别图像时也没有必要把整张图像按像素全部都连接到神经网络中,局部范围内的像素之间联系较为紧密,而距离较远的像素则 相关性较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。这种模式就是卷积神经网络中降低参数数目的重要神器:局部感受野,节省了内存。

8. 参数(权值)共享

每张自然图像(人物、山水、建筑等)都有其固有特性,也就是说,图像其中一部分的统计特性与其它部分是接近的。这也意味着这一部分学习的特征也能用在另一部分上。因此,在局部连接中隐藏层的每一个神经元连接的局部图像的权值参数(例如5×5),将这些权值参数共享给其它剩下的神经元使用,那么此时不管隐藏层有多少个神经元,需要训练的参数就是这个局部图像的全部参数(例如5×5),也就是卷积核的大小,这样大大减少了训练参数。如下图所示:

9. 感受野(Receptive field)

感受野用来表示网络内部的不同神经元对原图像的感受范围的大小,换句话说,即为每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。

神经元之所以无法对原始图像的所有信息进行感知,是因为在这些网络结构中普遍使用卷积层和pooling层,在层与层之间均为局部连接。神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它可能蕴含更为全局,语义层次更高的特征;相反,值越小则表示其所包含的特征越趋向局部和细节。因此感受野的值可以用来大致判断每一层的抽象层次。

可以看到在Conv1中的每一个单元所能看到的原始图像范围是\(3\times3\),而由于Conv2的每个单元都是由\(2\times2\)范围的Conv1构成,因此回溯到原始图像,其实是能够看到\(5\times5\)的原始图像范围的。因此我们说Conv1的感受野是\(3\),Conv2的感受野是\(5\)。输入图像的每个单元的感受野被定义为\(1\)。

感受野计算公式:

\[R_n=R_{n-1}+(k_{n-1}-1)\times S_n \]

其中,\(R_n\)表示第\(n\)层的感受野大小,\(R_{n-1}\)表示第\(n-1\)层的感受野大小,\(k_{n-1}\)表示第\(n-1\)层的卷积核大小,\(S_n\)表示第\(n-1\)层卷积层的步长。

参考文章:
大话卷积神经网络CNN(干货满满)

标签:卷积,局部,像素,神经网络,池化,图像,CNN
From: https://www.cnblogs.com/cqut-zhoutao/p/18031485

相关文章

  • 深度学习-卷积神经网络-经典的卷积网络incepttion-ResNet-DenceNet-46
    目录1.Inception2.ResNet3.DenseNet4.MobileNet1.Inception其中的一部分:Inception相比之前的VGGLeNet这些都是单条线的Inception多分支并行再concatInception第一版GoogleNet特征总结:NINNetworkinNetworkIncept_v3:NININ套了两次2.ResNet仅仅是......
  • 位运算卷积
    位运算卷积快速求序列\(C\):\[C_i=\sum_{j\oplusk=i}A_jB_k\]其中\(\oplus=or,and,xor\)。类似FFT的思路,对于序列\(a\)构造新序列\(fmt(a)\),使得满足\(fmt(a*b)_i=fmt(a)_i\timesfmt(b)_i\)在位运算情况下,\(fmt(a)_i\)均可以表达成关于序列\(a\)的可逆线性变换,即......
  • 深度学习-卷积神经网络-dropout-图像增强-优化器-45
    目录1.dropout2.数据增强3.优化器1.dropout使用L1和L2正则去限制神经网络连接的weights权重在深度学习中,最流行的正则化技术,它被证明非常成功,即使在顶尖水准的神经网络中也可以带来1%到2%的准确度提升,这可能乍听起来不是特别多,但是如果模型已经有了95%的准确率,获......
  • 基于Mamdani模糊神经网络的调速控制系统simulink建模与仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述      基于Mamdani模糊神经网络的调速控制系统是一种结合模糊逻辑与神经网络技术的智能控制方法,旨在提高调速系统的性能。随着工业技术的不断发展,对调速控制系统的性能要求也越来越高。......
  • 深度学习-卷积神经网络-经典的卷积神经网络-梯度消失-44
    目录1.什么是梯度消失1.什么是梯度消失在梯度下降中,随着算法反向反馈到前面几层,梯度会越来越小,最终,没有变化,这时或许还没有收敛到比较好的解,这就是梯度消失问题,梯度爆炸或者消失!!!1,神经网络损失函数非凸的损失函数,逐步的减小步长,或者叫动态调整学习率2,梯度爆炸的解决,使用梯度......
  • CNN使用MNIST手写数字识别实战的代码和心得
    CNN(ConvolutionalNeuralNetwork)卷积神经网络对于MNIST手写数字识别的实战代码和心得首先是对代码结构思路进行思路图展示,如下:参数和原理剖析:因为MNIST图片为长和宽相同的28像素,为黑白两色,所以图片的高度为1,为灰度通道。在传入的时候,我定义的BATCH_SIZE为512,所以具体的......
  • 神经网络优化篇:详解TensorFlow
    TensorFlow先提一个启发性的问题,假设有一个损失函数\(J\)需要最小化,在本例中,将使用这个高度简化的损失函数,\(Jw=w^{2}-10w+25\),这就是损失函数,也许已经注意到该函数其实就是\({(w-5)}^{2}\),如果把这个二次方式子展开就得到了上面的表达式,所以使它最小的\(w\)值是5,但假设不知道......
  • 【数论】卷积反演大集合
    不知道为啥脑抽要学数论,骂声一片中发现数论还没入门(悲)。1.狄利克雷卷积与数论函数1.1数论函数定义:数论函数为值域为整数的函数。简单数论函数:\(I(n)\),恒等函数,恒等为\(1\)。\(e(n)\),元函数,卷积中的单位元,若\(n=1\),\(e(n)=1\)。否则为\(e(n)=0\)。\(id(n)\),单位函数,\(......
  • 神经网络基础
    (个人学习所用,内容来源于网络,侵权删)1.感知机感知机由Rosenblatt在1957年提出,是神经网络的基础,该思想受生物学启发(参照下图),在其看来,人的大脑可以看作一个生物的神经网络,其最小的单元是神经元。人的神经网络由这样的一些神经元组成,它接受一些信号,这些信号可能是眼睛看到的光学......
  • 神经网络优化篇:详解深度学习框架(Deep Learning frameworks)
    深度学习框架一小点作者内心os:24年春节已过完,从熟悉的地方又回到陌生的地方谋生,愿新的一年都得偿所愿,心想事成。学到这会儿会发现,除非应用更复杂的模型,例如卷积神经网络,或者循环神经网络,或者当开始应用很大的模型,否则它就越来越不实用了,至少对大多数人而言,从零开始全部靠自己......