您的位置:首页 > 其它

ImageNet Classification with Deep Convolutional Neural Networks

2017-10-19 20:46 531 查看
说明:以下观点纯属个人学习所得,如果错误欢迎指正

ImageNet Classification with Deep Convolutional Neural Networks 是Hinton和他的学生Alex Krizhevsky在12年ImageNet Challenge使用的模型结构并赢得了2012届的冠军。

这样干看也是看不出什么门道的,之前看过目标检测的一些文章,部分是用Alexnet结构来做的,但是回过头看Alexnet这篇文章才发现其中的一些独特之处。

1.数据集

ImageNet是一个有超过1500W张带标签的高像素图片组成,这些图片属于大约22,000个类。图片从从网上收集,并使用Amazon Mechanical Turk群众外包工具来人工贴标签的。ILSVRC使用ImageNet的一个子集,分为1000种类别,每种类别中都有大约1000张图像。总之,大约有120万张训练图像,50,000张验证图像和150,000张测试图像。 在ImageNet上,习惯性地报告两个误差率:top-1和top-5,其中top-5误差率是指测试图像上正确标签不属于被模型认为是最有可能的五个标签的百分比。

由于ImageNet上的图片有各种分辨率,而作者所提出的网络需要固定的分辨率。所以,他们对图像进行了裁剪到固定大小的预处理。具体做法如下:先将图片较短的一条边裁剪到256,然后从图片中央裁剪出256*256。除了遍历训练集从每个像素中减去平均活跃度外,没有以任何其他方式预处理图像。所以用这些像素(中央那一片的)原始RGB值训练网络。

2.结构

这是基本的Alexnet的结构图



详细说一下Alexnet的结构

输入:图片以及原文中,Alexnet的输入时224*224,但是经过第一次卷积之后,得到的卷积是55*55。所以个人认为论文中有所错误。输入图片应该是227*227*3(RGB三通道)。(将预处理得到的256*256通过在左上、左下、右上、右下以及中央裁剪5块并horizontal reflections,得到10张,增加鲁棒性)

以下图片引用自:

http://blog.csdn.net/sunbaigui/article/details/39938097

CONV1:



数据的处理通过两个GPU,只有在部分层两GPU才有交互

CONV2:



将CONV2的输出作为CONV3的输入,只有在此处两个GPU才会有交互

CONV3:



CONV4:



CONV5:



FC6:



FC7:



FC8:



以上即为Alexnet的整个网络结构。

注意:在第一、二,以及四到八层,都是在两个GPU中进行的。

3.取得好成绩的原因

按paper中的描述详细讲述这些东西为什么能提高最终网络的性能。

ReLu Nonlinearity

为什么引入Relu呢?

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释balabala)。

具体的详细信息可以参考如下文章:

http://www.cnblogs.com/neopenx/p/4453161.html

基于ReLU的深度卷积网络比基于tanh的网络训练块数倍,下图是一个基于CIFAR-10的四层卷积网络在tanh和ReLU达到25%的training error的迭代次数:



Local Response Normalization

使用ReLU f(x)=max(0,x)后,你会发现激活函数之后的值没有了tanh、sigmoid函数那样有一个值域区间,所以一般在ReLU之后会做一个normalization,LRU就是稳重提出一种方法,在神经科学中有个概念叫“Lateral inhibition”,讲的是活跃的神经元对它周边神经元的影响。



Dropout

Dropout也是经常挺说的一个概念,能够比较有效地防止神经网络的过拟合。 相对于一般如线性模型使用正则的方法来防止模型过拟合,而在神经网络中Dropout通过修改神经网络本身结构来实现。对于某一层神经元,通过定义的概率来随机删除一些神经元,同时保持输入层与输出层神经元的个人不变,然后按照神经网络的学习方法进行参数更新,下一次迭代中,重新随机删除一些神经元,直至训练结束。

Data Augmentation

文章中提到了两种减少过拟合的方法,上面的Dropout算是一种,下面这个Data Augmentation也是作者在文章中提到的方法。

防止模型过拟合最简单的方法是增加数据,但是其实增加数据也是有策略的,paper当中从256*256中随机提出227*227的patches(即在上面结构这一内容中提出的输入图片为何是227而不是256),还有就是通过PCA来扩展数据集。这样就很有效地扩展了数据集,这是一种特别有效地手段,尤其是当数据量不够大的时候。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