系列文章目录
读论文系列(一)Automated software vulnerability detection with machine learning
文章目录
Keywards
抽象语法树(AST)
树卷积神经网络(TBCNN)Tree-Based Convolutional Neural Network
连续二叉树
Overall Architecture(整体架构)
AST节点首先被表示为一个分布式实值向量
tree-based convolution kernel 基于树的卷积核,在AST上滑动提取提取程序的结构信息
通过dynamic pooling来收集信息
加上一个隐藏层
输出层最后使用softmax
Representation Learning for AST Nodes
Vector representations(embeddings) 向量表示的大致过程
对于每个非叶节点p及其直接子节点 c1 …cn
叶子节点ci的权重矩阵
偏执bias
li是叶节点的权重系数
连续二叉树的提出
原因:非叶节点的子节点数目不同,导致叶子节点的权重矩阵不同
为了克服这一问题,引出连续二叉树
只有两个权重矩阵作为模型参数
Wi 是两个参数矩阵根据节点位置的线性组合
Coding Layer
在对所有的特征进行预训练后,将其丢进模型进行训练
对于叶子节点,只是将预训练阶段学习的向量表示
对于非叶节点p,它有两种表示法:在预训练阶段学习的表示法
编码的表示法
其公式如下
组合参数
Tree-based Convolutional Layer
我的理解是:
这个虚线三角形是一个特殊的卷积核,通过在树上滑动来提取特征(一般卷积是个矩阵的kernel,但在该模型中,则表示为树的深度,如图,深度设置为2)
滑动到底层没有那么多的节点的时候,就填0
输出
维数为卷积核的个数
Dynamic Pooling
在卷积之后,提取AST中的结构特征,并生成新的树。新树的形状和大小与原始树完全相同,但在不同的程序中有所不同。因此,提取的特征不能直接输入到固定大小的神经层。动态池用于解决这个问题。
最简单的方法可能是将所有特征汇集到一个向量中。我们称之为单向池。具体来说,每个维度的最大值取自基于树的卷积检测的特征。我们还提出了一种替代方案,即三向池,根据特征在AST中的位置,将特征池分成三个部分:顶部、左下方和右下方(图2b)。正如我们将从实验结果中看到的,简单的单向池和三向池一样有效。因此,我们在实验中采用了单向池。
合并后,特征完全连接到隐藏层,然后馈送到输出层(softmax)进行监督分类。通过动态池过程,整个AST的结构特征以短路径到达输出层。因此,可以通过反向传播有效地训练它们。
The “Continuous Binary Tree” Model
在我们的模型中,我们将任何子树视为“二叉”树,无论其大小和形状如何。也就是说,我们只有三个权矩阵作为卷积的参数,两个用于编码。我们称之为连续二叉树。
直接贴图
卷积的三个参数
Wconv 和三个参数的系数关系
参数计算
所有参数
Experiments
关于数据集部分,论文原文给了明确解释
result