AlexNet简单理解&&CNN初步了解

来源:互联网 发布:金九银十 数据 编辑:程序博客网 时间:2024/05/28 15:45

AlexNet学习笔记

这周阅读了这篇paper. AlexNet有了简单的了解。再加上对CNNDL的初步了解。我就写一下我读完这篇文章之后对AlexNet的结构的了解吧。

 

1. AlexNet的模型结构。

AlexNet利用了CNNs的这样一种模型,这个模型里包含有5个卷积层和3个全连接层,并且中间穿插着池化操作。

卷积层就是用来进行卷积操作的,卷积运算就好比拿一张正方形的纸片(纸片上有对应的类似权值的值,例如一个5*5的正方形,25个格子内分别有一个值。)在每张图片从左到右,由上而下,依次移动,根据stride的大小来决定每次移动的距离。我们将在每次移动后,将正方形纸片覆盖范围对应的每个像素点的值与正方形上对应点的值做运算,然后得到一个结果,在经过在整张图片张运算后,我们就会得到一个映射后的平面。当我们有多个卷积核对这张图片进行操作的时候(就像我们有多个不同的正方形纸片一样,每个纸片都在图片上进行一次卷积操作)。就会得到多个映射的平面,最终合在一起就组成了一个立方体。这就是经过一个卷积层得到的结果。

全连接层就是传统意义上的神经元操作,和BP神经网络差不多。说白了其实就是一个线性操作。

池化层的作用就是筛选特征,减少特征数量。我是这样理解,我们一张图片,例如有100*100, 经过2*2, stride = 1的卷积层,会得到50*50的图,这50*50个像素点就相当于50*50个特征。经过一个2*2的不重叠池化操作,我们会得到25*25个特征,这样就减少了特征数量,并获得了某个特征的平均值,能够适合更多不同的图像。

这是因为在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)来代表这个区域的特征。

在AlexNet中,作者采用了重叠池化,这种池化方法可以让输出结果的错误率降低,并且让模型更难过拟合。

 

2. 模型的优化

(1)选择ReLU作为激活函数

作者使用了修正线性单元(ReLUs),用这种方法能够更快的学习,这种方法对于在大型

数据集上训练大型模型的表现有重大影响。

(2)多GPU并行训练

训练集中有120万张训练样本图,这对于一个GPU而言量太大了,所以我们将网络分布在两个GPU上。

作者采用了这样的一种并行模式:将各一半的网络内核(或神经元)放在每个GPU上,然后再采用一个小技巧:将GPU通信限制在某些特定的层上。

这意味着,比如,第三层的内核从所有的第二层内核映射(kernel map)中获得输入,但是,第四层的内核只从和自己在同一个GPU上的第三层内核中获得输入。

选择一种连接模式对于交互验证是个问题,但这允许我们精确调整连接的数量,直到计算量落入一个可接受的范围内。

这种结构降低了错误率,并且减少了训练时间。

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

 作者对输入数据进行归一化,这种归一化方法与局部对比度归一化有点类似,但他们的方法更准确的描述应该是亮度归一化。

对于归一化的作用我并不是很理解。


3.减少过拟合方式

(1)重叠池化

 有重叠的池化能稍稍让模型更难过拟合。

(2)数据集放大

 数据集放大有两种方式:

 一是通过从256X256的图片中随机抽取224X224的区块(及其水平镜像)来实现这种方法,并在这些抽取后得到的区块上训练我们的神经网络。

 第二种放大数据集的方法是对训练图片的RGB频谱密度进行改变。

3DROPOUT

 这种技术的主要操作就是随机的将神经元置零。这种技术降低了神经元间相互适应的复杂性,因为每个神经元都不可能依赖其他特定某个神经元的表现。

 因此,模型被迫学习更加健壮的特征,使之能够被许多不同的随机神经元子集使用。这样的话,就减少了过拟合的可能性。

 

以上就是我学习完AlexNet之后对AlexNet的理解。


如果有哪些错误,请各位大神包涵并指出,多谢!

0 0
原创粉丝点击