想象一场别开生面的社区美食节:十家风味迥异的餐馆受邀共同研发一道“社区招牌菜”。每家都藏着独门食材和祖传配方,谁也不肯把完整菜谱公之于众——这既是商业机密,也关乎顾客隐私。于是社区请来一位总厨定下规矩:先发一份基础菜谱给各家;各家在自己的厨房里用自家食材试做、微调配料,但只上交一页“改良笔记”,绝不端出菜品;总厨按各家客流量加权汇总这些笔记,生成新版通用菜谱再分发下去。如此反复数十轮,一道融合百家智慧、却不泄露任何一家机密的菜式就此诞生。这就是联邦学习(Federated Learning)的协作图景,而让这套图景真正落地的奠基算法,就是本篇文章的主角——FedAvg(Federated Averaging,联邦平均)。它把“数据不动、模型动”的理念凝练成一条参数加权聚合公式,成为后续几乎所有联邦学习工作的起点。接下来,我们顺着这场美食节的每一道工序,拆解 FedAvg 的思想、流程、公式与工程实践。
掌握 FedAvg,你就拿到了联邦学习的通用钥匙:无论在金融、医疗还是移动端场景,你都能设计出“数据不出域、模型持续进化”的落地方案。这是隐私计算时代 AI 工程师的核心竞争力。
目录
可视化演示
\u5c55\u793aFedAvg\u8054\u90a6\u5e73\u5747\u7b97\u6cd5\u7684\u591a\u8f6e\u8bad\u7ec3\u6d41\u7a0b\u4e0e\u53c2\u6570\u52a0\u6743\u805a\u5408\u673a\u5236\uff0c\u5305\u542b\u670d\u52a1\u5668\u5206\u53d1\u6a21\u578b\u3001\u5ba2\u6237\u7aef\u672c\u5730\u8bad\u7ec3\u4e0e\u52a0\u6743\u5e73\u5747\u3002
本节配有交互动效(进入视口后自动加载,约 3KB)。
\u8054\u90a6\u8bad\u7ec3\u6a21\u5f0f \u670d\u52a1\u5668(SRV)\u54115\u4e2a\u5ba2\u6237\u7aef\u5206\u53d1\u5168\u5c40\u6a21\u578b \u7eff\u8272=\u4e0b\u53d1\u6a21\u578b\uff0c\u7ea2\u8272=\u4e0a\u4f20\u68af\u5ea6 w_k = n_k / \u03a3n_i (\u6309\u6570\u636e\u91cf\u52a0\u6743)
背景动机:数据孤岛与隐私红线
故事要从这场社区美食节说起。十家餐馆各有拿手好菜,却从不交流——不是不想,而是每家都有独门秘方,谁也不愿把压箱底的本事亮出来。更要紧的是,社区有明文规定:顾客的口味数据归顾客本人所有,未经允许绝不能带出店门。于是所有餐馆都陷入同一个困境:想做出更好的菜,却凑不齐更多“食材情报”,只能各自在原地打转。
机器学习的世界里,同样的困境被称为数据孤岛:医院有影像数据,银行有流水数据,手机里有行为数据,但它们受《数据安全法》、GDPR 等法规约束,不能集中到同一个数据中心。传统的集中式训练要求把所有数据汇集到一处再统一建模,这在合规与信任的双重压力下越来越行不通——不是算法不行,而是“数据根本聚不到一起”。
联邦学习给出了一个截然不同的答案:反过来,让模型“出差”去数据所在地。它把训练拆解成“本地训练 + 参数聚合”两个动作,数据全程不离开持有方。2016 年提出的 FedAvg 是这一思想最早的完整算法实现,它第一次让“多方在不共享数据的前提下协作训练”变得工程上可行,并且实验证明:在数据独立同分布时,FedAvg 的效果可以逼近集中式训练。
回到美食节:总厨的妙招不是强迫各家交出菜谱,而是让每家在自己的厨房里试做同一道菜,只汇报“改动心得”。FedAvg 正是这套协作规则的最小可行版本——它不解决所有问题,却是整个联邦学习大厦的第一块基石。
核心思想:数据不动,模型动
总厨到底怎么让十家餐馆协作?他的规则只有一句话:菜谱可以传,食材绝对不能出门。每家餐馆领到同一份通用菜谱,在自己的厨房里用自家食材试做,记录下“盐多放了一克、火候减了半分钟”这类改动。回到聚会时,谁也不许端出菜品本人,只准汇报自己的改动比例——除非,你先把完整的菜谱交出来,否则就没有资格参与下一轮改良。
对应到 FedAvg,这句规则就是“数据不动,模型动”。全局模型相当于那份通用菜谱,本地数据相当于各家的食材库存。每一轮协作中,服务端把当前全局模型下发给选中的客户端;客户端用本地数据训练模型若干轮,得到一个“本地改良版”;随后客户端只把改良后的模型参数传回服务端——而不是把训练数据打包上传。
为什么传参数就够了?因为模型参数本质上是对数据分布的一种压缩统计:它把成千上万条样本的规律浓缩成一组数值。上传参数等价于传递“从数据中学到的知识”,而不是数据本身。服务端收到各家参数后做一个加权平均,形成新的全局模型,再开启下一轮。这套“本地训练 + 聚合下发”的循环,就是联邦学习的引擎,FedAvg 则是引擎的点火公式。
几个月下来,餐馆们发现:大家的菜都做得比以前好了,但没有任何一家的秘方泄露出去。数据没有出门,智慧却流动了起来——这正是 FedAvg 最迷人的地方,也是它被称作“奠基算法”的原因。
算法流程:一轮又一轮的协作
美食节的改良计划要持续很多轮,每一轮的流程都一模一样:选定参与者、各自改进、汇总心得、发布新菜谱。FedAvg 的每一轮通信同样由四个固定动作组成,周而复始,直到模型收敛。
第一步是客户端采样。服务端按比例 C 从全体客户端中随机挑选本轮的参与者,比如 C=0.2 表示每轮只抽五分之一的客户端参与。为什么要采样?因为客户端数量可能多达百万级,全员参与既慢又贵,随机采样在降低通信负载的同时,能保证统计上的代表性。
第二步是全局模型下发。服务端把最新的全局模型参数发给每个被选中的客户端。第三步是本地训练:每个客户端用自己那份数据,从全局模型出发执行 E 轮本地 SGD(随机梯度下降),得到改良后的本地模型——这一步完全在本地完成,数据不出设备。第四步是参数上传与聚合:客户端把改良模型上传,服务端按样本量加权平均生成新的全局模型,然后进入下一轮。
整个训练过程就是这四步的循环。用伪代码表示:初始化全局模型 w₀;重复执行“采样 → 分发 → 本地训练 → 加权聚合”,直到全局模型的精度不再提升或达到预设通信轮次。值得注意的是,每一轮客户端拿到的起点都是上一轮所有参与者共同智慧的结晶。
就像每轮试菜后,总厨都会根据大家的反馈出一版新菜谱,下一轮各家拿到的是更完善的起点。FedAvg 的每一轮,都是站在上一轮所有餐馆的肩膀上继续前进——迭代,是这套协作体系的灵魂。
聚合公式:样本量加权的智慧
总厨汇总各家改良心得时,遇到一个关键问题:大餐馆和小餐馆的意见,能一样看待吗?大餐馆每天接待几千位顾客,试菜样本多、心得更可靠;小餐馆一天只有几十位客人,心得难免以偏概全。总厨的裁决是:按客流量加权——客流量大的餐馆,发言权更大。
FedAvg 的聚合公式正是这种“按数据量加权”思想的数学表达。假设本轮有 K 个客户端参与,第 k 个客户端拥有 nₖ 条样本,全体参与者共有 n 条样本,那么新一轮的全局模型为:
那各家交上来的 w_{t+1}^{k} 又是怎么得到的?它来自本地 SGD 的迭代:
加权聚合的意义不止于“公平”。如果所有数据真的集中在一个数据中心做随机梯度下降,那么数据量大的客户端,其样本本来就会在每一步更新中更频繁地出现。FedAvg 的加权平均,正是对集中式训练这种“天然频率”的数学还原——这也是为什么在独立同分布(IID)数据下,FedAvg 的效果能逼近集中式训练。
每家的发言权与实力匹配,这是美食节能长期运转的公平规则。FedAvg 用一条公式把“公平”定义成“按样本量分配影响力”,简洁、可解释、可落地——这正是它作为奠基算法的底气。
- 本地模型更新w_{t+1}^{k} 表示第 k 个客户端经过本地训练后得到的新模型,它是聚合公式的“原料”。
- 损失梯度∇L_k(w_t^k) 是本地损失函数在当前模型处的梯度,指示参数应当调整的方向与强度,相当于“改良笔记”里写明的改进方向。
- 学习率步长η 乘以梯度,控制每次更新的幅度,相当于每家餐馆改良时的“保守程度”——步子太大易翻车,太小则进展缓慢。
关键参数:C、E、B、η 的调节玄机
总厨的协作规则里有几个可以调节的旋钮:每轮请几家餐馆来试菜、每家关起门来试做几次、每次试做品尝多少道菜、以及每家改动菜谱时的保守程度。这四个旋钮对应 FedAvg 的四个关键超参数:C、E、B、η。
客户端比例 C 控制每轮参与通信的客户端比例,取值范围通常在 (0, 1] 之间。C 越小,单轮通信负载越低,但单轮能收集的信息量也越少,整体收敛可能变慢;C=1 表示全员参与,信息最充分但开销最大。本地轮次 E 控制客户端在每轮通信前“闭关修炼”的强度——E 越大,本地模型越适配本地数据,但也越可能偏离全局目标。
批量大小 B 是本地 SGD 每次参数更新使用的样本数。B 较小时梯度噪声大但更新频繁,B 较大时梯度更平稳但每轮计算更重,它直接影响本地训练的稳定性。学习率 η 则是本地梯度下降的步长:步长太大,参数在最优值附近来回震荡甚至发散;步长太小,收敛缓慢、通信轮次增多。
论文中的经验表明,FedAvg 对 η 的敏感度与集中式训练相当,但 C、E、B、η 必须联合调节。比如增大 E 时,通常要相应调小 η,避免本地模型在错误的道路上越走越远;而增大 C 时,可以适当放宽对 E 的限制。工程上最常见的做法是先固定 C 与通信轮次,再对 E、B、η 做网格搜索。
这些旋钮就像做菜时对火候的把握:没有绝对正确的数值,只有适合当前食材与场景的搭配。理解了 C、E、B、η 的相互作用,你才算真正握住了 FedAvg 的方向盘。
通信效率:让菜谱在上传下发间飞得更快
美食节规模扩大后,总厨发现改良笔记的网络传输成了最大瓶颈——每家一次上传的配料改动说明越来越厚,几轮下来,等待笔记的时间比做菜时间还长。FedAvg 同样受困于通信瓶颈:每轮都要上传下载完整模型,而现代模型的参数动辄几百万个,网络传输的耗时往往比本地计算贵几个数量级。
为什么通信这么贵?因为联邦学习的计算被分散到了客户端,但“信息交换”仍然要经过网络。在移动设备上,一次全量模型上传可能要消耗数十 MB 流量,这在真实场景中既昂贵又缓慢。因此,通信效率优化是 FedAvg 从论文走向实用的关键课题。
主流的优化方向有四个。其一是梯度压缩与量化:把 32 位浮点参数压缩成 8 位整数,甚至只上传变化显著的稀疏子集,可以削减 90% 以上的通信量。其二是增大本地轮次 E:用更多的本地计算换取更少的通信轮次,每轮通信的“含金量”更高。其三是异步更新:允许训练完成的客户端立即上传,不必等待最慢的设备,从而消除“木桶效应”。其四是轮次频率调优:训练早期模型变化剧烈时提高通信频率,后期则降低频率,把通信预算花在刀刃上。
总厨后来想了个办法:要求各家笔记只写关键改动,一页纸以内。笔记变薄了,协作节奏自然快了——通信优化本质上就是给菜谱“瘦身”,用更少的信息交换达成同样的融合效果。理解通信效率,是 FedAvg 工程落地的必修课。
局限挑战:光鲜菜谱下的暗礁
美食节进行到中期,几家小餐馆开始抱怨:总厨的综合菜谱越来越偏向大餐馆的口味,自家顾客完全不买账;还有几家餐馆担心,自己的改良笔记里是不是泄露了太多“口味偏好”的秘密。总厨不得不承认:这份通用菜谱并不能让所有人都满意。
这正是 FedAvg 的三块暗礁。第一是Non-IID 数据异质:不同客户端的数据分布天然不同——比如不同地区的医院,病例类型差异巨大。加权平均后的模型可能对每个客户端都不是最优解,严重时收敛缓慢、精度明显下降。论文实验表明,在 Non-IID 数据下 FedAvg 与集中式训练的精度差距会显著拉大。
第二是通信开销压力:模型越大、客户端越多,协调成本越高,在弱网和移动设备上尤为突出。第三是隐私安全风险:FedAvg 本身不提供加密,“只传参数”不等于“绝对安全”。研究已经证明,攻击者可以从梯度中反演训练样本(梯度泄露攻击),也可以通过投毒客户端模型向全局模型注入后门。此外还有系统异构问题:不同设备的算力、内存、网络天差地别,慢设备会拖慢整轮聚合的节奏。
总厨最终明白:一份放之四海而皆准的菜谱并不存在。FedAvg 是联邦学习的起点而非终点——正是这些局限,催生了安全聚合、差分隐私、个性化联邦学习等一系列后续工作。理解暗礁在哪里,才不会在航行中触礁。
工程实践:把 FedAvg 搬进生产环境
有了规则和菜谱,真正的美食节还得靠一整套“后勤系统”来支撑——场地、调度、记录、复盘。联邦学习工程化同样需要完整的框架、严谨的实验设计和多维的效果评估,缺一不可。
框架选型上,常见选择有 TensorFlow Federated(适合深度模型与研究原型)、PySyft(偏隐私计算研究)、FATE(微众银行开源,面向生产级金融场景)、FedML 等。这些框架封装了客户端采样、通信协议、聚合逻辑,工程师只需要定义模型结构和数据加载器,就能把精力集中在业务问题上。
实验设计上,最稳妥的起点是仿真实验:在一台机器上用多份数据切片模拟多个客户端,验证聚合逻辑正确后再部署到真实设备。仿真环境能快速暴露数据划分、超参数选择的问题,成本远低于真实联邦部署。超参数调优可以按“先定 C 与轮次、再调 E 与 B、最后微调 η”的顺序进行,避免同时调四个旋钮导致无法定位问题。
效果评估不能只看全局精度。还要关注各客户端的个性化表现(是否存在“偏心”)、通信轮次-精度曲线(收敛速度是否可接受)、以及公平性指标(小客户端是否被边缘化)。生产环境中还应加入监控告警,实时追踪每轮聚合的参数量、流量和异常客户端。
总厨的经验是:美食节能办几届,靠的不是某一道惊艳的菜,而是可复用的流程、可量化的复盘和不断改进的后勤。FedAvg 的工程落地同理——把算法变成稳定、可观测、可上线的系统,才算真正掌握了它。
AI 应用场景
医疗影像跨院联合建模
阶段:数据准备与模型训练
解决的问题:传统方式下,各医院的影像数据受法规和伦理约束无法集中,单家医院样本量小、病种分布不均,导致模型泛化能力差。FedAvg 让每家医院在本地训练模型、只上传参数,在合规前提下汇集多院“经验”,显著提升模型在不同设备、不同人群上的鲁棒性。
具体案例:某医疗 AI 公司联合 5 家三甲医院构建肺结节 CT 检测模型。每家医院部署训练节点,影像数据留在院内 PACS 系统,仅通过联邦学习平台交换模型参数。经过 30 轮通信,全局模型在跨院测试集上的敏感度比单院模型提升约 12%。
手机输入法与个性化推荐
阶段:模型部署与持续更新
解决的问题:输入法词库需要学习用户的输入习惯,但输入内容高度敏感,集中式收集会引发严重的隐私争议。FedAvg 使语言模型在每台手机本地训练,只上传参数更新,既保留了数据的个性化价值,又避免了原始文本出境。
具体案例:某手机厂商的输入法团队在新机型上部署联邦学习 SDK,每天从数十万台设备中采样参与训练的客户端,聚合词库模型。线上 A/B 测试显示,输入预测准确率提升 8%,且全程没有一条用户输入离开设备。
金融机构反欺诈联合建模
阶段:特征工程与跨机构建模
解决的问题:单一银行的欺诈样本稀少、特征维度单一,难以训练出高精度模型。FedAvg 让多家银行在共享相同特征空间(如交易金额、频次、设备信息)的前提下联合训练,交易明细不出行,模型却可以共享“欺诈模式”的洞察。
具体案例:某城市商业银行联盟基于 FATE 框架搭建联邦反欺诈平台,6 家银行联合训练逻辑回归模型,欺诈召回率较单行模型提升约 20%,全程通过人行合规审查。
Python 演示
import numpy as np def generate_data(num_clients=5, samples=100, dim=10): # 为每个客户端生成异质的本地数据(真实权重不同, 模拟Non-IID) X_chunks, y_chunks = [], [] for k in range(num_clients): rng = np.random.RandomState(k) w_true = rng.randn(dim) X_k = rng.randn(samples, dim) y_k = (X_k.dot(w_true) + rng.randn(samples) * 0.1 > 0).astype(int) X_chunks.append(X_k) y_chunks.append(y_k) return X_chunks, y_chunks class LogisticRegression: def __init__(self, dim): self.w = np.zeros(dim) def predict(self, X): return 1.0 / (1.0 + np.exp(-X.dot(self.w))) def grad(self, X, y): p = self.predict(X) return X.T.dot(p - y) / len(y) def sgd(self, X, y, lr, epochs, batch_size): n = len(y) for _ in range(epochs): idx = np.random.permutation(n) for i in range(0, n, batch_size): batch = idx[i:i + batch_size] self.w -= lr * self.grad(X[batch], y[batch]) def fedavg(X_chunks, y_chunks, rounds=10, lr=0.1, local_epochs=3, batch_size=32, fraction=1.0): dim = X_chunks[0].shape[1] global_model = LogisticRegression(dim) n_all = sum(len(y) for y in y_chunks) weights = [len(y) / n_all for y in y_chunks] for t in range(rounds): m = max(1, int(fraction * len(X_chunks))) selected = np.random.choice(len(X_chunks), m, replace=False) local_w = [] for k in selected: model = LogisticRegression(dim) model.w = global_model.w.copy() model.sgd(X_chunks[k], y_chunks[k], lr, local_epochs, batch_size) local_w.append((k, model.w)) new_w = np.zeros(dim) w_sum = 0.0 for k, w_k in local_w: new_w += weights[k] * w_k w_sum += weights[k] global_model.w = new_w / w_sum acc = np.mean([np.mean((global_model.predict(X) > 0.5) == y) for X, y in zip(X_chunks, y_chunks)]) print("round %d: global_acc=%.4f" % (t + 1, acc)) return global_model if __name__ == "__main__": X_chunks, y_chunks = generate_data() fedavg(X_chunks, y_chunks, rounds=10)
model.w = global_model.w.copy()客户端先领取服务端下发的全局模型,作为本地训练的起点,确保所有参与者从同一版“菜谱”出发。model.sgd(X_chunks[k], y_chunks[k], lr, local_epochs, batch_size)客户端在自家数据上执行多轮小批量梯度下降,相当于每家餐馆关起门来独立改菜。selected = np.random.choice(len(X_chunks), m, replace=False)按比例 C 随机采样参与本轮通信的客户端,复现 FedAvg 的客户端选择策略。new_w += weights[k] * w_k按样本量占比累加各家本地模型,是 FedAvg 加权聚合公式的直接实现。global_model.w = new_w / w_sum对选中客户端的权重重新归一化,保证聚合后的全局模型尺度正确。
常见误区
误区FedAvg 听起来就是“联邦平均”,那不就是把所有客户端的模型参数加起来除以客户端数量吗?每个客户端的权重理应一样。
正解FedAvg 的“平均”是加权平均,权重是各客户端样本量占全体数据的比例 n_k/n。数据多的客户端对全局模型的贡献更大,数据少的客户端发言权更小。只有当所有客户端数据量完全相同时,它才退化为简单平均。这就好比美食节上,客流量大的餐馆在汇总菜谱时理应拥有更大的发言权。
为何常见:算法名字里的“平均”二字,加上“求和、除以数量”的直觉印象,让人很容易忽略公式中的权重系数 n_k/n。
误区用了 FedAvg 就万无一失——数据不出本地,服务器只看到模型参数,所以任何情况下都不会泄露用户数据。
正解FedAvg 只是降低隐私暴露,并不提供形式化的隐私保证。近年研究表明,攻击者可以从梯度或模型参数中反演出训练样本(梯度泄露攻击);恶意客户端还可以通过投毒破坏全局模型。要获得更强的隐私保护,需要叠加安全聚合、差分隐私、同态加密等机制,这也是学术界非常活跃的研究方向。
为何常见:宣传中反复强调“数据不离开本地”,让人误以为传输的中间产物(梯度/参数)不含任何数据信息,实际上参数是对数据统计规律的压缩,仍携带可被逆向利用的信号。
误区让客户端每轮通信前多训练几遍,本地模型更准,全局模型自然也更准,所以 E 越大越好。
正解E 过大会加剧客户端模型对本地分布的过拟合,尤其在 Non-IID 数据分布下,各个本地模型会“各走各的路”,加权聚合后反而互相抵消,导致全局模型收敛变慢甚至精度下降。FedAvg 论文的实验表明:在 IID 场景下适度增大 E 可以节省通信;在 Non-IID 场景下必须谨慎控制 E,通常需要与学习率 η 联动调节。
为何常见:从单一数据集训练的经验出发,“训练更多 = 模型更好”的直觉在联邦场景下并不成立,因为局部目标与全局目标之间存在冲突。
误区FedAvg 是给神经网络设计的算法,逻辑回归、决策树这类传统模型根本用不了。
正解FedAvg 是一个“本地训练 + 参数加权聚合”的元算法框架,并不绑定特定的模型结构。只要模型的参数空间可加、加权平均有意义,就可以套用 FedAvg。事实上,逻辑回归、线性 SVM 等凸模型在联邦场景下反而拥有更扎实的收敛性证明,论文中明确区分了凸与非凸问题的收敛性差异。
为何常见:教程和论文配图多用神经网络示意,加上深度学习的流行度,让初学者把 FedAvg 误当成了深度模型专属技术。
面试题
Q1. FedAvg 每轮通信中,客户端上传给服务端的是什么?
- A.全部原始训练数据
- B.本地模型的参数更新← 正确答案
- C.本地数据的标签统计
- D.用户个人身份信息
答案:B。FedAvg 的核心约束是“数据不动、模型动”。客户端只把本地训练后的模型参数上传,原始数据始终留在本地。选项 A 是集中式学习的做法,C 和 D 均非 FedAvg 的通信内容,且涉及隐私泄露。
Q2. FedAvg 聚合时,每个客户端的权重取决于什么?
- A.客户端的网络带宽
- B.客户端的数据样本量← 正确答案
- C.客户端的内存大小
- D.客户端加入的时间
答案:B。FedAvg 按样本量加权聚合,权重公式为 n_k/n。数据量越大的客户端,对全局模型的塑造力越强,这与集中式训练中样本天然的出现频率一致。网络带宽、内存和加入时间都与权重无关。
Q3. 联邦学习要解决的核心问题是什么?
- A.提升单机模型的推理速度
- B.数据孤岛下的多方联合建模← 正确答案
- C.减少模型的参数量级
- D.替代所有集中式训练
答案:B。联邦学习诞生的直接动因是数据孤岛——数据因法规和商业原因无法集中,但多方仍需联合建模。推理速度、参数量是模型优化问题,而“替代所有集中式训练”过于绝对,联邦学习并不否定集中式场景。
Q4. FedAvg 中的参数 C 表示什么?
- A.每轮参与通信的客户端比例← 正确答案
- B.本地数据训练的迭代轮次
- C.本地梯度下降的批量大小
- D.全局模型更新的学习率
答案:A。C 是客户端比例(client fraction),控制每轮随机采样的客户端规模,取值通常在 (0,1] 之间。B 项是 E,C 项是 B,D 项是 η。C 越小通信负载越低,但单轮信息量也越少。
Q5. 关于 Non-IID 数据对 FedAvg 的影响,下列说法正确的是?
- A.各客户端数据分布完全一致
- B.会降低模型聚合的收敛速度← 正确答案
- C.对模型训练精度毫无影响
- D.能减少联邦通信的次数
答案:B。Non-IID 指各客户端数据分布不一致,是联邦学习的常态。它会加剧本地模型之间的分歧,导致加权聚合后的全局模型收敛变慢、精度下降。选项 A 是 IID 的定义,C 与事实相反,D 与 Non-IID 无直接关系。
Q6. FedAvg 每一轮通信包含哪些步骤?
- A.服务端随机采样参与客户端← 正确答案
- B.客户端在本地数据上训练模型← 正确答案
- C.客户端上传参数供服务端聚合← 正确答案
- D.服务端将新模型下发至客户端← 正确答案
答案:ABCD。四项正是 FedAvg 每轮的四步:客户端采样、本地训练、参数上传聚合、全局模型下发。任何一个环节缺失,都无法完成一轮完整的联邦协作。这也是 FedAvg 与集中式训练最直观的区别所在。
Q7. 以下哪些属于 FedAvg 的固有限制?
- A.数据异质导致聚合精度下降← 正确答案
- B.通信轮次多带来高昂开销← 正确答案
- C.梯度上传存在隐私泄露风险← 正确答案
- D.要求各客户端数据量完全一致
答案:ABC。FedAvg 的已知限制包括 Non-IID 精度下降、通信开销大、梯度泄露风险。但它并不要求客户端数据量一致——恰恰相反,加权聚合正是为了适应不一致的数据量而设计,因此 D 是错误的。
Q8. 以下哪些方法可以提升 FedAvg 的通信效率?
- A.对上传的梯度做压缩与量化← 正确答案
- B.适度增加本地轮次减少通信← 正确答案
- C.使用异步更新降低等待开销← 正确答案
- D.增加每轮参与客户端数量
答案:ABC。压缩量化直接减少单次通信的数据量;增大本地轮次 E 用计算换通信;异步更新消除慢设备拖累。增加客户端数量反而会增大每轮的总通信量,属于南辕北辙。
Q9. 当所有客户端数据量完全相同时,FedAvg 的聚合退化为?
- A.对本地模型做简单算术平均← 正确答案
- B.服务端不再需要参与聚合
- C.各客户端的本地模型完全相同
- D.通信开销直接降为零
答案:A。当 n_k 全部相等时,n_k/n = 1/K,加权平均在数学上等价于简单平均。但服务端仍需承担聚合与下发职责,通信不会消失;本地模型因数据分布不同仍然各异,故 B、C、D 均不成立。
Q10. 关于 FedAvg 的收敛性,下列说法最准确的是?
- A.在 Non-IID 数据下依然保证收敛
- B.收敛性依赖数据分布与超参数← 正确答案
- C.所有场景下都线性快速收敛
- D.收敛结果与集中式训练完全一致
答案:B。FedAvg 仅在 IID 且凸问题的设定下有清晰的收敛性证明;在 Non-IID、非凸的深度模型场景下,收敛行为依赖数据分布与 C、E、η 等超参数,且通常与集中式训练存在精度差距。A、C、D 都过于绝对,与实际结论不符。