Treecaps论文阅读

Treecaps

TBCNN和GGNN不能准确地捕捉代码元素之间的语义依赖关系

  • 优势: 能够更准确地编码句法结构和捕获代码依赖关系, 胶囊网络能很好地捕捉输入物体之间相对空间和层次关系, 捕获代码元素之间显式的、结构化的父-子兄弟关系

    应用: 读懂代码功能,对代码功能进行分类

    但是不能同时捕捉语法结构与依赖信息

  • Overview Architecture:

    1. 用 将训练数据中的代码转化为ASTs, 并将其矢量化, 然后将ASTs和矢量化的节点送到TBCNN中获取特征

    2. 将TBCNN的输出的张量输入到PVC层中分组成一组胶囊,这组胶囊的数量是动态的

    3. 通过动态路由算法, 将PVC层中的胶囊路由到SC层, 同时减少组合到固定数量的胶囊, 这一层中的胶囊数量是静态的c

    4. SC层的输出被路由到最终的代码胶囊(CC)层,其中胶囊可以被视为输入代码的向量表示,并可以根据各种代码理解任务进行训练,如代码功能分类和函数名称预测。

  • The Primary Variable Capsule Layer (PVC)

    每个TBCNN卷积层输出一个 |V|\times D 的张量, |V| 是AST的节点数, D 是节点嵌入的维数, 有 m 个这样的卷积层, 那么TBCNN的输出是一个|V| \times D\times m 的一个张量, 那么令 

  • N_{pvc }= |V|\times D, D_{pvc}=m

  • 通过一个非线性的squash function:

    u_i =\frac{||c_i||^2}{||c_i||^2+1}\cdot\frac{c_i}{||c_i||}

    得到PVC层的输出张量 X_{pcv}\in R^{N_{pvc}\times D_{pvc}}

  • The Secondary Capsule Layer (SC)

    由于PVC层的胶囊数量是变化的, 因此不能直接路由到最后的CC层, 因此这篇论文提出了两种方法来解决这个问题:

    1. DRSW: 动态囊见路由算法

      先定义一个可训练的共享的变换矩阵 W_s \in R^{N_{pvc}\times D_{pvc}\times D_{sc}}, N_{pvc} 是PVC层中的胶囊数量,D_{sc}是SC层中每个胶囊的维度

      将其与PVC的输出张量相乘得到 prediction vector u_{j|i}=W_su_i

      然后将prediction vector作为囊间路由算法的输入运算

    2. VTS: 动态转静态

      用PVC层输出的张量 X_{pvc} 的L2范数模拟实体存在的概率, 然后进行排序, 将排序后的前a个值取出.

  • The Code Capsules Layer (CC)

    输出代码的vector embedding: X_{cc} \in R^{N_{cc}\times D_{cc}}

    可以通过其完成代码功能分类任务和函数名的预测任务

    1. 程序功能分类任务

    2. 函数名预测任务

capsules network -- 胶囊网络

  • 优势: CNN很难识别图中位置的关系, CNN不能理解图片的语义和位置关系, 并且没有空间分层和空间推理能力, 而相比于CNN, capsnet可以只需要学习一小部分的数据, 通过囊间动态路由算法,就可以实现先进的功能

  • 胶囊是如何工作的:

    胶囊输出向量的长度代表着对应特征出现的概率, 而方向代表着空间位置等特征信息

  • 囊间动态路由算法

    路由(routing) : 底层胶囊将输入向量传递到高层胶囊的过程

    r 表示迭代系数, u_{j|i} 是来自了l (底层)的胶囊的输入

    通过点积u_{j|i}*v_j来刻画底层胶囊输入和高层胶囊输出之间的相似性, 相似 --> 点积>0 --> b_{i,j}增加, 反之不变或者减少 --> 路由系数(u_{j|i}​​​​​​​的权重)c_{i,j}=softmax(b_{i,j})相应变化

    迭代系数过多容易导致过拟合, 一般用3次比较适合, 这样算法重复 r 次之后就计算了所有高层胶囊的输出还有确立了所有的路由权重, 之后正向传导就可以推进到更高层的网络

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值