基于双边树的卷积神经网络跨语言程序分类模型

admin 2023年1月3日11:46:17评论5 views字数 1411阅读4分42秒阅读模式

基于双边树的卷积神经网络跨语言程序分类模型

原文标题: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

笔记作者:senu11@SecQuan

笔记小编:cherry@SecQuan

1.目的

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

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

2.BITBCNN模型介绍

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作为激活函数避免梯度消失/爆炸问题。

3.不足之处

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

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

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

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


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

基于双边树的卷积神经网络跨语言程序分类模型


原文始发于微信公众号(安全学术圈):基于双边树的卷积神经网络跨语言程序分类模型

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月3日11:46:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于双边树的卷积神经网络跨语言程序分类模型http://cn-sec.com/archives/1495726.html

发表评论

匿名网友 填写信息