卷积神经网络(Convolutional Neural Network,CNN)。
CNN 被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础。
首先,来看一下 CNN 的网络结构,了解 CNN 的大致框架。CNN 和之前介绍的神经网络一样,可以像乐高积木一样通过组装层来构建。不过,CNN 中新出现了卷积层(Convolution 层)和池化层(Pooling 层)。
之前介绍的神经网络中,相邻层的所有神经元之间都有连接,这称为全连接(fully-connected)。
用 Affine 层实现了全连接层。如果使用这个 Affine 层,一个 5 层的全连接的神经网络就可以通过下图所示的网络结构来实现
CNN中新增了Convolution层和Pooling层。
CNN 的层的连接顺序是“Convolution - ReLU -(Pooling)”(Pooling 层有时会被省略)。这可以理解为之前的“Affine - ReLU”连接被替换成了“Convolution - ReLU -(Pooling)”连接。
还需要注意的是,在上图的 CNN 中,靠近输出的层中使用了之前的“Affine - ReLU”组合。此外,最后的输出层中使用了之前的“Affine - Softmax”组合。这些都是一般的 CNN 中比较常见的结构。
全连接层存在的问题
全连接层会忽视形状,将全部的输入数据作为相同的神经元(同一维度的神经元)处理,所以无法利用与形状相关的信息。
而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以3维数据的形式接收输入数据,并同样以3维数据的形式输出至下一层。因此在CNN中,可以(有可能)正确理解图像等具有形状的数据。
另外,CNN中,有时将卷积层的输入输出数据称为特征图。其中,卷积层的输人数据称为输入特征图,输出数据称为输出特征图。
卷积运算
卷积层进行的处理就是卷积运算。卷积运算相当于图像处理中的“滤波器运算”。
卷积运算的例子:用符号表示卷积运算
现在来解释一下图中的卷积运算的例子中都进行了什么样的计算。
对于输人数据,卷积运算以一定间隔滑动滤波器的窗口并应用。将各个位置上波器的元素和输人的对应元素相乘,然后再求和(有时将这个计算称为乘累加运算)。然后,将这个结果保存到输出的对应位置。将这个过程在所有位置都进行一遍,就可以得到卷积运算的输出。
在全连接的神经网络中,除了权重参数,还存在偏置。CNN中,滤波器的参数就对应之前的权重。并且,CNN中也存在偏置。
在全连接的神经网络中,除了权重参数,还存在偏置。CNN 中,滤波器的参数就对应之前的权重。并且,CNN 中也存在偏置。包含偏置的卷积运算的处理如下图:
偏置会加到所有元素上
填充
在进行卷积层的处理之前,有时要向输人数据的周围填入固定的数据(比如0等),这称为填充,是卷积运算中经常会用到的处理。
上图中,对大小为 (4, 4) 的输入数据应用了幅度为 1填充内容为0 的填充
使用填充主要是为了调整输出的大小。
如果每次进行卷积运算都会缩小空间,那么在某个时刻输出大小就有可能变为1,导致无法再应用卷积运算。为了避免出现这样的情况,就要使用填充。在刚才的例子中,将填充的幅度设为1,那么相对于输入大小(4,4),输出大小也保持为原来的(4,4)。因此,卷积运算就可以在保持空间大小不变的情况下将数据传给下一层。
步幅
应用滤波器的位置间隔称为步幅。之前的例子中步幅都是1,如果将步幅设为2,应用滤波器的窗口的间隔变为2个元素。
综上,增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。
这里,假设输人大小为(H,W),滤波器大小为(FH,FW),输出大小(OH,OW),填充为P,步幅为S。此时,输出大小可通过下面的式子进行计算
这里需要注意的是,虽然只要代人值就可以计算输出大小,但是所设定的值必须使上面两个式子都可以除尽。当输出大小无法除尽时(结果是小数时),需要采取报错等对策。但在不同的框架中,当值无法除尽时,有时会向最接近的整数四舍五入,不进行报错而继续运行。
3维数据的卷积运算
通道方向上有多个特征图时,会按通道进行输入数据和滤波器的卷积运算,并将结果相加,从而得到输出。
在3维数据的卷积运算中,输人数据和滤波器的通道数设为相同的值(层数相同)。波器大小可以设定为任意值
计算过程如下:
批处理
神经网络的处理中进行了将输入数据打包的批处理。之前的全连接神经网络的实现也对应了批处理,通过批处理,能够实现处理的高效化和学习时对 mini-batch 的对应。
如果希望卷积运算也同样对应批处理。要将在各层间传递的数据保存为 4 维数据。具体地讲,就是按 (batch_num, channel, height, width) 的顺序保存数据。
如下图:
在上图的批处理版的数据流中,在各个数据的开头添加了批用的维度。像这样,数据作为 4 维的形状在各层间传递。这里需要注意的是,网络间传递的是 4 维数据,对这 N个数据进行了卷积运算。也就是说,批处理将 N次的处理汇总成了 1 次进行。