论文阅读:AlexNet(ImageNet Classification with Deep Convolutional Neural Networks)——AlexKrizhevsky...

GAN的课程大概就看到这里了,后面打算看几篇这个领域内比较新的论文和代码,最好能实现一下。上学期看了一些CV领域的论文,主要以物体检测为主。当时基本没有看代码,所以理解也是很浅显的,细节上并不明确,现在想整理一下。

ImageNet Classification with Deep Convolutional Neural Networks

这篇论文算是入门篇吧,将CNN用于分类,在ImageNet上的指标突飞猛进。因为后续的论文也都看了,这里的内容相对还是浅显的,就根据文章脉络简单总结一下:

1. 激活函数ReLU

激活函数(activation)是神经网络模型中非常重要的一部分,神经网络非常强的非线性建模能力就是依靠非线性的激活函数多层叠加实现的。由于网络的训练通常利用梯度下降和反向传播,保证神经元输出值的梯度非常重要,这就涉及到激活函数的选择:saturating还是non-saturating。以下内容是在其他人博客中看到的:

saturating activation function squeeze the input(压缩输入),可以理解为:输入趋于\infty时,输出不会趋于\infty,而是被限制在一定的取值范围内(被压缩)。比如tanh和sigmoid函数:

如上图所示,输入只要取一小部分值,输出就几乎能达到取值的边界(可能就是所谓的saturated);当输入取剩下一部分值时,输出已经几乎不变了,也就是斜率极小,对应到网络中就是每一层神经元输出值的梯度很小。由于网络越来越深,在链式求导法则下,小梯度累乘变得更小,就会出现梯度消失(gradient vanish)的问题。梯度消失导致反向传播法更新参数时十分缓慢,也就是训练时收敛速度很小,可能需要更多次迭代更新。因此本文引入了non-saturating activation function来解决这个问题。

ReLU(Rectified Linear Unit)函数表达式为:f(x)=max(0,x),当输入为负时,函数值永为0;输入为正时,输出等于输入,这就保证了斜率永远为1。结合神经网络理解,输入大于0时,该神经元被激活;小于0时不激活无输出,也就不会被更新参数。

以上内容总结自博客:https://blog.csdn.net/whu_paprika/article/details/54085670

更换了激活函数后的效果如图:实线表示使用了ReLU作为激活函数,虚线表示使用的是tanh,确实ReLU使得网络收敛加快了。

2. GPU并行计算

在当时计算资源有限的情况下,文本使用了两个GPU并行训练的方法,而且两个GPU的内容只在某些层是相连的,也就是有时候两者相连,有时候两者独立。这个可以从后面的网络结构图中看到,有些层的输出是分成了两部分,就表示在两个GPU上。并且这两部分时而会交叉连接,这种连接方法调整了计算量,不过也对交叉验证有影响,后来好像没怎么见到过别人用这个方法了。

3. 局部响应归一化(Local Response Normalization)

这个方法好像在VGG的论文中被指没有用了,不过tensorflow等里有这个函数,理论的东西我也不是很懂。局部响应其实就是神经元的输出,神经元的值是通过卷积也就是局部连接得到的;归一化其实是把本身的输出除以了一个值,这个值是该神经元附近通道的输出值的累加,具体公式如下:

LRN

其中,上标i表示的是第i个通道,x,y是神经元在该通道内位置,N是总通道数,n,\alpha ,\beta,k都是超参。这个方法的原理借鉴了生物学中的理论:对局部神经元的活动创建竞争机制,使其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。具体实现上,LRN应用在了卷积层1和2的后面。

4. 交叉池化(Overlapping Pooling)

这个方法我也没再见到别人用过。池化就是一种下采样,3*3而且步长为3的池化就是9倍的下采样,若是步长小于3(其实可以理解为卷积),就是overlapping pooling,一个点会参与到好几次池化操作中,这时就不是9倍的下采样了,至于得到的特征图大小可以按卷积计算方法得到。

5. 网络结构:

文中提出的网络一般称为AlexNet,由五个卷积层和三个全连接层构成,网络深度一共八层,如下图所示(图中所有大长方体表示的是层的输出,其内部的小长方体表示的是作用在该输出上的用于产生下一层的卷积核,所以网络层在该图中是以虚线和实线连接的形式呈现的,直接查连接的层数就是网络的层数):

输入:下图第一个非常薄的长方体表示的是该网络的输入,图像是224*224*3的尺寸(后来应该变成了227*227*3,为了卷积),其中3是通道数,表示R,G,B三个通道。因此输入是三维的矩阵;

