2012年由Alex Krizhevsky、Ilya_Sutskever、他俩的导师Geoffrey_Hinton联合发布的AlexNet以绝对优势在ImageNet挑战赛上一举夺冠,从此掀起了卷积神经网络的热潮。AlexNet论文《Imagenet-classification-with-deep-convolutional-neural-networks》
论文使用的卷积神经网络(CNNs)将Top-5识别错误率降到了16.4(如果一个算法能输出概率最大的5个类别里包含正确对象就认为识别成功),第二名是26.2%。至此以后涌现了更多识别率超过人类水平的深度神经网络。接下来一起来了解一下这个划时代意义的网络结构
输入
AlexNet的输入是256x256的RGB彩色图片,也就是说所有训练集和测试集的图片的规格都要是256x256的。
如果高和宽的像素不是256就需要resize到256。
如果输入图片是灰度图,通过复制单个通道将其转换为RGB图像以获得3通道RGB图像,将256×256随机裁剪为227x227大小喂给(feed)AlexNet的第一层
结构
AlexNet比之前用于计算机视觉的卷积神经网络都要大(比如1998年Yann LeCun的LeNet)有约60,000,000个参数,650,000个神经元,如果在两块GTX 580 3GB GPUs上训练大概要花五到六天。
AlexNet有五层卷积层,三层全连接层。
多个卷积核(或者说是过滤器)可以提取出一张图片的特征,在单个卷积层中,通常有多个尺寸相同的卷积核。比如,AlexNet的第一层卷积层就有96个11x11x3的卷积核,注意到,卷积核的高和宽都一样,深度与通道数一致。
第一两层卷积层后都紧跟有重叠最大池化层,第三四五层卷积层直接相连,第五层后先跟有一层重叠最大池化层,然后紧跟两层全连接层,最后一个有1000个分类的softmax分类器。
在所有的卷积层和全连接后都跟有relu激活函数,第一二层在relu激活后紧跟着一次局部归一化,然后做重叠最大池化(不过归一化在这的效果不太好)
重叠最大池化层
最大池化层通常用于对张量(tensors)的宽度和高度进行下采样,深度不变。重叠最大池化层在池化时步长(stride)要小于池化窗口的大小,也就是说滑动的时候会有重叠。Alex他们使用的是3x3并且步长为2的池化窗口。与使用大小为2×2且步长为2的非重叠池窗口相比,最大池化的这种重叠性质分别有助于将top-1错误率降低0.4%,top-5错误率降低0.3%。
ReLU(Rectified Linear Units)
AlexNet另一个对传统的突破就是使用了
r
e
l
u
relu
relu作为激活函数,相比
s
i
g
m
o
i
d
,
t
a
n
h
sigmoid,tanh
sigmoid,tanh。在深度卷积神经网络中
r
e
l
u
relu
relu要比
s
i
g
m
o
i
d
,
t
a
n
h
sigmoid,tanh
sigmoid,tanh快不少,下图就是在同样的网络结构下使用
r
e
l
u
,
t
a
n
h
relu,tanh
relu,tanh的对比图:
在CIFAR-10数据集上测试时,错误率为25%时
r
e
l
u
relu
relu要比
t
a
n
h
tanh
tanh快将近6倍。
我们来看看为什么relu要更快:
f
(
x
)
=
m
a
x
(
0
,
x
)
f(x)=max(0,x)
f(x)=max(0,x)
对于
t
a
n
h
tanh
tanh,随着
z
z
z的增长或减小,函数的斜率非常接近零,这会使梯度求解非常缓慢,而
r
e
l
u
relu
relu随着
z
z
z的增长,函数斜率恒为1,这有助于优化收敛更快,尽管
z
z
z为负数时函数值为0,但是神经网络中的大多数神经元通常最终都具有正值。对
s
i
g
m
o
i
d
sigmoid
sigmoid也是类似道理。
过拟合
什么是过拟合?
如果样本数量较少,甚至少于模型参数的数量,而网络模型较复杂,以至于容易被训练数据中的噪声影响。就会导致在迭代过程中,神经网络在训练集上表现很好,而在测试集上却很差,也就是泛化能力很差,这就是典型的过拟合(overfitting)现象。下图分别是欠拟合,适合的拟合,过拟合。
在AlexNet中使用了以下几种方式减弱过拟合:
数据增强
对同一张照片我们可以进行多种变化来减轻过拟合,例如我们可以对图像进行不同方式的裁剪,使感兴趣的物体出现在不同位置,从而减轻模型对物体出现位置的依赖性。我们也可以调整亮度等因素来减低模型对色彩的敏感度。常用的方法有:
翻转
通过简单的左右翻转我们可以将数据集增加两倍。
随机裁剪
AlexNet的作者从256×256图像边界内提取了大小为227×227的图片,用作网络的输入,为此数据大小增加了2048倍。
Dropout
通过训练约6000万个参数,作者还尝试了其他方法来减少过拟合,这种方法由G.E.Hinton在2012年的另一篇论文中提出。在Dropout中每个神经元以50%的概率随机丢弃,一旦丢弃,那该神经元在前向和后向传播中都不再发挥作用。因此,每个输入都要经过不同的网络体系结构。如下面的动画所示。