Wolfram语言人工智能:图像识别项目

“这是一张什么画?”人类通常可以立即回答这些问题,但在过去,计算机似乎总是无法做到这一点。在将近40年的时间里,我一直相信计算机最终会实现这一目标——但我一直在想这是什么时候。

我建立的系统赋予了计算机各种各样的智能,其中很多远远超出了人类的水平。很长一段时间以来,我们一直在整合所有的智能Wolfram语言

现在,我很高兴地说,我们已经达到了一个里程碑:最终调用了一个函数ImageIdentify内置在Wolfram语言中,可以让你问,“这是一张什么图片?”然后得到一个答案。

今天我们要启动Wolfram语言图像识别项目在网络上,任何人都可以轻松地拍摄任何照片(从网页上拖拽,在你的手机上抓拍,或从文件加载),看看有什么ImageIdentify认为它是:

给Wolfram语言图像识别项目一张图片,它就会使用该语言的ImageIdentify函数来识别它

它并不总是正确的,但大多数时候我认为它做得非常好。对我来说,最让我着迷的是,当它真的出错时,它所犯的错误大部分看起来都是非常人性的。

这是人工智能的一个很好的实践例子。但对我来说,更重要的是,我们已经达到了一个临界点,我们可以将这种“人工智能操作”直接集成到Wolfram语言中——作为基于知识的编程的一个新的、强大的构建块使用。

现在用Wolfram语言

在Wolfram Language会话中,标识图像所需要做的就是将其提供给ImageIdentify功能:

在[1]:= ImageIdentify(图片:大食蚁兽)

你得到的是象征性的实体, Wolfram语言可以做更多的计算,比如,在这个例子中,判断你是否得到了动物,哺乳动物等等。或者直接问定义:

