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

时间:2022-05-06
本文章向大家介绍有记忆会推理的可微分神经计算机,DeepMind现在开源了代码,主要内容包括原理介绍、训练过程、官方案例、相关评论、相关地址、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
王新民 编译自 GitHub 量子位 报道 | 公众号 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