2.3.2 卷积神经网络
FCNN的最大缺点是,由于神经元之间的突触紧密连接,因此存在参数过多的问题。对于涉及图像和音频的许多应用,可以利用信号空间域和时间域的不变性来减少所需突触的数量。
CNN的经典形式见图2.18。在每一层,输入数据和输出数据都是四维张量。在前向传递中,根据图2.19所示的伪代码,由输入图计算出每层的输出图。O[n][m][p][q]是第n个批次中位于第m个输出图的第p行第q列的输出元素。I[n][c][h][w]是第n个批次中位于第c个输入图的第h行第w列的输入元素。W[m][c][r][s]是位于权重滤波器的第r行第s列的权重元素,分别对应于第c个输入通道和第m个输出通道。B[m]是输出通道m的偏置。表2.2和图2.18显示了所有参数的详细含义。步长大小U和V用于表示滤波器如何在输入图上滑动。垂直步长为U表示滤波器在垂直方向上移动了U个单位,从而在输出图中获得两个垂直相邻的数据。类似的定义也适用于水平步长V。注意,P和Q不是自由参数,而是根据下面两个等式获得:
图2.18 典型CNN的组成。对于每个卷积运算,输入图的每小块通过几个滤波器进行卷积操作。不同的滤波器导致不同的输出通道。出于分类目的,全连接层通常(但不一定)用作CNN的最后一层
图2.19 CNN中涉及的典型卷积运算的伪代码。通过嵌套7个for循环,将输入特征图(四维张量)转换为输出特征图(四维张量)
表2.2 图2.18和图2.19中各参数的含义
顾名思义,CNN是涉及卷积的网络,尤其适用于图像和音频输入。以图像为例,像素之前存在空间关联性。对于位于图像左上角的像素,与位于图像右下角的像素相比,其周围的像素通常具有更强的相关性。CNN可以将图像通过一堆滤波器进行卷积操作来利用这种空间相关性。值得注意的是,即使未在图2.18中显示,CNN中也经常需要非线性激活函数,或者将多层神经网络转换成为两层线性神经网络。
理想情况下,CNN中的每个滤波器都试图寻找一个特定特征。输入图中通常有许多不同的特征。因此,通常可以获得比输入图更多的输出图。因为步长为1的卷积运算本身不会显著减小输入图的大小,如果我们在两个卷积层之间不做任何事情,随着网络层数的增加,我们要处理的数据量将迅速增长。而池化操作有助于减少需要处理的数据,它将一组数据转换为一个数据,如图2.20所示,可以通过平均池化或最大池化来完成。在该图中,步长假定为2。平均池化操作输出的是输入块中的平均值,而最大池化输出的是输入块中的最大数值。
图2.20 平均池化和最大池化的图示。平均池化和最大池化分别对应输出块的平均值和最大值
在训练方面,无论CNN涉及多么复杂的连接,CNN的训练在本质上都与FCNN的训练相同,轻微的区别是CNN中存在权重共享,需要把不同输出经过反向传播后得到的误差相加,以获得共享突触的误差。在评估方面,CNN通常有计算的限制。对于FCNN,它不存在权重复用(跨不同批次除外),并且必须将权重连续地传输到计算单元。而CNN可以将突触权重用于不同的输入块和不同的批次,如图2.19所示。因此,在实现CNN加速器时存在各种策略,这将在第3章中详细讨论。