Alexnet学习笔记

Alexnet学习笔记

  • 一、摘要
  • 二、AlexNet的网络结构
  • 三、AlexNet对于数据的处理方法
  • 四、AlexNet的设计
  • 五、总结

一、摘要

AlexNet是2012年ImageNet项目的大规模视觉识别挑战(ILSVRC)中的胜出者。AlexNet解决了图像分类的问题,输入是1000个不同类型图像(如猫、狗等)中的一个图像,输出是1000个数字的矢量。输出向量的第i个元素即为输入图像属于第i类图像的概率。因此,输出向量的所有元素之和为1。

二、AlexNet的网络结构

AlexNet由5个卷积层和3个全连接层组成,如下图所示。
Alexnet学习笔记_第1张图片
多个卷积内核(a.k.a过滤器)可以提取图像中有趣的特征。通常,同一卷积层中内核的大小是相同的。例如,AlexNet的第一个Conv层包含96个大小为11x11x3的内核。值得注意的是,内核的宽度和高度通常是相同的,深度与通道的数量是相同的。
前两个卷积层后面是重叠的最大池层,第三个、第四个和第五个卷积层都是直接相连的。第5个卷积层后面是一个重叠的最大池层,它的输出会进入两个全连接层。第二个全连接层可以给softmax分类器提供1000类标签。
在所有的卷积层和全连接层之后,都应用了ReLU非线性函数。首先第一和第二个卷积层都应用ReLU非线性函数,然后进行局部标准化,最后执行pooling操作方法。但后来研究人员发现标准化并不是很有用,所以这里不详细论述。

三、AlexNet对于数据的处理方法

  1. 初步处理
    AlexNet的输入是一个大小为256×256的RGB图像。因此所有的训练集图像和测试图像的大小都要为256×256。

    如果输入图像的大小不是256×256,那么用它来训练神经网络之前需要将其转换成256×256的大小。为了实现这一转换,将图像尺寸缩小成256,最终剪裁获得一个大小为256×256的图像。

    如果输入图像为灰度图像,可以通过复制单个通道将其转换成一个3通道的RGB图像。由256×256的图像可产生随机大小的图像,其中大小为227×227的图像来填充AlexNet的第一层。

    所有图片的每个像素值都需减去均值,均值采用训练数据按照RGB三分量分别求得。

  2. 训练数据处理
    这样使原始数据增加了(256-224)*(256-224)*2 = 2048倍
    对RGB空间做PCA,然后对主成分做(0,0.1)的高斯扰动,结果使错误率下降1%。

  3. 测试数据处理
    抽取图像4个角和中心的224*224大小的图像以及其镜像翻转共10张图像利用softmax进行预测,对所有预测取平均作为最终的分类结果

四、AlexNet的设计

  • 采用ReLU激活函数
    AlexNet的另一个重要特性就是使用了ReLU(整流线性单元)的非线性。Tanh或sigmoid激活函数曾是训练神经网络模型的常用方法。与使用像tanh或sigmoid这样的饱和激活函数相比,使用ReLU非线性可以使深度CNNs训练更快。本文的下图显示,与使用tanh(点线)的等效网络相比,使用ReLUs(solid曲线)的AlexNet能以6倍快的速度到达25%的训练错误率。这是在CIFAR-10数据集中完成的测试。


    Alexnet学习笔记_第2张图片
    为什么用ReLUs训练得更快?ReLU函数为f(x)= max(0,x)。

    Alexnet学习笔记_第3张图片

    上面是tanh和ReLU两个函数的图。tanh函数在z值很高或很低时饱和,且函数的斜率接近于0,有助于减缓梯度下降。另一方面,当z为较大的正值时ReLU函数的斜率不接近于零,有助于最优化收敛得更快。z为负值时斜率为零,但是神经网络中的大多数神经元最终都具有正值。sigmoid函数也因为同样的原因,稍逊于ReLU。

  • 采用LRN层
    因为后面的网络用的不多,所以不再赘述

  • 重叠池化

    池化操作(Pooling)用于卷积操作之后,其作用在于特征融合和降维,其实也是一种类似卷积的操作,只是池化层的所有参数都是超参数,都是不用学习得到的。

    在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。Alexnet设置s=2,z=3,这个方案分别降低了top-1 0.4%,top5 0.3%的错误率。且论文提到重叠池化的模型更难过拟合。

  • 采用Dropout

    训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。朴素思想:以0.5的概率让隐藏层的输出为0,失活的神经元不再进行前向传播且不参与反向传播

    alexnet:前两个全连接层使用dropout,会减少过拟合,但会使训练迭代次数翻一倍

  • 2个GPU并行计算

五、总结

本文是在参考了很多大佬的内容之后写出来的,内容有不足之处还望指正。
参考的文章如下:
撞地球的西瓜,Alexnet:http://abca0da9.wiz03.com/share/s/2HOwSF1WyANN25n3Us3pwkh83ir1zO2N7A8g29p3Wk2U965S
春枫琰玉,AlexNet:
https://blog.csdn.net/chunfengyanyulove/article/details/79084060
云栖社区,AlexNet到底是什么:
https://yq.aliyun.com/articles/602853

你可能感兴趣的:(机器学习)