在[2]:= giant anteater[

或者,从它的维基百科条目生成一个词云:

在[3]:= WordCloud [DeleteStopwords [WikipediaData[大食蚁兽]]]

如果你有很多照片,你可以马上写一个Wolfram语言程序,例如,给不同种类的动物,或平面,或设备,或任何在照片中出现的统计数据。

ImageIdentify内置在Wolfram语言中,很容易创建使用它的api或应用程序。和Wolfram云在美国,创建网站也很容易,比如Wolfram语言图像识别项目

个人基本信息

就我个人而言,我已经等了很久了ImageIdentify.大约40年前,我读过一些书名为计算机和大脑这听起来似乎是不可避免的,我们总有一天会实现人工智能——可能是通过模拟大脑中的电子连接。在1980年,受到了我的第一种计算机语言我决定,我应该考虑如何才能实现全面的人工智能。

鼓舞我的部分原因是——在Wolfram语言的早期预感中——我将我的第一个计算机语言建立在强大的基础上象征性的模式匹配我想象中的在某种程度上捕捉人类思维的某些方面。但我知道,虽然像图像识别这样的任务也基于模式匹配,但它们需要一些不同的东西——一种更近似的匹配形式。

我试图发明近似哈希方案之类的东西。但我一直在想,大脑可以做到这一点;我们应该从他们那里得到线索。这让我开始研究理想化的神经网络和它们的行为。

与此同时,我也在研究一些关于自然科学的基本问题宇宙学以及我们的宇宙是如何形成结构的,以及研究自引力粒子集合的行为。

后来我意识到神经网络和自引力气体都是具有简单底层组件的系统,但却以某种方式实现了复杂的整体行为。为了弄清真相,我开始研究元胞自动机并最终做出了所有的发现一种新的科学

那么神经网络呢?它们不是我最喜欢的系统类型:与我在计算领域中研究的其他系统相比,它们在结构上似乎有点过于武断和复杂。但我经常会再次想到它们,进行模拟,以更多地了解它们行为的基础科学,或试图看到它们如何用于实际任务,如近似模式匹配:

我在神经网络方面的一些早期工作——从1983年开始……

总的来说,神经网络经历了一个令人惊叹的过山车历史.它们在20世纪40年代首次崭露头角。但到了20世纪60年代,它们的受欢迎程度有所下降,据说,它们已经被“数学证明”了,它们永远不会做任何有用的事情。

然而,事实证明,这只对单层“感知器”网络是正确的。在20世纪80年代早期,基于同样具有“隐藏层”的神经网络的研究又兴起了。但是,尽管我认识这项工作的许多领导者,我不得不说,我仍然有些怀疑,尤其是因为我的印象是,神经网络大多被用于任务,似乎它们在许多其他方面都很容易完成。

我也觉得神经网络作为正式系统过于复杂——甚至一度试图如此开发自己的替代方案.但我仍然支持我的学术研究中心的人研究神经网络,并在我的复杂的系统日报》。

我知道,神经网络确实有一些实际的应用,比如视觉字符识别,但这些应用非常少。随着时间的推移,似乎没有什么普遍的适用性。

机器学习

与此同时,我们一直在忙着开发许多功能强大且非常实用的数据分析方法Mathematica在什么将成为Wolfram语言.几年前,我们决定是时候更进一步了——尝试集成高度自动化通用机器学习.我们的想法是让功能更广泛,更普遍,更强大;例如,有一个单一的功能分类它可以被训练成分类任何东西,比如,白天与夜晚的照片比如不同乐器的声音,邮件的紧急程度等等。

我们采用了很多最先进的方法。但更重要的是,我们试图实现完全自动化,这样用户就不需要知道机器学习的任何知识:他们只需要打电话分类

一开始我并不确定这是否可行。但它确实如此,而且是引人注目的。

人们可以提供几乎任何东西的训练数据,Wolfram Language会自动设置分类器供他们使用。我们还提供了越来越多的内置分类器,比如语言或国家标志:

在[4]:=分类(“语言”,{“欢迎光临”、“欢迎”、“欢迎”、“Добропожаловать”、“Bienvenidos”}]

在[5]:=分类(“CountryFlag”{图片:旗帜}]

不久前,我们决定是时候尝试一个经典的大规模分类器问题:图像识别。现在的结果是ImageIdentify

这都是关于吸引器的

图像识别到底是什么?世界上有一些被命名的事物,关键是要告诉他们中的哪一种是特定的图片。或者,更正式地说,将所有可能的图像映射到一组对象的符号名称中。

我们没有任何内在的方法来描述像椅子这样的物体。我们所能做的就是给出很多椅子的例子,然后有效地说,“任何看起来像这些椅子的东西。”因此,实际上,我们希望与椅子示例“接近”的图像映射到名称“chair”,而其他的不映射到名称“chair”。

现在,有很多系统都有这种吸引子”的行为。举个物理的例子,想想山景。一滴雨可以落在山上的任何地方,但(至少在理想的模型中)它会流向有限数量的最低点之一。附近的水珠往往会流向同样的最低点。远处的水滴可能在分水岭的另一边,因此也会流向其他最低点。

在山景中,水流到不同的最低点取决于它落在地形的什么地方

雨滴就像我们的形象;最低点就像不同种类的物体。我们所说的雨滴指的是物体在重力作用下的物理运动。但是图像是由数字像素组成的。而不是考虑物理运动,我们必须考虑程序处理的数字价值。

完全相同的“吸引”行为也会在那里发生。例如,在许多细胞自动机中,人们可以在初始条件下改变一些细胞的颜色,但最终仍然停留在相同的固定状态“吸引子”最终状态.(实际上,大多数细胞自动机显示的更多有趣的行为,它不会进入一个固定状态,但如何将其应用到识别任务中还不太清楚。)

初始状态不同但最终状态相同的元胞自动机。就像山景上的雨水,最初的细胞可以“落”在许多不同的地方,并最终在相同的位置结束。

那么,如果我们对图像应用细胞自动机规则,会发生什么呢?实际上,我们正在进行图像处理,事实上,一些常见的图像处理操作(无论是在计算机上还是在人类视觉处理中)只是简单的2D细胞自动机。

很多图像处理都可以——现在也正在——用细胞自动机完成

让细胞自动机识别出像图像一样的黑色像素团的某些特征是很容易的。但对于真正的图像识别,还有更多的工作要做。在山的比喻中,我们必须“塑造”山景,使正确的雨滴流向正确的点。

程序自动进行

那么我们该怎么做呢?对于像图像这样的数字数据,我们不知道如何一下子做到这一点;我们只知道如何迭代地、增量地完成它。我们必须从一个基础的“平”系统开始,然后逐渐做“雕刻”。

关于这种迭代雕刻还有很多不为人知的地方。我想过了很广泛对于离散程序,如细胞自动机(和图灵机),我确信可以做一些非常有趣的事情。但我一直没弄清楚是怎么回事。

元胞自动机可用于一种迭代雕刻

然而,对于具有连续(实数)参数的系统,有一种很棒的方法叫做反向传播——它基于微积分。它本质上是一种非常常见的梯度下降法,在这种方法中,先计算导数,然后用它们来计算出如何改变参数,从而得到一个可以更好地适应行为的系统。

那么应该使用什么样的系统呢?一个令人惊讶的普遍选择是神经网络。这个名字让人想到大脑和生物学。但就我们的目的而言,神经网络只是形式的、计算的系统,它由多个输入函数组成,这些函数具有连续的参数和离散的阈值。

让这些神经网络执行有趣的任务有多容易?抽象地说,这很难知道。至少20年来,我的印象是,在实践中,神经网络基本上只能做那些用其他方式也很容易做的事情。

但几年前,情况开始改变。有人开始听说把神经网络应用到实际问题上取得了重大成功,比如图像识别。

是什么让这一切发生的?计算机(尤其是gpu中的线性代数)的速度已经足够快了——通过各种各样的算法技巧,其中一些实际上涉及到细胞自动机——可以在数百万个例子上用数百万个神经元来训练神经网络。(顺便说一下,这些是“深层”神经网络,不再局限于只有很少的层。)不知怎么的,这突然让大规模的实际应用触手可及。

为什么是现在?

我不认为这是一个巧合,当使用的人造神经元的数量与我们大脑相关部位的神经元数量相差无几时。

这个数字本身并不重要。更确切地说,如果我们正在尝试做人类大脑所做的任务,比如图像识别,那么我们需要一个类似规模的系统就不足为奇了。

人类可以很容易地识别几千种事物——大致相当于人类语言中可以描绘的名词的数量。低等动物能区分的种类可能要少得多。但如果我们试图实现“类人”图像识别——并有效地将图像映射到存在于人类语言中的单词——那么这就定义了一个特定规模的问题,而这个问题似乎可以用“人类规模”的神经网络来解决。

计算神经网络和生物神经网络之间肯定有区别——尽管在训练网络之后,从图像中获得结果的过程似乎相当相似。但是,用于训练计算神经网络的方法与生物学上看似合理的方法有很大的不同。

不过,在实际的发展中ImageIdentify在美国,我非常震惊地发现这与生物学案例有多么相似。首先,训练图像的数量——几千万张——似乎与人类在生命的最初几年里对物体的清晰视图的数量相当。

它只看到了那顶帽子

训练中也有一些怪癖,似乎和生物学中看到的非常接近。例如,有一次,我们犯了一个错误,在训练中没有人脸。当我们展示一张印第安纳琼斯在美国,系统无法识别他的脸,只能识别出这张照片是一顶帽子。也许这并不奇怪,但对我来说,这让我想起了一个经典的视觉实验,在这个实验中,养在竖条纹环境中的小猫看不到横条纹。

当我们给它一张印第安纳·琼斯的照片时,它瞄准了那顶帽子

可能很像大脑ImageIdentify神经网络有许多层,包含各种不同种类的神经元。(不用说,Wolfram Language的符号表达式很好地描述了整个结构。)

很难对网络内部正在发生的事情说些有意义的话。但如果你看第一层或第二层,你可以识别出它正在挑选的一些特征。它们似乎与我们已知的特征非常相似被真正的神经元识别出来在初级视觉皮层。

我自己也一直对视觉纹理识别之类的东西很感兴趣(是否存在“纹理原语”,比如是否存在原色?),我想我们现在将能够弄清楚这一点。我也认为,研究神经网络后期发生的事情是非常有趣的,因为如果我们能识别它们,我们应该看到的是新兴的概念“它们实际上描述了世界上各种各样的图像和物体,包括那些人类语言还没有描述的图像和物体。”

食蚁兽不见了!

像我们为Wolfram语言处理的许多项目一样,开发ImageIdentify需要把许多不同的东西放在一起。大规模的训练图像的管理。通过映射到标准的Wolfram语言构造,开发可绘图对象的一般本体。使用物理类方法分析神经网络的动力学。并行代码的详细优化。甚至一些搜索的风格一种新的科学用于计算领域的程序。关于如何创建在实践中真正有用的功能有很多判断。

一开始,我并不清楚整个ImageIdentify项目即将开始。在早期,完全错误识别图像的比率高得令人不安。但一个接一个的问题得到了解决,渐渐地,我们明白了,我们终于到了一个可以创造有用的ImageIdentify函数。

仍然有很多问题。这个体系在某些事情上会做得很好,但在其他事情上会失败。然后我们会调整一些东西,然后会有新的失败,以及一大堆标题为“我们失去了食蚁兽!”(关于这是怎样的画面ImageIdentify曾经被正确识别为食蚁兽的动物突然被识别为完全不同的东西)。

调试ImageIdentify这是个有趣的过程。什么才是合理的投入?合理的输出是什么?人们应该如何在获得更具体的结果和获得更确定不会出错的结果(只是一只狗,或一只猎犬,或一只小猎犬)之间做出选择?

有时我们会看到一些起初看起来完全疯狂的事情。一头猪被误认为是“马具”。一件被误认为是"机动脚踏车"的石雕作品。但好消息是,我们总是在训练图像中发现一种类似于起因的混淆,这种混淆来自同一不相干的物体反复出现在特定类型的物体的训练图像中(例如“唯一的时间”)ImageIdentify我见过那种类型的亚洲石雕在图片中也有摩托车”)。

