卷积神经网络
卷积是通过两个函数 f,g 生成第三个函数的一种数学算子,表征函数 f 与 g 经过翻转和平移的重叠部分的面积。数学定义公式:
事实上,在卷积网络上使用的离散卷积,也就是不连续的,它是一种运算方式,也就是按照卷积核,将输入对应位置的数据进行加权和运算,接下来结合卷积核的概念,就会很好理解了。
卷积神经网络最重要的两个知识点就是卷积核和卷积神经网络的结构
- 卷积核
- 卷积核定义
- 卷积操作
- 深度
- 步幅
- 零填充
- 卷积神经网络的结构
- 输入层 INPUT
- 卷积层 CONV
- 激活函数层 RELU
- 池化层 POOL
- 全连接层 FC
卷积核
卷积核的定义:对于输入图像中的一部分区域,进行加权平均的处理,其中这个过程的权重,由一个函数定义,这个函数就是卷积核。
如下图彩色图像有RGB三个色值通道,分别表示红、绿、蓝,每个通道内的像素可以用一个像下图右边的二维数组表示,数值代表0-255之间的像素值。假设一张900*600的彩色的图片,计算机里面可以用 (900*600*3)的数组表示。
卷积过程
卷积过程是基于一个小矩阵,也就是卷积核,在上面所说的每层像素矩阵上不断按步长扫过去的,扫到数与卷积核对应位置的数相乘,然后求总和,每扫一次,得到一个值,全部扫完则生成一个新的矩阵。如下图
卷积核如何设置可以参考卷积神经网络的卷积核大小、个数。卷积层数一般取(3,3)的小矩阵,卷积核里面每个值就是我们需要寻找(训练)的神经元参数(权重),开始会随机有个初始值,当训练网络时,网络会通过后向传播不断更新这些参数值,直到寻找到最佳的参数值。“最佳”、需要通过损失函数去评估。
卷积操作相当于特征提取,卷积核相当于一个过滤器,提取我们需要的特征。
如下图卷积操作,从左上角扫到右下角,最终得到右边的特征图谱。
- 深度:深度对应于我们用于卷积运算的过滤器数量。在图7所示的网络中,我们使用三个不同的过滤器对初始的船图像进行卷积,从而生成三个不同的特征图。可以将这三个特征地图视为堆叠的二维矩阵,因此,特征映射的“深度”为3。
- 步幅:步幅是在输入矩阵上移动一次过滤器矩阵的像素数量。当步幅为1时,我们一次将过滤器移动1个像素。当步幅为2时,过滤器每次移动2个像素。步幅越大,生成的特征映射越小。有横行和纵向两个方向
- 零填充:有时,将输入矩阵边界用零来填充会很方便,这样我们可以将过滤器应用于输入图像矩阵的边界元素。零填充一个很好的特性是它允许我们控制特征映射的大小。添加零填充也称为宽卷积,而不使用零填充是为窄卷积。
零填充(padding)
卷积操作之后维度会变少,得到的矩阵会比原来矩阵小,这样不好计算,所以需要Padding,在每次卷积操作之前,在原矩阵外边补包一层0,可以只在横向补,或只在纵向补,或者四周都补0,从而使得卷积后输出的图像跟输入图像在尺寸上一致。
比如:需要做一个5*5的原始矩阵的卷积,用一个3*3卷积核来扫,扫出来结果的矩阵应该是:3*3的矩阵,变小了。
卷积前加 Padding 操作补一圈0,即300*300矩阵外面周围加一圈“0”,这样的300*300就变成了302*302的矩阵,再进行卷积出来就是300*300 ,尺寸和原图一样。
卷积神经网络结构
CNN 一般来说分为五个部分:输入层、卷积层、激活函数层、池化层、全连接层
不过注意需要注的点是,对于大部分卷积网络,都会交替地用到中间地四层结构,也就是呈现出一种 卷积层――激活函数层――池化层――卷积层――激活函数层――池化层…地交替结构,当然,对于一些新出现地卷积网络,连池化层都省去了,以上五层结构只是一般会出现的层次。
输入层
整个网络的输入,一般是一张图象地像素矩阵,在上面的图中,可以看到输入是一个立体的结构,这是因为一般的图像都会有一个深度的概念,就像RGB的彩色图像,就是 a*b*c 的形式,其中前两维指定的是图像的长和宽,第三维则是深度,彩色RGB的深度是3,而黑白图像的深度是 1
卷积层
这一层的主要部分就是进行卷积操作,前面已经介绍了卷积核的概念,卷积层实际上就是实现了这个卷积核的计算过程,在这一层中,可能会见到以下的几种关键词:
- 滤波器 Filter:实现前面定义的卷积核的神经元。
- 步长 Stride
- 填充 Padding
-
深度 Depth:这里的深度不是指图像,而是指某一层中神经元(滤波器)的个数,不同的 Filter 重点处理的特征是不同的我们想要得到不同的这些特征图,所以设置了多个 Filter ,这样每个 Filter 处理得到一张 Feature Map ,多个 Filter 就会得到多个Feature Map, 将这些Feature Map 叠在一起就是输出的立体,可以看到,Filter 与 Feature Map的数量是一样的,这个数量,就是 深度。
激励函数层
实际中,使用激活函数处理往往是与之前的卷积层绑定在一起,这个作用其实也就是是激活函数的作用,去线性化,在卷积网络中,一般使用的激励函数是 ReLu 函数,注意大多数情况下都不会使用 Sigmoid 函数处理。
池化层
作用在 Feature Map 上,相当于对输入矩阵的尺寸进一步浓缩,也就是进一步提取特征。卷积操作后我们提取了很多特征信息,相邻区域有相似特征信息,可以相互替代的,如果全部保留这些特征信息就会有信息冗余,增加了计算难度,这时候池化就相当于降维操作。池化是在一个小矩阵区域内,取该区域的最大值或平均值来代替该区域,该小矩阵的大小可以在搭建网络的时候自己设置。小矩阵也是从左上角扫到右下角。如下图
池化层有以下几个功能:
- 对 Feature Map 又进行一次特征提取,这也是减小数据量的操作
- 获取更抽象的特征,防止过拟合,提高泛化性
- 经过这个处理,对输入的微小变化有更大的容忍,也就是说如果数据有一些噪音,那么经过这个特征提取的过程,就一定程度上减小了噪音的影响。
最后一点要注意的是,池化层并非是卷积网络所必需的。一些新的CNN网络设计时候并没有使用池化层。
全连接层
在一开始的结构图中可以看出, CNN网络还有一个特点 : 可能有多轮 卷积层 和池化层的处理,这时候,模型已经将图像输入处理成了信息含量更高的特征,为了实现分类的任务(一般是分类,当然也会有其他的任务),需要使用全连接层来完成分类任务。
对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权。像下面的中间层就是全连接方式。
来源:博客园
作者:
链接:https://www.cnblogs.com/zhuminghui/p/11531878.html