机器自我编程—用”递归” 提高神经编程解释器(NPI)的泛化能力

2017年最佳论文, 伯克利改进2016年 DeepMind 突破性论文: NPI (神经编程解释器). 论文题为: MAKING NEURAL PROGRAMMING ARCHITECTURES GENERALIZE VIA RECURSION

能够让机器自己具有推理能力和编程能力一直是人们梦想, 而如今, 即使深度学习和神经网络发展壮大, 我们在这一领域依然是”婴儿学步”. 去年DeepMind的论文NEURAL PROGRAMMER-INTERPRETERS (NPI) 又似乎让我们看到了曙光. 一旦研究能在工业界大范围应用, 使用伪代码编程, 甚至构造”自治”的下一代互联网都成为可能.

在这里插入图片描述

言归正传, 伯克利的这篇论文对去年NPI的改进, 已经能够模拟简单的冒泡排序,拓扑排序,快速排序, 小学生进位加法运算等简单算法. 基本目标如下:

在这里插入图片描述

上图蓝色部分是NPI核心, 目标是训练出一个神经网络(往往基础是LSTM), 来模拟一个程序的行为. 最后训练出一个和目标程序行为一样的神经网络.

读者可能好奇训练数据是什么? 事实上, 你可以想象你对程序写白盒测试时有许多程序流的跳转和环境变量等等, 这些测试用例, 就是训练数据. 给一些更直观点的例子:

在这里插入图片描述

小学生进位加法大家一定做过, 可以想象, 用神经网络训练后, 可以得到网络, 好像学会了进位加法一样, 把最终的结果输出给你.

当然前提是, 你给神经网络足够的训练用例, 或者告诉它进位加法的内在逻辑是什么. 正如小时候老师把关键点教给我们: 每一位的加法都是一样的, 如果超过10不要忘记进位到下一位, 以此类推即可.

而这篇论文告诉我们 , 训练用例如果尽量多地使用递归, 可以提高神经网络泛化能力. 并且文章对这种方法的有效性进行了证明.

理解改进算法前, 我们先要理解NPI的工作原理:

在这里插入图片描述

NPI控制器的输入有程序运行的环境, 上一次的NPI状态, 本次调用函数及其参数, 等等. 输出是下一个状态及程序的运行环境, 下个应该别调用的函数, 等等.

上图右下角的指令即每一步应该调用的函数列表. 下面是小学进位加法的程序实例(包括不使用递归和使用递归的情况):

在这里插入图片描述

左边是没有递归的指令串, 右边是使用递归的指令串, 实现的功能是一样的, 即进位加法. 但是, 右边使用递归的方式, 可以让神经网络学习到一些重点的内容: 经常在递归中出现的重复行为. 从而在RNN中提高泛化能力. 可见, 研究员为了让机器学到一些关键点, 真是操碎了心.

下面是使用递归训练NPI 与传统NPI对比:

在这里插入图片描述

参考文献:

  1. MAKING NEURAL PROGRAMMING ARCHITECTURES GENERALIZE VIA RECURSION
  2. http://www.iclr.cc/lib/exe/fetch.php?media=iclr2017:cai_iclr2017.pdf
  3. https://36kr.com/p/5062703.html
  4. http://zcyoung.cn:8080/news/44222
  5. https://www.youtube.com/watch?v=B70tT4WMyJk
  6. NEURAL PROGRAMMER-INTERPRETERS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziix

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值