DeepMind 可微分神经计算机 DNC 开源

推荐会员: lex 所属分类: 行业精选 发布时间: 2017-04-21 21:25
DeepMind昨夜宣布,将其 Nature 论文研究成果、2016 年引起热议的可微分神经计算机 DNC 开源,相关代码和部署细节已经在 Github 公开。DNC 结合了神经网络自动学习和传统计算机可读写存储数据的能力,被认为是目前最接近数字计算机的神经计算系统。此次正式开源,想必会吸引众多开发人员和研究者参与改进。DeepMind 不久前将内部深度学习框架 Sonnet 也进行了开源,而 DNC 需要使用 TensorFlow 和 Sonnet 一起进行训练。DeepMind 的双重开源,相信会加速神经网络“记忆”相关的发展。一旦获得突破,在加强神经网络推理能力等方面将会产生较大影响。
神经网络在模式识别、快速决策方面有着优异的表现,然而现在的神经网络还远远谈不上能够“思考”——思考需要在过去的知识经验基础上进行推理,而过去的知识和经验也就是所谓的“记忆”。
在去年10月,DeepMind 发表于 Nature 的一篇论文中,他们提出了一种叫做“可微分神经计算机”(DNC)的混合计算系统,将神经网络和一个外部存储器相结合。这个混合的计算系统既拥有神经网络可以从数据中学习的优势,也能够存储学到的知识——复杂的结构化数据。通过这个外部存储器,DeepMind 对神经网络进行了“记忆”增强,克服了神经网络无法长时间保存数据的缺点。
论文展示了 DNC 可以理解图形结构,回答关于复杂的结构化数据的问题,包括在没有先验知识的情况下,在伦敦地铁的地图上找到两个站点之间距离最短的路线。此外,DeepMind 还在论文中展示了,DNC 使用强化学习可以解决拼图游戏。
作为 DeepMind 在 Nature 的第三篇论文,DNC 发布后引起了热议,但是,由于不知道内部具体结构,外界对 DNC 带来的“突破”也存在有一定猜测。现在,DeepMind 将 DNC 开源,公布代码,提供训练教程,名震一时的“可微分神经计算机”的内部细节终于曝光。
开源地址:http://github.com/deepmind/dnc
开源地址:https://github.com/deepmind/dnc
DNC 内部架构解密
据介绍,DeepMind 在设计 DNC 时,想建造的是一种能够自动学习并且利用复杂数据结构的机器。DNC 的核心是一个被称为“controller”控制器的神经网络,就好比计算机里的处理器。Controller 负责接收输入的信息,对其进行处理并将处理后的数据存储在存储器中,最后生成输出。
根据 DeepMind 在 Github 公开的结构图,存储器分布在神经网络的各个部分,每个都能存储一个向量。
控制器可以对存储器执行多个操作。在每个时间步长,它可以选择是否将数据写入内存(memory)。如果是的话,可以将信息存储在还没有使用的新位置/内存,也可以将信息存储在已经包含了控制器正在搜索的信息的位置。换句话说,每个内存都能被更新。如果内存中空间用尽,控制器可以决定释放空间,整个过程跟计算机如何重新分配不再需要的内存非常相似。
控制器可以对存储器执行多个操作。在每个时间步长,它可以选择是否将数据写入内存(memory)。如果是的话,可以将信息存储在还没有使用的新位置/内存,也可以将信息存储在已经包含了控制器正在搜索的信息的位置。换句话说,每个内存都能被更新。如果内存中空间用尽,控制器可以决定释放空间,整个过程跟计算机如何重新分配不再需要的内存非常相似。
当控制器写入时,它将信息向量发送到存储器中的所选位置。每次写入信息时,这些位置第一会通过关联连接起来,表示信息被存储的顺序。
除了存储(写入),控制器还能从多个内存中读取信息。通过为被存储内容的位置,或者说根据此前信息在存储时形成的连接关系,控制器能够搜索并找到想要获取的内容。而这些读出的信息则被用于解答问题——在论文的实验中,也就是在陌生环境中采取什么样的行动。
换句话说,上述功能使 DNC 能够选择如何分配内存、将信息存储在内存中,并轻松找到内存里的数据。
DNC架构示意图。神经网络控制器(Controller,a 部分)接收外部输入,并利用“读写头”(Read and write head,b 部分)与存储器(Memory,c 部分)交互,进行信息的读取和写入操作。d 部分是内存使用和临时链接,跟踪信息被写入的顺序,并记录每个存储器位置当前的使用级别,帮助控制器快速、准确找到想要的信息。
DNC架构示意图。神经网络控制器(Controller,a 部分)接收外部输入,并利用“读写头”(Read and write head,b 部分)与存储器(Memory,c 部分)交互,进行信息的读取和写入操作。d 部分是内存使用和临时链接,跟踪信息被写入的顺序,并记录每个存储器位置当前的使用级别,帮助控制器快速、准确找到想要的信息。
将上面那段话用更专业的表达说,DNC 是一个递归神经网络。在每个时间步长,它具有由当前存储的内容(以及诸如内存使用等辅助信息)组成的状态,并将在时间 t 的输入映射到时间 t 的输出。它的实现是一组 RNNCore 模块的集合,这能使不同模块一起试验架构的不同变体。
读取(access)模块是主要的 DNC 逻辑发生的地方;因为这是内存写入和读取的地方。在每个时间步长,access 模块的输入是从 controller 传递的向量,输出是从内存读取的内容。它使用另外两个 RNNCore:跟踪内存写入顺序的 TemporalLinkage ,以及跟踪哪些内存位置已经被写入,而且随后还没被“freed”的 Freeness。这些都在 addresses.py 上定义。
Controller 模块“控制”存储内容的访问。通常情况下,它是一个前馈网络或(可能很深的)LSTM 网络,它的输入是当前的整个递归网络的输入,与来自前一个时间步长的 access 模块的读取内存输出相连接。
DNC 简单地包装 access 模块和 controller 模块,并形成整个架构的基本 RNNCore 单元。这在 dnc.py 上定义。
能够朝着目标不断“进化”的计算机
DNC 的优势在于,其“中央处理器”Controller 是神经网络,神经网络系统不需要、也不能预先编程,它是通过不断试错、学习逐渐改变内部的神经连接,让整个神经网络的反应逐渐接近正确的解决方案。
利物浦大学计算机软件研究生张嘉伟对新智元介绍:DNC 最核心的理念是可微分图灵机,也就意味着像现在的计算机架构一样可以实现很多的算法甚至软件。不过不同的是,只要有一定的目标它们可以向着目标不断“进化”,换句话说,就像你的计算机会不断根据你的习惯和任务要求不断改变自己。当然,这个需要很多的强化学习的介入,仅靠监督学习很困难,应该是 hybrid learning system,虽然目前只是开始,但这是打开了一扇大门,意义深远。很有趣的是,如果能基于此实现学习闭环,也就是结合强化学习之后实现自主目标规划,这样的系统能不能从零学习人类语言?这将是令人激动但肯定也充满困难的领域。剖开表象,里面还是知识表征-数学登上舞台的地方。
开源代码,教你训练自己的 DNC
DeepMind 将 DNC 开源,必定吸引大量开发人员和研究者都来参与训练。DNC 作为一个能够朝着目标不断“进化”的原型计算机,其改进的速度也必将加快,甚至还会出现更多新的思路。
安装 DNC 需要用到 TensorFlow 和 Sonnet。正好此前 DeepMind 将其内部深度学习框架 Sonnet 开源,开发人员和研究者可以更好地训练 DNC。
DeepMind 在GitHub 页面提供了一个样例训练脚本,用于不断复制输入给定字符串的算法任务,Python 执行如下:
通过 flags 可以指定训练选项,包括模型和优化器的参数:
通过 flags 可以指定训练选项,包括模型和优化器的参数:
模型过一段时间自动保存,或者说 checkpointing 是默认关闭的。要开启这项功能,使用 the checkpoint_interval flag。例如 checkpoint_interval=10000,将确保系统运行每 10000 步自动存档。模型默认的自动存档是 /tmp/tf/dnc/ ,由此训练可以继续。
模型过一段时间自动保存,或者说 checkpointing 是默认关闭的。要开启这项功能,使用 the checkpoint_interval flag。例如 checkpoint_interval=10000,将确保系统运行每 10000 步自动存档。模型默认的自动存档是 /tmp/tf/dnc/ ,由此训练可以继续。
如果要指定另外的存档库(checkpoint directory),使用 checkpoint_dir flag。不过要注意:在使用不同的模型参数重新训练之前,要先将 /tmp/tf/dnc/ 删除,避免出错。
在 dnc.py 中的 DNC class 可以用作标准的 TensorFlow rnn core,并用 TensorFlow rnn ops 在任何序列任务上展开 ,例如 tf.nn.dynamic_rnn。
DNC 可用在哪?图形推理、理解家谱、符号分析和更多
DeepMind 公开了当时的论文,DNC 完成三项任务的原理也终于揭晓。首先,DeepMind 想测试 DNC 构建数据结构并使用这些数据结构解决问题的能力。图形数据结构应用广泛,可以表示关系(连接)、路径和周期。DeepMind 在论文中展示了 DNC 可以成功地理解图形结构,比如家谱或传输网络。
在没有先验知识的情况下,在伦敦地铁地铁导航
此外,DNC 还能在没有先验知识的情况下规划在伦敦地铁上的最佳路线,解决涉及用符号语言描述目标的移动拼图谜题。
DeepMind 可微分神经计算机 DNC 开源,内部架构原理首次曝光
解决结构化数据任务。a. 随机生成的训练用图,也就是说 DNC 是使用随机图进行训练的。b. 伦敦地铁图线路中转站,用作遍历和最短路径任务的泛化测试。随机七步遍历(其示例在中间左边栏)得到 98.8% 的平均精度。对所有可能的四步最短路径(中间右栏)测试平均精度为 55.3%。c. 用作泛化推理任务测试的家谱;测试了四步关系(从 Freya 到 Fergus,蓝色虚线表示),平均精度为 81.8%。下图灰色栏中列出了测试期间网络处理的符号序列。
理解家谱,“学以致用”
在理解家谱的任务中,论文展示了 DNC 可以回答需要进行复杂推理的问题。例如,研究人员在家谱结构图中只标注了父母、孩子和兄弟姐妹的关系,DNC 可以回答谁是谁的舅母的叔叔这样的问题。
比较以前学到的信息并将其推广到用于新问题的推理,这是传统神经网络不能做到的。
使用强化学习解决拼图游戏
使用强化学习解决拼图游戏
DeepMind 论文中还展示了通过强化学习训练 DNC。在完成这个任务时,DNC 给出每一步怎么走,研究人员会对这个“答案”评分,具体是让 DNC 根据指令完成一个拼图游戏。研究人员会发出指令:将浅蓝色块放在绿色的下面,将橙色放在红色左边,将紫色放在橙色下面;浅蓝色放在深蓝色右边……
由于信息有限,我们只提到了 DNC 能够 “解决涉及用符号语言描述目标的移动拼图谜题”。现在,我们知道了这项任务的全貌。
在新智元去年的对 DNC 的报道中,由于信息有限,我们只提到了 DNC 能够 “解决涉及用符号语言描述目标的移动拼图谜题”。现在,我们知道了这项任务的全貌。
当时,德国雅各布大学研究者 Herbert Jaeger 在同一期的 Nature 刊登评论文章《深度神经推理》,称 Graves 等人证明了人工神经网络系统能够学会符号推理的某些重要(non-trivial)、核心内容。
“Graves 等人使用机器学习中的深度学习方法,在一个人工神经系统中,得到了一些关键的符号推理机制。他们的系统能通过从样本中学习符号推理规则解决复杂问题。这一成就被认为有潜力解决神经符号(neural-symbolic)的集成难题。”
Jaeger 认为,眼下单凭 DNC 无法在逻辑数据挖掘中与最先进的数字计算方法匹敌。但是,一种灵活的、根据 DNC 拓展出来的工作记忆,或许会让深度学习应用拓展到与需要理性推理的大数据领域,比如生成视频评论,或者进行文本语义分析。
内部升级 DNC,可扩展到更大任务上面
DNC 发布后不久,DeepMind 就在 DNC 的基础上做了改善,在 arXiv 上发表了论文 “Scaling Memory-Augmented Neural Networks with Sparse Reads and Writes”,在 DNC 基础上提出了新架构 SMA。其中,DNC 的第一作者 Alex Graves 及其他几位主要作者 Greg Wayne、Tim Harley 也是这篇论文作者。
SMA 比 DNC 强的地方在于“可扩展”,作者提出了一种端到端的可微分储存器读写机制,在差不多规模的数据集执行小数据(one-shot)Omniglot 字符识别等任务效率与 DNC 可比,还能扩展到更大的任务上面。
可以说,这是 DeepMind 内部对 DNC 升级和改进。具体内容参见新智元此前的报道:DeepMind 发布 DNC 升级版,拥有稀疏读写头的可扩展记忆增强神经网络。
业界热议还有很长的路要走,DNC 展示神经计算全新可能性
还记得当 DNC 的论文发出不久,Facebook 人工智能研究中心(FAIR)研究员、深度学习开源框架 Torch 作者田渊栋评论认为,“DNC是革命性突破”言过其实。这篇文章模型复杂,【手工设计太多】,比如说组合各种不同的 Attention 模型,手工“动态”分配内存而不是学习得到。实验相对简单,没有在大规模数据集上测试性能。总的来说不及前两篇Nature,宣传还是一贯地好。技术上来说,田渊栋认为这一模型隐含地学到了搜索的启发式函数(heuristic function),并且成功地应用于一些需要小规模搜索的任务当中。至于通用化,可能还需要再走很长的路。
Facebook 人工智能研究中心(FAIR)研究员、深度学习开源框架 Caffe 作者贾扬清认为,这是从手动调 feature 变成了手动调网络结构。颇有戏谑意味。对于这一说法,田渊栋表示以后不可能一直这样,目前主要还是因为我们不懂原理是什么。
现在,DeepMind 将 DNC 开源,还配合开源了能够更好训练 DNC 的框架 Sonnet。DNC 的原理也全部公开。
DeepMind 研究员在博客中介绍,类解根据符号语言描述移动拼图的任务,研究人员和开发者可以建立大量这样的目标,然后请求 DNC 网络在一个操作的基础上,执行另一个目标操作。在这种情况下,DNC 可以同时存储几个子程序,有一个可能的目标,并且据此决定如何执行。
推理的一个关键前提是记忆,在传统计算机中,记忆的角色由随机访问内存(RAM)承担。大部分神经网络存在的问题是,假设智能体 A 在玩游戏 A’ 时表现很好乃至超越人类专家水平,但让这个智能体 A 去玩游戏 B 表现就不行了。
DNC 包含了若干个模块,所有的这些模块都完全不是符号化的,彼此之间通过纯粹的模拟激活模型来交换信息流(Streams),正如从生物大脑中记录的那样。虽然在人类的推理和计算机程序运行之间存在明显的相似之处。但是,我们在理解如何把它们中的任何一个部署于生物或者人工神经网络时,依然缺乏足够知识。
无论是让神经网络拥有“记忆”,还是人类记忆本身这个问题,目前都还没有得到很好的解答。DeepMind 的 DNC 展示了一种不同与传统数字计算机的“认知神经计算机”,以及对认知和神经科学的启示:现在有一台机器,在不需要事先编程的情况下,能够自己组织信息,解决问题。
DNC 开源地址:https://github.com/deepmind/dnc
来源:http://ai.dataguru.cn/article-11149-1.html
关键词:

版权声明:本站原创和会员推荐转载文章,仅供学习交流使用,不会用于任何商业用途,转载本站文章请注明来源、原文链接和作者,否则产生的任何版权纠纷与本站无关,如果有文章侵犯到原作者的权益,请您与我们联系删除或者进行授权,联系邮箱:service@datagold.com.cn。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据