基于神经网络语言模型的代码分析方法研究
发布时间:2019-10-18 01:20
【摘要】:深度学习已经在人工智能领域中取得了显著的成就。这得益于其捕捉高维复杂特征的强大能力,而且并不需要人工特征的干预。利用深度神经网络来解决代码分析问题要比基于统计的方法更为简单。例如在代码分类问题中,深度神经网络能够自动地抽取出代码中有用的特征。从局部到高层的抽象过程,特征在每一层能够被自动地组织起来。基于这些抽象的特征,我们能够确定一段代码的类别。深度神经网络结构并不像传统的方法需要过多的人工特征。更加自然的特征对于多任务学习是更有利的。深度学习结构对于其他的代码分析任务同样是有效果的。但是,将深度学习应用在代码分析领域还是存在一些困难。因为梯度弥散的问题,导致传统的学习算法并不能对网络进行有效的训练。本文借用了深度学习在解决自然语言处理问题中的思想,构造可以学习代码结构的分布式表示的模型,从而将深度学习应用于代码分析领域。本文提出了一条编码规则建立抽象语法树结点的向量表示,这是将深度学习应用于代码分析问题的基础。根据实验的结果可以得出,该编码规则可以有效地学习到抽象语法树结点的向量表示。为了证明深度学习对于代码分析问题是否真的有效。本文将学习到的特征向量输入到一个深度神经网络中,实验结果表明较浅层学习方法,深度学习方法取得了更好的效果。本文还提出了另一种通过学习程序控制流图的的根子图的向量表示来对代码进行建模的方法。这是受图核函数最近的一些研究成果的启发。该模型以无监督学习的方式,利用邻居结点之间的关系,来学习它们之间隐藏的相似性。通过实验证明了模型与支持向量机这样的核分类器以及关联聚类算法一起在监督学习以及无监督学习任务中均取得了很好的效果。实验不仅仅是在一些基准数据集上进行的,同时还有实际问题中的数据集。相信在未来,深度学习会成为代码分析领域中的一种重要途径。
【图文】:
电子科技大学硕士学位论文上测试得到的交叉熵的范围。底部的折线表示在训练项目上进行测结果。可以看出,语言模型确实能够获取显著的局部规律,而不仅仅言语法上的简单,而是因为程序语言与自然语言在本质上是相似的。
18图 2-7 10 个 Java 项目中编程语言交叉熵的相互比较还有一个更有意思的结果:每个项目中都存在其独有的、局部的、非 Ja特有的规律,在不同的项目中这个规律也是不同的。很多程序员都有这样
【学位授予单位】:电子科技大学
【学位级别】:硕士
【学位授予年份】:2017
【分类号】:TP18;TP312
本文编号:2550842
【图文】:
电子科技大学硕士学位论文上测试得到的交叉熵的范围。底部的折线表示在训练项目上进行测结果。可以看出,语言模型确实能够获取显著的局部规律,而不仅仅言语法上的简单,而是因为程序语言与自然语言在本质上是相似的。
18图 2-7 10 个 Java 项目中编程语言交叉熵的相互比较还有一个更有意思的结果:每个项目中都存在其独有的、局部的、非 Ja特有的规律,在不同的项目中这个规律也是不同的。很多程序员都有这样
【学位授予单位】:电子科技大学
【学位级别】:硕士
【学位授予年份】:2017
【分类号】:TP18;TP312
【参考文献】
相关期刊论文 前5条
1 胡彬;王春东;胡思琦;周景春;;基于机器学习的移动终端高级持续性威胁检测技术研究[J];计算机工程;2017年01期
2 张凯;王东安;李超;贾冰;;基于协同采样主动学习的恶意代码检测[J];高技术通讯;2016年05期
3 毛蔚轩;蔡忠闽;童力;;一种基于主动学习的恶意代码检测方法[J];软件学报;2017年02期
4 李挺;董航;袁春阳;杜跃进;徐国爱;;基于Dalvik指令的Android恶意代码特征描述及验证[J];计算机研究与发展;2014年07期
5 王蕊;苏璞睿;杨轶;冯登国;;一种抗混淆的恶意代码变种识别系统[J];电子学报;2011年10期
相关博士学位论文 前1条
1 章程;基于机器学习和程序分析相结合的程序调试技术研究[D];上海交通大学;2013年
,本文编号:2550842
本文链接:https://www.wllwen.com/kejilunwen/zidonghuakongzhilunwen/2550842.html