计算机如何在图像识别领域取得惊人突破

30次阅读

共计 11962 个字符,预计需要花费 30 分钟才能阅读完成。

原文 How computers got shockingly good at recognizing images 作者 Timothy B. Lee 译者 李平海图片如无标示亦出自原文
文末附有专业词汇对照表
囿于专业知识水平,译文如有不达之处,望留言斧正。

如今,我可以在 GooglePhotos 里输入“沙滩”,就可以看到过去一段时间里我去过的各个沙滩。我并没有管理过我的照片,给它们打标签。实际上是 Google 根据照片内容识别出沙滩。这个看似普通的功能基于深度卷积神经网络技术,此技术允许软件以一种复杂的方式理解图像,这是以前的技术做不到的。
这些年来研究人员发现,随着他们建立更深层的网络,积累更大的数据集来训练它们,软件的准确性越来越高。这导致了对算力的需求几乎无法满足,让英伟达 (Nvidia) 和 AMD 等 GPU 制造商大赚一笔。Google 几年前开发了自己定制的神经网络芯片,其他公司争相效仿。
例如在特斯拉,深度学习专家 Andrej Karpathy 被任命为负责自动驾驶项目。这家汽车制造商在开发定制的芯片,以加速未来的自动驾驶版本中的神经网络操作。又例如苹果公司,最近几款的 iPhone 中的 A11/A12 芯片就包含“神经引擎”,可以加速神经网络运行,以提供更好的图像识别 / 语音识别应用。
那些我为了写本文而采访的专家们认为,如今深度学习的热潮可以追溯到一篇专业论文——AlexNet(以该文首要作者 Alex Krizhevsky 的昵称命名)。
“在我看来,AlexNet 论文发表的 2012 年可谓里程碑。”机器学习专家、《智能机器如何思考》(How Smart Machines Think)作者 Sean Gerrish 如是说。
2012 年之前,深度神经网络只是机器学习领域中的死水泥潭。但随即 Krizhevsky 和他的多伦多大学团队向一个备受瞩目的图像识别竞赛提交了作品,准确率突破性地超越了以往任何技术。一夜之间,深度神经网络成为了图像识别的领衔技术。其他研究人员很快地利用这项技术使图像识别精度飞跃发展。
在这篇文章中,我们将深入探讨深度学习。我会解释神经网络究竟是什么,它如何被训练,以及它为什么需要那么大的算力。然后我将解释一种特殊神经网络——深层卷积网络——为什么它特别擅长理解图像。别担心,我们会有很多配图。
简单的单神经元的例子
“神经网络”这个词可能比较含糊,让我们从一个简单例子开始吧。假设你想要一个根据红绿黄交通灯决定车子是否能走的神经网络。此神经网络可以用一个神经元来完成这项任务。

这个神经元接收每个输入 (1 代表打开,0 代表关闭),乘以各自权重(weight),并且把加权值(weighted value) 相加。然后此神经元会加上偏置(bias),这决定了神经元“激活(activate)”的阈值。此情况下如果输出值为正,我们认为此神经元“激活”了,否则没“激活”。这个神经元相当于不等式“green – red – 0.5 > 0”。如果计算结果为 true,就意味着绿灯亮了,红灯灭了,车子可以通过。
在真正的神经网络中,虚拟神经元会有额外的一步。在加权值加上偏置求和后,神经元会调用非线性激活函数(Non-linear activation function)。一种流行的做法是 sigmoid 函数,一个 S 型函数,它总是产生一个 0~1 间的值。

