“这是一张什么画?”人类通常可以立即回答这些问题,但在过去,计算机似乎总是无法做到这一点。在将近40年的时间里,我一直相信计算机最终会实现这一目标——但我一直在想这是什么时候。
我建立的系统赋予了计算机各种各样的智能,其中很多远远超出了人类的水平。很长一段时间以来,我们一直在整合所有的智能Wolfram语言.
现在,我很高兴地说,我们已经达到了一个里程碑:最终调用了一个函数ImageIdentify内置在Wolfram语言中,可以让你问,“这是一张什么图片?”然后得到一个答案。
今天我们要启动Wolfram语言图像识别项目在网络上,任何人都可以轻松地拍摄任何照片(从网页上拖拽,在你的手机上抓拍,或从文件加载),看看有什么ImageIdentify认为它是:
它并不总是正确的,但大多数时候我认为它做得非常好。对我来说,最让我着迷的是,当它真的出错时,它所犯的错误大部分看起来都是非常人性的。
这是人工智能的一个很好的实践例子。但对我来说,更重要的是,我们已经达到了一个临界点,我们可以将这种“人工智能操作”直接集成到Wolfram语言中——作为基于知识的编程的一个新的、强大的构建块使用。
现在用Wolfram语言
在Wolfram Language会话中,标识图像所需要做的就是将其提供给ImageIdentify功能:
你得到的是象征性的实体, Wolfram语言可以做更多的计算,比如,在这个例子中,判断你是否得到了动物,哺乳动物等等。或者直接问定义:
或者,从它的维基百科条目生成一个词云:
如果你有很多照片,你可以马上写一个Wolfram语言程序,例如,给不同种类的动物,或平面,或设备,或任何在照片中出现的统计数据。
与ImageIdentify内置在Wolfram语言中,很容易创建使用它的api或应用程序。和Wolfram云在美国,创建网站也很容易,比如Wolfram语言图像识别项目.
个人基本信息
就我个人而言,我已经等了很久了ImageIdentify.大约40年前,我读过一些书名为计算机和大脑这听起来似乎是不可避免的,我们总有一天会实现人工智能——可能是通过模拟大脑中的电子连接。在1980年,受到了我的第一种计算机语言我决定,我应该考虑如何才能实现全面的人工智能。
鼓舞我的部分原因是——在Wolfram语言的早期预感中——我将我的第一个计算机语言建立在强大的基础上象征性的模式匹配我想象中的在某种程度上捕捉人类思维的某些方面。但我知道,虽然像图像识别这样的任务也基于模式匹配,但它们需要一些不同的东西——一种更近似的匹配形式。
我试图发明近似哈希方案之类的东西。但我一直在想,大脑可以做到这一点;我们应该从他们那里得到线索。这让我开始研究理想化的神经网络和它们的行为。
与此同时,我也在研究一些关于自然科学的基本问题宇宙学以及我们的宇宙是如何形成结构的,以及研究自引力粒子集合的行为。
和后来我意识到神经网络和自引力气体都是具有简单底层组件的系统,但却以某种方式实现了复杂的整体行为。为了弄清真相,我开始研究元胞自动机并最终做出了所有的发现一种新的科学.
那么神经网络呢?它们不是我最喜欢的系统类型:与我在计算领域中研究的其他系统相比,它们在结构上似乎有点过于武断和复杂。但我经常会再次想到它们,进行模拟,以更多地了解它们行为的基础科学,或试图看到它们如何用于实际任务,如近似模式匹配:
总的来说,神经网络经历了一个令人惊叹的过山车历史.它们在20世纪40年代首次崭露头角。但到了20世纪60年代,它们的受欢迎程度有所下降,据说,它们已经被“数学证明”了,它们永远不会做任何有用的事情。
然而,事实证明,这只对单层“感知器”网络是正确的。在20世纪80年代早期,基于同样具有“隐藏层”的神经网络的研究又兴起了。但是,尽管我认识这项工作的许多领导者,我不得不说,我仍然有些怀疑,尤其是因为我的印象是,神经网络大多被用于任务,似乎它们在许多其他方面都很容易完成。
我也觉得神经网络作为正式系统过于复杂——甚至一度试图如此开发自己的替代方案.但我仍然支持我的学术研究中心的人研究神经网络,并在我的复杂的系统日报》。
我知道,神经网络确实有一些实际的应用,比如视觉字符识别,但这些应用非常少。随着时间的推移,似乎没有什么普遍的适用性。
机器学习
与此同时,我们一直在忙着开发许多功能强大且非常实用的数据分析方法Mathematica在什么将成为Wolfram语言.几年前,我们决定是时候更进一步了——尝试集成高度自动化通用机器学习.我们的想法是让功能更广泛,更普遍,更强大;例如,有一个单一的功能分类它可以被训练成分类任何东西,比如,白天与夜晚的照片比如不同乐器的声音,邮件的紧急程度等等。
我们采用了很多最先进的方法。但更重要的是,我们试图实现完全自动化,这样用户就不需要知道机器学习的任何知识:他们只需要打电话分类.
一开始我并不确定这是否可行。但它确实如此,而且是引人注目的。
人们可以提供几乎任何东西的训练数据,Wolfram Language会自动设置分类器供他们使用。我们还提供了越来越多的内置分类器,比如语言或国家标志:
不久前,我们决定是时候尝试一个经典的大规模分类器问题:图像识别。现在的结果是ImageIdentify.
这都是关于吸引器的
图像识别到底是什么?世界上有一些被命名的事物,关键是要告诉他们中的哪一种是特定的图片。或者,更正式地说,将所有可能的图像映射到一组对象的符号名称中。
我们没有任何内在的方法来描述像椅子这样的物体。我们所能做的就是给出很多椅子的例子,然后有效地说,“任何看起来像这些椅子的东西。”因此,实际上,我们希望与椅子示例“接近”的图像映射到名称“chair”,而其他的不映射到名称“chair”。
现在,有很多系统都有这种吸引子”的行为。举个物理的例子,想想山景。一滴雨可以落在山上的任何地方,但(至少在理想的模型中)它会流向有限数量的最低点之一。附近的水珠往往会流向同样的最低点。远处的水滴可能在分水岭的另一边,因此也会流向其他最低点。
雨滴就像我们的形象;最低点就像不同种类的物体。我们所说的雨滴指的是物体在重力作用下的物理运动。但是图像是由数字像素组成的。而不是考虑物理运动,我们必须考虑程序处理的数字价值。
完全相同的“吸引”行为也会在那里发生。例如,在许多细胞自动机中,人们可以在初始条件下改变一些细胞的颜色,但最终仍然停留在相同的固定状态“吸引子”最终状态.(实际上,大多数细胞自动机显示的更多有趣的行为,它不会进入一个固定状态,但如何将其应用到识别任务中还不太清楚。)
那么,如果我们对图像应用细胞自动机规则,会发生什么呢?实际上,我们正在进行图像处理,事实上,一些常见的图像处理操作(无论是在计算机上还是在人类视觉处理中)只是简单的2D细胞自动机。
让细胞自动机识别出像图像一样的黑色像素团的某些特征是很容易的。但对于真正的图像识别,还有更多的工作要做。在山的比喻中,我们必须“塑造”山景,使正确的雨滴流向正确的点。
程序自动进行
那么我们该怎么做呢?对于像图像这样的数字数据,我们不知道如何一下子做到这一点;我们只知道如何迭代地、增量地完成它。我们必须从一个基础的“平”系统开始,然后逐渐做“雕刻”。
关于这种迭代雕刻还有很多不为人知的地方。我想过了很广泛对于离散程序,如细胞自动机(和图灵机),我确信可以做一些非常有趣的事情。但我一直没弄清楚是怎么回事。
然而,对于具有连续(实数)参数的系统,有一种很棒的方法叫做反向传播——它基于微积分。它本质上是一种非常常见的梯度下降法,在这种方法中,先计算导数,然后用它们来计算出如何改变参数,从而得到一个可以更好地适应行为的系统。
那么应该使用什么样的系统呢?一个令人惊讶的普遍选择是神经网络。这个名字让人想到大脑和生物学。但就我们的目的而言,神经网络只是形式的、计算的系统,它由多个输入函数组成,这些函数具有连续的参数和离散的阈值。
让这些神经网络执行有趣的任务有多容易?抽象地说,这很难知道。至少20年来,我的印象是,在实践中,神经网络基本上只能做那些用其他方式也很容易做的事情。
但几年前,情况开始改变。有人开始听说把神经网络应用到实际问题上取得了重大成功,比如图像识别。
是什么让这一切发生的?计算机(尤其是gpu中的线性代数)的速度已经足够快了——通过各种各样的算法技巧,其中一些实际上涉及到细胞自动机——可以在数百万个例子上用数百万个神经元来训练神经网络。(顺便说一下,这些是“深层”神经网络,不再局限于只有很少的层。)不知怎么的,这突然让大规模的实际应用触手可及。
为什么是现在?
我不认为这是一个巧合,当使用的人造神经元的数量与我们大脑相关部位的神经元数量相差无几时。
这个数字本身并不重要。更确切地说,如果我们正在尝试做人类大脑所做的任务,比如图像识别,那么我们需要一个类似规模的系统就不足为奇了。
人类可以很容易地识别几千种事物——大致相当于人类语言中可以描绘的名词的数量。低等动物能区分的种类可能要少得多。但如果我们试图实现“类人”图像识别——并有效地将图像映射到存在于人类语言中的单词——那么这就定义了一个特定规模的问题,而这个问题似乎可以用“人类规模”的神经网络来解决。
计算神经网络和生物神经网络之间肯定有区别——尽管在训练网络之后,从图像中获得结果的过程似乎相当相似。但是,用于训练计算神经网络的方法与生物学上看似合理的方法有很大的不同。
不过,在实际的发展中ImageIdentify在美国,我非常震惊地发现这与生物学案例有多么相似。首先,训练图像的数量——几千万张——似乎与人类在生命的最初几年里对物体的清晰视图的数量相当。
它只看到了那顶帽子
训练中也有一些怪癖,似乎和生物学中看到的非常接近。例如,有一次,我们犯了一个错误,在训练中没有人脸。当我们展示一张印第安纳琼斯在美国,系统无法识别他的脸,只能识别出这张照片是一顶帽子。也许这并不奇怪,但对我来说,这让我想起了一个经典的视觉实验,在这个实验中,养在竖条纹环境中的小猫看不到横条纹。
可能很像大脑ImageIdentify神经网络有许多层,包含各种不同种类的神经元。(不用说,Wolfram Language的符号表达式很好地描述了整个结构。)
很难对网络内部正在发生的事情说些有意义的话。但如果你看第一层或第二层,你可以识别出它正在挑选的一些特征。它们似乎与我们已知的特征非常相似被真正的神经元识别出来在初级视觉皮层。
我自己也一直对视觉纹理识别之类的东西很感兴趣(是否存在“纹理原语”,比如是否存在原色?),我想我们现在将能够弄清楚这一点。我也认为,研究神经网络后期发生的事情是非常有趣的,因为如果我们能识别它们,我们应该看到的是新兴的概念“它们实际上描述了世界上各种各样的图像和物体,包括那些人类语言还没有描述的图像和物体。”
食蚁兽不见了!
像我们为Wolfram语言处理的许多项目一样,开发ImageIdentify需要把许多不同的东西放在一起。大规模的训练图像的管理。通过映射到标准的Wolfram语言构造,开发可绘图对象的一般本体。使用物理类方法分析神经网络的动力学。并行代码的详细优化。甚至一些搜索的风格一种新的科学用于计算领域的程序。关于如何创建在实践中真正有用的功能有很多判断。
一开始,我并不清楚整个ImageIdentify项目即将开始。在早期,完全错误识别图像的比率高得令人不安。但一个接一个的问题得到了解决,渐渐地,我们明白了,我们终于到了一个可以创造有用的ImageIdentify函数。
仍然有很多问题。这个体系在某些事情上会做得很好,但在其他事情上会失败。然后我们会调整一些东西,然后会有新的失败,以及一大堆标题为“我们失去了食蚁兽!”(关于这是怎样的画面ImageIdentify曾经被正确识别为食蚁兽的动物突然被识别为完全不同的东西)。
调试ImageIdentify这是个有趣的过程。什么才是合理的投入?合理的输出是什么?人们应该如何在获得更具体的结果和获得更确定不会出错的结果(只是一只狗,或一只猎犬,或一只小猎犬)之间做出选择?
有时我们会看到一些起初看起来完全疯狂的事情。一头猪被误认为是“马具”。一件被误认为是"机动脚踏车"的石雕作品。但好消息是,我们总是在训练图像中发现一种类似于起因的混淆,这种混淆来自同一不相干的物体反复出现在特定类型的物体的训练图像中(例如“唯一的时间”)ImageIdentify我见过那种类型的亚洲石雕在图片中也有摩托车”)。
为了测试这个系统,我经常尝试一些不寻常或意想不到的图像:
我发现了一些非常惊人和迷人的东西。是的,ImageIdentify可能是完全错误的。但不知何故,这些错误似乎是可以理解的,在某种意义上也是非常人性化的。好像是什么ImageIdentify成功地捕捉到了人类识别图像过程的一些本质。
那么像抽象艺术这样的东西呢?这是一种类似罗夏墨迹(rorschach)的测试,适用于人类和机器ImageIdentify:
野外生活
类似的ImageIdentify永远不会真正结束。但几个月前我们在Wolfram语言中发布了一个初步版本。今天,我们更新的版本,并用它来发射Wolfram语言图像识别项目.
我们将继续培训和发展ImageIdentify,尤其是基于网站的反馈和统计数据。就像Wolfram|Alpha的领域自然语言理解如果没有人类的实际使用,就没有实际的方法来评估进展,甚至也没有方法来定义“自然图像理解”的目标。
我必须说,我发现玩Wolfram语言图像识别项目很有趣。这么多年后,看到这种人工智能真正发挥作用,真是令人满意。但更重要的是,你看ImageIdentify当你对一张怪异或具有挑战性的图片做出反应时,你往往会有一种“啊哈”的感觉,就像你刚刚以一种非常像人类的方式展示了一张图片,或者是关于一张图片的一些新的见解或笑话。
当然,在底层,它只是运行代码——使用非常简单的内部循环,这与我在20世纪80年代初的神经网络程序(除了现在它们是Wolfram语言函数,而不是低级的C代码)中所使用的代码几乎相同。
在思想史上,这是一个令人着迷的、极其不寻常的例子:神经网络被研究了70年,却一再被摒弃。然而,在图像识别这样一个人工智能任务的典型例子中,正是它们给我们带来了成功。我期待神经网络的最初先驱沃伦·麦卡洛克和沃尔特·皮茨——不会发现什么令人惊讶的核心Wolfram语言图像识别项目是的,尽管他们可能会惊讶于它花了70年才来到这里。
但对我来说更重要的是现在可以通过整合ImageIdentify融入了Wolfram语言的整个符号结构。什么ImageIdentifyDoes是人类每一代都要学会做的事情。但符号语言让我们有机会代表人类历史上共同的智力成就。我相信,把所有这些东西计算出来,是一件非常重要的事情,我才刚刚开始理解。
但今天,我希望你们会喜欢Wolfram语言图像识别项目.可以把它看作是对人工智能所达到的成就的庆祝。可以把它看作是一种智力上的娱乐,它有助于建立对人工智能是什么样子的直觉。但不要忘记我认为最令人兴奋的部分:它也是实用的技术,你可以此时此地使用在Wolfram语言,并部署在任何你想要的地方。