老周是「九州餐饮集团」的培训总监,要牵头制定一本全新的服务手册。集团旗下有 50 家分店,每家店的顾客口味天差地别——成都店无辣不欢,无锡店偏爱甜口,广州店讲究清淡。更要命的是,集团有铁规矩:各店的顾客消费数据绝不能离开本地。老周的办法是:把手册初稿发给各店,各店用自己的本地数据提修改建议,再把建议汇总回总部综合。这套思路,就是联邦学习的雏形。真干起来老周才发现有两个坎:一是有些店改得走火入魔,把草稿带得面目全非(数据异构);二是往返寄文件又慢又烧钱(通信瓶颈)。今天要讲的 FedProx 和 SCAFFOLD,正是两套帮老周高效「开碰头会」的聪明办法。
掌握 FedProx 与 SCAFFOLD 的数学动机与实现取舍,是从事联邦学习工程落地的核心技能——让你在真实异构数据场景中,不再盲目调参,而是有的放矢地选择方案。
目录
可视化演示
三步展示联邦学习异构优化:FedAvg客户端漂移问题、FedProx近端项约束更新、SCAFFOLD控制变量梯度校正与收敛加速对比。
本节配有交互动效(进入视口后自动加载,约 3KB)。
FedAvg客户端漂移问题 非独立同分布数据导致各客户端本地更新方向偏离全局最优 多轮本地SGD加剧参数漂移D聚合后收敛震荡 w_global = Σ(n_k/n) · w_k, drift ∝ ||∇F_k - ∇F|| 数据异构性是FedAvg收敛瓶颈的根源。
联邦学习背景:数据不出门的协作训练
老周第一次组织「手册碰头会」时信心满满:把初稿分给各店,让大家改完寄回来,自己取个平均不就行了?结果大跌眼镜——成都店把「微辣」改成「特辣」,无锡店把「重油」删得干干净净,广州店甚至加了一整章「炖汤指南」。50 份修改稿寄回来,老周根本拼不出一本像样的手册。更麻烦的是,这些修改稿每份都有几十页纸,来回寄送快递费贵得吓人,时间也拖不起。这就是联邦学习遇到的两座大山:数据异构与通信瓶颈。
在 AI 世界里,联邦学习(Federated Learning)正是为了「数据不出本地,却能协作训练模型」而生的框架。最经典的基线算法叫 FedAvg(联邦平均),流程和老周的碰头会一模一样:每轮通信,中央服务器把当前模型发给参与客户端;各客户端用本地数据训练若干轮;再把新模型传回服务器;服务器把所有模型做加权平均,得到新的全局模型。这套流程看似完美,但问题恰恰出在「加权平均」上。
FedAvg 的聚合公式非常朴素:
但老周很快意识到,投票机制本身没问题,问题出在「嗓门大、口味极端的店」会带偏节奏。当各店数据分布差异巨大时,每家店都在朝自己偏好的方向改稿,汇总时方向互相拉扯,手册越改越四不像。这正是 non-IID(非独立同分布)数据下 FedAvg 收敛慢的根本原因。要解决它,要么限制各店「别改太野」(FedProx 的思路),要么纠正各店的「方向偏差」(SCAFFOLD 的思路)。
- $w_k^{t}$(第 k 个客户端的本地模型)第 k 个客户端在本地训练多轮后得到的参数,相当于「各家分店改完的建议稿」。
- $\dfrac{n_k}{n}$(样本占比权重)第 k 个客户端的数据量占全体数据量的比例,数据多的分店发言权更大。
- 加权求和为新全局模型把每个本地模型乘以自己的权重再加起来,就是总部综合各店建议出版的新手册。
FedProx 原理:一根拉住模型的橡皮筋
老周发现,最让他头疼的是那几家「叛逆分店」——它们不仅提意见,还恨不得把整本手册重写一遍。于是他想:能不能在派发初稿时附一条规矩——「你们的修改不能离初稿太远,远到离谱的改动会被打回重做」?这条规矩,正是 FedProx(Proximal FedAvg,带近端项的联邦平均)的核心思想。
FedProx 由何世明等人于 2020 年提出,解决的核心问题叫「客户端漂移」(client drift):在 non-IID 数据下,每个客户端在本地优化时,会不知不觉朝着自己数据分布特有的方向越走越远,就像被本店的口味「带偏」了。FedProx 的做法很简单——在本地目标函数里加一个「近端项」(proximal term),实时测量本地参数与全局参数的差距,并施加惩罚:
这根橡皮筋的妙处在于:它不阻止本地学习新知识,只是不允许「走火入魔」。当某家分店想往极端方向暴改时,橡皮筋会把它轻轻拉回来;而当它只做小幅微调时,橡皮筋几乎不产生阻力。这样一来,即使各店口味差异巨大,彼此的修改建议也不会互相撕扯得太厉害,全局模型就能更平稳地迭代。
- $F_k(w)$(客户端本地损失函数)第 k 个客户端在本地数据上的预测损失,相当于「分店对初稿的修改意见」。
- $\dfrac{\mu}{2}$(近端系数)控制这根「橡皮筋」的松紧程度,μ 越大,偏离全局模型的代价越高。
- $\left\| w - w^t \right\|^2$(偏离距离的平方)本地参数与全局参数之间的欧氏距离平方,衡量「改得有多野」。
FedProx 实现:允许「八成满意」就交卷
规矩定好了,老周又面临一个新问题:有些分店动作特别慢,非要把建议改到「完美」才肯寄回来。可每次开会都是有时间限制的——等所有店都磨蹭完,黄花菜都凉了。老周灵机一动:何必要求满分?能改到八成满意,方向对得上,就可以交卷了。这个「八成满意」的思想,在 FedProx 里叫做「γ-不精确解」。
γ-不精确解(γ-inexact solution)的数学条件是:当本地优化器的梯度足够小时,就可以提前停止,不必等它真正收敛到局部最优。形式上,本地优化停止点 $w^*$ 需要满足:
配合近端项,FedProx 的实现流程很清爽:每一轮,服务器下发全局模型 $w^t$;每个客户端用带近端项的目标函数做本地优化,允许用 γ-不精确解提前停止;然后把本地模型传回服务器;服务器照常做加权平均。超参数方面,μ 控制「拉回力度」,γ 控制「交卷门槛」。当 μ=0 且 γ=0 时,FedProx 就退化成 FedAvg——所以 FedAvg 只是 FedProx 的一个特例。在实践中,μ 通常取 0.01~0.1,γ 取 0.1~0.5 就能在异构数据上看到明显改善。这份灵活的工作考核标准,让团队整体效率反而更高了。
- $\nabla F_k(w^*)$(停止时的本地梯度)本地优化器在某一步停止时,本地目标函数在该点的梯度大小,代表「还有多少意见没改完」。
- $\nabla F_k(w^t)$(初始时的本地梯度)本轮开始时,本地目标函数在全局模型处的梯度,代表「最初积累了多少修改冲动」。
- $\gamma$(容忍系数)当停止时的梯度比初始梯度小到 γ 倍时,就认为「改得差不多了」,可以提前交卷。
SCAFFOLD 原理:带上差异清单来开会
老周的「橡皮筋」方案初见成效,但他总觉得还有改进空间——橡皮筋只是「限制」各店乱改,能不能更积极一点,直接「纠正」各店的方向偏差呢?这一次,他要求每家店来开会时,必须带一份「自家与总部的差异清单」:你家口味偏甜多少?偏辣多少?把这份清单量化出来,总部综合时就能知道该往哪个方向纠偏。这套思路,就是 SCAFFOLD(Stochastic Controlled Averaging for Federated Learning,随机控制变量联邦平均)。
SCAFFOLD 由 Karimireddy 等人于 2020 年提出。它让每个客户端维护一个控制变量 $c_i$(客户端控制变量),服务器维护一个全局控制变量 $c$。控制变量的作用,是估计客户端数据分布与全局分布之间的「系统性偏差」。本地更新时,用 $c_i - c$ 对梯度做实时校正:
有了控制变量的校正,SCAFFOLD 不再像 FedAvg 那样「各写各的再硬拼」,而是「边写边对表」,保证大家的修改方向始终一致。它本质上做的是方差缩减(variance reduction)——把由数据异构引起的梯度方差大幅压缩,从而在极端 non-IID 场景下也能快速、稳定地收敛。就好比每辆车上都装了导航仪,即使出发地天南海北,也能同时抵达目标。
- $g_i(w_i^t)$(本地梯度)客户端在本地数据上算出的梯度,相当于「分店按自己口味写出的修改意见」。
- $-c_i^t$(扣除客户端偏差)减掉自家特有的系统性偏置,相当于「先抹掉自家的重口味滤镜」。
- $+c^t$(加回全局方向)引入全局控制变量校正方向,相当于「看看总部整体在往哪走,跟着大部队」。
- $\eta$(学习率)每一步沿着校正后方向前进的步长。
SCAFFOLD 实现:清单也要持续更新
老周很快发现一个新麻烦:各店的「差异清单」并不是一成不变的。成都店的口味可能随着新顾客涌入而变化,清单如果几个月不更新,就会失真。同样,SCAFFOLD 的控制变量必须在每轮训练后同步更新。更新规则是:
每轮结束后,服务器把所有客户端的新控制变量取平均,更新全局 $c$,再连同新全局模型一起广播下去。这样一来,差异清单就永远是热乎的。代价方面,SCAFFOLD 每轮除了上传模型,还要上传一份控制变量(和模型同维度),通信量比 FedAvg 略大——好比每家店开会要多带一张清单纸。但换来的收益是在 non-IID 下收敛轮次大幅减少,总通信成本反而更低。从收敛性理论上看,SCAFFOLD 在极端异构下能获得线性加速比,这是 FedAvg 和 FedProx 都做不到的。
- $c_i - c$(当前相对偏差)客户端控制变量与全局控制变量的差值,代表「目前记录的差异清单」。
- $\dfrac{1}{S\eta}$(按步数归一化)S 是本地 SGD 总步数,把「总位移」换算成「平均每步的偏移量」,相当于把整段路程的偏差摊到每一步上。
- $w_i^t - w^t$(本地到全局的位移)客户端本次更新的起点到终点之间的距离,反映「这轮实际被本地数据拽着跑了多远」。
实验对比:异构江湖里的实战检验
两种方案都设计好了,老周决定搞一次「实战演练」:把 50 家分店按口味差异分成几组,一组用 FedAvg,一组用 FedProx,一组用 SCAFFOLD,看看哪组能在最短时间内产出一本让各地区顾客都满意的手册。模拟实验的设定和我们可视化演示里的曲线一致:横轴是通信轮次,纵轴是训练损失。
实验结果显示,三种方法的差距在 non-IID 程度加剧时迅速拉大。在中等异构程度下,FedProx 就能提供足够帮助——它只需要在 FedAvg 的代码上多加一个近端项,改动极小,收敛曲线比 FedAvg 平滑不少,而且对 μ 的取值不算敏感。但在极端异构(比如每个客户端只拥有一种类别的数据)下,FedProx 的「橡皮筋」就有些力不从心了,它会拖慢对真实知识的吸收速度;此时 SCAFFOLD 的优势尽显——控制变量的方向校正让损失曲线近乎平滑地直线下降,通常只需 FedAvg 一半左右的通信轮次就能达到相同精度。
所以选型策略很清晰:如果系统改动成本敏感、异构程度中等,FedProx 是低风险高性价比的升级;如果数据分布极端失衡、通信预算紧张,SCAFFOLD 的多传一份控制变量是值得的投资。类比到老周的日常:FedProx 像给分店加一条「别跑太远」的橡皮筋,简单粗暴但有效;SCAFFOLD 像给每家店配一个实时更新的导航仪,装备重一点,但再偏远的分店也能准时抵达会场。两条路线不是竞争关系,而是在不同「异构江湖」里的互补选择。
AI 应用场景
多中心医疗联合建模
阶段:模型训练阶段(分布式训练 / 隐私保护学习)
解决的问题:多家医院想联合训练疾病预测模型,但患者病历受法规保护不能出院。传统方案是把数据集中到中心机房训练,既违反隐私合规,又因医院间病种构成差异大(综合医院 vs 专科医院)导致模型偏差严重。AI 方案:采用联邦学习框架,用 FedProx 的近端项约束各院本地更新不偏离全局模型,缓解「病种异构」带来的客户端漂移。
具体案例:某区域医疗集团联合 5 家医院训练肺炎风险预测模型,其中两家是儿童专科、三家是综合医院。使用 FedProx(μ=0.05)后,模型在 60 轮通信内达到集中式训练精度的 95%,比 FedAvg 提前约 20 轮收敛,且各家医院的本地验证精度方差降低了 60%。
手机输入法个性化
阶段:模型部署与持续学习阶段
解决的问题:手机输入法需要学习每个用户的打字习惯(新词、缩写、常用表情),但键盘输入内容高度敏感,绝不能上传云端。且不同用户的输入风格差异极大——有人爱用网络热词,有人偏爱书面语,这种极端 non-IID 场景正是 SCAFFOLD 的用武之地。
具体案例:某手机厂商在 100 万部设备上部署联邦学习个性化输入法模型。用户端本地训练时用 SCAFFOLD 控制变量校正方向,服务器端聚合后下发更新。相比 FedAvg,SCAFFOLD 让冷启动用户的个性化词库命中率在 5 轮内提升 30%,同时将整体通信流量控制在原来的 60%。
Python 演示
import numpy as np def make_data(num_clients=4, n=80, dim=8, seed=42): """生成 non-IID 数据: 每个客户端偏向不同的类别""" rng = np.random.default_rng(seed) data = [] for i in range(num_clients): X = rng.normal(0, 1, (n, dim)) w_true = np.zeros(dim) w_true[i] = 2.0 w_true[(i + 1) % dim] = 1.5 logit = X @ w_true y = (1 / (1 + np.exp(-logit)) > 0.5).astype(int) data.append((X, y)) return data def logistic_grad(X, y, w): """逻辑回归的梯度""" p = 1 / (1 + np.exp(-X @ w)) return X.T @ (p - y) / len(y) def local_train(X, y, w0, lr, steps, mu, w_ref, c_local, c_global): """本地训练: FedAvg(mu=0) / FedProx(mu>0) / SCAFFOLD(c!=0)""" w = w0.copy() for _ in range(steps): grad = logistic_grad(X, y, w) if c_local is not None: grad = grad - c_local + c_global if mu > 0: grad = grad + mu * (w - w_ref) w = w - lr * grad return w def run(method, rounds=20, lr=0.3, local_steps=5, mu=0.1): """执行指定联邦学习算法并返回测试准确率""" data = make_data() dim = data[0][0].shape[1] w_g = np.zeros(dim) c_g = np.zeros(dim) cs = [np.zeros(dim) for _ in data] for _ in range(rounds): ws, c_new = [], [] for i, (X, y) in enumerate(data): if method == 'scaffold': w_l = local_train(X, y, w_g, lr, local_steps, 0, None, cs[i], c_g) else: w_l = local_train(X, y, w_g, lr, local_steps, mu if method == 'fedprox' else 0, w_g, None, None) ws.append(w_l) if method == 'scaffold': c_new.append(cs[i] - c_g + (w_l - w_g) / (local_steps * lr)) w_g = np.mean(ws, axis=0) if method == 'scaffold': c_g = np.mean(c_new, axis=0) cs = c_new acc = np.mean([np.mean((1 / (1 + np.exp(-X @ w_g)) > 0.5) == y) for X, y in data]) return acc if __name__ == '__main__': for name in ['fedavg', 'fedprox', 'scaffold']: print(name + ': 测试准确率 = %.4f' % run(name))
w_true[i] = 2.0给每个客户端分配独有的「偏好类别」,制造数据分布差异,模拟真实世界的 non-IID。logistic_grad(X, y, w)计算逻辑回归的梯度,这是所有联邦算法共用的「本地学习引擎」。grad = grad - c_local + c_globalSCAFFOLD 的核心:用控制变量校正本地梯度方向,消除客户端漂移。grad = grad + mu * (w - w_ref)FedProx 的核心:近端项把本地参数拉回全局模型附近。w_g = np.mean(ws, axis=0)联邦聚合:把所有客户端的模型参数做简单平均,得到新全局模型。acc = np.mean(...)在全部客户端数据上评估全局模型准确率,检验「跨店泛化能力」。
常见误区
误区我觉得 FedProx 加的那个 μ/2 ‖w − wᵗ‖² 就是一种 L2 正则化,把模型参数限制得越小越好,防止过拟合嘛。
正解两者作用对象完全不同。L2 正则化惩罚的是参数本身的范数,把参数往 0 拉,防止模型过于复杂;FedProx 的近端项惩罚的是「本地参数与全局参数的差距」,把本地参数往全局模型拉,防止协作训练跑偏。往 0 拉会让模型失去表达能力,往全局拉是维护团队共识。类比:L2 是「限制你的发言字数」,近端项是「你的发言不能离开会议主题」。
为何常见:两者形式上都带平方范数 ‖·‖²,长得太像,初学者很容易只记形式不辨语义。
误区SCAFFOLD 和 FedAvg 不都是把客户端的更新拿过来平均一下吗?只是平均的公式改了吧?
正解FedAvg 只对本地更新后的模型做加权平均,本地训练过程是「各自为政」的;SCAFFOLD 在本地训练过程中就用控制变量实时校正梯度方向,每个客户端维护自己的 cᵢ 和全局 c,用 cᵢ − c 消除系统性漂移。类比:FedAvg 是「各写各的再拼起来」,SCAFFOLD 是「边写边对表」,从源头上保证方向一致。SCAFFOLD 最后也做平均,但平均的已经是「校正过方向」的模型了。
为何常见:从黑箱视角看两者都输出一个全局模型,且 SCAFFOLD 最终也有聚合操作,容易误以为只是聚合方式不同。
误区non-IID 不就是有的客户端数据多、有的数据少吗?那按数据量加权平均不就行了?
正解non-IID(非独立同分布)重点在「分布」不同——不同客户端的特征分布和标签分布完全不同。比如医院 A 全是儿科病例,医院 B 全是老年病例;哪怕样本量完全相同,两边的训练方向也截然不同。加权平均只能解决「话语权」问题,解决不了「方向冲突」问题。FedProx 和 SCAFFOLD 之所以重要,正是因为它俩在「方向冲突」这个层面做文章。
为何常见:IID 直觉里「多一些少一些」最容易想到,而「分布形状不同」更抽象,不容易第一时间建立直觉。
误区通信太贵?那就让每台设备多跑几轮本地训练再上传,本地轮数越大越好,反正本地计算不要钱。
正解增加本地训练轮数会加剧「客户端漂移」——每个客户端在本地跑得越久,模型越偏向自己的数据分布,全局聚合时偏差越大。在极端 non-IID 下,盲目加大本地轮数甚至会让全局模型发散。FedProx 加近端项、SCAFFOLD 加控制变量的核心目的,正是为了在「减少通信频率」和「抑制本地漂移」之间取得平衡,而不是简单地堆本地轮数。
为何常见:直觉上「少通信 = 多干活再汇报」,这个类比忽略了方向偏离的代价——活干得越多,方向可能偏得越远。
误区既然 SCAFFOLD 在极端异构下收敛快,那以后统一用 SCAFFOLD 不就行了?FedProx 可以淘汰了。
正解SCAFFOLD 每轮需要额外传输控制变量,通信量比 FedProx 大;同时控制变量的初始化与更新也增加了系统复杂度,在客户端频繁掉线(straggler)的场景中恢复机制更复杂。在中等异构、系统资源有限的场景下,FedProx 只需要改几行业务代码就能获得大部分收益,性价比更高。选型要看数据异构程度、通信预算、系统稳定性三个维度综合权衡。
为何常见:看到论文里 SCAFFOLD 的收敛曲线很漂亮,就容易忽略实验环境与生产环境的差距,以及额外的工程复杂度。
面试题
Q1. 联邦学习最核心的隐私保护原则是什么?
- A.数据留本地只传模型更新← 正确答案
- B.共享全部原始数据
- C.上传数据到中心云
- D.向第三方公开梯度
答案:A。联邦学习的本质是「数据不动模型动」——原始数据永远留在产生它的设备上,参与方只交换模型参数或梯度。类比老周的分店协作:各分店只上交「改好的建议稿」,绝不上交顾客名单。B、C 都让数据离开了本地,D 公开梯度同样会泄露训练数据信息。
Q2. non-IID 数据导致联邦学习收敛慢的根本原因是什么?
- A.本地更新方向互相拉扯偏离全局最优← 正确答案
- B.本地数据无法在设备存储
- C.通信带宽自动成倍增大
- D.数据加密算法完全失效
答案:A。non-IID 指各客户端本地数据分布不一致,比如成都店都是辣口数据、无锡店都是甜口数据。因此每个客户端本地优化的方向都偏向自己的分布,聚合时方向互相拉扯,全局模型震荡难收敛。类比:一群口味极端的店长各改各的,汇总出来的手册必然四不像。
Q3. FedProx 中近端项 μ/2‖w−wᵗ‖² 的作用等价于什么?
- A.对偏离全局模型的更新加惩罚← 正确答案
- B.给本地数据样本添加噪声
- C.加密本地梯度后再传输
- D.压缩上传模型的大小规模
答案:A。近端项对「本地参数与全局参数的欧氏距离」施加惩罚,本地模型越偏离全局模型,惩罚越大。类比老周的规矩「提建议可以,但别离初稿太远」。B 加噪声会损害模型精度,C 加密和 D 压缩属于通信优化手段,都不是近端项的职责。
Q4. FedProx 相比 FedAvg 主要新增了哪个超参数?
- A.近端系数 μ← 正确答案
- B.学习率 α
- C.动量系数 β
- D.正则化率 λ
答案:A。FedProx 相对 FedAvg 的核心改动是在本地损失函数上添加近端项,新增系数 μ。μ 越大本地模型越不敢偏离全局,μ=0 时退化为 FedAvg。α 是学习率、β 是动量、λ 是 L2 正则系数,都是优化器原有参数。
Q5. 联邦学习的两大核心挑战包括哪些?
- A.数据分布异构← 正确答案
- B.通信带宽瓶颈← 正确答案
- C.模型参数量过大
- D.显卡算力不足
答案:AB。联邦学习两大核心挑战是数据异构(各客户端分布不同,本地更新方向冲突)和通信瓶颈(反复传输模型开销大)。类比老周的两大头疼事:分店口味差异大(异构)和寄文件慢又贵(通信)。C 属于模型设计问题,D 属于硬件资源问题,均非联邦学习特有挑战。
Q6. SCAFFOLD 控制变量校正公式中「−cᵢ + c」的数学含义是什么?
- A.用全局与本地差异修正梯度方向← 正确答案
- B.用梯度幅值缩放学习率大小
- C.用置信度加权模型参数更新
- D.用随机噪声扰动本地梯度方向
答案:A。−cᵢ 去掉客户端自身的系统性偏差,+c 引入全局一致的方向,一减一加完成方向校正。类比每家店带「自家与总部的差异报告」来开会:先抹掉自家重口味滤镜,再对齐总部大方向。B 是自适应学习率的思路,C 是模型加权策略,D 是随机扰动,都与控制变量无关。
Q7. 关于 FedProx 的 γ-不精确解,下列说法正确的有哪些?
- A.允许本地优化提前停止← 正确答案
- B.对本地求解器要求更宽松← 正确答案
- C.γ 值越大约束越严格
- D.γ 必须设为 0 才能收敛
答案:AB。γ-不精确解允许本地优化器在梯度降到初始值 γ 倍以内时提前停止,即「做到八成就交卷」,降低了本地求解器的负担。γ 越大越宽松,γ=0 才要求精确收敛,且完全不设容错反而可能在异构数据上更难收敛。类比老周放宽考核标准:改到差不多就交卷,团队效率更高。
Q8. SCAFFOLD 相比 FedAvg 额外付出的主要代价是什么?
- A.每轮需传输两份控制变量← 正确答案
- B.每轮需传输全部原始数据
- C.本地计算时间整体翻倍
- D.全局模型体积显著变大
答案:A。SCAFFOLD 每轮除上传模型外,还要额外传输客户端控制变量 cᵢ(与模型同维度的向量),通信量比 FedAvg 多约一份。但它换来 non-IID 下更快的收敛,总通信轮次反而减少。B 违背隐私原则,C 本地计算与 FedAvg 同量级,D 全局模型的参数量并未改变。
Q9. 以下哪些实际场景适合应用联邦学习?
- A.手机输入法个性化模型← 正确答案
- B.多家医院联合训练诊断模型← 正确答案
- C.数据中心集中训练推荐模型
- D.银行间联防反欺诈建模← 正确答案
答案:ABD。手机输入法、医院联合建模、银行间反欺诈都是「数据分散且隐私敏感」的典型场景,数据无法集中,适合联邦学习。C 数据中心本身已集中了所有数据,不需要联邦协作。类比:只有分店各有本地机密、又想共享成果时,才需要「合伙开会」这套流程。
Q10. 在客户端数据高度异构时,SCAFFOLD 能稳定收敛的关键前提是什么?
- A.控制变量方差保持有界← 正确答案
- B.全局模型参数量足够大
- C.本地学习率必须设置为零
- D.仅需一个客户端参与训练
答案:A。SCAFFOLD 的收敛性理论证明依赖控制变量的方差有界——即各客户端数据分布差异不会无限放大。只有这个条件成立,校正后的全局方向才是无偏的。B 参数规模与收敛性无关,C 学习率为零则模型完全不学习,D 单客户端参与无法体现联邦协作。