卷积神经网络
计算机视觉
利用神经网络进行图片识别时,通常会将三通道图片转化为一维向量:
高度×宽度×3
,当图片的像素较低时,在神经网络中,可以将整个向量作为神经网络输入。但是,处理高分辨率的图片时,图片的尺寸过于庞大,利用神经网络进行处理,显然是不现实的,为此,需要对图片进行卷积运算。
卷积运算
对于卷积的运算如下动态图表示:
- 定义一个过滤器,一个3×3的矩阵
- 将过滤器矩阵的对应元素值与原矩阵的对应元素相乘并求和,得到输出矩阵值。
- 按照行列之间的关系对应移动这个过滤器矩阵。
以过滤器选定的第一个区域做计算,其计算过程是:
利用卷积运算实现边缘检测的过程如下图所示,
如上所述的矩阵中,像素为10代表代表较为明亮的颜色区域,而像素为0则代表较暗的区域,通过过滤器的卷积运算后,得到一个新的矩阵,中间的区域较边缘区域更为明亮(像素值更大),所以,可以很好的实现一个简单的垂直边缘检测。
边缘检测
如上所示的边缘检测中,实现了垂直的边缘检测。可以通过调整过滤器的参数实现水平检测,如下图所示:
通过调整过滤器,可以检测垂直或者水平的边缘,在计算机视觉中,可以通过调整过滤器的参数不同的组合,可以实现不同的效果,常见的两种过滤器,如下所示:
的组合,称之为sobel过滤器,具有更强的鲁棒性,而的组合称之为Scharr过滤器。
在深度学习中,目标就是当需要检测复杂图像的边缘时,将过滤器的参数设置为神经网络的参数,希望通过网络的学习,得到较好的参数,能够有效的检测图像的边缘。
Padding
构建卷积神经网络时,一个基本的卷积操作数就是Padding,关于Padding,有如下解释:
以上述例子为例,对一个的像素矩阵,使用一个的过滤器进行卷积运算,就会得到一个的输出矩阵,假设输入矩阵的维度是,而过滤器矩阵的维度是,则卷积后的矩阵维度大小是,以深层神经网络为例,随着神经网络层数的增加,每一层的训练将会使得输入矩阵缩小,而我们希望输出矩阵跟输入矩阵有相同的大小,所以需要对输入矩阵进行填充。
对输入矩阵进行填充时,通常填充的值是0,关于填充大小,有以下两种情况:
-
Valid卷积:Valid意味着不进行填充,通过卷积运算会得到一个的输出矩阵。
-
Same卷积:这种卷积方式,意味着输出矩阵和输入矩阵有相同的大小,假设填充个像素点,则有如下推导:
当填充个像素点时,此时输入矩阵将会变成;
此时输出矩阵的大下将会变成;
希望输入矩阵和输出矩阵有相同的大小,则有:,即有:,即为此时的填充大小,可以看出,填充的值是由过滤矩阵的大小决定的。
注意:在计算机视觉中,通常选择过滤矩阵的大小为奇数值。
卷积步长
上述例子中,卷积步长都是1,在神经网络中,可以对卷积步长做出调整,如下所示,将卷积步长调整为2时,卷积的过程将会如下所示:
卷积步长发生变化时,输出矩阵的大小也会发生变化,假设卷积步长为,填充为,输入矩阵为,而过滤器矩阵大小为,那么输出矩阵的大小的计算方式如下所示:
其中,表示向下取整,因为,我们不能保证以上公式中的除法运算得到的商是整数,需要向下取整,即也就是,希望,在卷积运算时,过滤矩阵能够完整的覆盖到输入矩阵上,而不至于过滤矩阵的一部分超出输入矩阵的大小,而导致运算错误。
三维卷积
在图像处理中,如果是彩色的三维图像(RGB三通道),卷积的过程如下图所示:
此时,过滤器也是一个三维矩阵,计算方法与二维卷积的计算类似,也是将对应元素相乘并相加。以上述图片为例,每次卷积的元素都是27个,最后将这些元素相加起来得到卷积后的元素。
可以设置不同的过滤矩阵,得到不同颜色卷积边缘,假设,只想检测红色图像的边缘,可以将过滤器矩阵的对应的蓝色通道和绿色通道的数据全部设置为0,红色部分设置为组成的矩阵即可。
除了设置一个过滤卷积矩阵外,还可以设置多个过滤矩阵进行卷积,以两个过滤矩阵进行卷积为例,其实现可以如下图所示;
整个实现过程就是分别利用两个过滤矩阵对图像进行卷积,最后的输出图像是由卷积后得到的图像组合而得到的。
由以上过程,可以得到如下规律:
- 输入图像的维数是( 代表通道数目)
- 过滤矩阵的维数是(按照惯例,输入图像的通道和过滤矩阵的通道应该一样。)
- 最后,会得到一个维数为,其中代表过滤矩阵的个数。
单层卷积网络
以上图所示的卷积计算过程为例,卷积网络的前向传播过程如下所示:
-
以的矩阵作为输入,即令,计算
-
如公式(1)所示,这里的参数代表过滤矩阵的值,而表示的偏置,利用广播机制,对过滤矩阵的每一个元素都加上偏置参数。
-
最后利用,激活函数计算得到
以层为例,总结卷积神经网络的一层(层)的各种标记,如下所示:
第层过滤矩阵的大小
第层的填充大小
第层的卷积步长
过滤矩阵的通道数量
层的输入(即第层的输出):
第层的过滤矩阵的大小:
第层的参数矩阵的大小:,即权重参数就是所有过滤矩阵的集合再乘以过滤器的总数量。
偏置参数的大小为一个的四维向量。
经过卷积之后,输出图像的维度高度和宽度是:
则第层的输出矩阵的激活值
其中,和分别表示输入图像矩阵的高和宽。最后,若有个样本,则输出矩阵的维度大小是
池化层
除了使用卷积层,卷积网络经常使用池化层缩减模型的大小,以提高计算速度,同时提高所提取特征的鲁棒性。以最大池化为例,具体计算的过程如下所示:
与上述卷积计算不同的是,最大池化的计算是选择过滤矩阵所覆盖部分的最大值作为输出矩阵。数字大意味着可能探测到了某些特定的特征,最大化操作的功能是只要在任何一个区域内提取到某个特征,都会保留在最大化的池化输出里。其直观理解也就是只要在某个区域内提取到这个特征,就保留这个最大值,如果没有提取到这个特征,即使得到的最大值也还是较小。
此外,池化层没有需要学习的参数,只要确定了卷积步长和填充,此计算过程将会是一个固定运算,梯度下降不需要改变任何参数,并且最大池化的输出仍然满足卷积层的输出大小计算公式
如果参与计算的矩阵是多通道的矩阵,则计算过程需要对每个通道执行最大池化。
实际运算过程中,很少使用padding 填充,对于多通道图像,则最大池化后的输出大小是:
卷积神经网络示例
一个卷积神经网络的示例,如下图所示,卷积层和池化层构成了神经网络的“层”,最后,在其后连接全连接层和一个softmax输出层。
随着神经网络深度的加深,高度和宽度都会逐渐减小,而通道数量会增加,最后得到一个全连接层。在卷积神经网络中,一个卷积层和其后的池化层构成了神经网络的一层,因为池化层并不进行参数更新。
如上图所示的卷积神经网络中,其激活值大小如下表所示,可以看出,随着神经网络的加深,激活值尺寸逐渐变小,如果激活值尺寸下降太快,则会影响神经网络的性能。
卷积的优势
与全部使用全连接层的神经网络相比,卷积在神经网络中的两个优势是参数共享和稀疏连接。
-
参数共享:
对于图片的特征检测而言,如果过滤矩阵能够检测图片的某一区域,那么该过滤矩阵的参数也能够检测图像的另一区域。以图像的垂直边缘检测为例,直观感受就是,特征检测器既能够检测图片左上角的垂直边缘,也能够检测图片右下角的边缘,即使左上角和右下角的分布可能不同,但是不需要添加其他特征检测器。整张图片共享特征检测器,其提取效果也会很好。 -
稀疏连接:
所谓稀疏连接,就是通过过滤矩阵卷积运算后得到的输出值,只与输入矩阵的被卷积运算的部分有关,而不受输入矩阵其他部分元素的影响。
神经网络通过这两种方法减少参数,以便能够使用更小的训练集进行训练,从而防止过拟合。