AlexNet 笔记
1. ReLUs (Rectified Linear Units)
$$
f(x)=\max(0, x)
$$
考虑到梯度下降的效率问题,传统的 sigmoid 和 tanh 激活函数的计算比较费时,而且要是每一层不做正则化的话,随着层数的增加,神经元的输出会越来越大,而这两个激活函数又是饱和的,导致激活后的输出差距不大,没有区分度。
而 ReLU 则比较简单,并且效果更好,不是饱和的激活函数,所以本文中选用的是 ReLUs 作为激活函数。
2. LRN (Local Response Normalization)
LRN 的目的是增强那些有输出的神经元的影响力,达到防止过拟合的效果。
$$
b_{x,y}^i=a_{x,y}^i\,/\,\left(k+\alpha\sum_{j=\max(0,i-n/2)}^{\min(N,i+n/2)}\left(a_{x,y}^j\right)^2\right)^\beta
$$
$a$: 尚未正则化的、原始(经过卷积、ReLU 层)的输出。
$b$: 经过 LRN 之后的输出。
$i$: 第 $i$ 个 Channel。
$x$: 第 $i$ 个 Channel 上的 $x$ 坐标。
$y$: 第 $i$ 个 Channel 上的 $y$ 坐标。
$N$: Channel 的总数。
$k$: 超参数,一般设置为 $2$ 。
$\alpha$: 超参数,一般设置为 $10^{-4}$ 。
$\beta$: 超参数,一般设置为 $0.75$ 。
公式的直观理解就是,对于一个 Channel 的某个像素点,找到与之邻近的 $n$ 个 Channel 上的相同位置的像素点,做正则化(归一化)。
下图很直观地表示了计算的过程。
3. Overlapping Pooling
池化层(Pooling Layer)在 CNN 当中的作用是对卷积层的输出进行总结归纳,减少噪声的影响,突出最有价值的元素,提升模型的泛化能力,降低计算复杂度。
传统的池化层的池化单元是不重叠的,假设池化单元的尺寸为 $z \times 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\times224\times3$
第 1 层卷积层:$96\times(11\times11\times3)$
第 2 层卷积层:$256\times(5\times5\times48)$
第 3 层卷积层:$384\times(3\times3\times256)$
第 4 层卷积层:$384\times(3\times3\times192)$
第 5 层卷积层:$256\times(3\times3\times192)$
可以看到,第 2 层之后的卷积层的 Channel 的尺寸(即最后一个值 48、256、192、192),除了第 3 层的 256 与前一层的第 1 个值相同,其余都是前一层的 $1⁄2$ 。也表明了除了第 3 层与前层两个 GPU 的输出都有连接外,其它层都只与前层同一个 GPU 的输出相连接。
- 所有的全连接层的神经元个数都是 4096 。
5. Reducing Overfitting
Data Augmentation
增加训练集的图片样本数,包括对图片的平移和水平翻转。还有改变图片的 RGB 值的相对强度。
先对整个训练集进行 PCA,即进行特征值分解,得到特征值 ${\bf p}_i$ 和特征向量 $\lambda_i$ ,然后每张图片加上:
$$ [{\bf p}_1,{\bf p}_2,{\bf p}_3][\alpha_1\lambda_1,\alpha_2\lambda_2,\alpha_3\lambda_3]^{\rm T} $$
其中 $\alpha_i\sim N(0, 0.1^2)$ 。
改变 RGB 的相对强度并不会改变图像的 identity,但是会突出图像的比较重要的部分。
Dropout
训练时,在全连接层上,以 0.5 的概率将某些神经元的输出设置成 0 ,也就是说该神经元不参与此次 Forward 的过程(同时也不会参与此次 Backward Propagation 的过程)。如此一来,每一次 Forward 和 Backward,其通过的神经网络的 Architecture ,与上一次都可能是不同的。
用这种方法,强制使得神经元不能去固定地依赖前面的某个输出,强迫其学习到更加 Robust 的特征,避免过拟合。