如图1所示,模型的输入是一个带有属性的控制流图( attributed control flow graph, ACFG)。
G
=
<
V
,
E
>
G=<V, E>
G=<V,E>,其中V和E分别为控制流图中的结点和边,每个基本块结点v的向量表示设为
μ
v
\mu_v
μv。整个ACFG的向量可以表示为
μ
g
=
∑
v
∈
V
μ
v
\mu_g = \sum_{v \in V} \mu_v
μg=∑v∈Vμv。
如何对ACFG结构进行训练,得到ACFG的向量表示是Struct2vec的重点。Struct2vec利用迭代的方法对ACFG中每个结点的信息进行更新:
μ
v
(
t
+
1
)
=
F
(
x
v
,
∑
u
∈
N
(
v
)
μ
u
(
t
)
)
,
∀
v
∈
V
\mu_{v}^{(t+1)} = F(x_v, \sum_{u \in N(v)}\mu_u^{(t)}), \forall v \in V
μv(t+1)=F(xv,u∈N(v)∑μu(t)),∀v∈V
其中
x
v
x_v
xv为从结点(基本块)
v
v
v中抽取的数值特征,
N
(
v
)
N(v)
N(v)为结点
v
v
v的邻居。F为一个非线性映射:
F
(
x
v
,
∑
u
∈
N
(
v
)
)
=
t
a
n
h
(
W
1
x
v
+
σ
(
∑
u
∈
N
(
v
)
μ
u
)
)
F(x_v, \sum_{u \in N(v)}) = tanh(W_1x_v + \sigma(\sum_{u \in N(v)}\mu_u))
F(xv,u∈N(v)∑)=tanh(W1xv+σ(u∈N(v)∑μu))
其中
σ
\sigma
σ是一个n层的全连接网络。F的整体结构如下所示。
训练Struct2vec网络的目标函数为对相似函数的相似度度量:
S
i
m
(
g
,
g
′
)
=
c
o
s
(
ϕ
(
g
)
,
ϕ
(
g
′
)
)
Sim(g, g') = cos(\phi(g), \phi(g'))
Sim(g,g′)=cos(ϕ(g),ϕ(g′))
Struct2vec
最新推荐文章于 2024-04-27 09:53:26 发布