斋藤康毅7-卷积神经网络cnn

7.1整体结构

 之前介绍的神经网络中,相邻层的所有神经元之间都有连接,这称为全连接


 CNN 中新增了 Convolution 层 和 Pooling 层

7.2卷积层

 全连接层存在的问题:数据的形状被“忽视”了
 比如,输入数据是图像时,图像通常是高、长、通道方向上的3维形状。但是,向全连接层输入时,需要将3维数据拉平为1维数据
 图像是3维形状,这个形状中应该含有重要的空间信息,但是,因为全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此,在CNN中,可以(有可能)正确理解图像等具有形状的数据。 将卷积层的输入输出数据称为特征图

7.2.2卷积运算

 卷积运算相当于图像处理中的“滤波器运算”,对于输入数据,卷积运算以一定间隔滑动滤波器的窗口并应用。将各个位置上滤波器的元素和输入的对应元素相乘,然后再求和。将这个结果保存到输出的对应位置。向应用了滤波器的数据加上了偏置,这个值会被加到应用了滤波器的所有元素上


image

7.2.3填充

 在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据,这称为填充


 可以设置填充的大小,这里为1,大小为(4,4)的输入变成了(6,6)
 使用填充主要是为了调整输出的大小,因为如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为 1,导致无法再应用卷积运算。

7.2.4步幅

 应用滤波器的位置间隔称为步幅


综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。
 如何计算输出大小?

7.2.5 3维数据的卷积运算

 之前的卷积运算的例子都是以有高、长方向的2维形状为对象的。但是,图像是3维数据,除了高、长方向之外,还需要处理通道方向。通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出通道数只能设定为和输入数据的通道数相同的值

7.2.6结合方块思考

 把3维数据表示为多维数组时,书写顺序为(channel, height, width)。比如,通道数为C、高度为H、长度为W的数据的形状可以写成(C, H, W),滤波器也一样,可以写成(C, FH, FW)。


 在这个例子中,数据输出是1张特征图,就是通道数为1的特征图,怎么在通道方向上也拥有多个卷积运算的输出?为此,就需要用到多个滤波器

 通过应用FN个滤波器,输出特征图也生成了FN个。如果将这FN个特征图汇集在一起,就得到了形状为(FN, OH, OW)的方块。将这个方块传给下一层,就是CNN的处理流

7.2.7批处理

 神经网络的处理中进行了将输入数据打包的批处理,卷积运算也同样对应批处理,需要将在各层间传递的数据保存为4维数据image在各个数据的开头添加批用的维度,数据作为4维的形状在各层间传递。批处理将N次的处理汇总成了1次进行

7.3池化层

池化是缩小高、长方向上的空间的运算

 Max池化:将N×N的区域的最大值集约成一个元素

 池化层的特征

1没有要学习的参数
池化只是从目标区域中取最大值(或者平均值),所以不存在要学习的参数

2通道数不发生变化
计算是按通道独立进行的

3对微小的位置变化具有鲁棒性(健壮)
输入数据发生微小偏差时,池化仍会返回相同的结果。
(根据实际数据情况决定)

7.4卷积层和池化层的实现

简化:基于im2col展开

 CNN中各层间传递的数据是4维数据,比如数据的形状是(10, 1, 28, 28),分别对应batch num,channel num,weight,height。
 常规的卷积运算会重复好几层的for语句,比较麻烦且慢。这里引入了im2col函数
 对3维的输入数据应用im2col后,数据转换为2维矩阵。具体地说,把滤波器要处理的所有单个区域横向展开为一行


 下图为了方便观察将步幅设置的很大,使滤波器的应用区域不重叠。而实际中,滤波器应用区域重叠的情况下,使用im2col展开的元素会多余原方块的元素个数,会消耗更多内存,好处是,归结为矩阵运算可以有效利用线性代数库。

因为应用区域被展开为一行,根据矩阵运算的原理,需要把滤波器展开为一列,进行乘积运算后,就会输出一个2维矩阵,最后将数据reshape成合适的形状。

7.5CNN的实现和可视化

 简单的CNN网络如下实现,

#  CNN的可视化

 例如卷积层的权重的形状是(30, 1, 5, 5),即30个大小为5 × 5、通道为1的滤波器。通道数是1,意味着滤波器可以可视化为1通道的灰度图像


 这里,我们来比较一下学习前和学习后的权重,学习前的滤波器是随机进行初始化的,所以在黑白的浓淡上没有规律可循,但学习后的滤波器变成了有规律的图像。
 这些滤波器在观察什么呢?在观察边缘(颜色变化的分界线)和斑块(局部的块状区域)等
发现“滤波器1”对垂直方向上的边缘有响应,“滤波器2”对水平方向上的边缘有响应

 卷积层的滤波器会提取边缘或斑块等原始信息,传递给后面的层
堆叠了多层卷积层,则随着层次加深,提取的信息也愈加复杂、抽象