编译 | 王 念 编辑 | 丛 末 人工智能和深度学习技术风靡全球,盲目追风之下我们需要一场深刻的反思,到底什么是人工智能?深度学习能为我们带来什么? AI 领域专家Filip Piekniewski 非常尖锐地指出了当下 AI 发展的问题: 一方面,深度学习给 AI 领域带来了巨大的成功,然而尚且无法实现像人一样拥有常识的 AI ,而对于这一点,多数 AI 研究者颇有些心照不宣地视而不见,沉浸在刷榜和发Paper 中。 另一方面,AI 似乎也被自身的成功所绑架,甚而成为自身成功的牺牲品。 对此, Piekniewski 基于自身在 AI 领域摸爬滚打数十年的经验,以及自身的思考,从 AI 应用和科研两个方向给研究人员提出了一些方法论建议,他调侃为发展 AI 的“不扯淡”的人工智能方法论("no bullshit" approach to AI)。 1 序言 不知道为啥,评论区里的读者童鞋们老说我的文章带有那么一内内批判色彩……好吧老铁,我承认我挺Mean的,额行行行…我承认我特别的愤世嫉俗。所以在大概两三年前,我决定洗心革面,重新做人!致力于做一个高尚的人、纯粹的人、有道德的人、脱离低级趣味的Up主。因此我稍微的转换了一下我的行文风格,开始写一些有实际建设性内容的文字,让读者童鞋们深入地了解到,其实我还是一个很有思想的数据科学家,而不是一个披着学者外皮的愤青~ 其实说真的,我在博客上的那些炮轰其实只是正文的一个调剂品,大家多多关注文章的主体内容嘛。(顺嘴一说,那些被我炮轰的家伙本身就活该,他们脑袋怎么想的,成天的瞎炒作乱恰饭,一天到晚胡说八道。) 但是话说回来,不论如何我也算是在人工智能、机器人和神经网络领域混迹了十来年的老油条了,对这几个领域还是有些发言权的。想当年咱也是发了不少Paper、披着大红袍让人叫X博士的主儿。 但当年在我读博的时候,人工智能领域还是一片荒芜,所以我的AI学习之路和现在的小伙子们有些不同,这也就直接导致了我能从一些不同的角度对人工智能的发展进行评价,也可以提出一些不寻常的观点。 哦对了,我先给那些没看过我简介的童鞋做个自我介绍哈。想当年在神经网络和连接主义(connectionism)还没有大杀四方的时候,我就开始对它产生了浓厚的兴趣。甚至因为研究的有点多,都开始腻烦它了。在那几年,我在数学、计算科学和神经学这个交叉方向上深刻钻研,并且尝试了各种基于神经科学、生物科学的计算模型。但是很遗憾,最终的收获寥寥。于是在接下来的几年里,我转而开始研究机器人领域。但是好景不长,没几年项目又黄了。接着,我获得了DARPA的项目资助,提出了PVM(Predictive Vision Model,预测视觉模型)模型,并致力于计算机视觉的研究。直到今天,我的项目组还在研究基于视觉的无人超市场景。 这么多年以来,我经历了人工智能的潮起潮落,见证了本来沉寂的神经网络方向风起云涌。但是就像大家看到的一样,人工智能领域充斥着“刷榜”和“刷分”的浮躁气氛,在我眼里看来,它们都太“扯淡”了!各种研究一味追求在某些数据集上的精度而不去关注这项技术为人类带来的便利和帮助。所以在这篇文章里,我想跟大家聊聊我个人对于人工智能的一些看法和研究进展,我将它称作发展 AI 的“不扯淡”的人工智能方法论。 2 人工智能,本质是为何? 我们知道,人工智能、深度学习、机器学习这些名词再唬人,它背后也就是一个计算机程序。这些程序产生的方法可能千奇百怪,有的是用专家系统,有的是用SVM,有的用深度网络。但是不论如何,往深处剖析起来,它们都是一行行的代码,都只是按照个规则运行在计算机上的0、1字节。 有人可能会问,这个大家都明白,你说这个干嘛? 其实我想说,我接触到的很多读者都会神化神经网络,觉得它跟一般的软件不同,就好像我们将一段代码称为神经网络的时候,它就具有了某种“灵性”,它的计算就会变得十分神秘而不可捉摸。 但事实并非如此,神经网络也是有局限性的,并且这个局限性是随着设计与生俱来的。不是说我们给神经网络配置个更高配的GPU、提供更多的算力,它就能大力出奇迹、洞悉世间万物。 这时候可能就有小伙伴问了,那你能解释神经网络为什么有效吗? 确实,现在神经网络的可解释性研究还很初级,我们无法用人类能够理解的方式去对神经元之间的交互进行阐释,但是我们能够从更泛化的角度去预期网络的能力。比如在处理高清图片的时候,使用和GTA V相同算力的神经网络模型的渲染性能会更好。当然它的这点能力肯定不够去进行复杂视觉场景的理解和推理,因为图像渲染的工作比较固定,算法优化做的更好,但是理解和推理计算需要大量的反向操作,这个目前还是很难优化的。 那么神经网络是怎么搭建出来的呢?在说它之前,我们先退一步看看计算机程序一般都是如何设计出来的。 首先第一种方式,就是程序猿们根据业务需求手工设计。 当我们可以很明确地知道某个程序的任务、业务流程和业务逻辑的时候,手工设计是最好的解决方案。它能够通过一个算法、一个个数据结构和一系列清晰的操作对每一种情况进行处理,从而完美解决我们的业务需求。大多数的工业自动化软件都是这样设计的,比如我们常用的文本编辑器、修图软件、输入法和浏览器等都是如此。 但是这种方法的缺点显而易见,就是需要有大量的程序猿对业务进行分析、拆解、设计和实现,这样的人力成本通常是很高的。而且就算程序猿们完成了软件的开发,它最终能不能上线、到底好不好用、边界条件下的可用性等等问题都要进行更深一步的验证才行。而这些验证工作通常又要花费10余倍于开发的成本,其中包括各种严格的测试和形式化检查。而且即便经过了如此严苛的审查,我们也无法保证这个程序不出现bug,所以软件的维护成本仍旧高昂。 为了改变这种无奈的情况,在上个世纪80年代,人们提出了软件设计的另一种概念:专家系统。这种方法中,一个程序是由高级逻辑规范所生成的。这就是专家系统和函数式编程。 在这种开发理念中,程序猿不必要细致入微地手写代码来告知程序如何解决问题,而只需要用非常形式化的逻辑语言,比如Prolog,来描述问题。接下来,专家系统和函数式编程软件就能根据这个问题的描述将其转化成机器可以执行的代码,并且解决问题。 这种方法的好处在于,程序猿其实不用知道如何去解决这个问题,他只要能够描述这个问题就行了。在这种编程中,只要程序员描述问题的方式正确,那么原则上这个程序就没有bug,它的处理正确性和操作的规范性也就相应可以得到保障了。其实,这种编程思想是“元编程”的一个例子。其中,专家系统需要保障在任何时刻都能对所输入的形式化问题描述进行完美和正确的反馈。 但很可惜,这种愿景从来没有实现过。原因很简单: 首先,我们无法保证使用高层级的声明性描述式的语言能够准确地表达问题,它的准确性和对业务描述的粒度远不及底层编程语言细致。在实践中,我们经常能发现在一些边界条件下,高等级的描述语言含糊不清,对问题根本没有解决的思路或者启发,这是十分致命的。写过代码的童鞋都知道,程序的运行规则和程序代码本身应该是相辅相成的,就类似于作曲和演奏之间的关系一样:贝多芬能够光用笔杆子和五线谱完成一篇交响曲,而普通人要是没有钢琴可能一个小节的音乐都写不利索。 其次,能够用专家系统解决的问题种类和数量十分有限。但是话说回来,专家系统并非一无是处,它为后世留下了一些十分优秀的遗产,比如Lisp、Closure、Prolog、Maple和Mathematica等软件。 第三种方式,基于数据自动生成计算机程序。我们将这种方法称为“机器学习”。机器学习是一个复杂的交叉学科,是很多统计学和优化论等等尖端方向组合而成的方向。 这种方法已经存在了很多年,至少可以追溯到上个世纪60年代。那时候Rosenblat通过反向传播算法提出了Vapnik支持向量机,而反向传播方法则由 Rumelhard、Hinton和Williams 发扬光大。但其实在他们之前的十年左右,Paul Wobbos就已经将这项技术研究的差不多了。 反向传播的思想通常是和连接主义有关。连接主义是一种设计思想,它是指将一个特别大而且复杂的计算分散成许多小的、互相连接的、由诸多简单神经元分散计算并最终集成的解决思路。这种想法其实在很大程度上受到了人脑神经元结构的启发,但是在实现和具体运行的形式上则是受到Conway的Game of Life、细胞自动机和Hopfield网络(后来发展成了玻尔兹曼机)的影响更大。 在机器学习的范式中,输入的数据驱动着模型的生成。机器学习方法通过数据描述着模型的规则,它利用可塑可延伸的模型参数(本质上是某种数据结构)来构建模型的结构和变量。例如,在简单的线性模型中,我们可以通过一个点积操作和非线性激活操作修改分类器的超平面,使其能够根据数据集中样本的分布特点实现标签的分类。又例如,一个神经网络可以根据输入的几百万张图片学习图像中的样本模式,并且对其中的物体进行分类和识别。 基于机器学习的程序设计方法在诞生之初饱受诟病,人们说它不切实际、可扩展性差、参数量太大、计算量需求过高等等。但是不可否认,机器学习方法的优点更加引人注目,就是它抢了程序猿的饭碗——我们不再需要那么多实现规则的码农,也不再需要成百上千的测试团队了。在机器学习方法看来,最重要、也是唯一需要的就是数据!而数据的成本相对于动辄四五十万年薪的码农来说就显得十分低廉了(虽然它需要人类标记)。 除此之外,机器学习方法的另一个好处是,它具有一定程度的可扩展性(尽管这种可扩展性是有严格的前提限制的)。其实回头望去,在过去的十余年间,深度学习就是在人们对机器学习的可扩展性研究,以及深度模型识别能力研究这两个方面共同作用的产物。 当然了,天下没有免费的午餐,使用深度学习的时候我们也要付出一些额外的代价。那就是当网络十分庞大、参数量急剧增加的时候,人们几乎不可能理解网络的工作机制,它开始变得像一个黑盒。这个黑盒是怎么成功运行的是个迷,它为什么失败还是个迷。所以其实换个角度来看,在很多方面,神经网络是专家系统的一个对立面。 3 神经网络是一个黑盒,又意味着什么? 在实践中,我们得到一系列的需求,需求描述了要解决的问题,根据此我们写代码解决问题。但问题是,我们拿到手的需求案例或者设计规则真的已经涵盖了这个软件功能的方方面面了吗?有没有漏掉一些什么? 根据我多年以来的掉坑经验,我认为是有遗漏的。如前文所述,当前的机器学习方法和专家系统方法在某种意义上是对立的,但是在Gary Marcus的眼中它们却是互补的。这种观点其实很有意思,我们稍后具体介绍。 我部分同意这种观点,但是我觉得它们两者之间还存在着一个巨大的鸿沟——一个类似于连接主义的架构桥梁。这种连接主义架构可以用来开发更高级别的符号主义输入,并且能够像专家系统一样对这个符号主义输入进行操作。这个过程有点类似于人类对自身的经历所做的总结和后续的修正操作,也就是所谓的吃一堑长一智。我们在生活中能够得到源源不断的来自外界的输入信息,其中可能有低层级的原始数据、脏数据和具有符号主义特点的抽象数据等输入。作为人类,我们天然地能够对它们进行分拆、提取和理解,并且也能够以类似于符号主义的处理方法,或者采取一些不那么正规的方式对其进行解决。 这种人类处理事物的方式值得计算机程序效仿,虽然具体的如何在神经网络中实施还是个问题。但是直观上来说,要达到这个目的,我们首先要将深度学习网络和专家系统组合拼接在一起,其实这个思路已经初步得到实践了,比如 AlphaGo,还有很多机器人控制系统(包括几乎所有的自动驾驶汽车)等等都是利用了这种设计思想。虽然有不少人尝试从其他方面来解释这些应用成功背后的原因,但不可否认的是,它们都是基于深度网络和专家系统的融合思想所设计而成,而这种混合模型的设计思路功不可没。 关于Gary Marcus 的观点,请戳这里查看详情:https://arxiv.org/pdf/2002.06177.pdf 深度学习的功能在很大程度上局限于感知和识别,比如识别红绿灯、检测到路人等等。这些感知结果和识别结果会根据事先设计好的基于规则或者基于符号的指派映射到一些后续的操作上。比如当检测到红灯时需要停车,检测到行人要让行等。但是当前,这个连接深度网络和符号化规则的桥梁是很傻很天真的,它们试图将两个抽象距离很远的、几乎不相关的世界融合到一起。 根据我的研究经验,我认为在这两个世界之间可能存在着一种多个层次的概念混合连接符号系统。这些符号系统能够逐步地对输入的数据进行更抽象的提取,并且输出一些更加抽象的符号信息以提供给后续的操作。我觉得这个桥梁能够自动实现识别任务和执行规则之间的关联和映射,而这种关联映射恰好就是人类能够理解的“常识”性经验。 然而在现在的研究中,深度学习和专家系统这两个系统都独立运行,它们之间的连接十分脆弱:深度学习的问题在于它无法独立解决所有的问题,而我们的问题在于无法为专家系统提供任何有意义、可被利用和理解的量化方法(可以参考CYC的失败案例)。换句话说,前端的深度学习网络功能太过单薄和单一,它无法执行任何复杂的推理工作;而专家系统的处理层级太高,它的性能会严重受制于所输入的形式化语言。在深度学习前端和专家系统后端之间,仍旧需要一些别的东西作为桥梁,来让他们彼此的交互畅通无阻。 4 深度学习和符号主义间的桥梁 我认为,想要将深度学习和符号方法完美结合起来,最需要解决两方面的问题: 第一,我们在脑中思考一个事物的时候,通常不会在乎它的细节,所关注的更多是它的高层次“符号”。 比如在说到一个人闯红灯的时候,人们脑海中的“符号”通常是一个人走在亮起红灯的斑马线上。没人会去关心ta是男是女、头发颜色如何、养的小狗是京巴儿还是哈士奇。但这些“符号”其实都只是数据的冰山一角,它们都是底层数据的抽象,是一种很高层次的对事物的描述。 我们会选择性地忽略很多低等级的符号信息,而更多的关注于所关心事物的高级符号。但是低等级符号信息的存在和利用仍然是算法数据分析的必要步骤。就比如在计算机视觉领域中,图像中天然地存在着描述事物阴影的特征存在,而这些特征是很低等级的,它们和最终的物体识别或定位任务可能并不十分相关。这些低等级的符号能够用于表达观察环境的动态稳定性、描述场景中运动的连贯性或者表示事物边界的所有权。这些低等级的符号对于系统的识别任务并不直接相关,我们也不会费心费力地用语言去描述它们,因此人们会自然地忽略他们、认为他们没有什么象征性。 既然我们不在乎这些特征符号,我们就不会将它们作为后续处理的依据:深度学习处理方法会给他们特别低的权重甚至直接忽略,而专家系统得到这些描述的输入自然也就没有意义。这些低等级的符号可能组合地描述出一些高等级的特征,但我们只需要保留并利用那些高等级的信息即可,不必将其保留并传给后续的操作。算法只要保留它们之间最基本的统计关系和统计计算结果就足够了。 第二,高等级的符号和对应的误差不会反向地传递给低层次的感知网络。比如我们的底层感知系统可能在同一个画面中检测到两个矛盾的物体(秦琼和关公),而基于规则的高级符号操作器一看,这个不对啊,这两位是不同朝代的人物啊,不可能同时出现的。但是即便如此,按照现在的技术,这个错误检测的信息也无法从高等级符号操作器返回给低层次的感知网络来帮助修改它,甚至这个信息都没能用来给感知网络做消歧或找到错误根源。但其实在人脑的构造中,我们拥有这种高等级向低等级的反馈机制。在无数的粗加工符号特征的基础上,我们不断地试图修改感知和意识模式,从而消除感知内容上的歧义和冲突。 但是回到神经网络上,这种高低级处理系统上的通信的不连续性会导致很多问题,即使我们将传递的抽象符号加以调制,但它们在抽象世界中所表达的意义和所代表的事物仍然有可能相去甚远。尤其是在深度网络中,想要解释一个特征或者高等级符号的意义十分困难,因此相应的消歧或冲突的解释则更是难上加难了。 这就是我认为这种高低层次间混合的方法无法跨越“常识”障碍的两个最主要的原因。虽然在实践中我们能够偶尔看到一些成功的混合案例,但是它们都是基于特定领域的人工智能应用,而且好像如果我们不混合的话,也没别的更好的解决办法了。说真的我并不反对这种做法,前提是这么做得确实行之有效才行。 5 关于人工智能发展的建设性方法论 那说了这么多,我们现在如何将其进行转化呢?它到底能不能在工业界、在生活中得到广泛应用呢?在谈论这些之前,我们要知道人工智能的实际应用有两种重要的思路:第一种是工业界中广泛采取的办法,就是以实际需求和商业需求为驱动的发展和应用;而第二种是以科研机构和高校为领头羊的科研路线,这种路线相对而言更加困难,投入也相对更加长期。 我们千万不要将它们混为一谈,它们是两种截然不同的思路,甚至彼此对对方的态度都略有鄙夷:在工业界打拼的应用人员眼中,研究所里的老学究们整天都在捣鼓一些不切实际的问题,灌水刷分乱尝试,投入大量精力做了一堆没用的科研产出。而在研究所的老教授眼里,这帮在公司里成天咋咋呼呼有病乱投医的程序猿们太过粗鄙,得过且过地摆弄着一些陈芝麻烂谷子的技术,堆砌地以KPI为目标完成任务,麻麻赖赖、不圆润! 我们要知道,其实两者各有利弊。科研是先锋的,能够从根源上近乎完美地解决很多世纪难题,但是它的转化率极低,一千篇论文中有一个能够得到广泛应用就已经谢天谢地了。而工业界是实干派,要求一打一个准儿,尽量弹无虚发,但是它的应用和理论基础就显得十分薄弱了,可优化的空间和漏洞也会不免避免地增多。 所以我们在未来可能会发现一个很无奈的现象,就是科学方面的大多数成果都不能得到商业化;而那些商业上取得了巨大成功的方法,在科学家的眼中看来都是一些相当愚蠢的垃圾(就像建筑师眼中的Frankenstein式建筑,它虽然十分实用,但没有任何独创性设计,仅将古今中外的建筑风格融为一体) 1、AI 如何商业化? 如果你想将一项人工智能技术实际应用于商业项目中,你首先需要踏踏实实地审视这项技术,并扪心自问:这个技术能干嘛、它真的适合这个工程场景吗?咱不能为了炫技而忽略了实用性。 我们知道,机器学习技术从本质上来说就是统计学,所以统计学具有的问题,机器学习也不能免俗。虽然发展到现在,机器学习方法已经能够实现很多人类手工或者通过符号系统很难解决的任务,但是机器学习方法有时候还会莫名其妙的“抽风”,出现一些不可预测的失败。而且只要我们的输入样本稍微超出了系统训练时的学习范围,那机器学习模型就会对“超纲”的内容十分敏感和脆弱。 其中一个很典型的例子就是计算机视觉中有名的对抗性例子:我们只要对输入的图像进行一丁丁点点的扰动,比如增加无规则噪声、叠加不明显的其他图像轮廓等,那深度学习模型就会变得极其不稳定,预测出一堆奇奇怪怪的结果。所以综上所述,我们总结一下机器学习模型能够解决和不能够解决的任务: 不论是多么高大上的机器学习模型,都是有其局限性的,它会对实际输入的某些“超纲”样本产生不稳定甚至错误的预测,除非你能在训练模型的时候就让模型将所有的情况充足地学习到,而且还得保证实际数据分布和训练数据分布独立同分布(IID)。但如果你要能真正保证这一点,其实一些简单的机器学习模型就足以胜任了,比如那些本来就足够强大、足够聪明的特征提取方法,加上支持向量机(SVM)或者随机森林(RF)就行了。或者更极端一点,你甚至可以通过自己写规则算法的方式实现同样的目的。 我们先假设任何基于机器学习的模型都会产生一些错误,这些错误可能只有百分之几的出现概率。那我们首先要做的是确定这些错误是平均错误还是复合错误。如果它是一种平均错误,那还好,你的这的模型还是可以应用的。但是如果这个错误是复合错误,比如大多数的工业控制和机器人项目中出现的那些,那很抱歉,这个模型很可能就要GG了。 错误的多少是一方面,错误的严重程度和它引起的后续问题也需要深思熟虑。如果这些错误都是一些关键性的错误,比如一旦犯错会造成巨大的经济损失和名誉损失,或者这个错误会造成不可逆的伤害,那咱们还是得多多慎重!所以当一个错误是不可逆的、还无法将其平均化、这个模型还部署在一个开放的环境中,各种各样的奇葩数据都有可能接踵而来,那老铁,咱们的项目可能就会被它搞得一团糟。所以这也是我一直不看好自动驾驶汽车的原因,因为它就是这么一个部署在真实开放环境(大马路)中、会随时造成不可逆后果(车祸、违章)的、用人工智能控制(别瞅别人,特斯拉说的就是你)的典型案例。我们从一些商业报告上能够看出,所有这些自动驾驶项目的回报率都在持续下降,而他们对应的实用性都很低,更不用说他们低的可怜的商业可行性了。 但是话说回来,如果这个错误是可逆的,而且代价不是那么高,那这个技术就还有实际应用的机会。就比如说我正在研究的无人超市场景。在超市里面,即便我们的监测系统出现了错误,这个错误也没什么大不了,充其量是丢了个东西,更何况工作人员可能在顾客出门的时候发现这个问题、在清点货物的时候纠正这个问题,或者在顾客反馈的时候把这个钱给补上(谁那么傻哈哈)。而且即使这个系统惨到只有平均95%~98%的识别准确率,那我们的超市仍旧是能够盈利的。在印证无人超市的经济可行性之前,它也无需遵循报酬递减的渐近线就能达到99.99999%的可靠性。可谓是一个很完美的人工智能应用场景。 值得注意的是,在目前的产品中,深度学习一般都仅应用于那些“非关键”的任务中。比如当你使用谷歌图片搜索施瓦辛格的时候,偶然出来一张成龙的照片,没啥人会太在意;当你使用谷歌翻译的时候,偶尔得到一段废话,也没啥人上心;如果在浏览器的广告框里出现一些你根本不关心或者已经买过的产品的时候,你可能看都不看一眼;而当你的自动填充表单里出现一些奇奇怪怪的内容的时候,你八成会删掉他们重新填写,无所谓;还可能当优酷推荐给你一些无聊的电影的时候,你也只会轻轻一笑,嘲讽一下这个傻缺推荐系统。 所有这些任务都是不重要的,都是“非关键性”的东西。但是,当你的特斯拉径直撞向路边一辆无辜的消防车的时候,那才是一个大问题呢! 对了,我还必须要说,现在学术界有个风气,就是尝试用算法来减少传感器的成本。比如一个本应该用5个摄像头完成的任务,某个技术说我提出了个blabla高级网络架构,用4个就能达到几乎同样的效果,降低成本啊老铁,我厉害吧。 但是我的建议是,如果咱不缺这点儿钱,就千万别阉割传感器和数据源。这些声称自己多么厉害的技术通常只在个别数据集上进行了验证,它的适用性、鲁棒性和计算成本都有待商榷。一个传感器少则几毛钱,多了也就几百块钱,增加不了太多的成本。但一不小心省了之后带来的麻烦可能让咱们吃不了兜着走。 举个例子,对,还是特斯拉。在自动驾驶车上,激光雷达传感器是一种及其稳定和可靠的信号源,它能用来测车距、车速之类的,它就像汽车的眼睛一样。激光雷达的价格也不是那么贵,现在你随随便便花买个iPad都自带了固定式激光雷达,汽车级的激光雷达器也没贵到哪儿去,几千美元怎么都能下来。但是埃隆·马斯克这位大哥固执地想将它去掉,想用炫技的算法仅利用摄像头就做出同样的感知。结果怎么样,玩儿砸了,特斯拉引起的车祸付出了人命的代价,特斯拉也因此被告上法庭。 有的读者可能会说,几千美元也是不少的钱了,人家为了节约成本嘛。但是大哥您这可是售价上百万的跑车啊,随便一个轮辋就不止几千美元了,省这个钱实在是让人想不通。咱们退一万步说,就算你的工程师十分十分确定说激光雷达器没用,视频能100%的达到同样的效果,那如果你先不取消掉它,让它在你几百万几千万台车上采集数据,悄悄发回给你的后台,你不就有了更多的标定数据了吗?用这些标定数据你不就能更可靠的提升视频模拟激光雷达算法的可靠性了吗?等回头当你们采集到各种路况、各种天气和各种奇葩场景下的数据后,并且100%的确认激光雷达器可以被撤销的时候,你再淘汰它,这样不是更好吗?为了节省这一台几千美元的小钱,而让顾客付出生命的代价,又要赔钱又要损失声誉,得不偿失啊! 总之话说回来,我们可以通过多部署传感器(起码不阉割)的方式轻松解决很多需要人工智能才能达成的任务。在实际中你会发现,其实传感器的成本很低,在你庞大的利润和声誉积累面前低到可以忽略不计。它们不仅可以让你拥有更加充足和全面的数据,也能让你在解决问题时更加的游刃有余,从而提升机器学习模型的性能。 2、AI 科研怎么做? 熟悉我博客的童鞋可能知道,我的文章一共就有两个主题,第一个是介绍最新的科研进展,第二个是Diss那些傻缺的伪人工智能技术。说起这帮缺心眼儿的家伙我就来气,但是今天咱不跟他们置气,把文章的重心放在更有建设性的科学方法和科学思路之上。至于那些看到这里跳脚骂街、胡说八道的家伙,如果您用的Windows请按Alt+F4、用的Mac OS请按Cmd+W、用的iPhone请双击home键上划,出门左拐慢走不送(咋没安卓?因为我没用过……)。 那么说起如何高效地建立和使用机器学习方法,一个比较科学的方法是建立起一个高层级的符号表示方法,人类能够自发地理解和操控这些符号,系统也能够根据后端的反馈和变化积极地调整自身结构和参数,从而形成良性负反馈的“机器学习系统”。所以在这样的系统中,一个重要的步骤就是后端向前端的反馈,以及大量的反馈重复。 换个角度,这样的科学发展观可以被看作是在原本自下而上的机器学习链条中引入自上而下的推理步骤。因此,为实现这一目标,我推荐大家使用以下的几个步骤: 首先你不要总是关心基准结果(Benchmarks)。基准结果仅在我们十分明确任务的目标,并仅关心要评估的标准时才有用,它不是驱动我们设计人工智能算法的终极目标。在目前的计算机视觉领域,那些所谓的基准结果在很大程度上都是饱和的,或者说是有失公允的。它不能正确地指引我们设计出既合理又合适的算法结构,也不能指引我们正确地找到需要去优化的任务目标,它们只是刷分和炫技的成绩单而已。在一些已经研究烂了的场景,比如ImageNet数据集上,人们可以有效地进行物体识别,但是对于其他计算机视觉场景和数据集来说,它们的发展还相当初级。 对于那些刚刚进入科研界的小伙伴们来说,他们需要证实自己的舞台,需要展示自己的竞赛,需要炫技来让大家记住自己的机会。那这个时候,他们唯一的办法就是在论文中疯狂刷分,以基准结果作为目标,想尽一切办法对它进行哪怕0.01%的优化。在他们眼中,最重要的是得分,基准结果就是终极目的。他们几乎不去关心算法的创意,只要是能从剩余的基准结果中榨取哪怕一丁丁点点的剩余价值,都是值得的。 所以很多大型科技公司使用很多奇葩而略显龌龊的方法疯狂刷分,比如动用成百上千块的GPU进行愚蠢的元优化(Meta-Optimization)操作。这样的操作的确能带来精度上的提升,但是它不普适,性价比太低。这就好比职业游戏玩家的处境一样,他们在能够自由操控游戏角色撒欢玩耍之前,一定要经历成千上万次的基本功练习,重复某些枯燥而乏味的基础操作,比如站在固定位置有效击打目标敌人、以0.1m/s的移动速度有效击打目标敌人、以0.2m/s的移动速度有效击打目标敌人等。我的天,这是受罪还是玩游戏啊。 同样地,在学术界中,以Benchmark为目标的刷分型研究,也只是一场无用的军备竞赛。 尽量选择那些在抽象层级上跨度较小的任务。图像分类任务其实是一个在抽象层级上跨度很大的机器学习任务。我们需要注意,机器学习算法所接触到的数据只是我们喂给它的X和y,算法对X和y之间的关联以及各自集合之中的主观联系一无所知。它没有像人类一样在社会中摸爬滚打所积累下来的前置知识。 比如计算机的输入图像如果只是那些毛茸茸的真猫的话,当它面对一只用泥捏的猫咪雕像的时候肯定一脸懵,认不出来。它甚至也无法识别出画家精心绘制的小猫草图。在算法的眼中,它不知道喵星人是什么物种,不关心它们怎么叫、怎么睡觉怎么看不起铲屎官,也不知道那些跟猫有关的社会和环境关系。 这些藏在人类潜意识中的前置知识不会出现在训练集合中,也就不会出现在机器学习的网络模型中了。就算训练集中偶尔包含了这些环境信息,如果我们设计的算法没有将这些信息以损失函数的形式提供给模型进行训练的话,它们也会被忽略。因为这些隐含信息和目标识别任务的跨度太大,相关性太低,有限的参数和权重会被优先用于检测那些关联性更强的特征,比如图中的物体有几个鼻子几个眼,小爪子粉粉真可爱之类的。只有这样,模型才能增加算法识别的性能,也才能够让模型获得更好的增益。 下面举一些有意思的例子,来说明在哪些任务场景中的抽象级别跨度较小: (1)自监督的图像着色。我们可能会看到很多老旧的照片,由于当时摄影技术或成本限制,这些照片都是黑白的,没有颜色。那我们可以通过自监督的图像着色技术来让这些老伙计们焕发出本来的色彩。 在训练这样的模型的时候,我们可以用手机拍一些彩色的照片,然后P成黑白色,将它们一起输入给网络来教会它进行颜色恢复。这个技术并不新颖,也有很多成功的应用,但这不失为一个很好的练手项目。对了,在模型训练完毕之后,我们可以运行一个对比程序,来查看自动着色的结果和原始图片之间的差异。我们可能会发现,虽然自动着色的图片和原始图片之间存在一些差异,但是它们也很好看,也很自然,虽然不完美,但是足够合理,也足够能用。 (2)基于上下文的缺失数据填充。我们知道数据无处不在,但是由于传感器采样频率、采集故障或者传输存储等问题,数据中通常存在一些缺失问题。为了保证数据集的可用性,基于上下文的数据填充就是一个有必要的应用。与其他场景不同,在这个应用中,模型需要学习和输出的不再是一些高层次的标签了,而是一些比较低层级的原始数据。这些原始数据也可以被称作“前象特征(Pre-symbolic)”数据。 (3)学习数据产生的规则,并且创造一个对应场景的数据生成器。这种应用其实比较复杂,因为我们需要去产生尽量贴近实际情况的伪数据。在计算机视觉的场景中,我们可以通过计算机图形引擎来生成一些合成数据,但是这些合成数据毕竟是基于规则的,其真实性还是不能和镜头里的真实图像相提并论。我不太确定这个方向有没有人试过,但是肯定很有意思。 (4)检测场景中的不和谐数据以及奇葩数据。在(3)的例子里我们训练了一个数据生成器。那反过来,为了检验数据的合理性我们也可以设计一个数据合理性的检验器(有点类似GAN的思路哈)。比如在计算机视觉的场景中,如果大多数图像的影子都朝向东边,突然有一只小狗的影子朝南了,这种不和谐的特征就会被算法捕捉到,并且触发识别响应。 (5)检测镜子和镜像。在镜子面前我们习以为常,我们怎么动,镜子里的象也会怎么动。我们知道镜子的物理性质,知道它独特的反射规则。所以在照镜子的时候我们很轻易的就能将真实的物体和镜子里的物体区分开(作者你是真没撞到过镜子墙吗……回忆起来我鼻子就疼)。但是对于深度学习网络来说,区分物体和镜像就没那么容易了,但是一旦训练成功,你会觉得特别神奇。那为了训练这样一个深度模型,我们还是需要大量的新数据,而这些新数据也是能够通过渲染软件轻松获得的。 (6)检测图像的对称轴。跟镜像的场景很类似,但在这里我们要检测的是输入图像中是否存在着一个明确的对称轴。就比如下图中,左边的这张图里就有一个斜向左下的对称轴。对称轴右边的图像是正常的,对称轴左侧则是右边的对称像。这个识别任务在人类的眼中简直是小儿科,只需要草草一瞥,分分钟就能找到对称轴。 但是这个任务对于深度网络来说还是有些困难的,因为从低层级原始数据的角度来看,这种对称的关联不易被捕捉到。模型需要组合若干底层的特征组合形成几何级的中高层特征,并从中高层特征的角度对输入图像进行审视才能发现对称的中心和对称轴的方向。我觉得这个场景挺有意思的,准备自己动手试试实现一个。虽然我没具体调研,但是我敢肯定现在已经有的计算机视觉深度网络都会在这个任务面前败下阵来! (7)随便再想一些类似于上述场景的任务,然后将它们集成在同一个网络结构中。 (8)我不确定现有的深度学习结构,比如CNN,能够不能检测出来f中的对称轴。因为卷积神经网络更擅长于检测局部的特征,而对称信息有可能无法通过局部特征进行有效的表达。太过局部的感受野可能会导致跨越距离较远的对称信息的遗漏。所以这种需要利用跨越空间关系的镜像检测任务可能很难被找出来。如果非要检测出这种以特定几何分布所表达的模式,网络则必须具备序列检测、多帧检测的能力。这就引出了网络模型对于时序信息的处理问题。 (9)人类在面对图像信息时的处理和学习方式不同于深度网络。在我们的眼中,图像是能够在时间轴上展开的,它有着时间特性。而且很有可能深度网络无法实现与人类相同能力的对图像的高层特征组合。在人类的眼中,我们能够得到视频流和某些特征随着时间组织的结构数据,而深度学习网络目前还不能达到同样的水平。 因此目前来看,一个很有前途的研究方向就是尝试进行时间预测,或者将时间和空间预测进行某种意义上的组合。但是这种预测结果的意义是什么呢?这值得思考,因为深度网络目前还没能跟人类一样产生类似或者相同的高层次的组合特征。所以我的观点是,这个模型的研究还是很有必要滴,但是更要继续讨论和思考它所能做的事情是什么、它所产生的结果的价值和所优化的对象到底是什么。 不论如何,我觉得上述这些任务都是推进深度学习发展所必须经历的。但是结合深度学习的现状以及它们所能达到的性能来看,这方面的研究确实还处于十分初级的阶段。所以说,祝你好运老铁,祝你能找到金主来支持你的研究。 其实,在某种程度上,终有一天人们会发现,现在这些深度学习方法怎么都这么差劲,不行,我们还得回到起点,从根源上创造我们的人工智能系统(别太偏激啊老铁,我只是说现有的大多数所谓的深度学习技巧和优化方法都将失效,而那些经典的结构和思想,比如反向传播将会永存),但是谁知道这波革命什么时候到来呢。 6 结语 深度学习并不神秘,它也只是程序猿写下的一行行代码,也只是我们构建计算机程序的一种方式(而听起来神神叨叨的“人工神经网络”也只是我们给它起的一个通俗易懂的名字而已)。 从某种意义上来说,我们现在所说的机器学习跟80年代出现的那波基于形式逻辑而热起来的人工智能浪潮截然不同。由于算力、统计学和研究思路等客观原因,那波浪潮在80年代落寞了,而后就引发了我们常说的人工智能寒冬。 而时至今日,虽然深度学习技术在很多非关键性的应用中获得了巨大的成功,但是由于它本身所固有的统计学特性,导致强大如他也无法100%可靠地完成所有任务。正是因为这一丝丝的不可靠性,人们还是无法放心地将它应用于所有场景中,这就有可能会导致人工智能领域的第二次寒冬。 符号主义类的人工智能擅长于处理推理,深度学习类的人工智能更加擅长于处理识别,二者在某种程度上是对立的,但换个角度来说它们又都是互补的。在实践中当我们将两者结合起来的时候,这个结合体虽然没能像人类一样拥有更加完备的人工智能,但也产出了一些很有趣的、能够成功应用于特定领域的应用。 在我看来,如果想让人工智能模型产生和人类一样的智能处理方式,并学习出所谓的“常识”的话,我们需要利用连接主义的设计思想,让系统内部自行开发出一套内在的符号主义系统。利用这套符号主义系统,人工智能模型可以发展出自己对外界的事物认知、对外界关系和行为的表达。为了达到这一目的,这个人工智能系统需要长时间地“泡”在真实世界中,无时无刻地接收来自外界的输入,并且以某种方式表示和编码输入的特征。这简直是个玄学,因为目前没有任何工作、也没有任何人能做到这一点。 而可悲的是,目前大多数的所谓人工智能研究人员甚至都没有兴趣承认这个问题,他们满脑子都是刷分刷分、paper paper。 另一方面,其实人工智能也在被自己的成功所绑架,它甚至成为自身成功的牺牲品。 人们在本次深度学习爆发之初惊叹于它的能力,于是投入大量的资金支持它的发展。昂贵的投入形成了巨大的沉没成本,也进一步让金主爸爸们对这个领域充满期望。这种金钱与信任的循环导致了人们被迫地给予深度学习极高的信任,即便研究人员和从业者都对这种名不符实心照不宣。 不过话说回来,如果不是这种高额的投入和极高的期望,人工智能研究可能又会很快进入下一场寒冬,重复着自1956年就开始的循环诅咒。 来源: AI 科技评论 |