论文部分内容阅读
深度学习已经在人工智能领域中取得了显著的成就。这得益于其捕捉高维复杂特征的强大能力,而且并不需要人工特征的干预。利用深度神经网络来解决代码分析问题要比基于统计的方法更为简单。例如在代码分类问题中,深度神经网络能够自动地抽取出代码中有用的特征。从局部到高层的抽象过程,特征在每一层能够被自动地组织起来。基于这些抽象的特征,我们能够确定一段代码的类别。深度神经网络结构并不像传统的方法需要过多的人工特征。更加自然的特征对于多任务学习是更有利的。深度学习结构对于其他的代码分析任务同样是有效果的。但是,将深度学习应用在代码分析领域还是存在一些困难。因为梯度弥散的问题,导致传统的学习算法并不能对网络进行有效的训练。本文借用了深度学习在解决自然语言处理问题中的思想,构造可以学习代码结构的分布式表示的模型,从而将深度学习应用于代码分析领域。本文提出了一条编码规则建立抽象语法树结点的向量表示,这是将深度学习应用于代码分析问题的基础。根据实验的结果可以得出,该编码规则可以有效地学习到抽象语法树结点的向量表示。为了证明深度学习对于代码分析问题是否真的有效。本文将学习到的特征向量输入到一个深度神经网络中,实验结果表明较浅层学习方法,深度学习方法取得了更好的效果。本文还提出了另一种通过学习程序控制流图的的根子图的向量表示来对代码进行建模的方法。这是受图核函数最近的一些研究成果的启发。该模型以无监督学习的方式,利用邻居结点之间的关系,来学习它们之间隐藏的相似性。通过实验证明了模型与支持向量机这样的核分类器以及关联聚类算法一起在监督学习以及无监督学习任务中均取得了很好的效果。实验不仅仅是在一些基准数据集上进行的,同时还有实际问题中的数据集。相信在未来,深度学习会成为代码分析领域中的一种重要途径。