1. 摘要

本文的模型采用了 5 层的卷积,一些层后面还紧跟着最大池化层,和 3 层的全连接,最后是一个 1000 维的 softmax 来进行分类。

为了减少过拟合,在全连接层采取了 dropout,实验结果证明非常有效。

2. 数据集

ImageNet 数据集包含了超过 15,000,000 大约 22,000 类标记好的高分辨率图片,ILSVRC 包含 ImageNet 中 1000 类每类大约 1000 张图片,总共大约有 1,200,000 张训练图片,50,000 张验证图片和 150,000 张测试图片。由于之只有 ILSVRC-2010 的测试集标签可以获得,本文的大部分实验都是基于此数据集。

数据集中的图片分辨率各不相同,但是网络需要固定的输入维度,因此,作者将图片统一下采样到一个固定的分辨率 256×256。给定一个长方形的图片,先将较短的一边调整为 256,然后裁剪出中间的 256×256 区域作为训练数据。除了减去所有像素的均值,作者未作其它预处理。

3. 网络结构

3.1. ReLU

采取 ReLU 作为激活函数的深度卷积网络训连起来要比采取 Tanh 的快好几倍,因此作者采用 ReLU 作为激活函数。

3.2. 多 GPU 训练

单个 GTX 580 GPU 的显存只有 3 GB,限制了网络的最大容量,因此作者利用两个 GPU 并行计算来进行训练。其中,每个 GPU 上分配一半的神经元,而且两个 GPU 间只在特定的层才进行数据同步。

3.3. 局部响应归一化

尽管 ReLU 不会遇到输出饱和的问题,但是作者仍然发现局部响应归一化有助于网络的泛化。设定 \(a_{x,y}^i\) 为位置 \((x,y)\) 处第 \(i\) 个卷积核的响应,那么归一化后的响应 \(b_{x,y}^i\) 为:

其中求和在相同空间位置的 \(n\) 个“相邻”内核映射上进行,\(N\) 是这一层卷积核的总数。这种响应归一化实现了一种横向抑制,这是受到真实神经元中发现的类型所启发,从而在使用不同内核计算的神经元输出之间产生大的竞争。其中,\(k, n, \alpha, \beta\) 都是超参数,需要根据验证集来设定。采用局部响应归一化后,top-1 错误率和 top-5 错误率分别下降了1.4% 和 1.2%。

3.4. 重叠池化

传统的池化步长 \(s\) 和池化区域大小\(z*z\) 相等,即 \(s=z\)。在本文中,作者设定 \(s<z\),这也就是重叠池化。通过采用 \(s=2,z=3\),top-1 错误率和 top-5 错误率分别下降了 0.4% 和 0.3%。

3.5. 整体结构

第一层和第二层网络具有卷积、池化和局部归一化,第三四五层网络只有卷积

4. 减少过拟合

4.1. 数据增广

作者采取了两种方式来进行数据增广,扩充的图片是在 CPU 上进行的,同时 GPU 在进行上一个批次图片的训练,这两个过程并行进行,不引入额外的计算。

第一种方法是将图片进行平移和水平翻转,从 256×256 的图片中随机裁剪出 224×224 的区域以及它们的水平翻转作为训练图片,这使作者的训练数据扩大了 2048 倍。在测试的时候,从图片中裁出 5 个 224×224 小片(四角和中间)以及它们的水平翻转总共 10 张图片,然后对 10 个输出取平均来进行预测。

第二种方法是改变图片 RGB 通道的强度。在整个 ImageNet 训练集上对 RGB 通道的像素使用 PCA,然后为每张训练图片添加主成分的倍数,这个幅度正比于特征值和一个从零均值 0.1 标准差的高斯分布中产生的随机变量的乘积。

\[[I_{xy}^R, I_{xy}^G, I_{xy}^B]^T=[p_1, p_2, p_3][\alpha_1\lambda_1, \alpha_2\lambda_2, \alpha_3\lambda_3]^T\]

\(p_i\) 和 \(\lambda_i\) 代表第 \(i\) 个特征值和特征向量,\(\alpha_i\) 是随机变量。对于一张训练图片,所有位置的像素共用同一组 \(\alpha_i\),直到下次这张图片再被用来训练就再产生一个随机变量。该方案近似地捕获自然图像的重要特性,即,某个物体对于光照的强度和颜色的变化是不变的。 采用此方案后, top-1 错误率降低了 1% 以上。

4.2. Dropout

通过采取 Dropout,每次有一半的神经元被丢弃,它们因此就不再参与前向和后向过程。也即是每次的网络结构都是不一样的,但这些结构的权重是共享的。这个技术减少了神经元之间的互相依赖,因为某一个神经元并不能依赖其他神经元的出现,其他神经元可能随机被丢弃。因此,它被迫学习更强大的特征,这些特征与其它神经元的许多不同随机子集组合起来非常有用。

5. 实验结果

获取更多精彩,请关注「seniusen」!

AlexNet——ImageNet Classification with Deep Convolutional Neural Networks的更多相关文章

  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(传说中的AlexNet)

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

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

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

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

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

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

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

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

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

随机推荐

  1. 【JavaScript】赛码网前端笔试本地环境搭建

    参考:https://hoofoo.me/article/2017-04-11/%E8%B5%9B%E7%A0%81%E7%BD%91%E5%89%8D%E7%AB%AF%E7%AC%94%E8%AF ...

  2. request请求转换成对象。

    1)前端post数据过来,key和val键值对会有很多,这个时候往后端进行插值的时候,最好将这些键值对转换成对象进行处理. 使用common-beanutils 来将前端传递过来的map直接转换成对象 ...

  3. linux 缓存手动清除

    linux下怎么清理缓存 free -m 命令可以查看内存使用情况                   sysctl 命令可以临时改变某个系统参数  如:sysctl -w net.ipv4.ip_f ...

  4. 关于ISP、IAP、DFU和bootloader

    这是嵌入式开发中常用的几个专业术语,其诞生的背景和其具体作用大概如下   在很久很久以前,那是8051单片机流行的时代,做单片机开发都需要一个专用工具,就是单片机的编程器,或者叫烧写器.说“烧”写一点 ...

  5. linux系统分析工具之Blktrace

    Blktrace简介: blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(block层,所以叫blk trace)时的详细信息(如IO请求 ...

  6. mybatis框架下使用generator插件自动生成domain/mapping/mapper

    手动去创建domain/mapping/mapper费时费力还容易出错,用插件自动生成非常的方便. 这里以MySQL数据库为例,也可以改成Oracle,改成相应的驱动和URL即可. 下载generat ...

  7. python-greenlet模块(协程)

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 from greenlet import greenlet   def test1():     print(12)    ...

  8. 解决MAC下修改系统文件没权限的问题

    问题 用brew在mac上可以轻松的管理软件, 不过最新的mac系统升级后, brew执行update命令时会报权限不足的错误, 而且会提示执行命令sudo chown -R $(whoami) /u ...

  9. 【PHP开发规范】继承与扩展:PSR-2 编码风格规范

    之前的一篇文章是对PSR-1的基本介绍 接下来是PSR-2 编码风格规范,它是 PSR-1 基本代码规范的继承与扩展. PSR-1 和PSR-2是PHP开发中基本的编码规范,大家其实都可以参考学习下, ...

  10. C语言学习记录_2019.02.07

    C99开始,可以用变量来定义数组的大小:例如,利用键盘输入的变量来定义数组大小: 赋值号左边的值叫做左值: 关于数组:编译器和运行环境不会检查数组下标是否越界,无论读还是写. 越界数组可能造成的问题提 ...