[论文解读] Neural Program Synthesis with Priority Queue Training
本文提出优先队列训练(PQT),一种用于神经程序合成的强化学习方法,通过在动态优先队列中迭代训练表现最优的K个程序来逐步优化循环神经网络(RNN)。PQT在图灵完备的BF编程语言的多种任务中均优于策略梯度和遗传算法基线模型,成功率达到更高水平,并在引入长度惩罚后生成更短、更易读的人类可读程序。
We consider the task of program synthesis in the presence of a reward function over the output of programs, where the goal is to find programs with maximal rewards. We employ an iterative optimization scheme, where we train an RNN on a dataset of K best programs from a priority queue of the generated programs so far. Then, we synthesize new programs and add them to the priority queue by sampling from the RNN. We benchmark our algorithm, called priority queue training (or PQT), against genetic algorithm and reinforcement learning baselines on a simple but expressive Turing complete programming language called BF. Our experimental results show that our simple PQT algorithm significantly outperforms the baselines. By adding a program length penalty to the reward function, we are able to synthesize short, human readable programs.
研究动机与目标
- 开发一种仅需奖励函数、无需真实程序或正确输出的通用程序合成框架。
- 评估一种简单、迭代式优化方法——优先队列训练(PQT)在神经程序合成中的有效性。
- 在图灵完备的编程语言中,将PQT与成熟的基线方法(如策略梯度和遗传算法)进行基准对比。
- 探究在奖励函数中引入程序长度惩罚后,PQT是否能生成简洁、人类可读的程序。
- 建立标准化的评估方法,用于在多个任务和随机种子下比较不同程序合成方法。
提出的方法
- 该方法维护一个包含迄今生成的K个最高奖励程序的优先队列,并通过在前K个程序上使用最大似然法对RNN进行训练。
- RNN通过从学习到的策略中进行自回归采样生成新程序,这些程序在执行并完成奖励评估后被加入优先队列。
- 训练过程迭代进行:在当前前K个程序上微调RNN,采样新候选程序,并用包含新程序在内的最优K个程序更新队列。
- 定义一个奖励函数以评估程序的正确性,可选地加入程序长度或执行时间惩罚,以鼓励生成紧凑高效的代码。
- 该方法在BF编程语言上进行评估,这是一种仅包含8个操作的极简但图灵完备的语言,可生成语法正确的程序。
- 通过在多个任务上比较训练和保留测试集上的成功率,将该方法与策略梯度(PG)和遗传算法(GA)基线进行对比。
实验结果
研究问题
- RQ1基于优先队列的简单迭代优化方法是否能在程序合成中超越成熟的强化学习和遗传算法基线?
- RQ2在动态优先队列中对前K个程序进行RNN训练,是否能带来比标准策略梯度方法更稳定可靠的程序合成效果?
- RQ3当在奖励函数中加入程序长度惩罚时,PQT方法是否能生成简短、人类可读的程序?
- RQ4PQT方法在多个随机种子和多样化的编程任务(包括字符串操作和算法运算)中是否具有鲁棒性?
- RQ5PQT能否从随机初始化的RNN和空队列开始,无需任何监督即可发现正确程序?
主要发现
- PQT在20项任务上的平均成功率为13.0 / 5.7(训练/评估),显著优于策略梯度(3.3 / 1.5)和遗传算法(8.6 / 4.3)。
- 在reverse任务中,PQT在训练集和测试集上均达到20 / 20的成功率,而策略梯度仅达到3 / 2。
- 在print-hello任务中,PQT实现25 / 25的成功率,与PG+PQT混合方法的最佳表现持平,而GA仅达到12 / 16。
- PQT成功为reverse、add和print-hello等任务生成了人类可读、长度最小的BF程序,例如用于反转字符串的程序"[>,]+[,<.]"。
- 该方法表现出高度可靠性,在大多数随机种子和大多数任务中均能发现解,而基线方法在许多组合中均失败。
- 当引入长度惩罚时,PQT生成了简洁的程序,例如用于打印"hello"的"++++++++.---.+++++++..+++.",表明其具备有效的代码简化能力。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。