《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

CNN 领域的经典之作, 作者训练了一个面向数量为 1.2 百万的高分辨率的图像数据集ImageNet, 图像的种类为1000 种的深度卷积神经网络。并在图像识别的benchmark数据集上取得了卓越的成绩。

和之间的LeNet还是有着异曲同工之妙。这里涉及到 category 种类多的因素,该网络考虑了多通道卷积操作, 卷积操作也不是 LeNet 的单通道卷积了 (LeNet仅仅限于 gray image 的 digit recognition , label种类就10个)。

该神经网络有6千万个参数,650,000个神经元。包含了五个卷积层(卷积操作层和下采样层统称之为卷积层), 和三个全连接层。 为了使得训练更快,让网络实现在GPU上进行卷积操作运算,为了减小overfitting, 全连接层引入一个最近兴起的方法:dropout。下面是整个网络的大致介绍:

如图,其中第一层为输入层,就是一张224X224X3的image, 首先进行的是卷积层,kernel 是11X11X3的, 那么每11X11的图像大小范围被卷积操作成为一个新的像素点的一个信道。卷积的步长为4, 说明224 X 224 被卷积成为是 55X55 的大小, 因为卷积核有96个,上下平分(因为被分到不同的GPU进行运算),所以第二层是 55X55X48 的新的层。

(1), Relu非线性操作:

我们知道在浅层神经网络中, 引入非线性操作(也叫激活函数 active function),可以增强神经网络的泛化能力,使得神经网络更加robusting。但是在深层网络中,使用tanh函数,作为激活函数,增加了大量的计算,使得训练更加慢了,引入Hinton的Rectified Linear units (Relu) 来作为激活函数,

Relu(x) = max(0, x)

这样的好处: 第一是在论文中也说明了,简单的max计算,大大减少了计算量,可以提高训练速度, 第二是梯度在Relu中是直接传递的,鉴于深度网络的梯度衰减的现象,Relu可以保持梯度,减缓梯度衰减的趋势。 另外一个方面也是bp过程中没有了梯度换算的操作,加快了训练。

(2), 在多GPU上进行运算

因为整个神经网络的训练是卷积之间的操作基本是独立的,所以可以采用独立的两个GPU进行运算,增快训练的速度。

(3), Normalization

为了不让某一些kernel的weight变得很大,要对不同的kernel进行Normalization。

(为什么weight不能很大,如果某一个kernel 的weight变得很大的话,它的权值稍微变化则会引起很大的影响,那会重点改变它的weight而忽视其他太小weight的kernel)

其中, k, n, alpha, beta 这些常量都是“可调参数”, 由最好的validation set决定

(4), 对下采样层进行Overlapping Pooling

传统的下采样是不重叠的,但是为了精确性,使得识别度更高,对Pooling层进行Overlapping Pooling。

Pooling的好处,有点类似了 SIFT 的pyramid 结构去解读一张图片,此外还可以减少 pixels 的个数, 减少后面全连接层的神经元个数。

这么庞大的神经网络,这么多参数,很容易陷入overfitting的,减少overfitting的方式有两种Data Augmentation 和 Dropout

(5),  Data Augmentation

最常用的方法是:增大数据集的量,Label-preserving transformation. 本文中使用了两种Data Augmentation的方法,第一个是产生图片transformation和水平转换。因为有些图像进行水平转换是一致的,还有的操作是缩放操作(SIFT中算法的思想),旋转操作(可以增强物体识别的robustness)等。

第二种是改变训练图片的RGB的强度。 对图片中每一个RGB像素点进行一种变换,通过类似PCA的方法,求出特征向量和特征值,来提取主元

其中三个Alpha值对应image的三个channel,一张图片的每个像素都使用这个特定的随机值进行提取主元。

按照论文所说的,这种方法获取了image的天然特性,该特征对光照强度和光照颜色保持鲁棒性。

(6), Dropout

在全连接层,对有些隐层的神经元的输出置为0,对每个神经元输出置为0的概率是0.5,Dropout的神经元不会对前向传播操作造成影响,也退出了反向传导权值修正。这样即可以提高训练效率,也防止了overfitting。

