(接上篇)
吸引之处
那么到底什么是图像识别呢?世界上的大多数事物有自己的名称,图像识别的功能就是告诉人们这些图像上显示的是哪些事物。换句话来说,根据图像辨别出图像中出现的事物。
我们无法从椅子的内在去描述它, 能做的就是给出很多个不同椅子的样子,然后说:长得像这样的,我们就称为椅子。所以实际上,我们是通过将看到的事物与椅子的外观进行对比,如果两者很像,我们就认为这个事物叫椅子,如果不像,那它就不是椅子。
现在有很多系统采用这种吸引子Attractors。想像这样一个场景,在群山周围,一滴雨有可能降落在群山的任何一处,但是它最终会流向在群山之间的某个低谷(至少在理论上是这样)。周围的雨滴也很有可能流向这个低谷,而在其他分水岭的雨滴则流向距离它们最近的低谷。
这些雨滴就好比我们的图片,而不同的低谷就像是不同种类的事物。雨滴在地球引力的作用下降落,而我们的图片由像素构成,所以我们在这里考虑的是程序处理中的不同像素值,而不是物理位移。与上面的例子一样,这里也会发生吸引子行为。譬如,这里有很多元胞自动机,我们可以在这里设置细胞初始状态的颜色,但最终都会回到吸引子的状态(实际上大多数的元胞自动机有更有趣的行为,而且不会变成固定形态,但具体怎么应用在物体识别项目中还需要进一步研究)
如果我们在图片中运用元胞自动机的规则会发生什么呢?实际上,我们处理图片过程中的一些常见操作(通过电脑和人类视觉)就是简单的二维元胞自动机。
利用元胞自动机来获取图片中的某些特征是很容易的,比如图像中的黑点等。但是在真实图像识别中的操作要繁杂的多。在群山的例子中,我们要塑造一个群山图使得雨滴根据引力流向山谷中。
程序自动
那么,我们如何实现这个过程?我们刚开始不知道怎么处理图像等数位资料,我们只知道怎么实现这个过程的循环和递增。关于如何塑造循环体系的现有知识并不多,我们不得不从基础的扁平系统开始研究,一步一步地塑造环境。在类似于元胞自动机和图灵机这样的离散程序中,我考虑的很多,我坚信我们能够得出一些很有趣的成果,只是我还没想到怎么实现。
对于具有连续实数参数的系统来说,基于微积分的反向传播算法是一种很好的方法。从本质上说,反响传播算法是梯度下降法中常见的一种方法,运用反响传播算法得出如何改变参数来使系统更好地匹配我们设置的行为。
那么我们应该使用什么系统?令人意外的是,最常用的竟然就是网络神经系统。网络神经这个名称容易让人联想到大脑和生物。但在这里,网络神经是包含多种输入功能、带有连续参数和离散阀值的正式的计算系统。让神经网络系统执行一些有趣的任务有多容易?我们很难从理论上得出一个结论,但至少过去20年中我的印象是:在实践中神经网络系统完成的事情是利用其他方法也能够轻易完成的。
从前些年开始,事情出现了变化。人们开始听到神经系统运用于实践问题的成功例子,比如图像识别等。是什么使得这一切变得可能?电脑速度够快(尤其是图像处理器中的线性代数)并具备了一系列算法技巧(有些甚至利用了元胞自动机),这样一来,在成千上万实例的基础上塑造出一个拥有成千上万个神经细胞的网络就有了可操作性(深层次的神经网络没有网络层数的限制),同时也使大规模实践应用成为可能。
对于具有连续实数参数的系统来说,基于微积分的反向传播算法是一种很好的方法。从本质上说,反响传播算法是梯度下降法中常见的一种方法,运用反响传播算法得出如何改变参数来使系统更好地匹配我们设置的行为。
那么我们应该使用什么系统?令人意外的是,最常用的竟然就是网络神经系统。网络神经这个名称容易让人联想到大脑和生物。但在这里,网络神经是包含多种输入功能、带有连续参数和离散阀值的正式的计算系统。让神经网络系统执行一些有趣的任务有多容易?我们很难从理论上得出一个结论,但至少过去20年中我的印象是:在实践中神经网络系统完成的事情是利用其他方法也能够轻易完成的。
从前些年开始,事情出现了变化。人们开始听到神经系统运用于实践问题的成功例子,比如图像识别等。是什么使得这一切变得可能?电脑速度够快(尤其是图像处理器中的线性代数)并具备了一系列算法技巧(有些甚至利用了元胞自动机),这样一来,在成千上万实例的基础上塑造出一个拥有成千上万个神经细胞的网络就有了可操作性(深层次的神经网络没有网络层数的限制),同时也使大规模实践应用成为可能。
为什么是现在
我们恰好在人工神经数量被发现已经十分接近人脑重要部分的神经数量时发布了图像识别功能,但这并不是一个巧合。
这个数量本身并不具有重大意义,而是当我们做类似图像识别等大脑做的一些事情时,我们就需要一个与大脑相似范围的系统了。
根据对人类语言中名词数量的粗略估计,我们人类可以识别几千种事物。越低等的动物能够识别的事物就越少。但是如果我们想要达到人脑式的图像识别,有效地将图片与人类语言中的词语相匹配,就需要给问题定义一个确定的范围,而我们恰好可以利用与人脑规模相当的神经网络系统来解决这个难题。
尽管我们能够训练出网络系统,计算神经网络和生物神经网络肯定存在着许多不同,但是从图片中获取信息的过程很相似。另一方面,计算神经网路的生物神经网络的训练方式有本质上的区别。图像识别功能的实际开发过程让我联想到人类的真实状况,在项目开始时候的几千万训练图像与我们人类出生后几年内能识别事物的数量是十分接近的。
只能识别出帽子
也有一些情况是与人脑很相像的。我们当时忘记将人脸图像放入训练,当我们展示 Indiana Jones 照片的时候,系统无法识别他的脸,而是把这整张图识别为一顶帽子。可能并不奇怪,但这让我想起那个经典的视觉效果实验:在充满垂直线的环境中成长的小猫认不出横向条纹。
像大脑一样,图像识别神经网络有很多层,包括一系列不同种类的神经细胞(不用说也知道,整体架构的表现形式的是Wolfram语言的符号表达式)
我很难用语言来描述神经网络内部的活动,但是如果我们能看到神经网络的第一或者第二层,我们就能知道它的一些最主要的特征。实际上,这些特征与我们视觉皮层神经细胞所能看到到的特征非常相似。
我本人一直非常喜欢视觉纹理识别这类事物(纹理是否像颜色一样也存在纹理基元?),我觉得我们现在也有实力去研究一下这类事物。我还对神经网络深层的行为活动非常感兴趣,因为如果我们能够识别这些活动,那么我们就能对世界上所有的事物进行分类,甚至包括目前人类语言不能描述的事物。
食蚁兽不见了
就像我们开发过的很多Wolfram语言项目一样,开发图像识别功能需要很多步骤和素材:我们需要很多训练图片、为能够图像化的事物创造一个本体论并匹配至Wolfram语言结构、运用物理方法分析神经网络的动态特点、优化并行代码,有时候甚至还需要研究一下《一种新科学》书中可计算宇宙的理论,其中很多关于创造功能的判断在实践中都是很有用的。
在开始阶段,我不确定我们是否能最终实现图像识别。在接下去的过程中,我们的图像识别功能几乎没能正确地识别出一个事物,这令我们很沮丧。但是我们解决了一个又一个问题,我们终于成功地创造出图像识别功能,这可以说是一个历史性的时刻。
尽管如此,图像识别功能目前还存在许多问题。它能准确地识别一些事物,却无法识别很多其他事物。我们针对问题做出一些调整后又出现了其他的新问题,还出现了这样的识别结果:我们丢了食蚁兽!(图像识别功能之前能够正确识别出来的食蚁兽突然又被识别为其他完全不相干的东西了)。
对图像识别功能的调试过程是很有趣的。什么是合理的输入呢?什么是合理的输出呢?人们是更希望得到准确的答案还是更倾向于得到自己确定是错误的答案呢(狗、猎狗或者比格犬)?
有时候我们会看到一些不可思议的结果。一只猪被识别为马具,一件石雕工艺品被识别为轻便摩托车。但我们每次都能找到原因—例如某个物品多次出现在其他类别的事物训练中导致识别错误(以上例子中,图像识别功能每次仅在出现轻便摩托车的图片中捕获到亚洲石雕工艺品)
为了测试系统,我经常输入一些不常见或者不易识别的图片:
在这过程中我发现了一个非常棒的东西。虽然图像识别功能有可能无法正确识别你输入的每个事物,但是它识别错误的原因却非常合理,在某种程度上来说与人类犯的错误非常相似。这样看来,图像识别功能已经掌握了人脑识别过程中的一些关键因素。
那么抽象画的识别结果会怎样呢?就像是同时对人类和机器进行罗夏测验一样,以下是图像识别功能得出的结果:
更多思考
图像识别功能的研究和探索永远没有完成的那天。但在几个月前,我们在Wolfram语言中发布了一个初级版本。现在我们在原版本的基础上进行了改进,并正式发布了Wolfram语言图像识别项目。我们会不断深入研究图像识别功能,尤其要根据我们在网站上得到的统计数据和用户反馈进行改进。就像是Wolfram|Alpha 基于自然语言理解一样,没有人类参与,图像识别功能永远也无法取得实质性进展,甚至无法找到自然图像理解的意义。
我必须说我觉得Wolfram语言图像识别项目还是挺有趣的。在思考和研究这么些年后看见人工智能的真正实现令我感到满足。但是,当你用图像识别功能识别一个奇怪或不易识别的事物时,你通常会对结果感到惊讶,感觉就像是站在另一个方向来来重新观察这种图片。
图像识别的底层, 当然是代码运行,其中内部运作的方式很简单,很像我在上世纪80年代写的神经网络程序(不同的是我的程序现在已经变成了Wolfram语言函数而不是底层C代码)
这真是人工智能史上不同一般的例子:神经网络系统已经有70年的历史了,发展过程中经历了多次波折。现在它却帮助我们在人工智能方面取得了很大进展—成功开发出图像识别功能。我觉得最初研究网络神经的人,比如Warren McCulloch and Walter Pitts肯定不会对Wolfram语言图像识别项目的核心功能感到惊奇,他们也许会感到惊奇的是这件事居然花费了70年时间。
但对我来说更重要的是,我们通过将图像识别等功能整合到 Wolfram 语言架构中能够完成的事情,图像识别功能做的事情其实是每一代人都需要学习的,但是符号语言让我们能够有机会分享人类历史所有的智力成就,而我相信实现可计算世界具有巨大的历史意义!
但是今天,我希望大家能够喜欢Wolfram语言图像识别项目,把这当成是人工智能技术得以实现的一种庆祝,或是人工智能发展史上起着引导作用的重要事件。同时,不要忘记它也是可以在Wolfram语言中运用并在任何地方部署的实践技术,这也是我认为最重要的一点。