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
   451   452   453   454   455   456   457   458   459   460   461