这篇文章使用的AlexNet网络,在2012年的ImageNet(ILSVRC-2012)竞赛中获得第一名,top-5的测试误差为15.3%,相比于第二名26.2%的误差降低了不少。

本文的创新点:

1) 训练了(当时)最大的一个卷积神经网络,在ImageNet数据集上取得(当时)最好的结果;

2) 写了一个高度优化的GPU实现的2维卷积;

3) 包含了一些新的特点,来提高网络的泛化能力和减少网络的训练时间

4) 使用了一些有效的方法来减轻过拟合;

5) 网络使用了5层卷积层和3层全连接层,如果减少任何一个卷积层,效果将会变差

数据集

使用的数据集为ImageNet数据集。

预处理:将所有图片大小调整为固定分辨率256x256,对于长方形的图片,首先将短边大小调整为256,然后再从中间区域裁剪出256x256大小的图片。

(每张图片)subtracting the mean activity over the training set from each pixel. So we trained our network on the (centered) raw RGB values of the pixels.

当时由于GPU性能的限制,所有使用了两个GPU进行训练。上面的结果比较简略,省略了一些细节。

完整的AlexNet网络结构如下:

[227x227x3] INPUT

[55x55x96] CONV1: 96 11x11 filters at stride 4, pad 0   注:(227 - 11)/ 4 + 1 = 55

[55x55x96] RELU1: activation

[27x27x96] MAX POOL1: 3x3 filters at stride 2    注:(55 - 3)/ 2 + 1 = 27

[27x27x96] NORM1: Normalization layer

[27x27x256] CONV2: 256 5x5 filters at stride 1, pad 2 注:(27+2x2-5)/ 1 + 1 = 27

[27x27x256] RELU2: activation

[13x13x256] MAX POOL2: 3x3 filters at stride 2 注:(27-3)/ 2 + 1 = 13

[13x13x256] NORM2: Normalization layer

[13x13x384] CONV3: 384 3x3 filters at stride 1, pad 1 注:(13+1x2-3)/ 1 + 1 = 13

[13x13x384] RELU3: activation

[13x13x384] CONV4: 384 3x3 filters at stride 1, pad 1 注:(13+1x2-3)/ 1 + 1 = 13

[13x13x384] RELU4: activation

[13x13x256] CONV5: 256 3x3 filters at stride 1, pad 1 注:(13+1x2-3)/ 1 + 1 = 13

[13x13x256] RELU5: activation

[6x6x256] MAX POOL3: 3x3 filters at stride 2 注:(13-3)/ 2 + 1 = 6

[4096] FC6: 4096 neurons

[4096] RELU6: activation

[4096] DROPOUT

[4096] FC7: 4096 neurons

[4096] RELU7: activation

[4096] DROPOUT

[1000] FC8: 1000 neurons (class scores)

网络的一些重要的特点

ReLU

ReLU全称为Rectified Linear Units。计算公式为f(x) = max(0, x)。相比于sigmoid和tanh激活函数,ReLU可以加快网络收敛速度,减少训练时间。

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

其中a是每一个神经元的激活,即第i个kernel map中(x, y)坐标的值,n是在同一个位置上临近的kernel map的数目,N是kernel的总数目,k,alpha,beta都是预设的一些hyper-parameters,其中k=2,n=5,alpha = 1*e-4,beta = 0.75,这些值都是在验证集上测试得到的。

好处:有利于增加泛化能力,做了平滑处理,识别率提高了1~2%。LRN层模仿生物神经系统的侧抑制机制,对局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,提高模型的泛化能力。

重叠池化

pooling区域为z*z=3*3,间隔距离为s=2.对比z=2,s=2的无重叠方式;使用重叠pooling,不容易过拟合。

减少过拟合

数据增强

  第一种方法是,从256x256图像(包括原图像和水平镜像后的图像)中随机地裁剪出224x224的patch,然后对这些224x224的patch送入网络进行训练(这就是网络为什么使用224x224x3作为输入大小的原因)。这种方法可以使得数据增加2048倍。

  在测试的时候,将预测的图片(和其水平镜像的图片)上下左右四个角落,中间裁取5x2=10个patch,送入网络进行预测,最后取这10个结果的平均值。

  第二种方法是,改变训练图像中RGB通道的强度。对于每个训练图像,我们成倍增加已有主成分,比例大小为对应特征值乘以一个从均值为0,标准差为0.1的高斯分布中提取的随机变量。在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量(特征向量),3个特征值, p1, p2, p3, λ1, λ2, λ3. 对每幅图像的每个像素Ixy=[IRxy,IGxy,IBxy]T进行加上如下的变化:

[p1,p2,p3][α1λ1,α2λ2,α3λ3]T

其中,αi是均值为0,标准差为0.1的高斯分布中的一个随机变量。

Dropout

  以0.5的概率将每个隐层神经元的输出设置为零。这些被“dropped out”的神经元既不会在前向传播起作用,也不会参与反向传播。因此,每次进行一次输入,整个网络都会改变一次结构,但是这些所有的结构的权值是共享的。由于每个神经元不能依赖其他特定的神经元,因此,会强迫网络学习更加鲁棒的特征。测试的时候,会使用每个神经元,但是会将其权值乘以0.5。

