又是一篇deepmind发表在nature上的文章,还记得前面2篇吗?一篇是DQN,一篇讲AlphaGo。发表在nature上的论文格式不太一样,正文只是简单描述一下思路和成果。附录里面才是主要的技术细节。今天只探讨一下正文里面的内容(推荐先了解论文Neural Turing machines,这两篇论文的作者都是一波人)。后续有机会继续看看技术细节。
ANN适合处理感知数据、序列学习和强化学习,但是由于缺少额外的存储空间,在处理长时间的变量和数据结构时候比较受限。本文探讨了一种a differentiable neural computer(DNC),NN网络可以从额外的内存读写数据。就像传统的计算机,可以在内存中存储和操作各种复杂的数据结构,不同的是,它是通过样本来学习这些操作。通过有监督学习,我们示范了DNC可以学会回答必须经过推理推断的复杂问题;DNC可以学会找到图的最短路径,可以应用到交通图和家谱树中。通过强化学习,DNC可以完成a moving blocks puzzle的游戏,总起来讲,DNC可以完成之前没有额外存储的神经网络很难完成的复杂的,结构化的任务。
在ANN中,计算和存储都是通过网络的参数和结构混合在一起的,当随着任务对存储的增长,网络是无法分配新的存储的,也没办法学会独立于数据参数的算法。一个DNC网络就是一个神经网络结合额外的存储矩阵。DNC的架构和其他神经网络的不同在于存储是可以选择性的进行读写,可以通过迭代修改存储内容。而整个系统是可微的,因此可以通过end to end的GD方法进行训练、通过目标导向来学会操作和组织存储。
传统的计算机是通过地址来获取存储内容的,DNC是用可微的attention机制来定义存储空间为N*W的矩阵中的位置的分布,这些分布就是权重参数。代表着每个位置在读或者写中的参与程度。读向量r通过对记忆矩阵M的一个读权值操作wr返回(记忆位置的权值累加和):
类比,写操作符使用一个写权值wW首先擦除向量e,然后加和一个向量v:
系统示意图如下:
a:一个rnn网络控制器收到数据,然后进行输出。b, c:controller也输出参数化的一个写header(图上绿色)和多个读header(图上分别表示蓝色和粉色)。写header定义了一个写和一个擦向量。读header用gate来区分不同的模式,基于内容查找的用关键字'C',或者按照顺序前'F'或者后'B'。d:useage vector记录着那些位置已经被使用了,a temporal link matrix记录着写入的位置的顺序。
head有三种可微的attention模式。第一种是基于内容查找的,controller生成的关键字向量根据相似度和存储空间的内容进行比较,相似度的程度决定了读和写header针对某一存储空间的内容进行相应操作的权重。还有重要的一点,一个关键字部分匹配也可以对这个存储进行操作,这样就有一种机制使得读回来的数据能带着key中没有的信息。这应该就是实现通用的key-value机制吧。
第二种attention模式是用N*N的矩阵L记录连续的写的存储空间的位置,比如如果j写完后下一个位置是i,那么L[i, j]就是接近1,否者就接近0。因此DNC从最底层就可以拥有能力重现原来写的顺序,即使不是相邻的时间step写的。
第三种机制是分配内存的能力。每一块位置都用0和1标示是否使用,权重参数可以挑出没有使用的位置给写header。这个权重每写一次自动增加,每读一次自动减少,这样如果内存不再使用了,controller就重新分配。分配机制独立于大小和内容,这样的话换大的存储空间的时候不需要重新训练。
attention的模式是受计算流程驱动的。基于内容的方式是和数据结构结合在一起的。Temporal link是的对输入顺序的复现。分配机制能利用空闲的空间。有意思的是DNC的存储模式跟哺乳动物的海马体功能的相似。我们人类的记忆模式、联想机制以及按照时间发生的顺序回忆事情都跟DNC的模式很相似。
我们首先测试了DNC在问答系统上的表现,为了和NN的效果比较,我们用了bAbI数据集,包括了20类的根据上下文的复合问题。这个数据集包含了一些小故事以及可以根据这些故事来推论回答的问题。比如“John is in the playground. John picked up the football.”然后问“Where is the football?”,答案是“play- ground”,比如“Sheep are afraid of wolves. Gertrude is a sheep. Mice are afraid of cats. What is Gertrude afraid of?” (答案是, “wolves”)。DNC网络在每个问题类型(20个)10000个样本的训练后,平均错误率3.8%和两种类型问题失败(错误率超过5%),之前最好的测试结果是7.5%和6中类型的问题失败。DNC的效果也超过LSTM。
bAbi的问题都是用自然语言表述的,但是很多问题都可以转换成图,所以我们第二个测试是从随机生成的图上进行推理。每个输入的数据包括两个节点标签和一条边的标签,这样我们通过这些随机的标签生成训练的图,定义了三种查询:‘traversal’, ‘shortest path’ and ‘inference’。再用curriculumlearning的方式不断增加复杂性进行训练。最后我们用生活中的两个图进行测试,一个是伦敦地铁图,一个是家谱图。如图:
DNC达到了98.8%的正确率,而LSTM只有37%。
随后我们测试了用DNC来进行逻辑规划的任务,玩a block puzzle game的游戏,如下图:
这是通过强化学习来训练的。DNC利用存储空间保存了迭代过程目标,这样它就能执行任何一个选定的目标,我们发现给定一个目标,经过要经过很多步骤,第一步也会从存储空间中找出来,这意味着DNC在执行之前就把它的决策写入到存储中。意味这DNC学会了规划。
总结一下,这三个任务证明了DNC能够找到复杂数据结构之间的联系,并且把这种联系反馈到存储中。而通过强化学习也能有计划有步骤利用存储反映规划。
这些任务都需要DNC能够找到隐藏的领域知识的规律,而且能够在存储中通过变量反映这些规律。我们想要解决的很多任务都需要这样认知代理。
我们的测试还是集中相对比较小规模的合成任务上,对于这类任务,512条存储空间足够了。如果要应对真实世界的问题,可能需要成千上万的存储空间来保存controller学到的信息,这类系统应该不改变网络参数的情况下通过大量的数据就能学习到知识。我们目标就是把DNC演进成一个单一通用的能够用于场景理解,语言理解和认知图谱的模型。
ps,后续希望继续探讨一下技术细节。
网友评论