为了测试这个系统,我经常尝试一些不寻常或意想不到的图像:

意想不到的图像往往会带来意想不到的结果

我发现了一些非常惊人和迷人的东西。是的,ImageIdentify可能是完全错误的。但不知何故,这些错误似乎是可以理解的,在某种意义上也是非常人性化的。好像是什么ImageIdentify成功地捕捉到了人类识别图像过程的一些本质。

那么像抽象艺术这样的东西呢?这是一种类似罗夏墨迹(rorschach)的测试,适用于人类和机器ImageIdentify

抽象艺术得到了令人着迷的诠释,有点像人类的罗夏墨迹(Rorschach-blot)解读

野外生活

类似的ImageIdentify永远不会真正结束。但几个月前我们在Wolfram语言中发布了一个初步版本。今天,我们更新的版本,并用它来发射Wolfram语言图像识别项目

我们将继续培训和发展ImageIdentify,尤其是基于网站的反馈和统计数据。就像Wolfram|Alpha的领域自然语言理解如果没有人类的实际使用,就没有实际的方法来评估进展,甚至也没有方法来定义“自然图像理解”的目标。

我必须说,我发现玩Wolfram语言图像识别项目很有趣。这么多年后,看到这种人工智能真正发挥作用,真是令人满意。但更重要的是,你看ImageIdentify当你对一张怪异或具有挑战性的图片做出反应时,你往往会有一种“啊哈”的感觉,就像你刚刚以一种非常像人类的方式展示了一张图片,或者是关于一张图片的一些新的见解或笑话。