接下来就是卷积层和池化层:卷积层最重要的就是卷积核大小(下文中遵循[H,W,C,N]的顺序表示卷积核,N是卷积核个数),步长stride(后面用s表示),补丁padding(后面用p表示),卷积前后图像尺寸(下文中遵循[H,W,C]的顺序表示图像大小)和参数个数;池化层的计算和卷积接近,因此也表示为类似的形式([H,W]表示池化大小,s表示步长)。

卷积层1(conv1):输入图像227*227*3;卷积核11*11*3*96;步长s=4;p=0;输出图像55*55*48。其中,55=(227-11)/4+1,48=96/2表示卷积后的96个通道分布在两个GPU上(图中上下两个长方体),后面的卷积和池化的计算都相对于一个GPU而言。

最大池化1(max pooling1):输入图像55*55*48;池化3*3*1;步长s=2;p=0;输出图像27*27*48。其中,27=(55-3)/2+1。

卷积层2(conv2):输入图像27*27*48;卷积核5*5*48*128;步长s=1;p=2;输出图像27*27*128。其中,27=(27+2*2-5)/1+1。

最大池化2(max pooling2):输入图像27*27*128;池化3*3*1;步长s=2;p=0;输出图像13*13*128。其中,13=(27-3)/2+1。

卷积层3(conv3):输入图像13*13*128;卷积核3*3*128*192;步长s=1;p=1;输出图像13*13*192。其中,13=(13+1*2-3)/1+1。

卷积层4(conv4):输入图像13*13*192;卷积核3*3*192*192;步长s=1;p=1;输出图像13*13*192。其中,13=(13+1*2-3)/1+1。

卷积层5(conv5):输入图像13*13*192;卷积核3*3*192*128;步长s=1;p=1;输出图像13*13*128。其中,13=(13+1*2-3)/1+1。

最大池化3(max pooling3):输入图像13*13*128;池化3*3*1;步长s=2;p=0;输出图像6*6*128。其中,6=(13-3)/2+1。

接下来是全连接层,进入全连接层之前,输入矩阵会被flatten为一维向量,只涉及向量长度和参数数量。

全连接层1(fc1):输入向量6*6*128,输出向量2048,参数6*6*128*2*2048*2。

全连接层2(fc2):输入向量2048,输出向量2048,参数2048*2*2048*2。

全连接层3(fc3):输入向量2048,输出向量1000,参数2048*2*1000。

到此网络的8层就结束了,但其实长度为1000的向量还要经过softmax操作(也可以理解为一层),把这1000个输出值变为0-1之间,也就是我们理解的类别置信度。

6. 防止过拟合

6.1 Data Augmentation

第一种数据增强的方法是剪裁(crop):训练时,原图是256*256大小,随机裁剪为224*224大小,并且水平翻转,这样数据扩增了2048倍,其中2048=(256-224)^2*2;测试时,从一张256*256大小的原图剪裁出5张224*224的图片(4个角落和一个中心图片),然后该原图对应的类别得分是5张剪裁图片得分的均值。crop是很常见的数据增强方法,这种剪裁一定程度上加强了网络对平移不变性的学习。

第二种数据增强的方法利用了PCA:这个方法也没再见过。它通过对原图片的RGB像素值加上变化值得到新的图片数据,变化值是由RGB的协方差矩阵的特征值\lambda_i和特征向量p_i以及服从高斯分布的一个变量\alpha_i决定的。该方法的原理是图像语义内容不会因为像素值的整体改变而变化(所以是所有像素加同样的值?)。

6.2 Dropout

这个方法就很常见了。训练时,以0.5的概率将隐藏层中的神经元的输出随机置为零,这样的神经元就不会参加前向计算和反向传播。因为概率的随机性,伴随每次输入,网络结构都在改变,但共享权重。这种变化相当于切断神经元之间的部分联系,强迫剩下的神经元加强学习能力。测试时,使用所有神经元,但是它们的输出要乘以0.5,以保持和训练时的数量级一致。具体实现上,该方法用在了全连接层1和2后面。

论文里的评价指标是top-1 error和top-5 error,这个指标的评价方法还是要了解一下的(看论文真的发现好多边边角角的知识点,可能因为之前没有系统看过书吧,都是补丁一样自己查的)。

网络最后的输出是一个长度为1000的向量,表示该图片分别属于数据集中1000个类别的概率。

top-1就是指按照这1000个概率的大小排列,仅取概率最高的那个类别结果作为我们图像分类的最终结果;

top-5就是按照概率大小排列后,取概率最高的前5名对应的类别作为分类结果,也就是说一张图片会输出5个可能的类别。

如果是判断正确率,top-1的类别若是正确的,则视为分类正确;top-5的结果中只要包含了正确的类别,就视为分类正确。

如果判断错误率,top-1的类别错误,则分类错误;top-5的5个结果中没有一个是正确的类别,才视为分类错误。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值