美文网首页
AlexNet学习

AlexNet学习

作者: Latet | 来源:发表于2019-03-31 21:39 被阅读0次

前言

本文旨在学习和记录,如需转载,请附出处https://www.jianshu.com/p/e7fe46a3a5e3

1、AlexNet介绍

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的,因此得名叫做AlexNet
AlexNet原文下载ImageNet Classification with Deep ConvolutionalNeural Networks

2、 网络结构


如图,这是AlexNet的全图框架,因为原论文中是采取了两块GPU进行交互,所以在图中有两条支路。AlexNet架构有6000万参数和650000个神经元,包含5层卷积网络,其中一些含有max pooling,还有3层全连接层,最后一层的节点数1000个,采用softmax分类(针对的时候ImageNet LSVRC-2010 contest,有1000类)。

输入图像大小:(batch_size,3,224,224)
第一层卷积: (96,3,11,11) ,padding = 2,stride = 4     输出大小:(batch_size,96,55,55)
                    ReLU(), Local Response Normalization
                    max pooling(3,stride = 2)                        输出大小:(batch_size,96,27,27)
第二层卷积: (256,96,5,5) ,padding = 2,stride = 1     输出大小:(batch_size,256,27,27)
                    ReLU(), Local Response Normalization
                    max pooling(3,stride = 2)                        输出大小:(batch_size,256,13,13)
第三层卷积: (384,256,3,3) ,padding = 1,stride = 1     输出大小:(batch_size,384,13,13)
                    ReLU()
第四层卷积: (384,384,3,3) ,padding = 1,stride = 1     输出大小:(batch_size,384,13,13)
                    ReLU()               
第五层卷积: (256,384,3,3) ,padding = 1,stride = 1     输出大小:(batch_size,256,13,13)
                    ReLU()
                    max pooling(3,stride = 2)                        输出大小:(batch_size,256,6,6)
第六/七/八层全连接层
                    (256*6*6,4096)   ReLU()  Dropout()        输出大小:(batch_size,4096)
                    (4096,4096)      ReLU()  Dropout()          输出大小:(batch_size,4096)
                    (4096,1000)                                       输出大小:(batch_size,1000)

ReLU Nonlinearity

作者提到在这之前都是用sigmoid和tanh作为神经网络的激活函数,通过实验证明了饱和的非线性激活函数在训练时比非饱和的非线性激活函数慢很多。原因有:
1、对sigmoid和tanh激活函数而言,计算时采用指数计算,反向传播时计算量比较大;采用ReLU激活函数节约计算量时间;
2、对于深层网络,sigmoid和tanh反向传播时,在趋近饱和区时,变换缓慢,梯度接近于0,会导致训练缓慢,甚至训练失败;
3、ReLU会使一部分神经元输出为0,会促进网络稀疏性,减小参数直接相互依赖关系,防止过拟合。(ReLU相对于前者的优势)

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

ReLU的特性之一是不需要对输入数据进行归一化而防止饱和性,对ReLU而言,如果输入某个神经元的数据为正的时候,学习就发生在该神经元上面。作者发现提出的局部响应归一化会有效的促进泛化。

公式1
其中 普通池化操作

覆盖的池化操作是在池化的过程中会存在重叠的部分,即stride<kernel_size
作者实验表明重叠的池化层更不容易过拟合。

3、防止过拟合的技巧

  1. 数据增强
    作者数据增强的一个操作是对256256大小的RGB进行随机224224的裁剪和水平翻转,这可以增大训练集的数目,且证明了如果没有这些操作,会很容易过拟合,而这样则不得不采用更小的网络来训练;另一个操作是改变训练图片中RGB通道的强度,在每个图像的RGB值上分别加上一个数,方法为PCA,通过对整个训练数据集进行PCA操作,得到RGB通道的各自主成分,p1,p2,p3为特征向量,\lambda_{1},\lambda_{2},\lambda_{3}为特征值,添加的微小量为:
    [p1,p2,p3][\alpha _{1}\lambda _{1},\alpha _{2}\lambda _{2},\alpha _{3}\lambda _{3}]^{T}
    其中\alpha_{1},\alpha_{2},\alpha_{3},为随机参数,均值为0,方差为1,通过该种方法获取图像的重要特性,不随光照和颜色改变。
  2. Dropout
    通过Dropout,每次在训练中随机失活一部分比例的神经元,这些神经元就不参与前向传播和后向传播;所以每次数据送入训练时,神经网络采样的是不同的架构,但是所以的架构都共享一样的权重。Dropout减小了神经元之间的相互适应关系,因为神经元不必在依赖其他的神经元而存在。因此,这样就会网络学习到更加鲁棒的特征以适应与其他不同网络架构的子集。在训练中,如果Dropout的比例为0.5,在测试时,会将所有的神经元的输出乘以0.5,通过这样近似假设,来保证训练和测试时同步的。

4、其他细节

  1. 初始化权重为高斯分布,均值为0,标准差为0.01;
  2. 在第二层、第四层、第五层卷积层和全连接隐藏层的偏置设为1,这样设置加速了早期的训练,因为ReLU只训练输入为正的神经元,对其它层的偏置设为0;
  3. 所有层的学习率都设置一样,当验证集的错误率停止变换时对学习率进行调整,调整的方式是对当前学习率除以10

参考文献

ImageNet Classification with Deep ConvolutionalNeural Networks

相关文章

网友评论

      本文标题:AlexNet学习

      本文链接:https://www.haomeiwen.com/subject/kfkubqtx.html