您的位置:首页 > 理论基础 > 计算机网络

论文笔记ImageNet Classification with Deep Convolutional Neural Networks(AlexNet)

2017-01-30 14:10 776 查看
先上文章下载地址:ImageNet Classification with Deep Convolutional Neural Networks

  2012年出现的AlexNet是目前这个深度卷积神经网络热潮的开端,这篇文章就是介绍的AlexNet,其中用的许多techniques其实现在都很常用,但是在当时都是挺新的,比如在一片用sigmoid的大环境用上了ReLu等等。



图1.AlexNet 网络架构

  除了输入输出层外,这个网络包含了5个卷积层和3个全连接层,参数分别为:

1). Input layer: 224 * 224 * 3 (RGB图片,224 * 224像素)(看Stanford的CS231n课程时候,Andrej Karpathy说Alex坚持这里是224,然后这里应该是227,不然没法成立,即下一层不会是55)

2). Conv layer: 96 kernels of 11 * 11 * 3 - LRN - Max-Pooling - ReLU

3). Conv layer2: 256 kernels of 5 * 5 * 48 - LRN - Max-Pooling - ReLU

4). Conv layer3: 384 kernels of 3 * 3 * 256 - ReLU

5). Conv layer4: 384 kernels of 3 * 3 * 192 - Max-Pooling - ReLU

6). Conv layer5: 256 kernels of 3 * 3 * 192 - ReLU

7). Fully-connected1 of size 4096 - ReLU

8). Fully-connected2 of size 4096 - ReLU

9). Fully-connected3 of size 4096 - ReLU(这一层称为FC7,因为这一层刚好是分类层前面一层,所有现在人们一般在别的结构中也称这一层为FC7,即使那一层实际并不在第7层)

10). Softmax output 1000

下面先按作者所认为的重要性列一下用到的东西:

1. ReLU Nonlinearity

  这里不是跟以前一样用的是 f(x)=tanh(x) 或者 f(x)=(1+e−x)−1,而是f(x)=max(0,x),最后一个要比前二者训练速度快很多,作者在文中也有相应的实验。而且由ReLu本身的性质知道,其求导容易,这在BP中比较好,而且其是非饱和的,解决了梯度消失的问题。

  其实后续人们还有对ReLu的改进型进行研究,如PReLu,Random ReLu。

2.Multi-GPU

  利用多个GPU进行计算,这也是人们现在的常用手段,不过现在又有新的诸如FPGA的计算方式

  不过有一点比较奇怪,文中作者在6.1提到

The kernels on GPU 1 are largely color-agnostic, while the kernelson

on GPU 2 are largely color-specific. This kind of specialization

occurs during every run and isindependent of any particular random

weight initialization (modulo a renumbering of the GPUs).

  比较奇怪为什么会有这样的现象。

3.Local Response Normalization

  LRN层是用来做归一化的,它能够带来更好的泛化能力,aix,y将记作在位置(x,y)处利用核i计算出神经元的激活值,然后再利用ReLU,响应正则化项bix,y主要公式如下:

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

  这个trick之前貌似有听过说没什么用,就没怎么研究,以后有机会查一查。

更新:后续在学习CS231n时,Andrej Karpathy称这是在12年左右用在normalization的一个layer,后续研究已经证明其没什么鸟用

4.有重叠的pooling

  典型的池化过程是不重叠的,但这里是重叠的,因为保留了更多的原信息,所以提高了一点成绩。文章最后还说了对防止过拟合有一点点(slightly)作用,所以目测并没有什么卵用

  尽管有1.2million的训练数据,分为1000类,但每一类也只有一千多个,这会导致过拟合。下面讲一讲作者用到的一些防止过拟合的措施:

1.Data Augmentation

有两种:

1)简单地说就是对现有数据进行变换,文中把原始训练图像缩放到256X256,然后从中随机取出224X224的若干图像使得数据量增到2048倍(没说具体怎么取,可能可以算出来吧)。对于测试图像分别取四个corner以及中间的224X224大小的patch,以及其flip后的patch(这样一共有10个 patches),最后在softmax输出层那里对预测结果做一个平均。不过这样做应该会增大了数据的关联性,增加了过拟合风险。

2)更改数据图片RGB通道的强度。通过PCA主成分分析,找出整个数据集中RGB像素值的主成分,但是不降维,只取特征向量和特征值。对训练集上每张图片的每个像素Ix,y=[IRx,y,IGx,y,IBx,y]T加上值:

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

  其中pi分别为特征向量,λi为特征值,αi为标准正态分布的随机值(对于特定一幅图的αi是同一个的,直到它被拉去训练)

2.Dropout

  这也是现在非常常用的一个方法,通过随机的训练中的一些节点暂时“丢掉”,来防止过拟合,而且既可以达到多个模型联合的效果(因为每次的结构都不同,但又共享参数),增强了学到的特征的鲁棒性,又不用花太多的时间去训练多个网络。但是这样一定程度上会延长训练的时间,因为随机性不只是会打乱过拟合的过程,也会打乱正常拟合的过程。 在测试的时候,不使用dropout,使所有神经元都运算,最后乘个0.5后输出(不过不乘也没问题,只是乘了以后比较凸显这种差别。而且也与训练的效果一致了不会让别人多一步疑惑)。

  最后简要说一下训练过程,权值更新公式如下:

vi+1=0.9⋅vi−0.0005⋅lr⋅ωi−lr⋅⟨∂L∂ω|ωi⟩Di

ωi+1=ωi+vi+1

  其中,i表示循环的次数,v表示动量,lr表示学习率,⟨∂L∂ω|ωi⟩Di表示在batch中,目标函数反传的误差。

  另外关于此部分,作者有一句话:

We found that this small amount of weight decay was important for the

model to learn. In other words, weight decay here is not merely a

regularizer:it reduces the model’s training error.

  文章别的地方也没有解释,不大明白为什么。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  神经网络
相关文章推荐