目录
论文简介
-
作者
Yi Kong , Wei Yu, Shu Xu , Fei Yu, Yinfei Xu , Member, IEEE, and Yongming Huang , Senior Member, IEEE -
发表期刊or会议
《IEEE COMMUNICATIONS LETTERS》 -
发表时间
2024.9
动机:为什么作者想要解决这个问题?
集中式学习涉及隐私问题,因此提出联邦学习。但联邦学习持续的模型参数交换导致较大的通信开销,现有的解决方案依赖于传统压缩方式,有损压缩、稀疏化、低秩分解和蒸馏等。然而,传统的压缩方法通常会对先验信息施加显著的限制。尽管一些自适应算法可以动态调整超参数,但无法消除对超参数设计经验的依赖。能够有效适应数据动态特性的方法被视为联邦学习中数据压缩的未来趋势。
数据驱动的方法最近称为了模型压缩的主流趋势,然而现有的工作对联邦学习场景关注不足,在解决通信开销的同时,也给服务器端带来巨大的计算开销。此外,为预训练编解码器,需要辅助数据集,使得算法在数据隐私要求较高的场景中难以应用。
这个计算开销来源于哪里?
HCFL中,在服务器端首先需要对每个客户端上传的压缩参数经过decoder进行解压缩,然后才进行模型聚合。
由于解码操作的计算量与客户端数量呈线性关系,当客户端数量庞大时,服务器需重复执行大量解码计算,导致计算开销显著增加。
因此,提出一种基于autoencoder
和注意力机制
的FL架构,该架构可以保证训练性能并降低通信开销,还可以降低服务器端模型参数重构
的计算开销。
贡献:作者在这篇论文中完成了什么工作(创新点)?
- 为了减少对辅助数据集(非客户端真实训练数据)的依赖,需设计一种无需辅助数据集、直接利用客户端真实数据的编码器训练方案。因此,提出一种两阶段训练策略。首先,对部分客户端进行本地预训练,利用过程中的模型参数进行编码器训练;然后,将训练好的编码器广播至所有客户端,客户端在传输参数前进行编码
- 提出一个全新的聚合策略,通过预聚合模块(基于注意力机制)对低维向量进行加权聚合,而非直接解码每个客户端的参数,聚合后仅需单次解码。
规划:他们如何完成工作?
本文假设是IID场景
第一阶段:离线预训练
选择一部分客户端,参与联邦训练 → 每一轮的参数收集在服务器端作为codec的训练数据集 → 训练基于全连接层的codec
第二阶段:广播与应用
服务器将训练好的编码器广播到所有客户端 → 客户端使用编码器进行编码 → 上传压缩参数 → 对各个客户端的压缩参数进行预聚合
→ 对聚合后的压缩参数进行一次解码 → 得到聚合后的参数,更新全局模型
之前的研究在服务器端对每个客户端的压缩参数逐一解码,然后进行聚合,导致解码的计算开销随客户端数量线性增加
预聚合的具体操作为:
预聚合模块以软注意力机制为基础,重点关注数据规模和模型距离两个核心指标,它不参与codec的训练,就是一个公式,直接拿来用:
(1) 数据规模(Data Size)
指标意义:客户端本地数据集大小 D k D_k Dk通常反映其训练样本的丰富度,数据量越大,梯度估计越准确,对全局模型的贡献可能越高。
权重计算:
- 归一化数据规模: v l k = D k ∑ k ′ D k ′ v_l^k = \frac{D_k}{\sum_{k'} D_{k'}} vlk=∑k′Dk′Dk,将绝对数据量转换为相对权重。
- 正向关联:数据量越大,对应权重越高,体现 “数据丰富的客户端优先聚合” 的逻辑。
(2) 模型距离(Model Distance)
指标意义:衡量客户端模型与全局模型的差异,用于抑制 non-IID 场景下的 “客户端漂移”(Client Drift)
技术实现:
- 采用 FedProx 启发的近端约束:计算客户端压缩参数
z
k
z_k
zk 与全局压缩特征
q
t
q_t
qt的 L2 范数距离
s
l
k
=
∥
z
k
−
q
t
∥
2
s_l^k = \| z_k - q_t \|_2
slk=∥zk−qt∥2。
q t q_t qt是当前轮次全局模型参数 w t w_t wt经编码器(Encoder)压缩后生成的低维查询向量。
- 负向关联:距离越小,权重越高,迫使聚合结果向全局模型收敛,避免局部最优。
(3) 软注意力的融合与归一化
线性加权与符号处理: m l k = − μ ⋅ s l k + ( 1 − μ ) ⋅ v l k m_l^k = -\mu \cdot s_l^k + (1-\mu) \cdot v_l^k mlk=−μ⋅slk+(1−μ)⋅vlk
μ \mu μ为超参数,平衡模型距离与数据规模的重要性( μ → 1 \mu \to 1 μ→1 时更关注模型一致性, μ → 0 \mu \to 0 μ→0 时更关注数据量)。对模型距离项添加负号,这样模型距离越小,加了负号就越大,使其与数据规模项的 “越大越好” 方向一致。
Softmax 归一化: α l k = exp ( m l k ) ∑ k ′ exp ( m l k ′ ) \alpha_l^k = \frac{\exp(m_l^k)}{\sum_{k'} \exp(m_l^{k'})} αlk=∑k′exp(mlk′)exp(mlk)将评分转换为概率分布,确保权重和为 1,同时通过指数函数放大差异,突出关键客户端。
理由:通过什么实验验证它们的工作结果
(1) 验证节省了服务器端的计算时间
- 传统算法
- 计算时间:在服务器端需对每个客户端的压缩参数逐一解码后再聚合。当客户端数增加时,传统算法的解码时间沿斜线陡峭上升
- 压缩率:压缩率决定了压缩后参数维度d,压缩率越大,d越小;但是压缩率和解码时间似乎没有关系吧?图中并未展示出压缩率和解码时间的关系,例如90个用户时,解码时间,HCFL1:2<HCFL1:8<HCFL1:4,没有规律
- 所提出的算法
- 计算时间:只进行一次解码,所以随着客户端数量的增加,解码时间几乎就是直线
- 压缩率:似乎没关系
(2) 通信效率和计算资源消耗比较
PS.这个表格吧,描述的不完整,缺少①多少个用户②多少个全局round
-
第一列:表示不同数据集,括号里我猜应该是FEDAVG时的性能;不同数据集用的模型也不一样,因为可以从后面的FEDAVG那列看出来,不压缩情况下通信量不同
-
第二列:CR表示压缩比,最高也才到了8倍
-
第三大列:Communicaiton Cost
比较了HCFL,PAFL(所提算法)和FEDAVG的通信消耗,理论上如果所有层都压缩,CR一样的情况下,通信量是一致的,但是HCFL和PAFL不一样,就代表一定是有的层没压缩,这块没有PAFL的代码,也不得而知了。
但可以看到一个趋势,CR越大,压缩的越狠,通信消耗越少 -
第四大列:Flops
很明显,因为PAFL只decoder一次,所以FLOPs一定是少于HCFL的;
但是FLOPS看起来和CR无关,例如MNIST数据集,对于FLOPS,PAFL1:2>PAFL1:8>PAFL1:4,没规律啊!
(3)在 MNIST 数据集上每轮仅 10% 用户参与时性能与通信开销的关系
PS.缺少①多少个用户
- 准确率与通信开销
- 整体来看,随着通信开销的增加,各算法的测试准确率逐渐趋于稳定或略有提升
- PAFL 在较低的通信开销下,能够达到甚至超过 FEDAVG 的准确率。例如,PAFL 1:8 在通信开销约为 500MB 时,准确率已经接近 FEDAVG 在通信开销为 5000MB 时的水平
- 不同算法
- PAFL 在所有压缩比下,均表现出较好的性能。特别是在高压缩比(如 1:8)时,PAFL 的准确率明显高于其他算法,且通信开销更低
理论上,压缩再恢复的测试精度不应该超过FedAVG吧
自己的看法(作者如何得到的创新思路)
可以加信道,变成语义通信,只训练一个decoder,多个encoder
每个用户使用encoder生成压缩后的向量→经过attention→叠加后的向量→信道→对叠加后的向量直接进行解码→输出
即节省了通信资源(信道前叠加),又节省了计算资源(一次解码)
fedavg的聚合结果作为ground_truth,语义通信的输出直接是聚合后的结果,计算它们之间的MSE;
为了加任务导向,把语义输出的参数加到联邦任务中看性能
原文中权重是一个固定函数:
m
l
k
=
−
μ
⋅
s
l
k
+
(
1
−
μ
)
⋅
v
l
k
m_l^k = -\mu \cdot s_l^k + (1-\mu) \cdot v_l^k
mlk=−μ⋅slk+(1−μ)⋅vlk
存在局限性:
- 评分函数依赖手动设计的公式和超参数(如 μ \mu μ),可能无法充分捕捉客户端参数的复杂关系。
- 在噪声信道或非IID场景下,固定公式可能不灵活,无法自适应地调整权重。
可以尝试将其变成可训练的网络:
网络结构可以是简单的多层感知机(MLP)或其他适合的架构,例如:
输入:拼接
z
t
k
z_t^k
ztk 和
q
t
q_t
qt(全局模型的编码表示)
输出:标量得分
s
k
s_k
sk,用于计算注意力权重
α
k
=
softmax
(
s
k
)
\alpha_k = \operatorname{softmax}(s_k)
αk=softmax(sk)。
import torch
import torch.nn as nn
class AttentionScorer(nn.Module):
def __init__(self, latent_dim, hidden_dim=128):
super(AttentionScorer, self).__init__()
self.mlp = nn.Sequential(
nn.Linear(latent_dim * 2, hidden_dim), # 输入 z_t^k 和 q_t 拼接
nn.ReLU(),
nn.Linear(hidden_dim, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, 1) # 输出标量得分
)
def forward(self, z_k, q):
# z_k: (batch_size, latent_dim), q: (latent_dim,)
input_tensor = torch.cat([z_k, q.expand(z_k.size(0), -1)], dim=1)
score = self.mlp(input_tensor) # (batch_size, 1)
return score.squeeze(-1) # (batch_size,)
原文的评分函数是固定的L2范数和数据集大小组合,依赖超参数
λ
\lambda
λ。
可训练的评分函数通过神经网络学习复杂的非线性关系,可能捕捉更多潜在模式(如客户端参数的语义重要性或噪声影响)
然后可以在过信道前就叠加,这不更进一步的节省通信资源了吗
具体流程:
(1)数据准备:
- 收集 K K K个客户端的模型参数,模拟联邦学习场景。
- 使用fedavg获取全局模型参数 w t w_t wt,编码为查询向量 q t = f w ( w t ) q_t = f_w(w_t) qt=fw(wt)。
(2)编码:
每个客户端k使用各自的encoder将参数编码为:
z
t
k
z_t^k
ztk,使用基于全连接层的编码器
(3) 注意力机制:
这块应该需要看一下师姐的论文,使用注意力,评估每个客户端参数的重要性,然后分配不同的权重,进行叠加
(4) 传输
叠加后的语义通信信道传输
(5) 解码
使用单个解码器对叠加的语义进行解码
(6) 损失函数:
fedavg的聚合结果作为ground_truth,语义通信的输出直接是聚合后的结果,计算它们之间的MSE;
为了加任务导向,把语义输出的参数加到联邦任务中看性能
优化:
k个编码器、一个解码器和注意力