有记忆会推理的可微分神经计算机,DeepMind现在开源了代码

简介:
本文来自AI新媒体量子位(QbitAI)

去年10月,Google旗下DeepMind在《Nature》上发布第三篇论文,宣布搞出了可微分神经计算机(Differentiable Neural Computer,DNC)。

通过把神经网络和可读写的外部存储器进行结合,可微分神经计算机这种混合学习型神经网络,既能像神经网络那样进行学习,又能像计算机那样处理复杂数据。

可微分神经计算机类似一个可微分的函数,能够成功理解复杂的图形结构,比如家谱图或者是交通网络。

在实验中,DNC可以在没有现成知识的情况下,规划出最佳的伦敦地铁线路,或根据符号语言所描述的目标来解决方块拼图问题。

也正是如此,可微分神经计算机时常被描述为拥有“短期记忆”,具备“推理能力”,在某种程度上更接近人类大脑的能力。

现在,DeepMind把相关代码公布在GitHub上。

原理介绍

目前深度学习的能力更多体现在模式识别,未来人工智能的发展,一定会要求神经网络模型具备推理的能力。

而推理有一个关键的前提:记忆。此前DNC项目负责人Alex Graves表示,“神经网络的记忆受到计算本身的约束,我们决定通过分离存储器的方式让它变得更强大”。

可微分神经计算机(Differentiable Neural Computer,DNC)是一种特殊的循环神经网络。在每个迭代周期里,其状态包含的信息由当前存储器内容和存储器用量等辅助信息共同构成,并且可以在时间t将当前输入通过线性变换映射到输出上。这种神经网络通过集合RNNCore模块,改变原有神经网络的结构,将不同模块首尾相接,来测试新网络结构的性能。

 access模块是可微分神经计算机做出逻辑判断的主要位置,因为这是存储器写入和读取的地方。在每个迭代周期里,access模块的输入是一个由控制器模块controller传递来的向量,其输出是从存储器中读取的相关内容。它还进一步加入了两个新的RNNCore模块:模块TemporalLinkage用来跟踪信息在存储器中写入的顺序,Freeness用来跟踪哪些信息在存储器中被写入以后没有及时释放,记录存储器对应位置。以上这些功能都定义在addresses.py中。

 controller模块控制着存储器访问路径。通常情况下,这个模块只是一个前馈LSTM网络或是深层LSTM网络,其输入是在那个时刻整个循环神经网络的输入,与在前一个迭代周期里access模块中读取存储器的输出相连。

 dnc模块只是简单地对access模块和controller模块进行包装,并形成整体结构里的基本RNNCore单元。这些功能被定义在dnc.py中。

 DNC的结构

训练过程

实现可微分神经计算机需要安装TensorFlow库和Sonnet库。DeepMind提供了一个网络训练的脚本示例,此算法可以用于循环复制一个给定的输入字符串。这可以从python中用命令行进行执行:

$ ipython train.py

当然您可以直接选定训练过程的参数,包括模型参数和优化器参数:

$ python train.py --memory_size=64 --num_bits=8 --max_length=3

# 在ipython下执行

$ ipython train.py -- --memory_size=64 --num_bits=8 --max_length=3

定期保存或创建“检查点”的功能在默认情况下会被禁用,可以通过checkpoint_interval标记来启用。当checkpoint_interval的值设置为10000时,程序将保证每10,000个训练步骤后创建一个检查点。在默认情况下,该模型将会被保存到/tmp/tf/dnc/。我们可以加载该文件来恢复训练,也可以使用checkpoint_dir标志来更改自动保存的位置。需要注意的是,在使用不同的模型参数恢复训练之前,要确保已经删除/tmp/tf/dnc/路径下的文件,以避免由于网络参数不一致导致的错误。

通常来说,在dnc.py中定义的DNC类可以用作TensorFlow rnn的标准内核,并在任何时序训练任务上用TensorFlow rnn ops来展开,如tf.nn.dynamic_rnn函数。

声明:这不是一个Google官方产品。

官方案例

之前在《Nature》发布的论文中,DeepMind还展示了一下可微分神经计算机的能力。

比如可以理解人类编写的故事。故事中包括这样的句子,“约翰在游乐场”,“约翰拾起了足球”等。当你问”足球在哪里”时,模型能够给出正确答案。

