卷积神经网络CNN

卷积神经网络

目的是理解一下何为卷积以及整个卷积神经网络的工作工程,包括图片是如何识别的以及网络是如何训练的。

理解卷积

怎么理解卷积神经网络的卷积?在这从
信号上的卷积 -------> 图像处理中的卷积
进行理解。首先,卷积的定义:
在这里插入图片描述
在这里插入图片描述

其本质是一种数学的积分运算。

对于系统的瞬态输出的卷积结果: 参考链接[1]

假设当前有一个系统的输入信号 f(t),系统的响应信号为 g(t) 。如下图所示,可以看到系统的当前每一个信号都会随着时间的流逝不断衰减。

在这里插入图片描述在这里插入图片描述
由于系统响应信号的存在,在某个时刻之前的信号都会对当前时刻的信号产生影响,在这里取 T=10的时刻,那么其卷积结果如下图所示:
在这里插入图片描述
可以看到,系统当前信号 f(t) 乘于对应时刻的系统响应信号 g(t) ,然后累加求和的过程。同时可以看到公式中的条件必须满足以下关系:
在这里插入图片描述
即f(10)与g(0)对应、f(9)与g(1)对应…
在网上有很多说卷积是一个“翻转”、“平移”的过程,从这可以这样理解,从上面的卷积过程图可以看到中间会“扭”成麻花状,不好看,为了更加直观,那么我们可以通过以下操作“翻转”、“平移”,这就是卷积计算实际上就是先翻转,再平移,最后对应点累积求和的由来。
在这里插入图片描述
在这里插入图片描述

对于整个系统的卷积输出结果: 参考链接[2]

在这里,我们用离散的信号卷积进行理解(连续的信号类似):
首先,我们有两个信号分别为 X 与Y,如下图所示。
在这里插入图片描述
然后我们下面开始依次对信号进行卷积得到最终信号 C 的过程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从最后的结果图可以看到,两个信号卷积后得到的是一个类似加权求和的结果,每一个信号都会对当前系统起作用,并对每个作用进行累加(请记住这一点)

对于图像处理上的卷积结果:

在图像处理中,常常用卷积的方式获取图像的特征,比如右图中,采用卷积对图像进行边缘提取。常用的操作还有对图像进行平滑滤波,卷积核形式一般为:

可以看到采用卷积核为都是1/9的矩阵(一共9个值)。
边缘提取的结果:
在这里插入图片描述
对图片进行卷积的过程就是不断移动卷积核与图片进行计算,如下所示:
在这里插入图片描述
特别说明一下,上面的这个卷积核已经发生180度翻转,在很多深度学习库中,这个卷积核是我们通过数据学习训练生成的(不是给定的),考虑翻转意义就不大了,比如 tensorflow 中可以理解为得到的是已经翻转的卷积核。也就是说图像处理中更多的是利用卷积的加权求和的思想***,对图像卷积考虑了周围像素对中间目标像素的影响(卷积核代表权值),目的则是为了尽可能的消除噪声、并提取了图像中的特征(利用不同的卷积核)。代表了卷积在图像处理中充当一个有点特别的滤波器*的作用 。

卷积神经网络

卷积神经网络的一个基本结构如下图所示:
在这里插入图片描述
下面通过一个用 CNN 识别形态各异字母 X (平移、缩小、翻转、放大)的过程来说明以上结构每个层的作用以及 CNN 运作机理。
在这里插入图片描述

卷积层:

对于同一种类型的图片,通过会有局部的特征是相同的,如下图所示:
在这里插入图片描述
所以为了识别各种形态变化的 X ,CNN 通过提取图像的各种特征对比(通过卷积,上面说过卷积可以提取特征),首先先获取目标(X)的特征,得到三个卷积核(先暂时可以认为已经得到训练的结果)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后我们通过移动我们的卷积核和我们待测图像进行卷积计算得到:
在这里插入图片描述
这里除9的目的是为了归一化,为 1 则证明这一小块特征是完全与原图片匹配的
在这里插入图片描述
这里代表着卷积核对应的该位置像素的匹配程度为0.55
在这里插入图片描述
整个结果如下:
在这里插入图片描述
上面说到我们有三个卷积核,那么我们应该会有三个结果:
在这里插入图片描述