ImageIdentify的一些错误非常有趣

当然,在底层,它只是运行代码——使用非常简单的内部循环,这与我在20世纪80年代初的神经网络程序(除了现在它们是Wolfram语言函数,而不是低级的C代码)中所使用的代码几乎相同。

在思想史上,这是一个令人着迷的、极其不寻常的例子:神经网络被研究了70年,却一再被摒弃。然而,在图像识别这样一个人工智能任务的典型例子中,正是它们给我们带来了成功。我期待神经网络的最初先驱沃伦·麦卡洛克和沃尔特·皮茨——不会发现什么令人惊讶的核心Wolfram语言图像识别项目是的,尽管他们可能会惊讶于它花了70年才来到这里。

但对我来说更重要的是现在可以通过整合ImageIdentify融入了Wolfram语言的整个符号结构。什么ImageIdentifyDoes是人类每一代都要学会做的事情。但符号语言让我们有机会代表人类历史上共同的智力成就。我相信,把所有这些东西计算出来,是一件非常重要的事情,我才刚刚开始理解。

但今天,我希望你们会喜欢Wolfram语言图像识别项目.可以把它看作是对人工智能所达到的成就的庆祝。可以把它看作是一种智力上的娱乐,它有助于建立对人工智能是什么样子的直觉。但不要忘记我认为最令人兴奋的部分:它也是实用的技术,你可以此时此地使用Wolfram语言,并部署在任何你想要的地方。