可微分神经计算机还能从家谱中理清人物关系。在家族树中,DeepMind展示了DNC可回答需要复杂指令的问题。比方说,即便只描述该网络的父母、子女和兄弟姐们关系,也能够回答“谁是某人妈妈的叔祖父?”这样的问题。

另外一个例子就是寻找地铁线路。在描述了伦敦地铁的站点和线路之后,就可以让DNC回答类似“从Bond街出发,顺着Central线沿某方向走一站路,然后沿Circle线按某方向走4站,再沿Jubilee线按某方向走2站,最后你会到达哪一站?”

或者针对“如何从Moorgate去到Piccadilly Circus?”这样的问题,可微分神经计算机可以规划出路线。

相关评论

对于可微分神经计算机展现出的能力,不来梅大学计算机科学家Herbert Jaegar说:“我认为这可以说是理性的推理。这些任务涉及到将信息规划和组织成块,并重新组合它们”。

Herbert Jaegar认为可微分计算机表明,AI技术正在快速推进。未来计算机将不再局限于逻辑性的任务,人脑能够完成的事情,物理系统同样可以完成。他说:“计算机的能力已经接近人类,甚至在某些方面超过了人类。这只是个时间和投资的问题”。

不过Facebook人工智能研究员田渊栋在知乎和他的博客上表示,这个模型复杂、手工设计太多、实验相对简单,以及没有在大规模数据集上测试性能。

“技术上来说,我觉得它是隐含地学到了搜索的启发式函数(heuristic function),并且成功地应用于一些需要小规模搜索的任务当中。至于通用化,可能还需要再走很长的路”,田渊栋表示Facebook也有类似的研究,例如MemNet。

相关地址

GitHub地址:

https://github.com/deepmind/dnc

《Nature》原文:

http://t.cn/RXXE3hL

本文作者:王新民
原文发布时间:2017-04-20
相关文章
|
11月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
2981 2
|
Shell Python
/bin/sh: python: not found 问题
/bin/sh: python: not found 问题
361 0
|
3月前
|
人工智能 开发者
阿里云百炼X支付宝:「AI打赏」功能上线,Agent变现更灵活🎉🎉🎉
阿里云百炼平台联合支付宝,推出业内首个Agent「AI打赏」功能,开发者可为应用一键配置赞赏功能,用户打赏金额将直接转入开发者支付宝账户,助力快速变现。
377 1
|
5月前
|
人工智能 数据可视化 关系型数据库
23.5K star!零代码构建AI知识库,这个开源神器让问答系统开发像搭积木一样简单!
FastGPT 是一个基于大语言模型的智能知识库平台,提供开箱即用的数据处理、RAG检索和可视化AI工作流编排能力,让你无需编写代码就能轻松构建复杂的问答系统!
306 1
|
自然语言处理 NoSQL 关系型数据库
CodeGeeX支持哪些语言?
【8月更文挑战第29天】CodeGeeX支持哪些语言?
255 4
|
存储 搜索推荐 算法
ICLR 2024:UTS提出全新联邦推荐算法
【2月更文挑战第17天】ICLR 2024:UTS提出全新联邦推荐算法
484 2
ICLR 2024:UTS提出全新联邦推荐算法
|
算法 SoC
在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?
本文介绍了如何通过PWM风扇的FG信号线获取风扇转速的方法,包括风扇规格的解读、FG信号的公式推导、软件算法的解析,以及在全志H713平台上实现风扇转速获取的驱动代码示例。
1572 2
在写PWM风扇驱动之前:如何透过FG信号,获取风扇转速?
|
运维 API Apache
《Saltstack:自动化运维的瑞士军刀,让IT管理变得简单而强大》
【8月更文挑战第13天】面对服务器数量激增和网络复杂化,传统手动运维已难以应对。自动化运维工具Saltstack(简称Salt),基于Python开源,采用C/S架构,由Master和Minion构成,实现任务分发与执行。Salt具备配置管理、远程执行及云管理等功能。通过声明式状态文件,可确保系统符合预期配置;远程执行简化批量任务处理;集成云服务API实现资源动态管理。Salt以高效灵活的方式助力IT基础设施管理,成为现代运维不可或缺的利器。
285 1
|
机器学习/深度学习 PyTorch 测试技术
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet