Page 456 - 《软件学报》2026年第3期
P. 456
宁小勇 等: 融合 TextCNN 和对抗训练的以太坊庞氏骗局检测模型 1419
在得到行为序列之后使用 Word2Vec [34] 、GloVe [35] 等模型进行向量初始化. 预先训练的词向量嵌入可以利用
多种语料库从而获得更多的先验知识, 而当前网络训练的词向量可以更好地捕获与当前任务相关的特征. 在本文
中, 将智能合约行为序列作为输入, 操作码数量种类固定, 且重点关注操作码的分布情况, 因此本文采用 Word2Vec
作为词向量嵌入算法, 将行为序列输入到 Word2Vec 生成词向量, 向量维度 k 设置为 300. V = R 是行为序列中第
k
i
[ 1 2 n ] n×k
i 个单词对应的 k 维单词向量. 长度为 n 的序列可以表示为矩阵 V 1:n = V ,V ,...,V ∈ R .
3.2 动态步长投影梯度下降算法
对抗性训练是深度学习模型防御对抗攻击的最有效方法之一. 与其他防御策略不同的是, 对抗训练旨在从本
质上增强模型的稳健性. 投影梯度下降算法 (PGD) 是当前最流行的对抗训练算法, 但由于步长固定, PGD 无法保
证在面对非凸问题时达到最优. 此外, 在使用神经网络时, 无法确保收敛, 并且无法确定扰动方向是否有利, 因此无
法感知正确的优化趋势.
为了解决这些问题, 本文提出了一个动态步长投影梯度下降算法 (DSPGD), 引入动态步长控制因子来控制
步长的大小, 并根据损失的更新情况来判定优化的方向. 如算法 2 所示, 该算法在 PGD 的基础上, 根据 α±β 确
定最优点的方向, 如果在这两个方向上找到比上一次迭代更大的损失, 则表示该方向有效, 反之该方向无效, 减
少步长为原来的 1/2, 继续进行迭代, 直到找到使得目标函数最大的扰动因子. 改进后的 PGD 步长可变, 且能够
感知正确的优化方向, 从而更能找到使得目标函数最大的步长, 生成对抗样本 x max , 将 x max 加入 TextCNN 模型进
行训练, 让模型拟合该样本. 考虑到词嵌入含有丰富的语义信息, 因此将在词嵌入层进行扰动, 得到扰动后的向
V adv .
量矩阵 1:n
算法 2. 动态步长投影梯度下降算法.
K
S
输入: 行为序列 x, 初始步长 , 变化步长 α, 控制因子 β, 约束阈值 ε, 迭代次数 , 目标函数 f (x);
,
x adv max k f (x).
输出: 对抗样本
1. BEGIN
0
2. x 初始样本、 S = α 初始步长
3. FOR k=1 TO K–1 DO
( )
k
4. 计算当前样本的梯度 ∇ f x
,
5. s 1 = α+β s 1 = α−β //计算两个方向的步长, 步长可变
( ) ( )
s 1 、 k+1 、 k+1 k+1 、 k+1
6. 计算由 s 2 生成的 x x 的梯度 ∇ f x ∇ f x
s 1 s 2 s 1 s 2
( ) ( )
7. IF ∇ f x k+1 > ∇f x k+1 THEN //比较得到最大的损失下的步长
s 1 s 2
8. S = s 1
( ) ( )
9. ELSE IF ∇ f x k+1 < ∇f x k+1 THEN
s 1 s 2
10. S = s 2
11. END IF
( ( ) ( ))
)
(
12. ∇ f x k+1 = max ∇ f x k+1 ,∇ f x k+1 //找到正确的优化方向
S S 1 S 2
( ) ( )
k
13. IF ∇ f x k+1 > ∇f x THEN //与当前点的损失进行比较
S
14. S = S ÷2
15. END IF
( )
(
k
16. ELSE IF ∇ f x k+1 ) < ∇f x THEN
S
( ( ))
k
17. x k+1 = x + s· sign ∇ f x k //生成对抗样本
adv S
( )
18. max k f (x) = f x k+1
adv
19. END IF

