Page 231 - 《软件学报》2026年第7期
P. 231

2916                                                       软件学报  2026  年第  37  卷第  7  期


                 题. 与传统的集中式学习方法不同, 该框架允许各项目组在不共享原始数据的情况下协同训练缺陷预测模型. 整个
                 系统由多个项目组客户端和一个中央协调服务器组成, 各客户端维护自身的数据和个性化模型, 通过联邦机制实
                 现知识共享.

                       数据收集 & 预处理                     客户端模型结构                     个性化联邦学习框架
                                                 输入x                       差分隐私噪声计算公式
                   (1) 数据收集      (2) 数据预处理                  特征映射模块 (feature_mapping)
                                  缺陷数据集                          Linear
                                              BatchNormld (input_dim)  (input_dim → d_model)
                   开源项目软件缺陷数据集组
                                                DropOut (0.2)   BatchNormld  更新的全局模型
                                                                (d_model)
                                                                            (个性化)        模型聚合
                                                 LSTM                             个性化模型        更新的全局模型
                                ...                                                        更新的全局模型  (个性化)  个性化模型
                                                               LeakyReLU (0.1)             (个性化)
                  GitHub-Python  ReLink  MDP
                                                                DropOut (0.1)         个性化模型
                                                特征对齐Linear
                          标签标准化               (input_dim → d_model)
                       将多格式标签转换为二进制值                           特征对齐Linear
                        (0 = 无缺陷, 1 = 有缺陷)                    (input_dim → d_model)           客户端2
                                                                             客户端1  本地训练            本地训练
                                                LeakyReLU (0.1)              (项目组1)           (项目组2)
                                                                BatchNormld
                                                                (d_model)
                         特征预处理                 输入层 (input_layer)            损失函数
                                              Linear (d_model → d_model)
                                                                                                  ...
                    维度   缺省值&  极端    特征
                    标准化  异常值处理  值处理  归一化       Transformer block  预输出层 (pre_output)     客户端3  本地训练
                                                × num_layers
                    统一维度  中位数填  IQR检测  Z-score                   Linear                 (项目组3)
                    至21维度  充NaN+  +截断  标准化 →                  (d_model → d_model/2)
                                    限制范围
                   (方差选择/  替换无穷  +Winsorizing  → MinMax  输出层 (output_layer)
                    零填充)  值     处理   [−1, 1]   Linear (d_model/2 → 1)         本地训练
                                                                BatchNormld
                                                                (d_model)
                                                  输出           LeakyReLU (0.1)   更新的全局模型 (个性化)
                       SMOTE过采样 (少数类<30%)
                                                      图 2 方法框架图

                    本文的核心贡献在于将个性化联邦学习与差分隐私保护机制深度融合. 传统的联邦学习方法通常采用单一的
                 全局模型, 难以适应不同项目间的异构性特征. PRIDE-SDP              通过引入个性化机制, 为每个项目组维护定制化的模
                 型参数, 同时保持全局知识的有效传递. 此外, 本文在模型参数传输过程中应用严格的差分隐私保护, 通过精心设
                 计的噪声注入和隐私预算管理策略, 确保即使在模型参数被恶意分析的情况下, 也无法推断出原始训练数据的敏
                 感信息.
                    整个训练过程遵循迭代优化的范式. 如算法              1  所示, 在每个通信轮次中, 服务器首先根据历史贡献度评估选择
                 参与训练的客户端子集. 被选中的客户端使用本地数据进行个性化模型训练, 训练过程中应用焦点损失处理类不
                 平衡问题, 并通过近端项约束保持与全局模型的适度偏离. 训练完成后, 各客户端对梯度添加自适应噪声以满足差
                 分隐私要求, 并将模型更新发送给服务器. 服务器基于贡献度加权策略进行全局模型聚合, 更新后的全局模型被分
                 发给各客户端. 各客户端根据新的全局模型自适应调整其个性化模型参数, 在保留本地数据特性的同时吸收全局
                 知识, 为下一轮训练做好准备.
                 算法  1. PRIDE-SDP  训练算法.
                 输入: 客户端集合     C, 隐私预算  ε, 失败概率   δ, 聚合轮数  T;
                 输出: 全局模型    G, 个性化模型集合     P.

                 //初始化阶段
                 1.   G ← InitializeModel()
                 2.   P ← {}, R ← {} //R  为每轮客户端贡献度记录
                              (    )
                                  t
                 3.     ε t ← ε total ·exp −λ·   //每轮隐私预算分配
                                  T
                 4.   for t = 1 to T do
                 5.     S t  ← ClientSelection(C, R) //基于历史贡献度选择客户端
   226   227   228   229   230   231   232   233   234   235   236