本文的神经网络在前面的两个全连接层进行Dropout,有效防止了overfitting。

(7), 训练的过程

每个batch使用128个样本进行训练,设置好动量参数,权值decay, 学习率, 等参数。

对于全连接层:

类似浅层神经网络的训练,反向传播,权值修正。BP算法对每一个weight进行反向修正,根据误差函数对权值的偏导,进行负梯度下降的训练。

对于卷积层:

矩阵权值修正, 这里涉及到BP算法的二维应用。 卷积层首先在训练之前是随机化处理(随机化应该也是有技巧的随机化)。

评论:

CNN真的是一个充满前景的深度网络, 从不同的角度和不同的方式去提取特征,尽可能地去提取图片中的信息,同时,还需要很多的训练技巧,防止overfitting。

网络结构是越大越好,网络结构越复杂,神经元的个数越多,这个网络的capacity 越强。  同时在训练的过程中,训练技巧则是在防止overfitting 和 underfitting 之间找到那个平衡点。

最近的参与到openface的训练,体会到了这两个至关重要的point。

reference:

(1), http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html

(2), 在路上 http://zhangliliang.com/2014/07/01/paper-note-alexnet-nips2012/

《ImageNet Classification with Deep Convolutional Neural Networks》 剖析的更多相关文章

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

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

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

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

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

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

  4. [论文阅读] ImageNet Classification with Deep Convolutional Neural Networks(传说中的AlexNet)

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 中科院分词ICTCLAS5.0_JNI 使用方法

    1.简介 中国科学院计算技术研究所在多年研究基础上,耗时一年研制出了基于多层隐码模型的汉语词法分析系统 ICTCLAS(Institute of Computing Technology, Chine ...

  2. android 读取根目录下的文件或文件夹

    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setC ...

  3. [原]在win上编译 subversion 源码实践Tonyfield的专栏

    (百度和网页的作者无关,不对其内容负责。百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面。) [原]在win上编译 subversion 源码实践 2013-6-9阅读400 评论0 (参考 ...

  4. Virtualbox配置双网卡

    hadoop内部的虚拟机群,使用Host-Only 因为我之前一直是把三台虚机配置成桥接网络,可以同时上网又可以互通,但有一段时间,网络一直不通畅,造成hadoop核心进程一直关闭. 最后为了稳定起见 ...

  5. 用FineReport做的共建共享填报系统

    一.应用背景 随着信息技术的不断发展,快速开发出适合用户业务需求发展的填报报表是势在必然的,因此在不断的研究和分析下针对这一业务特点制作了此报表系统,以使不同开发商之间共建共享数据进行填报和统计分析的 ...

  6. Java基础-super关键字与this关键字

    用super调用父类构造方法 类如果没有显式声明构造方法,则自动生成无参数的默认构造方法. 1.先用一个无参数的父类构造方法验证一下, 执行子类构造方法会自动调用父类的构造方法.测试代码: class ...

  7. shiro和quartz同时存在于项目中,解决冲突的方案

    shiro自带了quartz定时任务,不过版本是1.3的 很多项目都会使用shiro,另外定时任务也会使用,quartz的版本2.2目前和shiro不兼容 有人通过修改源码可以解决 我这边是这样解决的 ...

  8. 前端这条路怎么走,作为一名后端er,说说我的见解

    近期都游荡在各大群里看大家的讨论,经常看到关于程序员生涯的一些讨论,颇有感触,最近的国庆的确过得有些堕落,都没怎么更新,仔细相信还是应该分享点经验给大家的!想必大家都经历过面试,这是进入一家公司的必要 ...

  9. ANE接入平台心得记录(安卓)

    开发环境:FlashBuilder4.7 AIR13.0 Eclipse 由于我懒得陪安卓的开发环境所以我下载了包含安卓SDK Manager的Eclipse,其实直接用FlashBuilder开发A ...

  10. java 27 - 5 反射之 通过反射获取成员方法并使用

    类Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息. A:获取所有方法 数组 1.getMethods  获取该类包括其父类的公共成员方法 2.getDeclaredMetho ...