1. 局部感受野
我们把输入像素连接到一个隐藏神经元层,但是我们不会把每个输入像素连接到每个隐藏神经元。相反,我们只是把输入像素进行小的,局部区域的连接。说确切点,隐藏层中的每个神经元会连接到一个输入神经元的一个小区域。比如,
这个输入图像的区域被称为隐藏神经元的局部感受野。它是输入像素上的一个小窗口。每个连接学习一个权重。而隐藏神经元同时也学习一个总的偏置。你可以把这个特定的隐藏神经元看作是在学习它的局部感受野。
然后在整个输入图像上交叉移动局部感受野。对于每个局部感受野,在第一个隐藏层中有一个不同的隐藏神经元。
如此重复,构建起第一个隐藏层。注意如果我们有一个28x28的输入图像,5x5的局部感受野,那么隐藏层中就会有24x24个神经元。这个是因为在抵达右边的输入图像之前,我们只能把局部感受野横向移动23个神经元。
上面的局部感受野每次移动一个像素。实际上,有时候可以使用不同的跨距。
2. 共享权重和偏置
我们已经说过每个隐藏神经元具有一个偏置和连接到它的局部感受野的5x5的权重。我没有提及的是我们打算对24x24隐藏神经元中的每一个使用相同的权重和偏置。
这意味着第一个隐藏层的所有神经元检测完全相同的特征,这是在输入图像的不同位置。要明白为什么是这个道理,把权重和偏置设想成隐藏神经元可以挑选的东西。比如,在一个特定的局部感受野的垂直边缘。用更抽象的术语来说,就是卷积网络具有适应图像的平移不变形。
因为这个原因,我们有时候把输入层到隐藏层的映射称为一个特征映射。我们把定义特征和映射的权重称为共享权重。我们把这种方式定义特征映射的偏置称为共享偏置。共享权重和偏置经常被称为一个卷积核或者滤波器。
共享权值和偏置的一个很大的优点是,它大大减小了参与的卷积网络的参数。对于每个特征映射,我们需要25=5x5个共享权值,加上一个共享偏置。所以每个特征映射需要26个参数。如果我们有20个特征映射,那么总共有20x26=520个参数来定义卷积层。作为对比,假设我们有一个全连接层的第一层,具有784=28x28个输入神经元,和一个相对适中的30个隐藏神经元。总共有784x30个权重,加上额外的30个偏置,共有23550个参数。换句话来说,这个全连接的层有多大40倍于卷积层的参数。
当然,我们不能直接做参数数量之间的比较,因为这两个模型的本质是不同的。但是,直观的,使用卷积层的平移不变形似乎很可能减少全连接模型中达到相同性能的参数数量。反过来,这将导致更快的卷积模型的训练,并最终,有助于我们使用卷积层建立深度网络。
3. 混合层
除了卷积层,卷积神经网络还包含混合层(pooling layer)。混合层通常紧接着卷积层之后使用。它要做的是简化从卷积层输出的信息。
详细的说,一个混合层取得从卷积层输出的每一个特征映射并且从它们提取一个凝缩的特征映射。例如,混合层的每个单位可能概括了前一层的一个2x2的区域。作为一个具体的例子,一个常见的混合的程序被称为最大值混合(max-pooling)。最大值混合中,一个混合单元简单地输出其2x2输入区域的最大激活值。
注意在卷积层我们有24x24个神经元输出,混合后我们得到12x12个神经元。
我们可以把最大值混合看作一种网络询问是否有一个给定的特征在一个图像区域中的哪个地方被发现的方式。然后扔掉确切的位置信息。直观上,一旦一个特征被发现,他的确切信息并不如它相对于其他特征的大概位置重要。一个很大的好处是,这样可以有很多地更少的混合的特征,所有这有助于减少在以后的层的所需的参数的数目。
除了最大值混合,还有L2混合(L2 pooling)。这里我们取2x2区域中激活值的平方和的平方根,而不是最大激活值。
4. 全连接层
网络中最后连接的层是一个全连接层(fully connected layer)。更确切的说,这一层将最大值混合层的每一个神经元连接到每一个输出神经元。
卷积层要用弃权吗?
通常我们就只对全连接层应用弃权(dropout)。原则上我们可以在卷积层上应用一个类似的程序。但是,实际上没有必要。卷积层有相当大的先天的对于过度拟合的抵抗。原因是共享权值意味着卷积滤波器被强制从整个图像中学习。这使得他们不太可能去选择训练数据中的局部特质。于是就很少有必要应用其他规范化,例如弃权。
卷积神经网络如何避免梯度消失/爆炸问题?
(1) 卷积层极大地减少了这些层中参数的数目,使得学习的问题更加容易;
(2) 使用更多强有力的规范化技术(弃权和卷积层)来减少过度拟合,否则在更复杂的网络中会有更多的问题;
(3) 使用修正线性单元而不是s型神经元,来加速训练;
(4) 使用GPU并长时间的训练;
(5) 使用充分大的数据集;
(6) 使用正确的代价函数和梯度优化方法;
(7) 使用好的权重初始化;
(8) 使用算法形式拓展训练数据。