Neural program synthesis&Induction的三篇入门论文,在期末过后的招生季,在往返南北的飞机上、酒店房间的小憩中断断续续地读下来,在此记之。
By Samuel Chen 2019.6
个人博客原文链接
1.Recent Advances in Neural Program Synthesis
综述性文章,介绍了Program Induction的概念、常见模型、它们的表现及改进方向,读毕对Program Induction领域有了大致的整体性把握。深度学习在CV和NLP等领域都取得了巨大突破,但在Program Synthesis上依然任重道远。
1.1 Introduction
方法 | 特点 |
---|---|
Program Synthesis | 显式返回程序,可读性强,但遇到很多瓶颈 |
Program Induction | 引入Deep Learning,模拟性的黑盒,无法解读,Generality非常重要 |
深度学习的火爆让我们在程序生成领域也看到了希望,但程序生成和实体识别、机器翻译等问题有着一大不同,就是这些DL已大获成功的领域中,输入空间是连续的,可以用可微函数表示(因此可以使用梯度下降优化),只有数据的集合对人来说才有意义,如图像的像素点只有组合起来才有意义,而NLP领域中,字词虽然是离散的,DL却是通过学习连续的词向量起作用的。神经网络适于通过这种高维的、连续的状态空间表示离散的实体,这是人工智能中联结主义的观点。
而对我们关心的Program Synthesis领域,程序的每个原子结构都有其内在含义,不存在连续的状态空间,而由于字典较小和抽象性等原因,嵌入的办法也很难解决问题。由于训练数据是成对的输入/输出,神经网络无法学习具体的程序结构知识,联结主义在这里是有瓶颈的。
所以从1960年代起,早期的研究者多是遵循符号主义的观点,通过上下文无关语法树学习领域语言,进而构建有意义的程序。其缺点是学习本身不是直接的任务,目标不可微,不能用梯度下降优化。现有的方法实质上是求解约束可满足性问题,在尽可能缩小状态空间的前提下搜索解决方案。如模可满足性运算器(SMT solver)已在正确性和泛化能力上取得了突破。
时至今日,多数研究者认为符号主义和联结主义的互补才是程序生成的出路。人在符号控制方面是独一无二的,而信息处理的机制可以由联结主义的神经模型解决。好的Synthesis系统也应当如此,“where symbols are built up from embeddings of the program state space.”
1.2 Neural Program Induction Models
1.2.1 基础——RNN & LSTM
RNN及其改进版本LSTM适合处理序列数据,双层LSTM形成的encoder-decoder结构不仅适于机器翻译,同样适用于输入输出不定长的Program Induction。以下介绍几种改进方向。
1.2.2 Convolutional Recurrence
将CNN与GRU融合,代表作是Neural GPU,在循环神经网络的基础上,在每个神经元处加入卷积操作,以GRU为基础,以门控的CGRU为神经单元加入卷积操作,用3维向量嵌入表示hidden state,长度为n则经过n个CGRU单元输出,再进行解码。缺陷是每个时刻认为1个3D的状态向量包含之前所有的信息,可能无法真正利用之前1-t-1时刻的所有信息。
1.2.3 Attention
借鉴机器翻译中常见的Attention机制,代表是Pointer-Net.此模型可解决比训练数据规模更大的测试问题,表现 出泛化性能的进步,但在大规模数据和corner cases上的性能表现无法保证。
1.2.4 Attention with memory
The Neural Turing Machine (NTM