神经网络之卷积神经网络
什么是卷积神经网络?
示意图:
再了解卷积神经网络之前我们先了解一下什么叫卷积
什么是卷积?
参考:
https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/9411006?fr=aladdin
https://www.zhihu.com/question/22298352
https://www.matongxue.com/madocs/32.html
https://blog.csdn.net/stdcoutzyx/article/details/41596663
卷积是数学当中的一个运算。表示了通过两个函数
和
生成第三个函数的一种运算,表示的意思是
和
函数经过翻转和平移的重叠部分函数值乘积对重叠长度的积分。可以理解为是离散数学中的关系运算
,数学表达式如下(连续卷积):
这个积分所定义的函数
就是
和
两函数的卷积运算,记为
可以理解为离散中一种新的关系运算
卷积表示的是两个变量在某范围内相乘后求和结果(类似点乘
),如果两个函数为序列则有如下表达(离散卷积):
卷积特征:
连续卷积的例子:做馒头
假设馒头生产速度是
,那么一天后生产的馒头总量是
馒头生产出来后会慢慢腐败,假设腐败函数
,则第一个小时生产的馒头,一天后会经历24小时的腐败,第二个小时生产出来的馒头,一天后会经历
小时的腐败。
因此我们可以知道一天后 馒头腐败了:
卷积运算还可以拿来处理图像,取决于给的
和处理的区域(可以用平均,方差,标准差等矩阵)
两矩阵进行卷积运算,保证两个数下标相加等于要求的那个量的下标(f和g中分别取一个)
那么在了解完卷积之后就可以学习卷积神经网络了。
卷积神经网络包括三个组成部分卷积层、池化层、全连接层
顺序为:输入-卷积层-池化层-全连接层-输出。
卷积神经网络中各层的意义和作用
参考:https://blog.csdn.net/stdcoutzyx/article/details/41596663
- 卷积层
相当于一个神经网络的输入层,可以讲图片输入到神经网络中,并且提取数据的特征。
要识别图像数据的特征就用到了卷积计算的原理。是由一个==卷积核(filter)==来进行扫描的这个卷积核可以理解为扫描器
,通过不断扫描然后进行卷积运算来得到的新的矩阵,这个卷积核大小一般为
或
例如:
输入一张
的图像,其中
是图片的长宽,
是指对应图像的
三个通道,我们可以定义一个5×5×3的一个卷积核,这个就相当于“扫描器”,“扫描器”的长宽为
,
是图像颜色通道一般与原图像一致。
计算方法:对应数据相乘再相加,也就是对矩阵中的所有元素进行一个点乘。输入图像与卷积核的点乘。
动画示例:
可以理解为卷积运算就是利用一个扫描器对矩阵进行扫描,将扫描到的区域跟扫描器进行一个处理,最后得到新的数据,这就是卷积神经网络输入图像数据的过程。
通过对数据进行卷积运算使其映射到新的特征向量上。
输入图像经过一轮卷积操作后的输出图像大小公式如下:
公式参数:
和
分别表示图像的宽和高,
表示卷积核步长,
表示边缘增加的边界像素层数。
多层卷积核
上述是用只有一层的卷积核来进行演示,但平时我们处理的都是多层卷积核,那此时又应该如果处理呢?
- 其实也很好理解,只要对于同一个图像使用不同的卷积核进行卷积运算即可,多通道的卷积可以看作是多个单通道独自进行卷积运算。然后将卷积后的结果进行相加就得到了结果。
- 池化层
可以理解为池化层就是神经网络的隐藏层
池化层相当于是一个对卷积之后的结果进行分类的一个过程,提取输入图像数据的核心特征。
可以理解为是对数据的分类,对卷积得到的所有特征进行分类处理,同时通过这样分类能过减少数据量,压缩了原始数据,还减少了模型计算的参数。
例子:
如果我们对于一个
的图像,假设我们得到了
个定义在
输入上的特征,每一个特征和图像卷积都会得到一个
维的卷积特征,由于有
个特征,所以每一个样例都会得到
维的卷积特征向量。这个超过了
百万的特征,如果学习这样一个
百万特征输入的分类器容易出现过拟合。
那么,为了减少这些特征,我们可以通过聚合统计的方式进行优化,我们可以计算某一个区域上的某个特定特征的平均值或最大值。通过这样统计,能够压缩这些特征向量,使其维度降低,还不容易出现过拟合。这种聚合的操作就是池化。
池化就是求矩阵里某一个元素区域内的平均值或者最大值,再映射到一个新的特征向量里面
动画演示:
3. 全连接层
全连接层主要是对卷积和池化后的数据进行压缩,根据压缩特征完成模型的分类功能。全连接层的压缩发生就是将卷积和池化得到的核心特征与全连接层中的权重参数进行相乘,最后变成低维向量作为输出参数,以达到分类的目的。只要我们再经过激活函数,那么激活函数输出的结果就是我们的模型预测的输入图像对应的可能值(概率)。
- 为什么要乘权重参数?
因为矩阵乘法相当于一个矩阵作用于另一个矩阵上,然后改变矩阵的大小,同时利用矩阵的乘法就能够将高维的数据进行压缩,压缩成低维的矩阵,以下过程就是压缩
例如:一个 的矩阵乘上一个 的矩阵得到的结果就是一个 的矩阵
即:
就是利用这样的特性把一个很高维的矩阵变成了一个低维矩阵。(相当于把中间高维的部分消掉了)
(此处涉及到矩阵乘法的应用,建议去找一下矩阵乘法的资料)
可以理解为相当于神经网络的输出层,将神经网络处理好的特征进行输出,并压缩到模型中
这一步相当于一个打包的过程,把最后提取出来的核心特征进行打包,然后我只要用激活函数进行拆包,就能得到最后对应的结果
核心特征就是模型,也就是我们最后得到的训练模型,通过激活函数给他输入图像就可以达到预测的目的,就会返回预测的概率值
核心特征=训练模型,全连接层输出出来的就是训练时出现的特征,利用这个特征再输入其他图像就达到了训练的效果
在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。
通常会进行多次卷积-池化 这两个过程,正是因为这两个过程产生了多层神经网络
什么是训练?
- 通过不断输入图像数据,再对其提取特征,将核心特征分类,进入全连接层压缩,打包,最后使用未训练的图像和打包好的模型输入到激活函数中,得到预测概率。
总结
其实卷积神经网络就是对数据不断地进行卷积运算,再进行池化,最终得到的结果就是我们想要的特征数据,也就是模型。
卷积神经网络学习的全流程:
- 到这里,卷积神经网络的基本结构和原理就是这样的。卷积神经网络有多种模型可以使用,不同的模型有不同的特点,下面我们来看一下这些模型。
流程:图片输入到卷积层进行卷积运算提取特征,再将结果输入到池化层进行核心特征分类和提取,之后输入到全连接层通过矩阵乘法对数据进行压缩处理和打包,打包好的就是模型。
利用新的图像和模型进行点乘再输入到激活函数中去就可以得到预测概率。
点乘的意义:判断两个数的相似性,越大越相似