导读
最近和同事交流很多来参加面试的应聘者的情况,很多都是介绍自己用了什么来做什么,但是对于内部的原理,都兵没有深入研究,现在深度学习框架都提供了非常便利的API,你可以轻松实现和搭建基础的网络,甚至可以直接照搬开源代码跑。
但你觉得跑跑开源代码真的就能拿到高薪吗?不太现实吧,跑通别人代码只是开始,更加重要的是理解原理,理解作者是如何通过观察发现存在的问题,理解作者如何设计实验,以及如何验证自己的想法。
在本文中,将回顾 AlexNet 和 CaffeNet。AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Competition) 的冠军,这是一个图像分类比赛。
这是2012年来自Hinton教授团队的NIPS论文,在我(指原作者)写这篇文章的时候被引用了28000次。它在深度学习方面取得了重大突破,大大降低了ILSVRC 2012的错误率,如下图所示。因此,这是一篇必读的论文!!
ImageNet是一个包含超过1500万张高分辨率图像的数据集,包含大约22000个类别。ILSVRC使用ImageNet的一个子集,在1000个类别中每个类别中大约有1000张图片。总共大约有120万张训练图像,5万张验证图像和15万张测试图像。
AlexNet, the winner in ILSVRC 2012 image classification with remarkable lower error rate
A. For AlexNet, we will cover:
- Architecture
- ReLU (Rectified Linear Unit)
- Multiple GPUs
- Local Response Normalization
- Overlapping Pooling
- Data Augmentation
- Dropout
- Other Details of Learning Parameters
- Results
B. 对于CaffeNet来说,它只是一个AlexNet的单gpu版本。因为通常人们只有一个GPU, CaffeNet是一个模拟AlexNet的单GPU网络。在这个故事的最后我们也会报道这个。
通过遍历每个组件,我们可以知道每个组件的重要性。其中一些现在还不是很有用。但它们确实激发了其他网络的发明。
整理自:https://medium.com/coinmonks/paper-review-of-alexnet-caffenet-winner-in-ilsvrc-2012-image-classification-b93598314160
1. Architecture
AlexNet
AlexNet contains eight layers:
1th: Convolutional Layer: 96 kernels of size 11×11×3 (stride: 4, pad: 0) 55×55×96 feature maps Then 3×3 Overlapping Max Pooling (stride: 2)
27×27×96 feature maps Then Local Response Normalization
27×27×96 feature maps
2nd: Convolutional Layer: 256 kernels of size 5×5×48 (stride: 1, pad: 2)
27×27×256 feature maps Then 3×3 Overlapping Max Pooling (stride: 2) 13×13×256 feature maps Then **Local Response Normalization 13×13×256 feature maps
3rd: Convolutional Layer: 384 kernels of size 3×3×256 (stride: 1, pad: 1)
13×13×384 feature maps
4th: Convolutional Layer: 384 kernels of size 3×3×192 (stride: 1, pad: 1)
13×13×384 feature maps
5th: Convolutional Layer: 256 kernels of size 3×3×192 (stride: 1, pad: 1)
13×13×256 feature maps Then 3×3 Overlapping Max Pooling (stride: 2)
6×6×256 feature maps
6th: Fully Connected (Dense) Layer of
4096 neurons
7th: Fully Connected (Dense) Layer of
4096 neurons
8th: Fully Connected (Dense) Layer of
Output: 1000 neurons (since there are 1000 classes) Softmax is used for calculating the loss.
总共有6000万参数需要训练!!!
2. ReLU
激活函数
在Alexnet之前,Tanh被使用。ReLU是在AlexNet中介绍的。达到25%的训练错误率时,ReLU比Tanh快6倍
3. Multiple GPUs
此时使用的是NVIDIA GTX 580 GPU,内存只有3GB。因此,我们可以在架构中看到,它们被分成两条路径,使用两个gpu进行卷积。内部通信只发生在一个特定的卷积层。
因此,使用2个gpu,是由于内存问题,而不是为了加快训练过程。
与只有一半内核(只有一条路径)的网络相比,整个网络中,top-1和top-5的错误率分别降低了1.7%和1.2%。
4. Local Response Normalization
Normalization
在AlexNet中,使用了局部相应归一化( local response normalization)。正如我们在方程式中看到的那样,它不同于批处理归一化(batch normalization)。归一化(normalization)有助于加快收敛速度。现在,批处理归一化代替了局部相应归一化。
通过局部响应归一化,Top-1和top-5的错误率分别降低了1.4%和1.2%。
5. Overlapping Pooling
Overlapping Pooling 是步长小于核大小的池化,而Non-Overlapping Pooling 是步长等于或大于核大小的池化。
通过overlapping pooling,,Top-1和top-5的错误率分别降低了0.4%和0.3%。
6. Data Augmentation
两种方式的数据增强
第一:图像平移 水平变换(镜像)
从一张 256×256的图像加上水平变换后随机裁剪224×224。训练集的大小增加了2048倍。可以计算如下:
图像平移 :(256–224)²=32²=1024
水平变换:1024×2 = 2048
在测试时,利用四个角斑加上中心斑及其对应的水平反射(共10个斑)进行预测,并对所有结果进行平均,得到最终分类结果。
第二:Altering the intensity
对训练集进行主成分分析 (PCA),对于每一张训练图像,添加数量:
Quantity of intensity altered
pi 和 λi 是 3×3协方差矩阵的特征向量和特征值的RGB像素值,相应的,αi 是随机变量的意思,均值为0和标准差0.1。
通过增加训练集的大小,将Top-1错误率降低1%以上。
7. Dropout
Dropout
通过在训练过程中使用dropout的这一层,每个神经元都有一定概率不参与前馈传递和反向传播。这样,每个神经元就可以有更大的机会接受训练,而不必太依赖某些非常“强大”的神经元。
在test阶段,没有使用 dropout。
在AlexNet中,前两个完全连接层的概率为0.5。Dropout是一种减少过拟合的正则化方法。
8. Other Details of Learning Parameters
Batch size: 128 Momentum v: 0.9 Weight Decay: 0.0005 Learning rate ϵ: 0.01, reduced by 10 manually when validation error rate stopped improving, and reduced by 3 times.
训练集120万张图片。网络被训练了大约90个周期。在两个NVIDIA GTX 580 3GB gpu上运行5到6天。
9. Results
Error Rate in ILSVRC 2010
对于ILSVRC 2010, AlexNet获得了前1和前5的错误率分别为37.5%和17.0%,优于其他方法。
如果不通过数据扩充对10个patches 进行10次预测取平均,AlexNet的前1次和前5次错误率分别为39.0%和18.3%。
Error Rate in ILSVRC 2010
用1个 AlexNet (1 CNN)时,验证错误率为18.2%。
通过对5个AlexNet(5个CNNs)的预测进行平均,错误率降低到16.4%。这是一种已经在LeNet中用于数字分类的boosting 技术。
通过在AlexNet中增加一个卷积层(1 CNN*),验证错误率降低到16.6%。
通过对2个modfiied AlexNet和5个原始AlexNet(7个CNNs)的预测进行平均*,验证错误率降低到15.4%。
Some Top-5 results by AlexNet
B. CaffeNet
CaffeNet is a 1-GPU version of AlexNet. The architecture is:
CaffeNet
我们可以看到AlexNet中的两条路径被合并成一条路径。
需要注意的是,对于CaffeNet的早期版本,池化层和归一化层的顺序是颠倒的,这是偶然的。但是在Caffe提供的当前版本的CaffeNet中,它已经为CaffeNet提供了正确的池化层和归一化化层的顺序。
通过逐一调查每个组件,我们可以知道每个成分的有效性。
References
- [2012 NIPS] [AlexNet] ImageNet Classification with Deep Convolutional Neural Networks https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
- [2014 ACM MM] [CaffeNet] Caffe: Convolutional Architecture for Fast Feature Embedding https://ucb-icsi-vision-group.github.io/caffe-paper/caffe.pdf
- VERY QUICK SETUP of CaffeNet (AlexNet) for Image Classification Using Nvidia-Docker 2.0 CUDA CuDNN Jupyter Notebook Caffe https://medium.com/@sh.tsang/very-quick-setup-of-caffenet-alexnet-for-image-classification-using-nvidia-docker-2-0-c3b75bb8c7a8
- ILSVRC ImageNet Large Scale Visual Recognition Competition http://www.image-net.org/challenges/LSVRC/
— 完 —
代码语言:javascript复制