激励层

卷积过后通常我们加入偏置,一般引入非线性函数,增加系统的非线性能力。通常的激活函数有以下几种:

线性整流单元(ReLU)(一般用这个)

在这里插入图片描述
Sigmoid函数(压缩在0-1,一般用于连接层)
在这里插入图片描述
tanh函数(压缩在0-1,一般用于连接层)
在这里插入图片描述
在激励层我们通常使用 RelU 函数,可以这么理解,该函数可以把负数置0(矩阵0运算比较容易运算),其他值不变。可以得到以下结果:
在这里插入图片描述
实际的效果类似:
卷积后的图片
在这里插入图片描述
经过激励后:
在这里插入图片描述
激励过后常常加入池化层。

池化层

由于图片的数据或者卷积核数量过多的话,那么我们后面的计算量将会非常大,所以我们需要对数据进行缩小但要保留图像的原来的重要信息,这个过程称为池化,池化的操作一般分为最大池化或者平均池化,下图则为最大池化的过程。
在这里插入图片描述
在这里插入图片描述
我们一般都会采用最大池化的方式,因为最大池化保留了每一个小块内的最大值,也就相当于保留了这一块最佳的匹配结果(越接近1匹配度越好),可以看到上图池化后的结果依然保留了对角线上的特征。平均池化则是取平均值,随机池化则是用随机数的方式选择数据。
然后我们将上述讲过的结果组合在一起,则可得到下图:
在这里插入图片描述
若想获得更高维度的图像信息,则需要添加更多层,这就得到了深度神经网络,如下图:
在这里插入图片描述

全连接层

全连接层在整个卷积神经网络中起到”分类器”的作用,将卷积层、激励层、池化层的结果通过连接层来对结果进行识别分类。下面是全连接层的基本机构:
在这里插入图片描述
然后我们将刚才计算的结果接到全连接层,一般地,我们会将矩阵拉成一维的,如下图所示:
在这里插入图片描述
然后根据输出公式计算最后的结果,看哪个的概率大则判断为是否正确的,上图代表了有92%的概率是X,有51%的概率是O。

上述系统总体的框架图

在这里插入图片描述
P.S. 以上涉及的卷积核以及权重等参数都是要经过大量的数据下训练而来,初始训练时权重一般随机产生,而卷积核以及网络层的框架可以通过经验或规律确定,然后通过反向传播算法,该算法是不断寻找误差,将误差一步一步返回到卷积层,不断循环以及不断修正完成的,下面将简单讲述一下网络是如何训练的(也就是反向传播算法是如何实现的)。

网络训练过程

反向传播算法最早应用于80、90年代的BP神经网络(也就是上面所说的全连接层)。当时,BP神经网络主要用于手写数字识别研究,所以接下来我也以手写数字识别为例子讲述网络的训练过程。系统到底是如何识别手写图片到底对应哪个数字的呢?
在这里插入图片描述
这里特别要说明的是,在卷积神经网络未出现之前,BP神经网络是将图片所有像素作为输入,下图一张图片的大小为2828=784,然后通过不同的权重以及偏置值,提取相应的特征,这样的模型不仅运算数据量大,而且很难有很好的性能。
在这里插入图片描述
因为可以看到,上图的输入层的神经元有784个,隐藏层有两层,且每层隐藏层有16个神经元,输出层有10个神经元,总共有
784
16+1616+1610=12960个权重
16+16+10 = 42个偏置
也就是说13002个可以调整的权重以及偏置决定了这个神经网络是如何工作的,这是一个非常复杂的数学关系。
从这里我们也可以看到,卷积神经网络的提出可以有效的减少网络的数据运算量以及网络的训练时间。(通过卷积提取特征)

开始训练网络