31日评论

  1. ImageIdentify似乎总是假设它看到的是自然世界,但对计算机和人类来说,人工世界可能更容易标记。如果它能找出两者之间的关系,也许有一天它能返回“鱼(CGI表示)”、“电脑游戏(油画表示)”、“细胞自动机(电脑屏幕上)”。

    pbarendse
  2. 事实上,除了《一种新科学》中的Gabor过滤器之外,关于深层网络的各个层次往往代表着什么,还有很多可以说的。这是一篇好文章:http://arxiv.org/pdf/1311.2901v3.pdf

    此外,虽然这是一个伟大的第一步,但还有一组更大的原语,人们希望在某些时候能够适当地集成(比如,在您自己的数据域上训练网络的函数,使用循环网络进行文本处理,指定自定义连接架构的方法,将前馈和循环网拼接在一起的方法,就像在各种最近的图片说明演示中所做的那样,等等……)

    雅可比
  3. 另一个WTF的时刻。根据ImageIdentify网站,gmail页面上的女人实际上是金正恩:https://imgur.com/jNsADRO

    阿尔戈
  4. 听起来我们离电脑拥有"智能"还有很长的路要走

  5. 你是否考虑过与验证码公司合作,通过让人们为你分类图片来提供更多的学习机会?

    Artem
  6. 现在让它理解/识别感知深度!

    的想法
  7. 让人印象深刻。我是否正确理解了价格表,例如2000图像识别调用通过Wolfram编程云ImageIdentify将花费110欧元?http://www.wolfram.com/programming-cloud/pricing/(因为这种定价可能会让大多数应用开发者无法将这一功能添加到自己的想法中。)

    菲利普
    • 谢谢你的问题,philip。那太贵了!实际上,ImageIdentify函数并不访问您所引用的Wolfram|Alpha API。它是Wolfram语言的一部分,在使用时需要花费Cloud Credits。每次使用该功能的平均值约为5个云积分。每个Wolfram编程云计划每月提供数千个云积分。即使是WPC免费也包括每月1000个云积分,所以在探索Wolfram语言时,请先从免费帐户开始。我们期待看到你的创造!

      管理
  8. 好消息!谢谢!

  9. 阅读关于在早期训练集中忽略人脸的部分,不知怎么地提醒了我,随着我年龄的增长,我越来越注意到我看到的一些人——对我来说完全陌生的人——与我认识的人有多么相似。于是就产生了这样一个问题:“我想知道这个和那个是否相关?”如果ImageIdentify的下一代[]能够确定人脸a的拥有者与人脸B的拥有者有多接近(或可能性),那将是非常有趣的。

  10. 我用几张图片测试了它,我印象深刻!我希望它能从人们提交的所有图片中学习,真的,我认为在几年内,它将能够识别99%的图片,成功率比大多数人都高。恭喜你!

  11. 我同意parendse的观点。

    测试ImageIdentify通常会失败的图像是很有趣的。漫画、绘画和商标是一个持续的挑战。

    也就是说,Wolfram编程语言似乎有足够的能力来测试图像的复杂性,我认为这应该是第一级过滤器。是这样的吗?“这个图像包含固体或复杂的线条和/或颜色吗?”

    如果复杂性较低,那么它几乎肯定是一个象征性/人工的图像,而不是来自自然世界的图像。

    另外一个想法,目前有选项提供图像输入。

    我不确定Wolfram在多大程度上相信用户能够正确地对图像进行分类,但也许像Mechanical Turk这样的系统将有助于提高ImageIdentify的击球率?

    也许添加一个网页div说“高级”可能允许用户在提供电子邮件后点击其他选项?然后允许用户输入一些描述性的词,发布这些词,然后一个带有网络单选按钮的贝叶斯词树会返回给我们用户,这样我们就可以收紧描述,这样训练源就会变得更准确?

    只是一个想法。

    欣赏的乐趣!

  12. 你好斯蒂芬,

    我对此做了一些测试,我认为它非常棒。它确实犯了一些错误——大部分是可以理解的!我肯定会做更多的测试来帮助它学习!伟大的工作!

    Cheff Imutan
  13. 扩展了parendse的观点,我认为它假设图像总是一张照片,而不是倾向于自然世界的图片。但我们可以灵活地假设图像可以是照片、艺术表现、计算机渲染、图形图等等。

    vs上
  14. Der Stephen,谢谢你的精彩帖子。作为一个曾经有幸涉足神经信息处理领域的人,我特别喜欢你的机器学习难题。我相信它可以很好地理解这个概念,而不会让读者因为这个主题惊人(或者更确切地说,迷人)的数学复杂性而感到负担。
    奥拉夫

    奥拉夫
  15. 有趣的是,这些错误表明它不像人类那样思考。
    cnn将再次通过,因为我们发现了思想的潜在机制,并认识到在硅中建模湿件是一个漫长而低效的方法。

    J内维尔Groff
  16. 我已经用我的人造生物的几张照片试过了,它以有趣的方式起作用或失败。一方面,对于我使用的颜色方案,我希望它是对微生物的暗示,分类器返回细菌。从另一方面来说,如果用颜色方案制作的图片更容易解释这些生物的工作原理,它会返回果冻豆。这是准确的!

  17. 作为编程云人工智能的努力,你是否计划整合像沃森甚至沃森本身这样的东西?目前,功能强大的沃森与Wolfram的结合是惊人的,但它们并没有很好地集成(手工工作)。将这一点融入语言将是一个伟大的进步。

    弗兰克·克拉森
  18. 为什么只有一个“类”是有限制的。我看到沃森服务,如描述在http://www.infoworld.com/article/2880146/machine-learning/ibm-watson-speech-text-visuals-analysis-insights.html,并想知道为什么分类必须是唯一的,而不是说不同事物的“向量”,要么因为要识别的事物是某些类型的“混合”,要么因为图片中可能有几个项目。

    这是“分类”到一个独特桶的一部分选择吗?
    独特的分类会限制应用的发展吗?
    我认为阶级制度是预先决定的,不是灵活的;必须生成包含新“类”的新训练集。对于那些脱离当前阶级体系的图像的识别,返回一些“可能性”或“适合”因素不是很有用吗?

    拉尔斯
  19. Wolfram博士

    恭喜你! !
    我刚看到你初步公布的图像识别算法。
    我认为这是一个真正的突破。可以说,这是Wolfram Research提出的最好的想法之一。
    出色的工作!

    继续努力!!
    皮特·波洛克博士,航空航天公司,洛杉矶

    皮特·波洛克
  20. 太棒了,一个里程碑,谷歌尝试这个令人毛骨悚然的深梦商务了,很棒的方式,但不是要害,我仍然认为算法像深梦可以用来获得现实世界对象的表达等方式,允许复制通过量子物理,我真的很想和你或你的团队中对这个问题感兴趣的人一起讨论,因为后稀缺是一个人能完成的最高成就。

  21. 它对我说河马是印度犀牛,就像对你说马车是印度犀牛一样!

  22. 这真的是一个大故事来确定一个图像..这是我第一次来这里。很高兴看到这个项目!

  23. 阅读关于在早期训练集中忽略人脸的部分,不知怎么地提醒了我,随着我年龄的增长,我越来越注意到我看到的一些人有多频繁

  24. 这是我第一次来这里。识别一幅图像确实是件大事。很高兴看到这个项目!

  25. ImageIdentify似乎总是假设它看到的是自然世界,但对计算机和人类来说,人工世界可能更容易标记。如果它能找出两者之间的关系,也许有一天它能返回“鱼(CGI表示)”、“电脑游戏(油画表示)”、“细胞自动机(电脑屏幕上)”。

  26. 阅读关于在早期训练集中忽略人脸的部分,不知怎么地提醒了我,随着我年龄的增长,我越来越注意到我看到的一些人——对我来说完全陌生的人——与我认识的人有多么相似。于是就产生了这样一个问题:“我想知道这个和那个是否相关?”如果ImageIdentify的下一代[]能够确定人脸a的拥有者与人脸B的拥有者有多接近(或可能性),那将是非常有趣的。

  27. 《傻蛋和傻蛋》里的小狗车!

  28. 识别任何图像都是很棒的故事…虽然我是新来的。我很高兴看到这个项目!

  29. 现在让它理解/识别感知深度!

  30. 阅读关于在早期训练集中忽略人脸的部分,不知怎么地提醒了我,随着我年龄的增长,我越来越注意到我看到的一些人有多频繁

    最好的

Baidu