Advertisement

[ICLR2017] Deepcoder: Learning to write programs

阅读量:

[ICLR2017] Deepcoder: Learning to write programs

Author: Matej Balog, Alexander L.Gaunt, Marc Brockschmidt, Sebastian Nowozin, Daniel Tarlow

任务描述

IPS 的归纳综合系统通过分析包含多对输入输出的数据集,在线生成满足所有条件的最优解。

主要思想

  • 用神经网络预测程序中可能使用到的函数
  • 用这些函数穷举搜索程序

方法流程

1. 定义特定领域语言(DSL)

相当于定义一个语法规则

DSL示例

在上述示例中,该系统共有五个指令条目:其中k代表一个整数值输入;b则表示接受一个数组形式的数据;c是经过对b进行排序处理后的结果;d是根据k从c中选取前k个元素;e则是对d进行求和运算的结果。 DSL所包含的基本函数包括:初始化、数据加载、排序操作、子集提取以及求和计算等基本功能模块。

In summary, our DSL incorporates a comprehensive set of first-class functions including HEAD, LAST, TAKE, DROP, ACCESS, MINIMUM, MAXIMUM, REVERSE, SORT, SUM. Additionally, it encompasses higher-level operations such as MAP, FILTER, COUNT, ZIPWITH, and SCANL1. These higher-order operations are dependent on suitable lambda expressions to define their behavior accurately. Specifically:

  • For the MAP operation, our DSL offers lambda expressions with increments (+1) or decrements (-1) and scaling factors such as (2) or (/2). More complex adjustments include ((-1)), (**2), (*3), (/3), (_4), and (/4).
  • The FILTER and COUNT operations utilize predicates like (>0) or (<0).
  • For ZIPWITH and SCANL1 operations, suitable lambda expressions incorporating basic arithmetic operations (+,-,), along with MIN and MAX functionalities.

2. 生成训练程序和对应的输入输出对

列出属于DSL程序的所有代码块,并删减那些包含冗余语句的代码块(例如无用变量部分)。接着创建一组输入输出样本集,并将输出结果限定在区间[-256, 256]内。最后通过二进制向量的形式记录程序中调用的所有函数名称。

3. 通过生成的数据训练神经网络预测可能用到的函数

输入输出 :输入输出的类型采用one-hot表示。

类型的one-hot表示

整数映射到一个嵌入向量(embedding vector)。

整数映射到一个向量

为整数输入与输出设定特定的NULL值以填满固定长度(L=6)。例如下述输入-17 -3 4对应输出7:

输入输出表示示例

拼接顺序:输入类型,输入数据,输出类型,输出数据。

输入结构:数据经过前馈网络的三层隐含层处理,每层均采用sigmoid激活函数,并包含256个神经元单元。

在这里插入图片描述

每一个输入输出对最后输出256维向量;一个程序的所有输入输出对取平均值后得到最终256维向量

输出 :将该向量左乘一个34*256的矩阵(共34个函数),得到每个函数的概率。

整个网络结构如下:

在这里插入图片描述

loss函数使用负的交叉熵:

在这里插入图片描述

4. 采用传统方法搜索程序

  • 按照概率大小对神经网络预测得到的函数进行排序
  • 每次从当前已识别的几个候选函数中进行搜索;如果未能找到所需结果,则依次增加候选函数数量
  • Sketch(基于SMT程序合成工具)

全部评论 (0)

还没有任何评论哟~