zoukankan      html  css  js  c++  java
  • 《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

     《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/

  • 相关阅读:
    欧拉函数模板
    Django Views Decorator
    Anaconda3 安装报错 bunzip2: command not found
    Windows 错误 0x80070570
    GitHub报错error: bad signature
    failed to push some refs to 'git@github.com:RocsSun/mytest.git
    更新GitHub的仓库
    Git连接GitHub
    Git的初始化设置
    Git的选项参数
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/5808283.html
Copyright © 2011-2022 走看看