在我们简单的交通灯模型中,使用激活函数并不会改变结果(但不能用 0,例子中我们用 0.5)。但激活函数的非线性是让神经网络模拟更复杂函数的关键。没有了激活函数,无论多复杂的神经网络都可以简化为它的输入的线性组合。而且线性函数不可能模拟复杂的真实现象。非线性激活函数可以让神经网络更接近任何数学函数。
一个神经网络样例
当然,有很多办法可以近似函数。神经网络之所以特别,是因为我们知道如何用一些算式,一堆数据,以及海量算力来“训练”它们。我们可以建造一个合适的通用神经网络来替代用人类程序员专门写来执行特定任务的神经网络。刷过一堆打过标签的数据后,它会修改神经网络本身,让自己能尽可能打出正确的标签。我们希望得出的神经网络具有通用性,能为不在训练数据中的样本也正确地打标签。
在 AlexNet 发表之前,这个努力已经开始了。1986 年,三位研究人员发表了一篇关于反向传播 (backpropagation) 的里程碑式论文。该技术是一种有助于训练复杂神经网络的数学方法。
为了直观地了解反向传播如何工作,让我们来看看 Michael Nielsen 在他杰出的在线深度学习教程中描述的一个简单神经网络。目标是让神经网络从 28X28 像素的图片上正确地识别一个手写的数字(例如 0,1,2)。
每个图片有 28×28=784 个输入值,每个都用 0 或 1 代表这个像素是深色还是浅色。Nielsen 构建了一个这样的神经网络:

插图里中层和右层每个圆圈代表我们上一段说的那种神经元。每个神经元为输入值加权求平均,然后加上偏置,然后调用一个激活函数。值得注意的是左层的圆圈不是神经元,它们代表的是输入值。虽然只画了 8 个输入圈,但实际上有 784 个输入——每个代表一个像素。
右层的 10 个神经元代表“亮灯”猜测不同的数字:假如是 0,首个神经元应该被激活(其他神经元不激活),假如是 1 则是第二个神经元被激活(其余的不激活),如此类推。
每个神经元接收上一层所有神经元的输入。所以中层的 15 个神经元都是收 784 个输入值。它们每个都为 784 个输入值设置权重。这意味着在此层有 15X784=11760 个权重参数。同理,输出层有 10 个神经元,每个都从中层的 15 个神经元接收输入值,所以又多了 15*10 个权重参数。与此同时,整个网络 25 个神经元共有 25 个偏置。
训练神经网络
我们目标是调整这 11935 个参数,尽可能正确地得让代表对应手写数字的输出神经元亮灯。我们可以用一个叫 MNIST 的著名数据集来训练,它提供了 60000 个已经正确标注的 28X28 像素图像:
此图是 MNIST 数据集里 60000 个图像种的 160 个
Nielsen 示范了如何不依赖任何机器学习库,仅用 74 行正常 Python 代码来训练这个神经网络。训练从选取 11935 个随机的权重 / 偏置参数开始。软件将遍历每张图片样本,完成两步过程:

根据输入图像和网络的当前参数,前馈步骤计算网络的输出值。
反向传播步骤将计算结果与正确输出值的偏差,然后修改网络种的参数,以略微提高其在特定输入图像上的性能。

下例中,假设网络收到了这张图片:

如果网络经过良好调校,网络中“7”的输出值应该接近 1,其他 9 个输出值应该都接近 0。但假如收到此图时“0”值是 0.8。那就太离谱了!训练算法会改变输入“0”输出神经元的各个权重,好让下次输入这张图片时,输出值会更接近 0。
为此,反向传播算法会为各个权重参数算出一个误差梯度。这是一个衡量输出错误有多大程度被输入权重所被改变的维度。算法会依照这个梯度决定多大程度改变每个输入值的权重——梯度越大,这个参数修改越多。
换句话说,这个训练过程“教会”输出神经元更少地注意导向错误的输入方(即中层的神经元),更多地注意正确方向的输入方。
算法一直为每个输出神经元重复此步骤。它将降低 “1,” “2,” “3,” “4,” “5,” “6,” “8,” 和 “9” 神经元 (除了神经元“7”) 的输入方的权重,使输出神经元的值降低。输入值越大,反映此输入值的权重参数的误差梯度就越大,因此这个权重会减少越多。
同理,训练算法会增加输出神经元“7”的输入值的权重。令下次遇到这个图像时,此神经元会产生更大的输出值。同样的,输入值越大,加权后的增加值也越大,这使得输出神经元“7”在以后的几轮学习中更加关注这些输入。
接下来,算法需要对中层执行相同的计算:改变每个输入值的权重以减少网络的错误——同样,使“7”输出更接近 1,其他输出更接近 0。但每个中层神经元都会对向全部 10 个输出层神经元进行输出,这会导致两个方向的矛盾。
首先,中层的误差梯度,不仅仅取决于输入值,也同时取决于下一层的误差梯度。
这个算法之所以被称为反向传播,是因为网络里后层的误差梯度会反向传到前面层级 (沿着算式中的关系链) 并用来计算梯度。
同时,每个中层神经元也是全部 10 个输出层神经元的输入源。因此,训练算法计算的误差梯度,必须反映输入权重的变化如何影响所有输出的平均误差。
反向传播是一种爬坡算法: 该算法的每一轮都会使输出结果更接近训练图像的正确结果,但只会更接近一点。随着算法经历越来越多的样本,它会“爬坡”到一个最优参数集,该参数集能够正确地分类尽可能多的训练样本。要获得较高的准确率,需要成千上万的训练样本,算法可能需要对训练集中的每个图像进行数十次循环,才能达到最优。
Nielsen 展示了如何用 74 行 Python 代码实现上述所言。值得注意的是,使用这个简单程序训练的神经网络能够识别 MNIST 数据库中 95% 以上的手写数字。通过一些额外的改进,像这样一个简单的两层神经网络能够识别 98% 以上的数字。
AlexNet 的突破
你可能以为,上世纪 80 年代反向传播的发展会开启一段基于神经网络的机器学习的快速发展时期,但事实并非如此。在 90 年代和 21 世纪初,有一些人在研究这项技术。但对神经网络的热潮直到 2010 年代初才真正兴起。
我们可以在由斯坦福大学计算机科学家李飞飞组织的年度机器学习竞赛《ImageNet》的结果中看到这一点。在每年的比赛中,参赛者都会得到一组由 100 多万张训练图片组成的通用图片,每张图片上都手工标注着 1000 种可能的分类,比如“消防车”、“蘑菇”或“猎豹”。参赛者的软件根据其对未被纳入训练集的其他图像进行分类的能力进行评判。程序可以进行多次猜测,如果前五次对图像的猜测中有一次与人类选择的标签相匹配,则该软件被认为是成功的。
比赛从 2010 年开始举办,在前两届比赛中,深度神经网络并没有发挥主要作用。顶级团队使用了各种其他机器学习技术,但结果平平无奇。2010 年获胜的那支球队,top5 错误率 (即五轮皆猜错) 为 28%。2011 年度则是 25%。
然后就到了 2012 年。这个来自多伦多大学的团队提交了一份参赛作品,不啻于将选手们从死水泥潭中拖出。该参赛作品即后来以主要作者 Alex krizhevsky 名字命名的 AlexNet。通过使用深度神经网络,该研究小组获得了 16% 的 top5 错误率。当年最接近的竞对手错误率达到 26%。
前文所说的手写识别网络有两层,25 个神经元,以及将近 12000 个参数。AlexNet 更大更复杂:8 个可训练的层、65 万个神经元和 6000 万个参数。训练这样规模的网络需要大量的算力,而 AlexNet 的设计就是利用现代 GPU 提供的大量并行算力。
研究人员想出了如何在两个 GPU 之间分配网络训练的工作,从而使他们的算力提高了一倍。尽管进行了积极的优化,使用 2012 年水平的硬件 (两个 Nvidia GTX 580 GPU,每个有 3GB 内存) 对网络训练依然耗费了 5 到 6 天。
看看 AlexNet 结果的一些例子,对我们理解这是一个多么引人瞩目的突破很有帮助。以下是那篇论文的插图,展示了一些图片样本和 AlexNet 对应的 top5 分类猜测:

AlexNet 能够识别出第一张图片中包含了一只螨虫,尽管这只螨虫只是图片边缘的一小块。该软件不仅能正确识别美洲豹,它的其他先行猜测——美洲虎、猎豹、雪豹和埃及猫——都长得很像。AlexNet 将蘑菇的图片标注为“伞菌”——蘑菇的一种。官方正确的标签“蘑菇”是 AlexNet 的第二选择。
AlexNet 的“错误结果”同样令人惊讶。照片上,一只斑点狗站在樱桃后面,旁边写着“斑点狗”,而官方的标签是“樱桃”。AlexNet 意识到这张照片上有某种水果——“葡萄”和“接骨木果”是它的前五种选择——但它没有完全意识到它们是樱桃。
给 AlexNet 展示一张马达加斯加猫在树上的照片,它会猜一系列的小型爬树哺乳动物。很多人 (包括我) 都会同样地猜错。这确实是一个引人瞩目的表现,表明软件可以识别各种方向和排布中的常见对象。深度神经网络迅速成为图像识别任务中最受欢迎的技术,机器学习的世界从此迈上快车道不回头。
ImageNet 的发起人写道:“随着基于深度学习的方法在 2012 年取得成功,2013 年的绝大多数参赛作品都使用了深度卷积神经网络。”这种模式持续了好几年,后来的优胜者都是建立在 AlexNet 团队开创的基本技术之上。到 2017 年,使用深度神经网络的参赛者将 top5 错误率降至 3% 以下。考虑到这项任务的复杂度,可以说这使得计算机比许多人更擅长这项任务。
这张来自 ImageNet 团队的条形图显示了每年 top- 5 分类比赛中获胜团队的错误率。从 2010 年到 2017 年,错误率稳步下降。

卷积网络的概念
从技术上讲,AlexNet 是一个卷积神经网络。在本节中,我将解释卷积网络的作用,以及为什么这项技术对现代图像识别算法至关重要。
我们之前研究的简单手写识别网络是全连接的: 第一层的每个神经元都是第二层神经元的输入源。此结构比较适合相对简单的任务,例如识别 28×28 像素图像中数字。但进一步扩展就很难了。
在 MNIST 手写数字数据集中,字符总是居中的。这大大简化了训练,因为这意味 7 在图像的顶部和右侧总是有一些黑色像素,而左下方总是白色的。0 总是中间白块,四周的像素则较暗。一个简单的、全连接的网络可以相当容易地检测这些类型的模式。
但是假如你想建立一个神经网络来识别可能位于大图中的任何位置的数字。一个全连接的网络不擅长于此,因为它没有一种有效的方法来识别位于图像不同部分的形状之间的相似性。如果你的训练集的左上角恰好有大部分的 7,那么你会得到一个网络,它比图像中其他地方更善于识别左上角的 7。
从理论上讲,你可以通过确保你的训练集在每个可能的像素位置上都有很多数字的样本来解决这个问题。但在实践中,这将是巨大的浪费。随着图像的大小和网络的深度的增加,连接的数量——也就是输入权重参数的数量——将会激增。你需要更多的训练图像和算力来达到足够的准确性。
当神经网络学习识别图像中某个位置的形状时,它应该能够将这种学习应用于识别图像中其他位置的类似形状。卷积神经网络为这个问题提供了一个优雅的解决方案。
“这就像拿一个模板或模式,然后将其与图像上的每一个点进行匹配,”人工智能研究员唐杰 (音) 说。“你有一个狗的模板轮廓,然后发现右上角和你的模板基本匹配——那里有条狗吧?”如果没有,可以稍微移动一下模板,遍历整张图片。狗出现在在图像哪个位置并不重要。模板会匹配到它。你不会想让网络的每个子部分都学习自己单独的狗识别器。
试想一下,如果我们把一幅大图像分成 28*28 像素的小块。然后,我们可以将每个小块输入到之前所述的全连接的手写识别网络中。如果这些小块中的“7”输出至少有一个被点亮,就意味着整个大图中可能有 7 的存在。这就是卷积网络的本质。
卷积网络在 AlexNet 中如何工作?
在卷积网络中,这些“模板”被称为特征检测器(feature detector),它们所观察的区域被称为接受域(receptive field)。真正的特征检测器的接受域往往比边长 28 像素小得多。在 AlexNet 中,第一个卷积层具有接受域为 11×11 像素的特征检测器。它随后的卷积层有 3 到 5 个单位宽的接受域。
当特征检测器扫过输入图像时,它会生成一个特征图(feature map): 一个二维网格,表示该检测器被图像的不同部分激活的强度。卷积层通常有多个特征检测器,每个检测器扫描输入图像以寻找不同的模式。在 AlexNet 中,第一层有 96 个特征检测器,生成了 96 个特征图。

