亿万富翁投资者和企业家彼得泰尔最喜欢的反向问题是

很少有人同意你的重要事实是什么?

如果您在2010年向Geoffrey Hinton教授提出过这个问题,他会回答说卷积神经网络(CNN)有可能在解决图像分类问题时产生地震转移。那时候,该领域的研究人员不会费心去考虑这个评论。深度学习是不酷的!
那一年是ImageNet大规模视觉识别挑战赛(ILSVRC)的推出。
两年后,随着 Alex Krizhevsky,Ilya Sutskever和Geoffrey E. Hinton 的论文“ImageNet Classification with Deep Convolutional Neural Networks”的出版,他和少数研究人员被证明是正确的。这是一次突破里氏震级的地震转变!该论文通过在一次精彩的击球中摧毁旧观念,在计算机视觉中打造了一个新的景观。
该论文使用CNN来获得前5个错误率(在前5个预测中找不到给定图像的真实标签的比率)为15.3%。下一个最好的结果远远落后(26.2%)。尘埃落定后,深度学习再次变得清凉。
在接下来的几年里,多个团队将构建能够超越人类精度的CNN架构。
在第一作者Alex Krizhevsky之后,2012年论文中使用的架构被称为AlexNet。在这篇文章中,我们将介绍其架构并讨论其主要贡献。

输入

如上所述,AlexNet是2012年ILSVRC的获奖作品。它解决了图像分类的问题,其中输入是1000个不同类别(例如猫,狗等)之一的图像,输出是1000个数字的向量。输出向量的第i个元素被解释为输入图像属于第i类的概率。因此,输出向量的所有元素之和为1。
AlexNet的输入是尺寸为256×256的RGB图像。这意味着训练集中的所有图像和所有测试图像的大小必须为256×256。
如果输入图像不是256×256,则在将其用于训练网络之前需要将其转换为256×256。为实现此目的,将较小的尺寸调整为256,然后裁剪所得图像以获得256×256图像。下图显示了一个示例。
AlexNet-Resize-Crop-Input.jpg
如果输入图像是灰度,则通过复制单个通道将其转换为RGB图像以获得3通道RGB图像。从256×256图像内部生成尺寸为227×227的随机作物,以供给AlexNet的第一层。请注意,该文件提到网络输入为224×224,但这是一个错误,数字有意义,而不是227×227。

AlexNet架构

AlexNet比以前用于计算机视觉任务的CNN要大得多(例如,Yann LeCun在1998年的LeNet论文)。它拥有6000万个参数和650,000个神经元,需要花费五到六天的时间来训练两个GTX 580 3GB GPU。今天,即使在非常大的数据集上,也可以非常有效地在更快的GPU上运行更复杂的CNN。但是在2012年,这是巨大的!
我们来看看架构。您可以点击下面的图片进行放大。
AlexNet-1.png
AlexNet由5个卷积层3个完全连接的层组成
多个卷积内核(aka滤镜)提取图像中的有趣特征。在单个卷积层中,通常存在许多相同大小的内核。例如,AlexNet的第一个Conv层包含96个大小为11x11x3的内核。请注意,内核的宽度和高度通常相同,深度与通道数相同。
前两个卷积层后面是我们接下来描述的重叠最大池层。第三,第四和第五卷积层直接连接。第五个卷积层之后是重叠最大池化层,其输出进入一系列两个完全连接的层。第二个完全连接的层提供给具有1000个类别标签的softmax分类器。
在所有卷积和完全连接的层之后应用ReLU非线性。在进行合并之前,第一和第二卷积层的ReLU非线性之后是局部归一化步骤。但研究人员后来发现标准化非常有用。因此,我们不会详细介绍。

重叠最大池

Max Pooling图层通常用于对张量的宽度和高度进行下采样,保持深度相同。重叠的最大池层与最大池层类似,除了计算最大值的相邻窗口彼此重叠。作者使用了大小为3×3的池窗,相邻窗口之间的步幅为2。与使用大小为2×2且步长为2的非重叠池窗口相比,池化的这种重叠性质有助于将前1个错误率降低0.4%,将前5个错误率降低0.3%。尺寸。

ReLU非线性

