《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

时间:2023-03-08 20:08:01

《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。下面是整个网络的大致介绍:

《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

如图,其中第一层为输入层,就是一张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)

《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

其中, 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的方法,求出特征向量和特征值,来提取主元

《ImageNet Classification with Deep Convolutional Neural Networks》 剖析

其中三个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/