开始训练网络,我们一般会先让系统随机初始化所有的权值以及偏置等参数,然后输入数据得到结果与实际的结果进行对比,求得误差。
在这里插入图片描述
但由于参数是随机初始化的,所以其结果也是混乱随机的(上图中结果点亮了多个数字表现)
取3为例子,结果存在误差:
在这里插入图片描述
那么误差差多少呢?我们一般用公式 Σ(输出值—期望值)² 来计算误差的大小
在这里插入图片描述
可以看到结果为3.37,要说明的是:假设如果网络能够正确识别数字的话,那么它的误差将会很小,会像下图这样
在这里插入图片描述
上面是一张图片的一个误差结果,但对于我们整个系统来说,我们需要网络对每个图片都有相同的作用,所以,我们需要大量的数据集,求得每一个数据图片所对应的误差。然后求这些误差的平均值当作当前系统参数的误差(训练的目的将该值变小,越小性能越好),我们一般也将该值称为“代价函数”。

降低系统误差

通过上面的所讲的,我们可以知道,若想要降低系统的误差,则需降低每一个输入数据的误差,即要**修改我们的权重以及偏置的大小。**现在我们将系统理解为一个有784个输入,有10个输出的函数,但在这个函数中,还有着13002个不确定的常量。现在,我们要求该函数的最小值(系统误差最小)。(非常复杂的一个函数)

在数学上,对于多变量函数来说,我们常用梯度来表示该函数在某点变化最快的方向。而在这里,我们用负梯度(下降最快的方向)告诉我们如何通过改变每条线上的权重偏置来找到我们函数(误差)的最小值。
以下图为例子,通过对比误差,我们可以想要尽量提高权重结果为2的值,而其他的都往下降
在这里插入图片描述
对于一个数据来说,我们还要考虑其他神经元的作用,如下图所示,将每一个神经元产生的误差算出并累加求和平均则得到对应权重/偏置应该改变多少
在这里插入图片描述
特别要说明的是,上面反向传输过程虽然只在输出层以及临近的隐藏层之间,但对于隐藏层与隐藏层之间或者说整个系统所有的层与层之间,都可以用上面的方式,确定下一层的值后,求当前误差,反向求出上一层的权重/偏置应该为多少,从而得到整个系统所有的权重以及偏置的改变量。(对于卷积神经网络中的卷积核等参数,同样适用)
但是,如果我们只对 2 这个数据进行权重与偏置调整的话,那么我们的神经网络系统最后肯定就只会输出 2,所以我们需要对输入的每一个数据进行调整,然后取平均值作为真正的权重或偏置改变的大小。也就是说,每一个输入的数据都需要进行反向传播计算
在这里插入图片描述
上面我们得到的平均值则就是我们要求的负梯度,然后与原来的权值/偏置进行矩阵加法运算,调整我们每一个权值或者偏置的大小,就得到了经过反向传播后的整个系统参数,然后我们再计算系统误差,是否能够满足我们的要求,不满足则再训练一次,不断循环。
在这里插入图片描述

卷积神经网络的适用范围

卷积神经网络适用于处理 “图像信息” 的相关应用,但若目标可以转换为图像信息表达也适用,比如
声音识别(通过声音的频谱图)
在这里插入图片描述
文本识别(字在“字典”中的位置构成的图)
在这里插入图片描述

参考文献

资料参考如下链接:
[1]:https://www.cnblogs.com/delphi-xe5/p/11373199.html
[2]: https://blog.csdn.net/bitcarmanlee/article/details/54729807
[3]: https://zhuanlan.zhihu.com/p/35083956
[4]: https://www.zhihu.com/question/22298352/answer/228543288
[5]: https://www.zhihu.com/question/30888762
[6]: https://www.sohu.com/a/206562660_468638
[7]: https://zhuanlan.zhihu.com/p/41609577
[8]: https://zhuanlan.zhihu.com/p/104576756
[9]: https://blog.csdn.net/yunpiao123456/article/details/52437794
[10]: https://my.oschina.net/u/876354/blog/1620906
[11]: https://zhuanlan.zhihu.com/p/47184529
[12]: https://www.cnblogs.com/hesi/p/9013328.html
[13]: https://www.cnblogs.com/hesi/p/9013328.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小罗-LWX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值