[论文解读] DeepCoder: Learning to Write Programs
DeepCoder 训练一个神经网络以从输入-输出示例预测程序属性,并利用这些预测来引导基于搜索的程序合成,在基线方法之上实现显著的加速,并解决简单的比赛风格问题。
We develop a first line of attack for solving programming competition-style problems from input-output examples using deep learning. The approach is to train a neural network to predict properties of the program that generated the outputs from the inputs. We use the neural network's predictions to augment search techniques from the programming languages community, including enumerative search and an SMT-based solver. Empirically, we show that our approach leads to an order of magnitude speedup over the strong non-augmented baselines and a Recurrent Neural Network approach, and that we are able to solve problems of difficulty comparable to the simplest problems on programming competition websites.
研究动机与目标
- 通过机器学习,激励利用输入-输出示例解决编程竞赛风格的问题。
- 提出一个框架 (LIPS),学习推断程序属性并引导现有求解器。
- 开发一个DSL和数据生成流水线,使程序合成能够进行大规模有监督学习。
- 展示相对于未增强基线和RNN方法的显著加速。
提出的方法
- 定义一个包含简单和高阶操作的高级数据操作函数DSL。
- 生成大量程序、其属性及输入-输出示例的数据集用于训练。
- 训练神经网络,将一组输入-输出示例映射到程序属性的分布。
- 将神经预测整合到搜索技术中(DFS、Sort and add、基于SMT的Sketch和λ²),以优先关注程序空间中有前景的部分。
- 使用负交叉熵损失进行属性存在性预测训练,从而对候选程序进行有原则的排序。
实验结果
研究问题
- RQ1是否能从输入-输出示例学习预测能够引导对 DSL 的搜索的高级程序属性?
- RQ2预测函数存在性是否在不同求解器中提升了基于搜索的程序合成的效率?
- RQ3学习得到的引导在训练中未见过的不同长度的程序上能有多好地泛化?
- RQ4不同的编码器/解码器架构对引导程序合成有何影响?
主要发现
- 与依赖先验或未增强搜索的基线相比,神经引导在多种搜索策略上带来显著的加速。
- Sort and add 枚举策略比简单的 DFS 更受预测属性边际值的益处,在许多设置中实现了最大的提升。
- DeepCoder 能在 DSL 范围内解决与最简单的编程竞赛问题难度相当的问题。
- 编码器-解码器模型对超出训练长度的更长或更短的程序具有泛化能力,搜索过程有助于纠正未命中预测。
- 与基于 RNN 的解码器相比,提出的二进制属性解码器配合简单前馈编码器训练稳定、表现稳健。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。