AlexNet 笔记

1. ReLUs (Rectified Linear Units)

f(x)=max(0,x)

考虑到梯度下降的效率问题,传统的 sigmoid 和 tanh 激活函数的计算比较费时,而且要是每一层不做正则化的话,随着层数的增加,神经元的输出会越来越大,而这两个激活函数又是饱和的,导致激活后的输出差距不大,没有区分度。

而 ReLU 则比较简单,并且效果更好,不是饱和的激活函数,所以本文中选用的是 ReLUs 作为激活函数。

2. LRN (Local Response Normalization)

LRN 的目的是增强那些有输出的神经元的影响力,达到防止过拟合的效果。

bix,y=aix,y/(k+αmin(N,i+n/2)j=max(0,in/2)(ajx,y)2)β

  • a: 尚未正则化的、原始(经过卷积、ReLU 层)的输出。

  • b: 经过 LRN 之后的输出。

  • i: 第 i 个 Channel。

  • x: 第 i 个 Channel 上的 x 坐标。

  • y: 第 i 个 Channel 上的 y 坐标。

  • N: Channel 的总数。

  • k: 超参数,一般设置为 2

  • α: 超参数,一般设置为 104

  • β: 超参数,一般设置为 0.75

公式的直观理解就是,对于一个 Channel 的某个像素点,找到与之邻近的 n 个 Channel 上的相同位置的像素点,做正则化(归一化)。

下图很直观地表示了计算的过程。

3. Overlapping Pooling

池化层(Pooling Layer)在 CNN 当中的作用是对卷积层的输出进行总结归纳,减少噪声的影响,突出最有价值的元素,提升模型的泛化能力,降低计算复杂度。

传统的池化层的池化单元是不重叠的,假设池化单元的尺寸为 z×z ,则池化单元的步长 s 通常取 s=z ,即正好不重叠。

论文显示,若取 z=3,s=2 ,对于 Top-1 和 Top-5 的错误率分别能降低 0.4% 和 0.3% ,同时稍微能避免模型的过拟合。

4. Overall Architecture

整个神经网络一共有 8 层,前 5 层是卷积层(Convolutional Layers),后 3 层是全连接层(Fully-Connected Layers),最后一层的全连接层后面连的是一个 Softmax 层,用于将全连接层的输出转化成各个图片种类的概率分布。

由于 AlexNet 使用的是两个 GPU 来训练,所以对神经网络的结构也做了一定的调整。

各种层的具体排布为:

  • 第 2、4、5 层卷积层分别只与其上一层在同一个 GPU 的 Feature Maps(Channels)连接(而不是理想中那样的与上一层所有 Channels 都连接)。

  • 第 3 层与两个 GPU 中的第 2 层输出的 Channels 都有连接。

  • 所有全连接层与其前一层的所有神经元输出都有连接。

  • LRN(Local Response Normalization)层只接在第 1、2 层卷积层的 ReLU 输出之后。

  • 重叠的池化层(Overlapping Pooling)接在两个 LRN 层和第 5 层卷积层之后。

  • ReLU 层接在每个卷积层和全连接层之后。

各层的尺寸:

  • 输入尺寸:224×224×3

  • 第 1 层卷积层:96×(11×11×3)

  • 第 2 层卷积层:256×(5×5×48)

  • 第 3 层卷积层:384×(3×3×256)

  • 第 4 层卷积层:384×(3×3×192)

  • 第 5 层卷积层:256×(3×3×192)

可以看到,第 2 层之后的卷积层的 Channel 的尺寸(即最后一个值 48、256、192、192),除了第 3 层的 256 与前一层的第 1 个值相同,其余都是前一层的 $12$ 。也表明了除了第 3 层与前层两个 GPU 的输出都有连接外,其它层都只与前层同一个 GPU 的输出相连接。

  • 所有的全连接层的神经元个数都是 4096 。

5. Reducing Overfitting

  • Data Augmentation

    增加训练集的图片样本数,包括对图片的平移和水平翻转。还有改变图片的 RGB 值的相对强度。

    先对整个训练集进行 PCA,即进行特征值分解,得到特征值 pi 和特征向量 λi ,然后每张图片加上:

    [p1,p2,p3][α1λ1,α2λ2,α3λ3]T

    其中 αiN(0,0.12)

    改变 RGB 的相对强度并不会改变图像的 identity,但是会突出图像的比较重要的部分。

  • Dropout

    训练时,在全连接层上,以 0.5 的概率将某些神经元的输出设置成 0 ,也就是说该神经元不参与此次 Forward 的过程(同时也不会参与此次 Backward Propagation 的过程)。如此一来,每一次 Forward 和 Backward,其通过的神经网络的 Architecture ,与上一次都可能是不同的。

    用这种方法,强制使得神经元不能去固定地依赖前面的某个输出,强迫其学习到更加 Robust 的特征,避免过拟合。

References