Page 399 - 《软件学报》2026年第3期
P. 399

1362                                                       软件学报  2026  年第  37  卷第  3  期


                                            t ∈ {0,1,...,T} 的开始阶段, 服务器会将当前的全局模型发送给           K  个客户端, 其
                    (1) 模型分发. 在某一全局轮次
                 中  T  是全局训练的总轮次数量.
                                                                   D k  上使用收到的全局模型执行       e 次本地迭代, 然
                    (2) 本地更新. 每个客户端      k ∈ {1,...,K} 会在它的本地数据集
                 后客户端   k 会将更新后的本地模型上传给服务器.
                    (3) 模型聚合. 在服务器收集到所有的         K  个客户端上传的本地模型之后, 服务器按照特定的模型聚合规则来进
                                               [32]
                 行全局模型的更新 (比如模型参数平均)             . 之后, 联邦学习继续下一个全局轮次的模型训练.
                  3.2   所提框架训练流程
                    当客户端之间的本地数据集分布是非独立同分布时, 传统联邦学习的模型训练性能会严重下降                                [8] . 因此, 我们
                 提出了一个结合知识自蒸馏和块级多输出的框架                  (即  FedAlt) 来缓解这一问题. FedAlt 通过使用多个模型块的多
                 条输出与模型输出进行知识自蒸馏, 使客户端在进行本地更新时吸收来自更多前面模型块的表征层信息, 从而缓
                 解了数据的非独立同分布问题. 此外, 我们根据客户端之间不断变化的通信和计算能力使服务器分发不同数量的
                 全局模型块, 从而充分利用网络中的资源.
                    具体来说, 我们将模型按照深度神经网络中的层次结构划分为                     M  个模型块, 如图    1  所示的例子, 全局模型和
                 本地模型都是按照 ResNet-18 网络模型        [33] , 并根据其自身的残差结构将其按照神经网络的顺序划分为 4 个模型
                 块  (即, M = 4), 其中每一个模型块对应一个残差块. 由于当前的深度学习模型往往具有层次结构                       [34] , 所以本节这种
                 划分模型块的方法可以很好地应用到大部分深度学习模型中. 需要注意的是, 我们所提的 FedAlt 框架同样适用于
                 GCN  这种浅层模型    (如, M = 2). FedAlt 和  FedAvg  的主要不同体现在模型分发和本地更新阶段. 此外, 本节在模型
                 分发和本地更新之间新增了一个模型组合阶段, 用来描述客户端在收到全局模型块后如何覆盖自己的本地模型.
                 结合图   1, FedAlt 的工作流程具体被分为以下       4  个阶段.
                                            t ∈ {0,1,...,T} 的开始阶段, 服务器会根据客户端的本地数据分布、计算能力和
                    (1) 模型分发. 在某一全局轮次
                 通信能力发送不同数量的连续的全局模型块. 注意, 这些全局模型块是全局模型的前面一部分模型块. 相比于
                                                                              t  m  来表示第   t 个全局轮次的全
                                                                                  t
                 FedAvg, FedAlt 只发送了部分模型, 因此显著减少了通信开销. 我们分别使用                x  和
                                                                                  k
                 局模型和服务器发送给客户端           k 的全局模型块的数量. 为了防止客户端会遗忘全局模型的信息从而使客户端本地
                 出现模型漂移     [8] , 我们采用了一种新的模型传送的方法, 即服务器每隔             τ 轮就发送一次整个的全局模型. 也就是说,
                 对于客户端    k 而言, 当     τ+1 的倍数时服务器会发送整个的全局模型给客户端                                     m  个
                                                                                                      t
                                  t 是
                                                                                k. 否则服务器会将前面的
                                                                                                      k
                 全局模型块分别发送给客户端           k. 为区别服务器是发送      m  个模型块还是发送整个的全局模型, 我们将             m  的最大值
                                                            t
                                                                                                t
                                                            k                                   k
                               t              M = 0 时, 表示服务器发送整个的全局模型.
                 设置为   M −1, 即  m ∈ {0,..., M −1}. 当
                               k
                                                                                              t
                                                 t                                        M −m  块本地模型
                    (2) 模型组合. 如果客户端收到前面         m  块全局模型, 它会将上一轮保存的本地模型的后面
                                                 k                                            k
                 块与接收到的全局模型块进行组合, 形成一个组合模型, 之后的本地更新阶段会直接在这个组合模型上进行更新.
                 如果客户端收到的是整个全局模型, 那么客户端会直接将这个全局模型覆盖掉上一轮保存的本地模型, 即客户端
                                                                                   t
                 直接将接收到的全局模型用作组合模型, 之后基于这个组合模型进行更新. 我们使用                           x  来表示客户端    k 在全局轮
                                                                                   k
                 次  t 的本地模型. 此外, 我们分别使用       x t,i   和  x t,i  表示第  t 个轮次的全局模型的第  i 个模型块和第  t 个轮次的客户端
                                                   k
                 k 的本地模型的第     i 个模型块. 例如, 在某个全局轮次        t, 假设客户端   k 接受了来自服务器的两块全局模型块            (即  x t,1
                   x ), 则客户端                                     t −1 保存下来的本地模型的后两个本地模型块              (即
                    t,2
                 和             k 会将这两块全局模型块与上一个全局轮次
                      t,4
                 x t,3   和  x ) 组合形成组合模型. 之后, 这个组合模型会按照图        2  所示结构并采用知识自蒸馏技术进行本地更新, 具
                  k   k
                 体会在第   3.3  节进行详细介绍. 在图     2  中, 黑色的箭头指示着正向传播的路径, 瓶颈层的作用是使得各个模型块的
                 输出维度一致; q    表示经过正向传播得到的输出,           q m  表示经过所有的模型块得到的输出; y 和         ζ  分别表示数据的真
                 实标签和损失项; 双向箭头表示损失函数中不同的损失项.
                    (3) 模型训练. 在客户端     k 形成组合模型之后, 客户端       k 将这个组合模型视为新的本地模型            x . 之后, 客户端会
                                                                                           t
                                                                                           k
                 按照图   2  的计算路径执行    e 次本地迭代. 然后, 客户端                            x  上传给服务器, 同时, 保存更
                                                                                 t
                                                           k 将训练更新后的本地模型
                                                                                 k
                               t
                 新后的本地模型      x , 用来形成下一全局轮次的组合模型. 注意, 客户端进行本地更新时, 本地模型中的全局模型块
                               k
   394   395   396   397   398   399   400   401   402   403   404