本文只在在第一个全连接层和第二个全连接层使用dropout。

训练细节

使用随机梯度下降法(SGD)进行训练,batch size为128,momentum为0.9,weight decay为0.0005(weight decay很重要,不仅仅是正则化,还可以减少模型训练误差)。

权重w的更新公式为:

其中,i是迭代次数,v是momentum变量,是学习率,是第i个batch(称为Di)对w的平均偏导数。

每一层的weight初始化方法为:均值为0,标准差为0.01的高斯分布。第2,4,5层的卷积层和3个全连接层的bias初始化都设置为1,其余层的bias初始化为0。这样设置初始化参数可以加速收敛。

对于学习率的设置,每一层的学习率相同,学习率初始化为0.01,后面的时候,当模型在验证集的误差不变时,将当前的学习率除以10,然后再接着训练。我们120万的训练集上训练了90次。

[论文阅读] ImageNet Classification with Deep Convolutional Neural Networks(传说中的AlexNet)的更多相关文章

  1. AlexNet论文翻译-ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 深度卷积神经网络的ImageNet分类 Alex Krizhevsky ...

  2. 《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

    <ImageNet Classification with Deep Convolutional Neural Networks> 剖析 CNN 领域的经典之作, 作者训练了一个面向数量为 ...

  3. ImageNet Classification with Deep Convolutional Neural Networks(译文)转载

    ImageNet Classification with Deep Convolutional Neural Networks Alex Krizhevsky, Ilya Sutskever, Geo ...

  4. 中文版 ImageNet Classification with Deep Convolutional Neural Networks

    ImageNet Classification with Deep Convolutional Neural Networks 摘要 我们训练了一个大型深度卷积神经网络来将ImageNet LSVRC ...

  5. 论文阅读笔记二-ImageNet Classification with Deep Convolutional Neural Networks

    分类的数据大小:1.2million 张,包括1000个类别. 网络结构:60million个参数,650,000个神经元.网络由5层卷积层,其中由最大值池化层和三个1000输出的(与图片的类别数相同 ...

  6. ImageNet Classification with Deep Convolutional Neural Networks 论文解读

    这个论文应该算是把深度学习应用到图片识别(ILSVRC,ImageNet large-scale Visual Recognition Challenge)上的具有重大意义的一篇文章.因为在之前,人们 ...

  7. 论文解读《ImageNet Classification with Deep Convolutional Neural Networks》

    这篇论文提出了AlexNet,奠定了深度学习在CV领域中的地位. 1. ReLu激活函数 2. Dropout 3. 数据增强 网络的架构如图所示 包含八个学习层:五个卷积神经网络和三个全连接网络,并 ...

  8. 阅读笔记:ImageNet Classification with Deep Convolutional Neural Networks

    概要: 本文中的Alexnet神经网络在LSVRC-2010图像分类比赛中得到了第一名和第五名,将120万高分辨率的图像分到1000不同的类别中,分类结果比以往的神经网络的分类都要好.为了训练更快,使 ...

  9. AlexNet——ImageNet Classification with Deep Convolutional Neural Networks

    1. 摘要 本文的模型采用了 5 层的卷积,一些层后面还紧跟着最大池化层,和 3 层的全连接,最后是一个 1000 维的 softmax 来进行分类. 为了减少过拟合,在全连接层采取了 dropout ...

随机推荐

  1. [SDOI2010] 魔法猪学院

    Description 给定e和边权,求有多少条不同的道路能从1到n使得边权之和的和小于e Solution A*裸题 娘的要是SPFA再把dis写成to就剁手 // By YoungNeal #in ...

  2. mysql数据库索引优化与实践(一)

    前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...

  3. nginx域名跳转技巧

    1.地址重写:访问server_name的时候跳转到http://www.cnblogs.com/qinyujie/ 修改nginx配置文件.加入到server{...}字段或者location字段里 ...

  4. 设计模式 --> (7)外观模式

    外观模式 外观模式为子系统中的一组接口提供一个一致的界面, 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 1.为一个复杂子系统提供一个简单接口. 2.提高子系统的独立性. ...

  5. C语言的文件读写操作函数小结

    一.文件打开 使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE包含了所有用来控制流的必要的信息.函数原型为: FILE ...

  6. oracle数据库--序列(sequence)

    一个问题: 在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动的增长,怎么处理? 解决方式:oracle是利用"序列"(sequence)来完成的. ...

  7. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  8. 201621123031 《Java程序设计》第6周学习总结

    作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...

  9. python 一致性哈希 分布式

    hash_ring # -*- coding: utf-8 -*- """ hash_ring ~~~~~~~~~~~~~~ Implements consistent ...

  10. Struts2之Struts2的标签库

    前言: Struts2提供了大量的标签 ,用来帮助开发表现层页面,这些表现一方面解决了美观性的需求,因为它们具有html标签一样的外观,另一方面它们解决了功能性的需求, 因为它们具有jsp脚本一样的逻 ...