AlexNet的一个重要特征是使用ReLU(整流线性单元)非线性。Tanh或sigmoid激活函数曾经是训练神经网络模型的常用方法。AlexNet表明,使用ReLU非线性,深度CNN可以比使用tanh或sigmoid等饱和激活函数更快地训练。下图中的图表显示,使用ReLUs(实线),AlexNet可以实现25%的训练误差率,比使用tanh(虚线曲线)的等效网络快6倍。这是在CIFAR-10数据集上测试的。
ReluNonlinearity-300x248.png
让我们看看为什么它与ReLU一起训练更快。ReLU功能由。给出了解AlexNet - 图4
Tanh-300x238.pngReLU-2-300x229.png
以上是两个函数的图 - tanh和ReLU。tanh函数在z的非常高或非常低的值处饱和。在这些区域,函数的斜率非常接近于零。这可以减缓梯度下降。另一方面,对于更高的z正值,ReLU函数的斜率不接近于零。这有助于优化更快地收敛。对于z的负值,斜率仍为零,但神经网络中的大多数神经元通常最终具有正值。由于同样的原因,ReLU也赢得了sigmoid功能。

减少过度拟合

什么是过度拟合?
还记得你的中学班的孩子在测试中做得很好,但是每当考试中的问题需要原创思维并且没有在课堂上报道时,他的表现很差吗?面对他从未见过的问题,为什么他这么做得不好?因为他在不理解基本概念的情况下记住了课堂上所提问题的答案。
同样,神经网络的大小是它的学习能力,但是如果你不小心,它会试着记住训练数据中的例子而不理解这个概念。因此,神经网络在训练数据上的表现非常出色,但他们无法学习真正的概念。它无法在新的和看不见的测试数据上很好地工作。这称为过度拟合
AlexNet的作者使用几种不同的方法减少了过度拟合。

数据扩充

显示神经网络相同图像的不同变化有助于防止过度拟合。你强迫它不记住!通常可以免费从现有数据生成额外数据!以下是AlexNet团队使用的一些技巧。

镜像数据增强

如果我们的训练集中有猫的图像,则其镜像也是猫的有效图像。请参阅下图以获取示例。因此,我们可以通过简单地围绕垂直轴翻转图像来使训练数据集的大小加倍。
AlexNet-Data-Augmentation-Mirror-Image.jpg

随机作物的数据增强

此外,随机裁剪原始图像还会导致附加数据,这些数据只是原始数据的移位版本。
AlexNet的作者从256×256图像边界内提取了大小为227×227的随机作物,用作网络的输入。他们使用这种方法将数据大小增加了2048倍。
AlexNet-Data-Augmentation-Random-Crops.jpg
请注意,四个随机裁剪的图像看起来非常相似,但它们并不完全相同。这教导了神经网络,像素的微小移动不会改变图像仍然是猫的图像的事实。如果没有数据增加,作者将无法使用如此庞大的网络,因为它会遭受严重的过度拟合。

Dropout

通过大约60M参数进行训练,作者尝试了其他减少过度拟合的方法。因此,他们采用了另一种技术,即GE Hinton在另一篇论文中介绍的Dropout技术在Dropout中,神经元从网络中丢弃的概率为0.5。当神经元掉落时,它对前向或后向传播都没有贡献。因此,每个输入都通过不同的网络架构,如下面的动画所示。结果,所学习的重量参数更加稳健并且不容易过度装配。在测试期间,没有丢失并且使用整个网络,但输出按比例缩放0.5,以解释训练时遗漏的神经元。Dropout会将收敛所需的迭代次数增加2倍,但如果没有Dropout,AlexNet会大幅度过度收费。
dropoutAnimation.gif
今天,Dropout正规化非常重要,并且已经开发出比原来更好的实施方案。我们将在未来的帖子中专注并重点关注Dropout Regularization。

参考文献:
具有深度卷积神经网络ImageNet分类作者:Alex Krizhevsky,Ilya Sutskever和Geoffrey E. Hinton,2012
课程主题为“卷积神经网络”,作为Andrew Ng的深度学习专业化的一部分。

订阅和下载代码

如果您喜欢这篇文章并想下载本博客其他帖子中使用的代码(C ++和Python)和示例图片,请订阅我们的新闻通讯。您还将收到免费的计算机视觉资源指南。在我们的时事通讯中,我们分享了用C ++ / Python编写的OpenCV教程和示例,以及计算机视觉和机器学习算法和新闻。[

](https://www.learnopencv.com/wp-content/uploads/2018/05/ReluNonlinearity.png)