Solving program induction problems requires searching through an enormous space of possibilities. DreamCoder is an inductive program synthesis system that, whilst solving problems, learns to simplify search in an iterative wake-sleep procedure. The cost of search is amortised by training a neural search policy, reducing search breadth and effectively "compiling" useful information to compose program solutions across tasks. Additionally, a library of program components is learnt to express discovered solutions in fewer components, reducing search depth. In DreamCoder, the neural search policy has only an indirect effect on the library learnt through the program solutions it helps discover. We present an approach for library learning that directly leverages the neural search policy, effectively "decompiling" its amortised knowledge to extract relevant program components. This provides stronger amortised inference: the amortised knowledge learnt to reduce search breadth is now also used to reduce search depth. We integrate our approach with DreamCoder and demonstrate faster domain proficiency with improved generalisation on a range of domains, particularly when fewer example solutions are available.
翻译:解决程序归纳问题需要搜索巨大的可能性空间。DreamCoder 是一种归纳程序合成系统,在解决问题的过程中,通过迭代的“清醒-睡眠”过程学习简化搜索。通过训练神经搜索策略来分摊搜索成本,减少搜索宽度,并有效“编译”有用信息,以跨任务组合程序解决方案。此外,还学习一个程序组件库,用更少的组件表达已发现的解决方案,从而减少搜索深度。在DreamCoder中,神经搜索策略仅通过其帮助发现的程序解决方案对所学到的库产生间接影响。我们提出了一种直接利用神经搜索策略的库学习方法,有效“反编译”其摊销知识以提取相关程序组件。这提供了更强的摊销推理:为减少搜索宽度而学习的摊销知识现在也用于减少搜索深度。我们将我们的方法与DreamCoder集成,并展示了在多个领域上更快的领域精通能力和改进的泛化能力,特别是在可用示例解决方案较少时。