为了更具体地说明这一点,以下是经过网络训练的 AlexNet 第一层中的 96 个特征检测器所学习的视觉模式的可视化表示。特征检测器可以寻找水平或垂直的线条、从亮到暗的渐变、棋盘图形和其他形状。
彩色图像用像素分布格式表示,每个像素有三个值:红值、绿值和蓝值。AlexNet 的第一层会将红绿蓝三位表示的像素归纳为 96 个类型值之一。图像中的每个“像素”(指第一层分割的单元)有 96 种可能的值,对应 96 种特征检测器。
在本例中,这 96 个值中的第一个值指示图像中的某个特定点是否与此模式匹配:

第二个值指示某个特定点是否与此模式匹配:

第三个值表示某个特定点是否与此模式匹配:

如此类推,在 AlexNet 的第一层中,其他 93 个特征检测器也是如此。第一层将图像的每个“像素”用一种新表现形式输出——表示为 96 个值 (类似 96 进制?) 的向量(我稍后将解释,这个新表示形式也被按比例缩小四倍)。
这是 AlexNet 的第一层。接下来是另外四个卷积层,每个层的输入都是前一层的输出。
正如我们所看到的,第一层检测基本的模式,如水平和垂直的线,光到暗的变化,以及曲线。然后,第二层使用第一层的结果作为构建块来检测稍微复杂一些的形状。例如,第二层可能有一个特征检测器,它通过组合第一层特征检测器的输出来查找曲线,从而查找圆。第三层通过结合第二层的特征找到更复杂的形状。第 4 层和第 5 层可以找到更复杂的模式。
研究人员 Matthew Zeiler 和 Rob Fergus 在 2014 年发表了一篇出色的论文,为可视化类似 ImageNet 的五层神经网络所识别的模式提供了一些有用的方法。
在下列插图中,每张图片 (第一张除外) 都有两个部分。在右边,你将看到一些缩略图图像,它们高度匹配了特定的特征检测器。它们 9 个分为一组,每组对应一个不同的特征检测器。在左边是一个地图,它显示了缩略图图像中的哪些特定像素产生了高度匹配。你可以在第 5 层中最显著地看到这一点,因为有一些特性检测器可以高度匹配为狗、企业标识、独轮车轮子等。

浏览这些图像,你可以看到每一层都能够识别比前一层更复杂的模式。第一层识别简单的像素模式,看起来也并不十分相像。第二层识别纹理和简单的形状。在第三层,我们可以看到可识别的形状,如汽车轮子和红橙色的球体(可能是西红柿、瓢虫或其他东西)。
第一层的感受域为 11X11 单位大小,而后面的层的感受域大小则为 3X3 单位到 5X5 单位不等。但是请记住,后面的这些层接收的是前面的层生成的特征图,这些特征图中的每个“像素”表示原始图像中的 n 个像素。所以每一层的感受域都包含了原始图像中比前一层更大的部分。这就是为什么后期图层的缩略图看起来比早期图层更复杂的原因之一。
感受域示意图,from 深度神经网络中的感受野
网络的第五层也是最后一层能够识别这些图像中最显眼的大尺度元素。例如这张图片,我从上面第 5 层图片的右上角截取的:

右边的 9 张图片看起来可能不太相似。但是如果你看一下左边的 9 张热图,你会发现这个特定的特征检测器并没有聚焦于每张图像前景中的物体。相反,它关注的是每个图像背景中的绿色部分!
显然,如果你要识别的类别之一是“草”,那么用“草检测器”就合适了,但是它同时也可能检测其他东西。在五个卷积层之后,AlexNet 有三个层是全连接的,就像我们手写识别网络中的层一样。这些层会利用第五卷积层生成的每个特征图,尝试将图像分类为 1000 个类别中的一个。
所以如果一幅画的背景是草,那么它更有可能是野生动物。另一方面,如果这幅画的背景是草,那么它不太可能是一幅室内家具的画。其他位于第五层的特征探测器提供了丰富的信息可用于猜测照片内容。网络的最后几层将这些信息综合起来,对整个图片所描绘的内容进行有理据的猜测。
卷积层的独到之处: 共享输入权重
我们已经看到卷积层中的特征检测器执行了牛逼的模式识别,但是到目前为止,我还没有解释卷积网络实际上是如何工作的。
卷积层是一层神经元。像任何神经元一样,这些神经元取其输入的加权平均值,然后应用一个激活函数。用我们讨论过的反向传播技术来训练当中的参数。
但与上面的神经网络不同,卷积层没有全连接。每个神经元只接受前一层神经元的一小部分输入。更重要的是,卷积网络中的神经元共享输入权重。
让我们放大 AlexNet 的第一个卷积层中的第一个神经元。这一层的接受域大小是 11×11 像素, 所以第一个神经元接收某角落的 11×11 像素。这个神经元接受这 121 个像素的输入,每个像素有三个值——红、绿、蓝。神经元总共有 363 个输入。和任何神经元一样,这个神经元取 363 个输入值的加权平均值,然后应用一个激活函数。因为它有 363 个输入值,它也需要 363 个输入权重参数。
AlexNet 第一层中的第二个神经元与第一个神经元非常相似。它同样接收 11×11 像素, 但它的接受域是从第一个神经元的接受域平移 4 个像素开始。这就在两个接受域之间产生了 7 个像素的重叠,这就避免了遗漏两个神经元之间的有趣模式。第二个神经元同样接收描述 11×11 像素的 363 个值, 每个值乘以权重参数, 求和, 并调用一个激活函数。
特殊的是,第二个神经元没有自己的一组 363 个输入权重,而是使用与第一个神经元相同的输入权重。第一个神经元的左上角像素使用与第二个神经元的左上角像素相同的输入权重。所以这两个神经元在寻找完全相同的模式。它们的接受域之间有 4 个像素的偏移。
当然实际远不止两个神经元——图片分为 55×55 格共 3025 个神经元。这 3025 个神经元中的每一个都使用与开始两个神经元相同的 363 个输入权重。所有这些神经元共同“扫描”图像中可能存在的特定模式,组成一个特征检测器。
请记住,AlexNet 的第一层有 96 个特性检测器。我刚才提到的 3025 个神经元组成了 96 个特征探测器中的一个。其他 95 个特征探测器则是由各自的一组 3025 个神经元组成。每组 3025 个神经元与组内其他神经元共享其 363 个输入权重,但不是和其他 95 个特征检测器的神经元共享。
卷积网络的训练使用与训练全连接网络相同的基础反向传播算法,但是卷积结构使得训练过程更加高效。
“使用卷积非常有用,因为可以重用参数,”机器学习专家和作家 Sean Gerrish 告诉 Ars(本文原作者机构)。这大大减少了网络需要学习的输入权重的数量,这使得网络可以用更少的训练样本产生更好的结果。
从图像的一个部分学到的识别模式,可以转化用于识别其他图像的其他位置的相同模式。这使得网络可以通过更少的训练实例来实现高性能。
深度卷积网络威名远扬
AlexNet 的论文在学术机器学习社区引起了轰动,它的重要性也很快得到了业界的认可。谷歌对这项技术特别感兴趣。
2013 年,谷歌收购了 AlexNet 论文作者创办的一家初创公司。他们利用这项技术为谷歌照片添加了一个新的图像搜索功能。谷歌的 Chuck Rosenberg 写道:“我们直接从一个学术研究实验室进行了前沿研究,并在短短 6 个多月的时间里启动了它。”
与此同时,谷歌 2013 年的一篇论文描述了它如何使用深度卷积网络从谷歌街景 (Google Street View) 的照片中读取地址码。“我们的系统帮助我们从街景图像中提取了近 1 亿个实体街道编号,”作者写道。
研究人员发现,随着神经网络的发展,其性能不断提高。谷歌街景团队写道:“我们发现这种方法的性能随着卷积网络的深度而提高,在我们训练层级最多的架构中,性能最好。我们的实验表明,更深层次的架构可能获得更好的准确性,但效率会逐渐降低。”
所以在 AlexNet 之后,神经网络变得越来越深。一个谷歌的团队在 2014 年 ImageNet 竞赛中提交的作品获得了优胜——就在 2012 年 AlexNet 获胜的两年后。和 AlexNet 一样,它也是基于一个深度卷积神经网络,但是谷歌使用了一个更深层的 22 层网络,从而获得了 6.7 % 的 top5 错误率——这比 AlexNet 的 16% 错误率有了很大的提高。
不过,更深层的网络只对大型训练集有用。基于这个原因,Gerrish 认为 ImageNet 数据集和竞争对深度卷积网络的成功起到了关键作用。大家还记得吗?ImageNet 竞赛给了参赛者一百万张图片,要求他们从 1000 个不同的类别中选择一个。
Gerrish 说:“拥有 100 万张图片来训练你的神经网络,意味着每个类别有 1000 张图片(1m/1000 = 1000)。”他说,如果没有这么大的数据集,“你训练网络的参数就多得多。”
近年来,人们聚焦于收集更大的数据,以便训练更深入、更准确的网络。这是自动驾驶汽车公司如此专注于在公共道路上积累里程的一大原因——来自测试的图像和视频被送回总部,用于培训公司的图像识别网络。
深度学习计算的繁荣
更深层次的网络和更大的训练集可以提供更好的性能,这一发现对更多的算力产生了无法满足的需求。AlexNet 成功的一个重要原因是意识到,神经网络训练涉及矩阵运算,可以使用显卡高度并行的算力高效地执行这些运算。
“神经网络是可并行的,”机器学习研究员唐杰说。显卡本来是为视频游戏提供大规模并行算力的,结果非常适合神经网络使用。
“GPU 的核心运算是极快的矩阵乘法,最终成为神经网络的核心运算,”唐说。
这为英伟达 (Nvidia) 和 AMD 这两家行业领先的 GPU 制造商带来了滚滚财源。这两家公司都致力于开发适应机器学习应用程序独特需求的新芯片,而人工智能应用程序目前在这些公司的 GPU 销售中占据了相当大的比例。
2016 年,谷歌公开了一个定制芯片,称为张量处理单元(TPU),专门用于神经网络操作。谷歌 2017 年写道,虽然他们早在 2006 年就考虑过为神经网络构建专用集成电路(ASIC),但 2013 年这种情况变得紧迫起来。
“就在那时,我们意识到神经网络快速增长的计算需求可能要求我们将运营的数据中心数量增加一倍。”最初,TPU 仅允许谷歌自己的专有服务使用,但后来,谷歌开始允许任何人通过它的云计算平台使用这项技术。
当然,谷歌并不是唯一一家致力于人工智能芯片的公司。一个小例子是,iPhone 最新版本的芯片就包括一个为神经网络操作优化的“神经引擎”。英特尔正在开发自己的针对深度学习的优化芯片系列。特斯拉最近宣布放弃英伟达的芯片,转而采用自制神经网络芯片。亚马逊据说也在开发自己的 AI 芯片。
为何深层神经网络难以理解
我已经解释了深度神经网络是如何工作的,但我还没有真正解释它们的工作何以那么出色。大量的矩阵运算可以让计算机区分美洲虎和猎豹,接骨木和醋栗,这真令人惊讶。
但也许神经网络最值得注意的地方是它们做不到的事。卷积使神经网络能够理解平移——它们可以判断一幅图像的右上角的模式是否与另一幅图像的左上角的模式相似。
但除此之外,卷积网络并没有真正的理解几何图形。如果图像旋转 45 度或放大 2 倍,他们就无法识别出这两幅图像是否相似。卷积网络并没有尝试去理解三维物体的结构,而且它们也不能识别不同的光照条件。
然而,深度神经网络能够识别狗的图片,无论它们是正面还是侧面拍摄的,无论它们是占据了图片的一小部分还是很大一部分。
神经网络是怎么做到的? 事实证明,有了足够的数据,暴力统计方法就足以完成这项工作。卷积网络的设计初衷并不是“想象”如果从不同的角度或在不同的环境下,一张特定的图像会是什么样子,但是有了足够多的标记样本,它可以通过纯粹的重复来学习所有可能的排列。
有证据表明,人类的视觉系统实际上是以类似的方式工作的。我们来看这两张图片(在看第二张图片之前,确保你仔细看了第一幅图片):

