最近深度学习的著名批评者Gary Marcus 发表了一篇牛文, The next decade in AI, four steps towards robust AI . 指出未来AI发展方向。 再此给大家总结客串。
这篇文章可谓是作者思想的集大成者, 讲述了当下的深度学习如何可以整合经典符号主义AI的思想, 让整个系统变得更加稳健, 具有真正智能体的泛化能力。
首先我们都知道深度学习最近遇到了很多的困难,所谓深度学习寒冬论此起彼伏。 而其中最根本的问题, 莫过于个深度学习在数据的变化面前十分脆弱, 很容易被加入的噪声糊弄。 如何改善这个问题? 深度学习大牛们其实给出了很多解决方案,比如加入各种各样的dropout, 在训练中进行各种数据增强, 进行复杂的对抗训练。 但是这些其实治标不治本, Gary Marcus这个符号主义大佬则提出了一个治本的方法, 那就是重启符号大法, 让AI真正掌握人类的知识。
我们来跟着大牛的脚步阅读下这个文章。 首先当下的AI可以被称为狭义的AI。 他们的根本问题是从数据里挖掘关联性, 而不是因果。 比如视觉系统难以理解一个翻倒的车还是车, 只要训练集没出现过。
还有比如著名的自然语言处理模型GPT-2 , 它可以给你一段很像人话的话。
然而一旦问题再问一步结果就开始啼笑皆非。 比如以下非常基本的问题:
一个更可怕的例子则直接击中神经网络软肋:
你去看上面的表格, 发现这显然是f(x)= x 这个函数 , 然而在神经网络眼中, 这个测试结果变成了这样
明眼人一看就明白, 这里的问题是神经网络无法把学到的东西泛化到和训练集统计规律稍有区别的地方, 比如说当最后一位变成1它就傻了。 或者说深度学习终归属于统计学习, 独立同分布对于它来说就是生命线,脱离了它神经网络什么都不懂。
这和人的泛化能力有着实质的区别, 因为人能够一下子就学到这个f(x)= x的关系。
为什么人会有这种能力, 仔细思考你会发现我们的大脑本来就善于发掘一些东西, 比如加减乘除法, 各种有时间先后事物间的因果关系等。 这就好比我们的大脑里早就配备了一系列的先验算子。 它们帮我们理解了这个世界。如果不具备对f(x)= x这种关系的先验, 我们几乎无法想象神经网络可以自己发掘这种规律, 是不依赖于具体的统计区间而存在的。
那么如何赋予AI这种能力?Gary Marcus代表的符号主义AI提出了一个切实可行的道路,就是利用符号和它的一套操作系统, 重新把知识和模型教给神经网络。 这个过程分为四个步骤:
1,规定知识的基本形式
2, 能够把基本知识整合成无穷多知识(涵盖整个世界)的操作系统
3, 通过知识组成成模型
4, 利用知识和模型进行认知和推理
我们来看这四个步骤的分别有哪些内涵
1, 规定基本的知识形式 :
我们知道, 这个世界的任何概念和事实, 都和其它的概念和事实相连接, 如同盘根错节的一棵大树。 如果让AI真正学习一个人类世界的概念, 完全脱离这棵知识树几乎难以想象。 就像你给CNN看了再多的小狗, 它也无法理解小狗是嗷嗷会叫的哺乳动物。
那么我们必须植入这棵知识树。 然而人类的知识汗牛塞屋, 如果一个个都放进去这是不可能的任务。 我们就需要注意知识本身的层级。 人的知识既包含那些只有维基百科里出现的知识比如某国家的首都, 也包括一些连我们自己都说不出的基本常识,比如什么是运动。 所以我们可以把这些知识分成几个层次: 1 最基础的关于世界物理结构的先验, 比如物体的概念, 平移旋转等运动形式 2, 具体的事物和概念, 类似于知识图谱的形式 3, 关于抽象结构的知识, 如各种逻辑关系, 代数, 语法,一些基本规则。
我们说1是最基础的也是最深刻的, 这些对事物的理解, 比如什么是空的, 什么是实的, 什么是运动, 什么是静止, 如果AI系统无法表达这些知识, 很难可以想象它们可以理解任何其他东西。
而2则非常像之前知识专家搭建的专家库,后来演化成知识图谱。 最有意思的当属3, 因为这里的有些内容可能连人自己都不难么熟悉,事实上这些知识可能包含基本的代数, 语法,和逻辑规则, 甚至包含因果关系本身。
2, 关于知识的操作系统
有一个显而易见的问题,就是除了1以外, 2和3 都太难了 ,因为人类的知识实在太多了, 人类实际是靠组合最基本的知识得到更复杂的知识, 因此事实上真正需要掌握的知识就没有那么多了。 可否让AI也具有类似的能力?这就需要一个关于知识组成成知识的工具系统,并且有一套调用工具的方法。 其实这已经是在说一套操作系统,知识的操作系统。 那么什么是最清晰简洁的操作系统呢? 其实研究计算机编程的人已经给我们提供了一个很好的范本。
我们说套操作系统要包含的最小算子有variable binding设置变量, instance实例化, 和一系列变量间的基本运算。这就好像我们的面向对象计算机编程,都包含“类“”这个最基本的东西。每个类都如同一种容器, 有一系列变量作为内存里的占位符, 和一系列算子operator和函数规定它们可以如何被操作。
我们说一个典型的实现在大脑里实现这类操作的例子是VSA , vector symbolic achitecture(向量符号框架) ,一种针对高维神经向量(大量神经元的活动)的符号运算框架 。 这个框架仿佛是用神经科学方法实现的计算编程框架。 我们知道大脑接受的一般都是序列输入, 这些输入在VSA框架里, 序列会首先经过chunking区块化成为一个个符号, 当然具体如何chunking这涉及感知部分的学习, 也不是这里的重点。 chunking后的一个个符号,可以和大脑预先已经存在的一些“类”结合,经过某些特定操作, 最终形成各种组合表达(如同类的实例化)。
Calmus, Ryan, et al. "Structured sequence processing and combinatorial binding: neurobiologically and computationally informed hypotheses." Philosophical Transactions of the Royal Society B 375.1791 (2020): 20190304.
哪些算子是最基本的? 这里给出了乘法和加法,这两种算子都可以把符号A和B整合成一个新的符号AB(binding),区别是加法实现的形式很简单基本是两个神经激活向量激活的叠加。加法表达得到的AB跟A和B都高度相关,但是往往过于稠密, 加几次后我们可以想象就会超过容纳范围。 而通过卷积定义的乘法就比较少有这个问题,因为如此得到的神经向量会更加稀疏,是一种reduced representation , 同时它正交独立于A和B向量。 更加关键的是, 我们可以通过定义反卷积, 把AxB的结果通过反卷积,还原为A或B,这无疑极大的扩展了这种算子的可用性。
当然在序列问题里不同算子发挥作用需严格遵循一定的时间调配。 而SNN脉冲神经网络可以精密的控制这些算子的释放。比如上图中的P1就是一个脉冲神经网络, 它的作用是精确的发放脉冲,然后通过脉冲控制算子的开合,比如通过一个脉冲神经网络的波峰来启动乘法, 或者通过SNN的相位差把不同算子在时间上分开作用, 或者通过同步把不同符号或算子同步到一起等。
不要小看加法和乘法的力量,通过这两种最基本的运算, 我们可以把不同的符号整合称结构化的关系表示。 我们知道对于生物学习语言,音乐等最最基本的结构信息就是不同符号出现的先后顺序,通过加和乘我们可以非常有效的表达这种关系。 这里作者提到我们需要一组空的占位符来表达这种先后关系, 比如1, 2,3,这些占位符就好像我们的一种基本的先验模板,或者数据结构,它代表了我们对顺序关系的理解。 它们可以吸附任何具体的符号来构建一个实在的关系(如同类的实例化)。 具体这种吸附的过程就是用乘法binding , 如1xa , 2xb,把a和b吸收到1和2两个空的容器里。 然后我们在用加法得到一个联合表示如1xa+2xb。
那么问题来了, 这时候得到的结构是对相邻符号处理得来的。很多时候,我们需要选择性的忽略一些信息, 比如你听一段话, 你会听收尾的关键内容,而忽略中间冗余的信息。那么这时候我们就要加入一个新的运算,类似于注意力的机制,又称为saliency mapping,跳过中间的一些内容, 或者把他们都记做x,然后得到一个带有跳跃的联合表示如axxb。
如果我要表达更复杂的层级关系呢? 而层级结构被认为是组合复杂概念的最最基本的东西。没关系, 我们还是用类似的思想, 在抽象结构里用两组表达序列顺序的额占位符, 一组表达第一层次, 另一组表达第二层次。 在第一次层次的位置。 我么得到1xA1 + 2xB1 和 1x A2 +2xB2, 在第二层次我们用另一组算子1c和 2c 把这两个新的符号加和到一起,形成一个层叠表达。
VSA是一个典型的操作算子的例子,有了它,我们可以很容易的整合不同的算子形成统一的表示。 同时这也意味着,我们需要预先划出一部分神经网络表达这些抽象结构, 比如1,2,3这种占位符。 它们其实就是符号主义的精髓,也就是通过一些抽象的框, 把真实的感知信息加载进去,而这些框之间的运算非常灵活,具备和任何具体事物结合的全能性。某种程度,这就是我们实现类比的方法,不同感知信息背后的结构仿佛是同一的。
3, 进一步加入世界模型
有了操作系统, 知识就不再是零碎的知识 ,而是被组合成世界模型, 在不同的情景下被调用 。 世界模型的本质特征, 是对任务的基本属性进行建模, 从而具有对未来情景的预测能力。 当然这些基本特性是高度依赖于任务的。比如在导航的任务里, 这些基本特性可以是位置的预测和对迷宫边缘形状的记忆。
如果能够把模型加入到当下的深度学习系统里, 将会对当下的深度学习范式产生一场革命。 比如说免模型的DQN将成为有模型强化学习, 自然语言处理将成为真正的具有逻辑的自然语言理解, 而图像处理也会由于加入对视觉的理解而真正变得鲁棒。
4, 推理
在模型的基础上, 我们就可以达到最后一步, 推理。 推理本质是一种基于知识和模型的推断。 它们的基本组成包含事实,各种常识, 和模型。 不同的人基于同样的事实会得到不同的结果,这是因为他们的背景知识和模型是非常不同的。
比如文中举出了如何让机器理解罗密欧与朱丽叶的剧本的例子,这个例子的主要含义是单纯基于对话语料训练是不可能得到真正的理解的。 因为我们发现语料虽然只有那么几句, 但是背后需要用到的背景知识却是它的几倍。 这是说明如果我们要达到真正的自然语言理解, 需要一个模型把这些隐形的常识和世界运行的规则都包含进去, 否则都做到真正的理解是不可能的。
最后我们说说推理在视觉理解的例子, 比如下面那个图, 其实是一个茶壶, 如果交给当下的CNN去做分类, 它可能无论如何可以去分辨它是茶壶。 那么如果我们要做一个能够做到这点的AI,我们必须做到一个具有背景知识和模型的AI,比如它需要理解: 1, 什么是物体, 物体是一个占据一定的时间和空间的存在。 2, 物体的基本属性,它们不可以在时空重合 3, 物体占据的空间是三维的。 4, 液体可以进入和填满一定的空间。 5, 一个容器是一个包含了一定内在空间的物体。 6, 它往往有一个朝上的开口。
大家看到这个过程的复杂,这是把刚刚说的几种基本的知识形态, 物理先验, 常识, 关于关系的知识,都融合起来,并通过模型的调配,形成整个一个认知过程。 这也是一个层次化的系统, 从时空, 到物体, 到物体相关的操作, 达到最终的概念。
深度学习和符号主义的融合
虽然这看上去像是一个不可能的任务, 但是事实上当下的很多深度学习研究,已经逐步把这种思路融入到这个思维体系来, 它们或多或少的处于纯粹符号的AI, 和目前完全无模型的深度学习的某个中间位置。 比如说各种模块化系统, 关系网络, 一些图网络, RIM(独立因果RNN)等。
举几个典型的例子 :
这类网络在图像理解这样的具体任务里效果远超一般的深度网络。 比如下面那个有不同几何体的图, 让神经网络回答图里左边柱体的大小是个困难的问题 。但是结合了CNN和LSTM的关系网络回答自如。 这种模型正如整合了深度学习的感知能力和符号主义的认知能力。
2. GNN
图网络被认为是一种非常适合的嵌入符号系统的工具, 我们可以把系统里的每个符号当作节点,符号和符号的关联当作边, 然后学习整个系统的相互作用。 这个系统已经被Deepmind拿来研究物理这类的作用力系统。
符号主义AI在实际生产中的应用:
1, 加入符号可以极大的改变系统的预测性能, 把AI和真实物理引擎相结合。 比如在视频预测等任务里提高性能, 比如下图是一个台球的运动过程。 我们如果把台球的基本作用关系作为符号让深度网络学习, 那么预测台球的运动变化变得不那么困难, 否则单纯基于RNN和LSTM的模型将做的很差。
2. 加入符号可以极大的提高AI的可解释性:
比如我们知道CNN代表的视觉网络是个黑箱, 那么如何让这个黑箱变得可解释? 我们可以让CNN网络直接把图像变成一系列可解释的符号 。 你可能觉得这不就是region proposal或图像切割? 实际不是的, 因为我们想要得到的符号可以代表一个世界的最小语言体系, 检验它的最好标准是得到的符号能否让我们复原图像。 这有点像一个自编码器的概念, 但是比自编码器要更容易解释。为了做到这点,我们可以把解码器替换成一个传统的图像生成引擎, 它本身就是基于人工设定的符号, 只有我的CNN能够输出这样的人工设定的符号, 传统解码器才能work。 这样的模型可以得到完全可解释的视觉系统, 在各种需要说明如何work的视觉系统里, 无疑会发挥大用。 具体pipeline如下图。
以上是我根据Gary Marcus的研究客串的总结。 这个研究可谓是Gary Marcus集成其思想体系的大作, 不仅指出了AI的发展方向, 也帮助我们理解了自己的认知体系。
最后我们可以扫一眼其引用文献之丰富,可以说包含了从经典的符号AI到脑科学到深度学习的全部,而且都是一般深度学习者所不知的一些内容: