神经网络设计与实现
上QQ阅读APP看书,第一时间看更新

3.1 理解卷积神经网络

在实际应用中使用前馈全连接神经网络会产生一个问题,即我们试图解决的问题(如图像问题)的输入会非常大。考虑一个尺寸为100×100像素的简单图像,仅第一个隐藏层中的每个神经元就有10 000个权重。随着图像数据变大,输入增加,显而易见,这将迅速成为一个大问题。

CNN是一种网络架构,它使用输入数据的某些属性来减少连接不同网络层所需的连接数量。特别是,CNN依赖于具有很强的空间相关性的输入数据,这意味着相关的特征会离得较近,不相关的特性会离得较远。该属性是图像的典型特征,通常你的任务是去识别和分类一幅较为宽泛的图像的某个子部分。例如在一幅宽泛的图像中识别一个人,所有与该任务相关的特征将位于同一区域。CNN还可以用于其他任务,例如语音分析。如我们之前提到的,一般来说,如果你发现当前所研究的问题的特征空间相关性较高,则可以考虑使用CNN。

CNN的灵感来自神经元之间的连接模式,类似于视觉皮层。单个神经元只对视野中有限区域(称为感受野)内的视觉刺激做出反应,不同神经元的感受野是有部分重叠的,从而覆盖整个视野。

顾名思义,卷积是CNN中最重要的运算。CNN是一种前馈神经网络(FFNN),通常由以下几层组成:

·输入层

·卷积层

·激活层

·池化层

·归一化层

·全连接层

·输出层

现在将学习这些概念背后的理论,以及如何在Keras中编写它们。我们已经讨论过激活函数,因此在这里不再赘述,接下来我们将详细讨论每一层。

输入数据

在CNN中,输入的数据具有高度空间相关性。以一幅图像为例,任何图像的数字表示都是一个像素矩阵,每个像素表示图像中的一个点,对于黑白图像而言是一个数字。例如,我们使用一个8位二进制数(一个字节)表示,则值在0~255之间(见图3-1)。因为我们的机器将使用二进制表示形式,所以将有28个可能的值。

上述例子只是所有可以运用CNN解决的任务之一。通常,CNN非常擅长处理具有高度空间相关性的输入,这些问题必须具有类似网格的拓扑。其他示例包括视频、推荐系统,甚至时间序列等,因为它们都可以被视为一维网格。

CNN的优点之一是它可以处理所有不适合传统表格形式的输入,例如大小不同的输入,这是因为卷积运算一次只处理一部分输入。CNN会不断重复应用卷积核到图像分块的卷积运算过程,其所需重复的次数完全取决于输入的大小,我们可以将其视为输入和核之间的多重矩阵乘法。

图3-1 来自MNIST数据集的图,图中可以识别手写数字7