显然,这张照片的创作者把人像的眼睛和嘴巴颠倒过来,再把整张照片翻过来。当你把图像倒过来看时,它看起来相对正常,因为人类的视觉系统已经习惯了在这个方向上看眼睛和嘴。但是当你看后者时,就会发现人像面容变得畸形。
这表明人类视觉系统依赖于一些与神经网络相同的粗糙模式匹配技术。如果我们看到的东西几乎都是同一个方向的——就如人类的眼睛——我们就能更好地识别出它们通常的方向。
神经网络善于利用图片中的所有环境来理解它所显示的内容。例如,汽车通常出现在道路上。裙子通常要么出现在女性的身体上,要么挂在衣橱里。飞机要么在蓝天的衬托下出现,要么在跑道上滑行。没有人明确地教神经网络这些相关性,但有足够多的标记样本,网络可以自动学习它们。
2015 年,谷歌的一些研究人员试图通过“反向操作”来更好地理解神经网络。他们不是用图像来训练神经网络,而是用训练过的神经网络来修改图像。
比如,他们从一幅包含随机噪声的图像开始,然后逐渐修改它,使其强烈地“点亮”神经网络的输出之一——要求神经网络高效地“绘制”一个它被训练识别的类别。在一个有趣的例子中,他们用一个被训练用来识别哑铃的神经网络来画图。

研究人员在研究报告中写道:“这些是哑铃没错,但似乎都画出了肌肉发达的举重运动员来举哑铃。”
乍一看,这似乎很奇怪,但实际上这与人类的行为并没有太大的不同。如果我们在一幅图像中看到一个小的或模糊的物体,我们就会观察周围的环境,寻找图片中可能发生的事情的线索。很明显,人类通过不同的方式对图像进行推理,利用我们对周围世界复杂的概念理解。
总而言之,深层神经网络擅长于图像识别,是因为它们充分利用了图片中显示的所有环境,这与人类的识别方式并没有太大的不同。(完)
专业词汇对照表

neural network 神经网络
computing power 算力
convolutional network 卷积网络
neuron 神经元
weight 权重
bias 偏置
activation function 激活函数
Non-linear activation function 非线性激活函数
light up 亮灯(即匹配)
layer 层
receptive field 感受域
backpropagation 反向传播
top-five error rate top5 错误率
error gradient 误差梯度
matrix 矩阵
fully connected layer 全连接层
pattern 模式
feature detector 特征检测器
brute-force statistical 暴力统计

正文完
 0