TBCNN

    • TBCNN – 基于树的卷积神经网络

      TBCNN: A Tree-Based Convolutional Neural Network for Programming Language Processing

      • 一种用于编程语言处理的基于树的卷积神经网络

      • Abstract:

        • 由于当前还没有将深度神经网络应用于编程语言处理, 提出TBCNN模型来对基于ASTs的编程语言进行建模, 提取丰富的信息
        • 在模型中首先通过基于ASTs的编码准则来预训练获得program vector, 然后通过树型卷积来捕捉树的一些有用特征, 并且引入了三路池化(3-way pooling)和连续二叉树(continous binary tree)来处理不同形状大小的ASTs
        • 通过与基准方法对比, 这个方法可以更好更快地完成程序分类任务, 同时预训练出来的program vector也能提高训练的速度
      • Introduction:

        • 编程语言和自然语言的区别: 程序包含丰富而明确的结构信息, 编程语言中的源代码往往遵循固定僵化的语法结构, 而且通过复杂的控制流和数据流, 批次之间的代码块之间可能存在依赖关系
          1. 提出“编码准则”学习ast中每个节点的向量表示,作为预训练阶段;
          2. 提出了基于树的卷积方法提取程序的局部结构特征;
          3. 引入“连续二叉树”和“三路池化”的概念,使模型适用于不同结构和大小的树;

      整体模型

      jQp8zQ.png

      • Pretraining

        • 对于一个节点 p p p 和它的所有孩子 c 1 , c 2 , . . . , c i c_1, c_2,...,c_i c1,c2,...,ci ,用一下式子来表示 p p p 的coded vector

          v e c ( p ) ≈ t a n h ( ∑ i l i W c o d e , i v e c ( c i ) + b c o d e ) vec(p)\approx tanh(\sum_il_iW_{code,i}vec(c_i)+b_{code}) vec(p)tanh(iliWcode,ivec(ci)+bcode)

        • 定义 v e c ( p ) vec(p) vec(p) p p p 的 coded vector 的距离的平方

          d = ∣ ∣ v e c ( p ) − t a n h ( ∑ i l i W c o d e , i v e c ( c i ) + b c o d e ) ∣ ∣ 2 2 d=\left|\left|vec(p)-tanh(\sum_il_iW_{code,i}vec(c_i)+b_{code}) \right|\right|_2^2 d=vec(p)tanh(iliWcode,ivec(ci)+bcode)22

        • 同时, 通过将一个随机一个节点( p p p 或者 p p p 的某一个孩子) 换成一个随机的symbol 来完成负采样, 把这个负样本和其coded vector之间的距离计为 d c d_c dc

        • 目标: m i n i m i z e W c o d e l , W c o d e r , b c o d e m a x ( d − d c + △ ) minimize_{W^l_{code}, W^r_{code},b_code} max(d-d_c+\triangle) minimizeWcodel,Wcoder,bcodemax(ddc+)

      • Coding layer

        • 对于非叶子结点, p = W c o m b 1 v e c ( p ) + W c o m b 2 t a n h ( ∑ i l i W c o d e , i v e c ( x i ) + b c o d e p =W_{comb1}vec(p)+W_{comb2}tanh(\sum_il_iW_{code,i}vec(x_i)+b_{code} p=Wcomb1vec(p)+Wcomb2tanh(iliWcode,ivec(xi)+bcode
      • Tree-based consolution layer

        jQp1JS.png

        用固定深度的树型卷积核划过整个树结构, 假定对应节点的向量表示是 x 1 , x 2 , . . . x n x_1, x_2, ... x_n x1,x2,...xn, 那么这个卷积层的输出是

        y = t a n h ( ∑ n W c o d e , i ∗ x i + b c o d e ) y=tanh(\sum_nW_{code,i}*x_i+b_{code}) y=tanh(nWcode,ixi+bcode)

        而由于孩子节点的数量不固定并且树的形状和大小不固定, 这一步需要同时用zero-paddings和连续二叉树的概念

        • 连续二叉树 continuous binary tree

          把目标子树看作是一个二叉树(无论原本是什么形状和大小), 使用三个基本的权重矩阵 W c o n v l e f t , W c o n v r i g h t , W c o n v t o p W^{left}_{conv}, W^{right}_{conv}, W^{top}_{conv} Wconvleft,Wconvright,Wconvtop.

          对于子树中的某一个节点 x i x_i xi, 其权重矩阵 W c o n v W_{conv} Wconv 是这三个基本权重矩阵的线性组合

      • Three-way pooling

        jQp3Rg.png

        卷积层之后会得到一个形状和大小不变的新树, 因此不能直接接到hidden layer和output layer

        用三路池化讲特征池化成三个部分

      • SGDM 优化器算法

        • 向后传播算法
      • Hiden layer and output layer — softmax

        归一化 s o f t m a x i = e i ∑ j e j softmax_i =\frac{e^i}{\sum_je^j} softmaxi=jejei

      • 实验和实验结果
        • 向量表示成功地捕获了AST节点的有意义特征
        • 神经编程语言处理, 对程序进行分类是有效可行的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值