编者按:研发出AlphaGo的Google DeepMind团队上个月在自然杂志上发表了一篇论文,公布了其名为可微分神经计算机(differentiable neural computers ,DNC)的新AI模型。这种新模型的最大特点是在神经网络基础上结合了存储(可处理数据),并且结合了深度学习与强化学习,在没有预先编程和先验知识的情况可以通过训练和试错得出正确答案。凭借着对类似图这样的数据结构的记忆,DNC能够自主回答伦敦地铁两站间的最快路线,以及回答Alice的叔祖父是谁,或者解决移动拼图这样的问题——这样的DNC有大脑(内存),会从错误中学习,能进行推理,已经有点像人了。DeepMind团队对它的机制进行了解释,我们编译出来,供各位参考。
柏拉图把记忆比作蜡板,一旦在上面留下印象就会固定下来。他用现在所谓的可塑性来打比方——我们的思维是可以为被经历塑造和重塑的。但是我们的记忆之蜡形成的不仅仅是印象,而且还包括连接,从一个记忆到另一个记忆的连接。像John Locke这样的哲学家认为,如果在形成时间和空间上接近的话,记忆之间就会产生关联。这一点最形象的比喻不是蜡,而是马塞尔·普鲁斯特(法国作家,《追忆似水年华》作者)的玛德琳蛋糕。对于普洛斯特来说,长大后再品尝一口这道点心,相关的儿时记忆就如同决堤洪水般涌上心头。我们知道,这些情景记忆(事件记忆)靠的是人类大脑中的海马体。
现在,我们对记忆的比喻又经过了提炼。我们不再把记忆看作是蜡板,而看成是一个重构的过程,在这个过程当中,经历由一个个片段重组而成。记忆与动作之间不是简单的刺激与行为反应之间的关联,它们的关系是可变的,这要取决于环境和上下文。记忆知识的一篇简单文章,比方说,对伦敦地铁系统的记忆,可以用来回答“怎么从皮卡迪利广场去Moorgate?”这个问题,也可以回答“沿Northern Line往北走,紧挨着Moorgate的是哪一站?”这个问题。一切都取决于问题。记忆的内容和使用是分离的。另一种观点则认为,记忆可以进行组织以便执行计算。所以记忆更像乐高积木而不是蜡板,视手头的问题不同而可以重新组合。
神经网络擅长模式识别以及迅速的、反应式的决策,但我们才刚刚开始开发可以慢慢思考的神经网络——也就是说,可以对运用知识进行思考或者推理。比方说,神经网络怎么才能够把运输网络的连接这样的事实记下来用于回答问题呢?在最近发表在《自然》杂志的一篇论文中,我们展示了如何把神经网络和内存系统结合到一起,做出可以迅速存储知识的学习机器,然后灵活地对其进行推理。我们把这些模型称为可微分神经计算机(differentiable neural computers ,DNC),它们可以像神经网络一样通过例子学习,但也可以像计算机一样存储复杂数据。
在常规的计算机中,处理器可以对随机存取存储器(RAM)进行读写。RAM让处理器有更多的空间去组织计算的中间结果。信息的临时占位符被称为变量,而变量是存放在内存里面的。在计算机当中,形成可保存数值的变量属于很琐碎的操作。做出数据结构也很简单——跟踪包含链接的内存变量就可以得到其他变量。列表——可逐项读取的变量序列就是最简单的数据结构之一。比方说,你可以把一支球队的球员名字列表保存下来,然后依次读取名字。更复杂一点的数据结构是树。比方说在族谱当中,可以顺着子到父的链接读出所有祖先。图是最复杂也是最通用的数据结构之一,比方说伦敦地铁网络就是图。
控制器可以在内存中执行若干操作。在时钟的每一个计时单元它都会选择是否写入内存。如果选择写入,它既可以选择把信息存入到新的、没有用过的存储单元,也可以存到控制器正在查找的包含有信息的存储单元。这使得控制器可以更新存放在某个存储单元里面的东西。如果内存所有存储单元都用光了,控制器还可以释放存储单元,这跟计算机重新分配不再需要的内存很像。当控制器执行写入时,它会给内存中的选定存储单元发送一个信息向量。每次信息被写入时,存储单元都会通过链接的关联连接起来,用来表示信息的存储次序。
除了写以外,控制器还可以从内存的多个存储单元读取内容。内存可以根据每个存储单元的内容进行搜索,或者循着相关的临时链接向前或者向后移动,依次或者逆序回忆出写进序列里面的信息。读取出来的信息可以用来产生问题的答案,或者在环境当中采取的动作。这些操作共同赋予了DNC做出如何分配内存的选择,在内存中保存信息,以及一旦存储之后方便查找信息的能力。
DNC结构示意图。神经网络控制器接收外部输入,然后基于此,通过所谓的“头部(head)”利用读写操作与内存进行交互。为了帮助控制器浏览内存,DNC把“临时链接”保存下来,以便跟踪写入东西的次序,并且记录每一个内存存储单元当前的“使用”程度。
对于非技术读者来说,我们反复使用“控制器能”或者“可微分神经计算机……做出选择”这样的说法似乎有点奇怪。我们这么说的原因是,可微分神经网络计算机完全是从零开始学会如何使用内存以及如何产生答案的。它们施展了最优化的魔法来学会这么做:当DNC产生一个回答时,我们会将这个回答与期望的正确答案进行比较。随着时间的转移,控制器学会了产生出越来越接近正确答案的回答。在这个过程当中,它学会了如何去使用内存。
我们希望用问题来测试DNC,这些问题会涉及到数据结构的构造,以及利用这些数据结构来回答问题。图数据结构对表示可任意连接来形成路径和循环的数据项非常重要。在那篇论文当中,我们展示了DNC可以自行学会写下任意图的描述,并且还能回答与该图有关的问题。在我们描述了伦敦地铁的站点和线路之后,我们就可以让DNC回答类似“从Bond街出发,顺着Central线沿某方向走一站路,然后沿Circle线按某方向走4站,再沿Jubilee线按某方向走2站,最后你会到达哪一站?”或者针对“如何从Moorgate去到Piccadilly Circus?”这样的问题,DNC可以规划出路线。
DNC是利用随机生成的图(左图)来进行训练的。在经过训练之后,我们对DNC进行了测试,看看它是否能够对伦敦地铁(右图)进行导航。如上图下部所示,我们用(出发地,目的地,边线)三元组来定义地铁网络图。图中还展示了两类任务的例子:一个是“遍历”问题,也就是询问从某站出发沿一系列线路前进的走法;另一个是“最短路径”问题,要求找到两站之间最快的路线。
在家族树中,我们展示了DNC可回答需要复杂指令的问题。比方说,即便我们只能描述该网络的父母、子女和兄弟姐们关系,也能够提出类似“谁是Freya妈妈的叔祖父?”这样的问题。我们还发现,通过对控制器读取了内存中的哪一个存储单元来产生回答进行可视化,我们可以分析出DNC是如何利用内存的。我们用来进行比较的常规神经网络要么不能存储信息,要么学不会进行推广到新例子去的推理。
DNC回答家族树问题
我们还利用强化学习训练DNC。在这个框架下,我们在让DNC自己生成动作,但是从未向它展示答案。相反,我们会在它生成了一个很好的动作序列时给它打分(有点类似小孩玩捉迷藏的游戏)。我们将DNC连接到一个简单的环境,里面是堆在一起的颜色块。然后给出实现目标的指令:“把蓝色块放到绿色下面;把橙色的放到红色的左边;把紫色的放到橙色下面;把浅蓝色的放到深蓝的右边;把绿色的放到红色的下面;把紫色的放到绿色的左边。”
DNC解决移动拼图问题
我们可以设定大量此类可能的目标,然后让网络执行动作,这些动作可以根据命令生成某个目标状态。再次地,在这种情况下,DNC像计算机一样,可以在内存中存储若干子程序,每一个都对应某个可能的目标,然后加以执行。
人类记忆的工作机制问题古已有之,我们对它的理解还在发展当中。我们希望,DNC可以为计算机科学提供新工具,为认知科学和神经科学提供新的隐喻:它是这样的一个学习机器,在没有事先编程的前提下,能够把信息组织成事实,然后利用这些事实去解决问题。
要想了解DNC方面的更多信息,请参见我们的论文,还可以看看Herbert Jaeger对深度神经网络推理的看法。
一位艺术家对DNC的印象。控制器网络可视化为工厂的操作员,信息以0、1的形式传送进来,由三条机械臂操作,对着代表内存的一个卷轴进行读、写、擦除操作,然后最终输出新的二进制序列。