一、说明
二、2012年的ImageNet竞赛
ImageNet 是一个包含超过 1500 万张带标签的高分辨率图像的数据集,其中包含大约 22,000 个类别。ILSVRC 使用 ImageNet 的子集,其中每个类别包含约 1000 个图像。总共大约有 120 万张训练图像、5 万张验证图像和 15 万张测试图像。
AlexNet,ILSVRC 2012 图像分类冠军,错误率显着降低
答:对于AlexNet,我们将介绍:
- 建筑学
- ReLU(修正线性单元)
- 多个 GPU
- 局部响应标准化
- 重叠池化
- 数据增强
- 辍学
- 学习参数的其他细节
- 结果
B. 对于CaffeNet来说,它只是AlexNet 的单 GPU 版本。由于通常情况下,人们只有一个 GPU,因此 CaffeNet 是一个用于模拟 AlexNet 的单 GPU 网络。我们也将在本故事的结尾介绍这一点。
通过遍历每个组件,我们可以知道每个组件的重要性。其中一些现在不太有用。但它们确实激发了其他网络的发明。
三、AlexNet网络描述
1. 架构
亚历克斯网
AlexNet 包含八层:
输入:227×227×3输入图像(论文中和图中也提到了224×224×3尺寸,但是后来指出应该是227,或者在计算过程中填充了224×224×3第 1 次卷积。)
第一:卷积层:2组,每组48个核,大小11×11×3
(stride:4,pad:0)
输出55×55×48特征图×2组
然后3×3重叠最大池化(stride:2)
输出27×27×48特征图×2组
然后局部响应归一化
输出27×27×48特征图×2组
第二:卷积层:2组,每组128个核,大小为5×5×48
(步长:1,pad:2)
输出27×27×128特征图×2组
然后3×3重叠最大池化(步长:2)
输出13×13×128特征图×2组
然后局部响应归一化
输出13×13×128特征图×2组
第三:卷积层:2组,每组192个核,大小为3×3×256
(stride:1,pad:1)
输出13×13×192个特征图×2组
第四:卷积层:2组,每组192个核,大小为3×3×192
(stride:1,pad:1)
输出13×13×192个特征图×2组
第五:卷积层:256个大小为3×3×192的核
(步长:1,pad:1)
输出13×13×128特征图×2组
然后3×3重叠最大池化(步长:2)
输出6×6 ×128个特征图×2组
第 6 层: 4096 个神经元的全连接(密集)层
第 7 层: 4096 个神经元的全连接(密集)层
第 8 层:输出的全连接(密集)层
1000 个神经元(因为有 1000 个类)
Softmax用于计算损失。
总共有6000万个参数需要训练!!!
2.ReLU
激活函数
在 Alexnet 之前,使用的是 Tanh。AlexNet 中引入了 ReLU。
ReLU比Tanh 快六倍,达到 25% 的训练错误率。
3.多个GPU
当时使用的是NVIDIA GTX 580 GPU,只有3GB显存。因此,我们可以在架构中看到它们分成两条路径并使用 2 个 GPU 进行卷积。相互通信仅发生在一个特定的卷积层上。
因此,使用 2 个 GPU 是由于内存问题,而不是为了加快训练过程。
整个网络与只有一半内核(只有一条路径)的网络相比, Top-1和top-5错误率分别降低了1.7%和1.2%。
4. 局部响应标准化
正常化
在AlexNet中,使用了局部响应归一化。正如我们在方程中看到的,它与批量归一化不同。标准化有助于加速收敛。如今,使用批量归一化而不是使用本地响应归一化。
通过本地响应标准化,Top-1 和 top-5 错误率分别降低了 1.4% 和 1.2%。
5. 重叠池化
重叠池化是步幅小于内核大小的池化,非重叠池化是步幅等于或大于内核大小的池化。
通过重叠池化,Top-1 和 top-5 错误率分别降低了 0.4% 和 0.3%。
6. 数据增强
数据增强的两种形式。
第一:图像平移和水平反射(镜像)
从一张 256×256 图像加上水平反射中提取随机 224×224。训练集的大小增加了 2048 倍。计算公式如下:
通过图像平移:(256–224)²=32²=1024
通过水平反射:1024 × 2 = 2048
测试时,使用四个角斑块加上中心斑块及其对应的水平反射(总共10个斑块)进行预测,并取所有结果的平均值以获得最终的分类结果。
第二:改变强度
PCA 在训练集上执行。对于每个训练图像,添加数量:
强度改变量
其中 pi 和 λi 分别是 RGB 像素值的 3×3 协方差矩阵的第 i 个特征向量和特征值,αi 是平均值为 0、标准方差为 0.1 的随机变量。
通过数据增强来增加训练集的大小,Top-1 错误率降低了 1% 以上。
7. 辍学
辍学
对于使用 dropout 的层,在训练期间,每个神经元都有概率不参与前馈传递并参与反向传播。因此,每个神经元都可以有更大的机会接受训练,而不是过分依赖某些非常“强”的神经元。
考试期间,不会出现掉线的情况。
在 AlexNet 中,前两个全连接层使用 0.5 的概率。Dropout是一种减少过度拟合的正则化技术。
8.学习参数的其他细节
批量大小:128
动量 v:0.9
权重衰减:0.0005
学习率 ϵ:0.01,当验证错误率停止改善时手动减少 10,减少 3 倍。
动量v和权重w的更新
包含 120 万张图像的训练集。
网络训练了大约 90 个周期。
使用两个 NVIDIA GTX 580 3GB GPU 可以使用五到六天。
9. 结果
ILSVRC 2010 中的错误率
在 ILSVRC 2010 中,AlexNet 的 Top-1 和 top-5 错误率分别为 37.5% 和 17.0%,优于其他方法。
如果没有通过数据增强对 10 个补丁上的 10 个预测进行平均,AlexNet 仅获得 Top-1 和 top-5 错误率,分别为 39.0% 和 18.3%。
ILSVRC 2012 中的错误率
通过1个AlexNet(1个CNN),验证错误率为18.2%。
通过对5 个 AlexNet(5 个 CNN)的预测进行平均,错误率降低到16.4%。这是LeNet 中已经用于数字分类的一种 boosting 技术。
通过向 AlexNet (1 CNN*) 添加一层卷积层,验证错误率降低至16.6%。
通过对2 个修改后的 AlexNet 和 5 个原始 AlexNet(7 个 CNN*)的预测进行平均,验证错误率降低至15.4%。
AlexNet 的一些前 5 名结果
四、CaffeNet
CaffeNet 是 AlexNet 的 1-GPU 版本。该架构是:
注意点:
我们可以看到 AlexNet 中的 2 条路径合并为一条路径。
值得注意的是,对于 CaffeNet 的早期版本,池化层和归一化层的顺序是相反的,这是偶然的。但在 Caffe 提供的当前版本的 CaffeNet 中,它已经为 Caffenet 提供了池化层和归一化层的正确顺序。
通过对每个组件的逐一研究,我们可以了解每个组件的有效性。:)
如果有兴趣,还有一个关于使用 Nvidia-Docker 和 Caffe 快速设置 CaffeNet 的教程[3]。