卷积神经网络结构介绍
``卷积神经网络的基础依旧是层级网络,在原有的神经网络的基础上做了新的改进,添加了很多新功能的层次。
卷积神经网络的层级结构可分为输入层、卷积层、激活层、池化层、全连接层。
输入层
输入层,作为卷积神经网络的第一层,表示着数据的输入。个人理解,该层所进行的操作,对数据进行划分,维度的处理以及包括数据清洗,归一化等预处理等操作。(该层不在卷积神经网络模型中,属于数据预处理操作。)
卷积层
卷积层,作为卷积神经网络最重要的一层(理解了卷积层也就理解了卷积神经网络),对原数据所含的信息进行提取。卷积层也是整个卷积神经网络最难理解的部分。
介绍卷积层主要通过三个方面进行介绍:(1)卷积核;(2)卷积计算;(3)通道数。
(1)卷积核
卷积层主要通过卷积核(filter)对数据进行特征提取。卷积核实际上是一个kk的矩阵(k一般为奇数,3或5)。
卷积核的重要参数:
方形卷积核的尺寸(kk)。对原输入矩阵的执行每一步卷积操作的区域大小。
步长(strike,s)。每次卷积核行走的步数。
填充值(padding,p)。当卷积核掠过输入矩阵时,有超出输入矩阵维数的区域,在原始输入矩阵的外围添加一圈0向量。(当设置步长之后,有些位置可能滑不到,为了避免边缘信息被一步步舍弃,我们需要设置填充值来解决这个问题。)
需要注意的是,关于卷积核的个数,尺寸,步长,padding这些参数都是超参数,这些超参数并不能通过反向传播、误差传递等计算得到,需要人为的设定。
下图为卷积核在原图像上进行卷积操作的动图。
深蓝色为原图像矩阵,浅蓝色为卷积核,绿色为产生的新矩阵(特征提取矩阵)。卷积层输入特征与输出特征尺寸和卷积核参数之间的关系为(当strike=1,k=3,p=1时,输出的特征图的大小与原输入矩阵的大小相同):
输入数据矩阵维数(i*i)。
卷积核在输入矩阵中操作的动态演示可浏览https://buptldy.github.io/2016/10/29/2016-10-29-deconv/。
(2)卷积计算
两个相同大小的矩阵点乘。对每个相同位置的元素执行乘法后再求和。
卷积核在原始图像(矩阵)中进行移动,对每个相同位置的元素执行乘法后的求和(两个相同大小的矩阵点乘),经过卷积核处理后的输入图片,得到feature map。由下图可以看出feature map是对原图像进行的信息提取,得到一个模糊的图像。
一个卷积核可以得到一个feature map,多个卷积核可以得到多个feature map。每个feature map可以代表原图像的部分特征。在卷积神经网络中卷积核的作用就是对原数据进行特征提取,也可就是特征工程流程。
(3)通道数
卷积核其实是一个立体的,除了kk的长宽尺寸外,还有一个通道尺寸c。**卷积核的通道尺寸是与输入图像的通道数相同。**如下图所示,如输入图片为彩色(RGB格式),则输入矩阵的通道数为3,因此卷积核的通道数也为3,kkc→33*3;若输入图片是黑白形式的,输入矩阵的通道数就为1,因此卷积核的通道数也为1。
输出的feature map数量与卷积核量一致。
这里需要特别主要的一点,不管输入图片的通道数为多少,进行一次卷积操作得到的feature map(特征图)的数量仅由卷积核的个数决定。为了更好的理解输入图片的通道数,卷积核的通道数,卷积核的个数,输入特征图的个数之间的关系。举出以下的例子作为解释说明。
假设输入图片的通道数为4,因此卷积核的通道也为4。这里可以想象成输入图片是一个四层的矩阵,每一层矩阵的元素都是不一样的。卷积核也是4层矩阵,每一层矩阵的元素也是不同的,但是这仍然是一个卷积核,并不是四个卷积核,将其看成一个4kk的卷积核。卷积核的每一层矩阵与输入图片的每一层矩阵进行卷积计算,最后将卷积结果相加,得到feature map上的一个元素**。因此不管输入图片是几通道的,经过一个卷积核的卷积操作,就只能得到一个feature map,feature map的尺寸大小根据卷积核的超参数和输入图片尺寸来决定。**(feature map尺寸大小很重要,因为之后的池化操作与feature map的尺寸大小相关。一般计算时,通过对卷积核超参数的设定将feature map的尺寸与原输入图像的尺寸相同,再通过池化操作对feature map尺寸进行进一步缩减。)
下面是卷积计算的公式,卷积核中只有参数W和b,偏置b是权值共享的,一个卷积核不管几通道,只有一个偏置b。卷积公式本质就是一个累乘然后累加的过程,它的结果就是一个数值。(与线性代数两个向量的内积原理一样)。可以看到卷积计算中有一个函数tanh,该函数是激励函数,用于将卷积计算中的线性转换变成非线性转换(将在激励层详细介绍激励函数)。
另外卷积层的最大特点是权值共享与局部连接,下面介绍这两点对模型参数减少的作用。
权值共享的优点
权值共享:卷积操作时,每个卷积核的参数是相同的。
假设一张图片像素点为44,上图左侧为全连接(原始的神经网络),一个神经元有16个连接,每个神经元连接权值不同,假设有n个神经元,就需要**16n个权值**;右图为局部连接,每四个像素点连接一个神经元,共四个神经元,权值需4*4=16个;若是局部连接和权值共享,不管有几个神经元,每个神经元的权值是相同的,则共有4个权值。
正是由于权值共享的原因,每个卷积核对于输入矩阵只能提取到一种特征,为了增加卷积神经网络模型的能力,需要多个卷积核,提取原矩阵多个不同的特征。
激励层
激励层其实是包含在卷积层中的,在进行原输入矩阵与卷积核矩阵点乘之后,通过激励函数将原线性的点乘转化为非线性映射。
常用的激励函数:Sigmoid(少用),Tanh,ReLU(常用),Leaky ReLU(ReLU不好用的情况下,选择该函数),Maxout。
池化层
池化层,主要为了降低feature map的尺寸,相对于降维操作。
池化操作主要有Max pooling,Average pooling。
Max pooling:在设定的区域中,选择最大的元素。
Average pooling:在设定的区域中,选择元素的均值。
全连接层
全连接层主要为了实现卷积神经网络的分类或回归的任务。全连接层将之前的多个特征图变成一维向量。
可以理解为,之前的卷积层、激励层、池化层用于做特征提取,全连接层用于做分类。
参考文献
https://blog.csdn.net/weixin_42137700/article/details/86713188《从卷积层、激活层、池化层到全连接层深度解析卷积神经网络的原理》
https://blog.csdn.net/u014114990/article/details/51125776《多通道(比如RGB三通道)卷积过程》
https://blog.csdn.net/qq_36401512/article/details/85231190 《deeplearning中卷积后尺寸的变化》
https://www.jianshu.com/p/1ea2949c0056《一文让你理解什么是卷积神经网络》
https://www.cnblogs.com/shine-lee/p/9932226.html《卷积神经网络之卷积计算、作用与思想》