基于双边树的卷积神经网络跨语言程序分类模型
2023-1-3 08:30:47 Author: 安全学术圈(查看原文) 阅读量:11 收藏

原文标题:Cross-Language Learning for Program Classification Using Bilateral Tree-Based Convolutional Neural Networks

原文作者:Nghi D.Q.Bui, Lingxiao Jiang, Yijun Yu.

原文链接:https://arxiv.org/pdf/1710.06159.pdf

发表会议:The Workshops of the Thirty-Second AAAI Conference on Artificial Intelligence

笔记作者:[email protected]

笔记小编:[email protected]

为了实现不同编程语言之间的算法比较,遂提出一种基于双边树的卷积神经网络(BITBCNN)模型。

作者的算法开源于:https://github.com/bdqnghi/bi-tbcnn

2.1.TBCNN

TBCNN结构如下图所示:上图展示了TBCNN的架构,具有以下四个部分:

①使用编码层将每个AST节点嵌入到连续的向量空间中,语义相似的节点(比如while和for相似)嵌入后相互靠近,不同的节点类型嵌入策略不一致。

②TBCNN提出者设置了一组固定深度的子树过滤器在AST上移动来提取树的结构信息;

③池化层用来收集从树的不同部分提取的信息;提出了“连续二叉树”并应用动态池化处理AST节点的不同数量的子节点;

④隐藏层和输出层对程序进行分类。

2.2.Pre-trained Vector

要训练TBCNN,需要对每个AST节点进行向量化表示。 向量化时使用了不同的策略,与word2vec的skip-gram模型相似,将其应用于AST的上下文,即给定一个输入词,来预测其上下文词(这里需要先了解skip-gram模型的原理才能明白)。具体来说就是,TBCNN将给出整个AST的词汇表(词汇表是AST的节点类型,很小)中每个节点成为候选节点的概念(选择给定的AST节点的随机子节点)。

2.3.BITBCNN

上图为此模型最终的结构图,由两部分组成,第一部分是具有两个子网络的双边结构图,第二部分是一个分类网络,改编自TBCNN。首先将源算法代码解析为Pickle格式的AST,然后将其输入到TBCNN模块,TBCNN模块进行卷积输出AST的特征,之后将两个特征向量连接为一个向量(这一部分称为联合表示层),然后进入两个完全连接的隐藏层,并将其输入到softmax层,以对两个输入程序的算法进行分类(关于算法分类这一块作者在文中提出了两种应用,一种是比较两个编程语言实现的程序是否属于同一种算法,另一种是给定一种编程语言的算法,来识别未知编程语言实现的算法)。

作者使用Tensorflow来构建模型,在隐藏层中设置dropout为0.7防止过拟合,并使用leaky ReLU作为激活函数避免梯度消失/爆炸问题。

1.作者的数据集程序代码量少,算法简单,对于含有混合算法集或者代码量大的程序不适用;

2.数据集变大时,训练速度也会变慢,若将其切片,或有所缓解;

3.dropout设置太过单一,没有对比其它的值;

4.使用leaky ReLU作为激活函数时对比不够。

安全学术圈招募队友-ing 
有兴趣加入学术圈的请联系 secdr#qq.com


文章来源: http://mp.weixin.qq.com/s?__biz=MzU5MTM5MTQ2MA==&mid=2247488462&idx=1&sn=8a5b3ac495ae7bc7d8138587bdde8c5c&chksm=fe2eec45c95965532fc43e9a1d7d08bd182c517ff28246bff58e74643a7340d3a14aeb3b2f5d#rd
如有侵权请联系:admin#unsafe.sh