想象你经营着一家全国连锁餐厅,中央厨房每隔一段时间就会更新一份“标准菜谱”,分发给上百家分店的厨师。每座城市的顾客口味截然不同:A 城嗜辣,B 城喜甜,C 城偏爱清淡。如果中央厨房规定所有分店必须严格执行同一份菜谱,当地顾客会不满意;可如果放任每家厨师自由发挥,门店上报的“调整建议”就会五花八门——有人加辣、有人加糖、有人减盐,中央厨房把大家的改动汇总成新版菜谱时,这份“取各家平均”的菜谱往往不伦不类,没有一家门店的顾客觉得好吃。这就是联邦学习中的客户端漂移。 联邦学习是一种让手机、医院、银行等机构各自用本地数据训练模型、只上传“参数更新”而不交出原始数据的协作方式。它解决了数据孤岛的隐私难题,却面临一个天然敌人:各机构的数据分布(即“口味”)各不相同,模型参数汇总时互相拉扯,导致全局模型越训越偏。好在业界发明了 FedProx(“可以微调但别离标准太远”)和 SCAFFOLD(“汇报偏差方向,总部统一纠偏”)等方案。让我们一起走进这家连锁餐厅的后厨,彻底看懂非 IID 数据挑战与客户端漂移的来龙去脉。

岗位关联

掌握客户端漂移的本质与解法,你将能设计真正可落地的联邦学习系统,在多机构协作建模、边缘设备分布式训练中避免“模型越训越歪”的工程灾难,这正是隐私保护学习领域最核心的硬技能。

目录
  1. 可视化演示
  2. 联邦学习基础
  3. 非IID数据分类
  4. 漂移数学机理
  5. 数据异质度量
  6. FedProx算法
  7. SCAFFOLD算法
  8. 自适应聚合策略
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

交互展示非IID数据分布、客户端参数漂移轨迹和FedProx/SCAFFOLD缓解算法的收敛对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

非IID数据:客户端异质性 各客户端数据分布差异显著 标签偏斜 + 特征偏移双重挑战 Dir(α) : α→0 异质性增大 非IID是联邦学习客户端漂移的根本原因

联邦学习基础

中央厨房每季度更新标准菜谱,但它不会强迫各分店交出顾客的完整点单记录——那既涉及商业机密,也牵扯顾客隐私。取而代之的做法是:把当前菜谱下发给每家分店,让厨师在本地做几天试菜,记录下“我们打算在哪些环节改良多少”,然后把这份精简的改动摘要发回总部。总部汇总所有摘要后形成新版菜谱,再次下发。这就是联邦学习最朴素的运行机制。

把餐厅术语翻译成 AI 术语:中央厨房是参数服务器,分店是客户端,菜谱是模型参数,试菜是本地训练,改动摘要是参数更新。每一次完整的“下发—试菜—上传—汇总—再下发”称为一轮通信迭代。在真实系统中,通常是手机、医院、银行等机构作为客户端,在本地用私有数据训练若干轮(local epochs),只把梯度或参数变化量加密传给中央节点,数据本身永不离地。

这种设计最大的价值是隐私保护和数据可用不可见:原始数据不离开本地,却能汇聚出千千万万个设备贡献的集体智慧。但问题随之而来——如果每家分店的口味基础相差太远,汇总出的菜谱还能让所有人满意吗?这正是下一节要讨论的非 IID 数据挑战。

回到餐厅的比喻:客流量大的旗舰店改动意见理应更有分量,口味独特的小众店则需要谨慎对待。联邦学习的基本框架搭建好后,我们必须直面那个让无数工程师头疼的“口味差异”问题——非独立同分布数据。

非IID数据分类

A 城分店的顾客几乎每桌都点麻辣锅,B 城分店甜品销量是其他店的五倍,C 城分店地处景区、客流忽多忽少。这三家店的“数据分布”天然不同,统计学上称之为非独立同分布(Non-IID)。它与机器学习课本里“训练集和测试集独立同分布(IID)”的经典假设截然相反,而现实世界的联邦学习系统中,Non-IID 才是常态。

\[\displaystyle p_k(x, y) \neq p_j(x, y), \quad \forall\, k \neq j\]

其中 \(p_k(x, y)\) 表示第 \(k\) 个客户端的联合数据分布,\(x\) 是输入特征,\(y\) 是标签。在联邦场景中,不同客户端的数据生成规律并不相同。

1. 符号含义:\(p_k(x, y)\) 是第 \(k\) 个客户端的联合概率分布。它同时刻画了“输入长什么样”(特征分布)和“输入对应什么答案”(标签分布)。

2. 不等关系:\(\neq\) 表示至少存在某个 \(x\) 或 \(y\) 使得两边概率不等。不同客户端的分布规律不一致,即数据不服从同一“口味曲线”。

3. 全称限制:\(\forall\, k \neq j\) 强调任意两个客户端之间都可能存在差异,而非个别例外。这意味着全局模型面对的是七嘴八舌的众口。

实际工程中,非 IID 通常表现为三类:标签分布倾斜——不同客户端拥有的类别比例不同(有的店全是辣菜订单);特征分布倾斜——同一标签下特征的分布不同(同样的“宫保鸡丁”,A 城管辣、B 城管甜);数量分布倾斜——各客户端样本量相差悬殊(C 城景区店时多时少)。这三类异质性会以不同的方式折磨全局模型。

口味差异一旦超出厨师的经验范围,问题就来了:每家店都在自己的“口味坐标系”里找到最优解,可这些最优解方向互相打架。你即将看到,这种打架在数学上会演变成全局模型的严重跑偏。

漂移数学机理

假设三家分店的厨师各自独立开发了自认为“最好吃”的改良菜谱:A 店厨师认为辣度翻倍才是王道,B 店厨师坚信少盐多糖能提升复购,C 店厨师则主张保持原味。当中央厨房把三份差异化建议做算术平均时,得到的“平均改良版”既不够辣也不够甜,三家店的顾客都不买账。这个现象在联邦学习中被称为客户端漂移(Client Drift)。

数学上,每个客户端优化的目标是自己的本地经验损失,而中央厨房关心的是全局加权损失。当数据非 IID 时,这两者的最优点并不重合:

\[\displaystyle F_k(w) = \frac{1}{n_k} \sum_{i \in \mathcal{D}_k} \ell(w; x_i, y_i), \qquad \min_w f(w) = \sum_{k=1}^{K} p_k F_k(w)\]

其中 \(F_k(w)\) 是客户端 \(k\) 的本地损失函数,\(\mathcal{D}_k\) 是它的本地数据集,\(n_k\) 是本地样本量,\(\ell\) 是单个样本的损失(如交叉熵),\(p_k\) 是客户端 \(k\) 在全局目标中的权重,通常取 \(n_k / n\)。

1. 本地损失函数:\(F_k(w) = \frac{1}{n_k} \sum_{i \in \mathcal{D}_k} \ell(w; x_i, y_i)\) 表示在客户端 \(k\) 自己的数据上评估模型 \(w\) 的平均误差。每家厨师只在乎自家顾客的满意度。

2. 全局目标:\(\min_w f(w) = \sum_{k=1}^{K} p_k F_k(w)\) 是所有客户端损失的加权和,代表中央厨房追求的“全连锁整体口碑最优”。

3. 权重系数:\(p_k\) 通常按照样本量比例 \(n_k / n\) 设定,客流量大的店影响更大,这本身是合理的。

4. 最优解错位:各客户端 \(\arg\min F_k(w)\) 不一致,单一全局 \(w^*\) 无法同时满足所有本地目标,导致梯度更新方向互相冲突。

这种“最优解错位”带来的直接后果是收敛缓慢甚至发散:全局模型在几个本地最优点之间反复横跳,测试精度天花板被拉低。工程师们常说“模型越训越歪”,根源就在于此。接下来的问题顺理成章——能不能提前量化每家店的“口味偏斜程度”?中央厨房需要一个温度计。

数据异质度量

中央厨房要判断哪些分店的改良建议更值得信任,单凭感觉不行,需要一个客观的“口味偏离度”指标。它给每家店发放一份标准口味问卷,统计各家对辣、甜、咸、清淡的比例偏好,然后用一个数字量化每家店与总偏好的距离——这个数字越接近 0,说明这家店的口味越“主流”。

衡量两个概率分布差异的常用工具是 KL 散度(Kullback-Leibler Divergence),它可以用来度量客户端标签分布与全局分布之间的异质性:

\[\displaystyle D_{\text{KL}}(P_k \parallel P_{\text{global}}) = \sum_{c=1}^{C} P_k(c) \log \frac{P_k(c)}{P_{\text{global}}(c)}\]

其中 \(C\) 是类别总数,\(P_k(c)\) 是客户端 \(k\) 中类别 \(c\) 的出现频率,\(P_{\text{global}}(c)\) 是所有数据合并后的全局类别频率。

1. 频率统计:\(P_k(c)\) 统计客户端 \(k\) 里第 \(c\) 类样本的比例,如同统计这家店顾客点辣锅的比例。

2. 对数比值:\(\log \frac{P_k(c)}{P_{\text{global}}(c)}\) 衡量这个客户端在第 \(c\) 类上“偏了多少”。比值为 1 说明与全局一致,远离 1 说明严重偏离。

3. 求和:\(\sum_{c=1}^{C}\) 把所有类别上的偏差按权重累加,得到整体的口味偏离指数。

除了 KL 散度,实践中还常用标签偏斜指数(如各客户端标签分布的方差)和样本量统计(变异系数)来刻画异质性。这些度量指标的价值在于:它们可以指导聚合策略——对异质性高的客户端降低信任权重,对口味“主流”的客户端加大依赖。

有了“温度计”,中央厨房就不再盲目信任每一份改良建议。但这些度量只能告诉我们“问题有多严重”,并不能直接解决漂移。真正的解法要从算法层面约束各分店的自由发挥空间,这就是 FedProx 的登场。

FedProx算法

中央厨房出台了新政策:“允许各店在标准菜谱基础上微调,但改动幅度不能太大——谁要是敢把锅底改成巧克力味,立刻收回改良资格。”这个政策很聪明:它不剥夺厨师的灵活性,只是给自由发挥加了一条看不见的弹性绳。

FedProx(Federated Proximal) 正是这条弹性绳的数学化。它在每个客户端的本地损失函数上增加一个近端项(Proximal Term),把本地参数 \(w\) 往全局参数 \(w_t\) 方向拉拢:

\[\displaystyle \min_w \left[ F_k(w) + \frac{\mu}{2} \left\| w - w_t \right\|^2 \right]\]

\(\mu\) 是近端强度超参数,\(\| w - w_t \|^2\) 是当前参数与上轮全局参数的欧氏距离平方。

1. 本地损失:\(F_k(w)\) 依然是客户端自己的目标,代表“让本地顾客满意”。

2. 近端惩罚项:\(\frac{\mu}{2} \left\| w - w_t \right\|^2\) 表示本地参数离全局参数越远,受到的惩罚越大——离标准菜谱越远的改动方案,代价越高。

3. 强度系数:\(\mu\) 控制弹性绳的松紧。\(\mu = 0\) 时退化为普通 FedAvg;\(\mu\) 增大时本地模型不敢偏离全局模型太远。

4. 本地求解:每个客户端在自己的数据上求解这个带惩罚的目标,再返回 \(w\),服务端照常做加权平均。

FedProx 的巧妙之处在于用“约束本地偏离”间接缩小各方最优解的间距,从而缓解漂移。它不改变通信协议,只修改本地训练的目标函数,工程落地成本极低。然而,FedProx 是“堵”的思路,还有一套“疏”的思路——与其限制大家乱跑,不如给每个客户端装一个方向盘校正器,让它们跑的方向本身就更正确。

SCAFFOLD算法

中央厨房进一步完善了上报机制:每家分店除了提交改良菜谱,还必须附带一份“口味偏差声明”——“我店顾客比全国平均口味偏辣 30%、偏甜 15%”。中央厨房汇总时,先根据各店的偏差声明做一次方向修正,再决定如何吸纳它们的改动。

SCAFFOLD(Stochastic Controlled Averaging for Federated Learning) 把这个直觉变成了严格的数学工具。它引入了全局控制变量 \(c\) 和本地控制变量 \(c_k\),在本地梯度更新时对梯度方向做校正:

\[\displaystyle w_{t+1}^{(k)} = w_t - \eta \left( g_k(w_t) + c - c_k \right)\]

其中 \(g_k(w_t)\) 是客户端 \(k\) 在全局参数处计算的平均梯度,\(c\) 是服务端维护的全局控制变量,\(c_k\) 是客户端 \(k\) 的本地控制变量,\(\eta\) 是学习率。

1. 原始梯度:\(g_k(w_t)\) 表示这家店按自己的口味计算出的更新方向——可能偏辣也可能偏甜。

2. 全局控制变量:\(c\) 是所有客户端更新方向的平均值,代表“全国平均口味走向”。

3. 本地控制变量:\(c_k\) 记录这家店长期比全国平均“偏多少”,相当于它的口味偏差档案。

4. 方向校正:\((g_k + c - c_k)\) 在本地梯度中减去偏差项,相当于把偏辣店的更新方向“掰”回全国平均方向,再用 \(c\) 校准整体走向。

SCAFFOLD 通过控制变量显著减小了客户端之间的梯度方差,使更新方向更接近真正的全局梯度。实践中它通常比 FedProx 收敛更快、精度更高,但代价是需要额外的存储与通信量来维护控制变量。到这里,“堵”和“疏”都有了,最后一步是把中央厨房的汇总策略本身变聪明:不是所有分店的意见都该被一视同仁。

自适应聚合策略

中央厨房的汇总规则之前是“各家改动的简单平均”,但这显然不合理:客流量一万人的旗舰店和客流量一百人的社区小店,意见理应拥有不同的分量。更精细的策略还要考虑异质性——如果某家店本身口味就非常小众,它的建议即使有创见,也不能过分影响全局。

这种“看人下菜碟”的聚合方式在联邦学习中叫自适应聚合(Adaptive Aggregation)。最经典的加权方式是样本量加权:

\[\displaystyle w_{t+1} = \sum_{k=1}^{K} \frac{n_k}{n} \, w_{t+1}^{(k)}\]

其中 \(n_k\) 是客户端 \(k\) 的本地样本量,\(n = \sum_{k=1}^{K} n_k\) 是总样本量,\(w_{t+1}^{(k)}\) 是客户端 \(k\) 本轮更新后的参数。

1. 样本量统计:\(n_k\) 记录第 \(k\) 个客户端拥有的数据条数,如同一家店的客流计数。

2. 归一化权重:\(\frac{n_k}{n}\) 把每个客户端的贡献映射为 0 到 1 之间的比例,客流量大的店权重自然更大。

3. 加权求和:\(\sum_{k=1}^{K}\) 把所有客户端的参数按权重融合,得到新全局模型。客流量大的店铺的意见在这一步自动获得更多话语权。

更先进的自适应策略会结合上一节的异质性度量,比如按 KL 散度调整权重:异质性过高的客户端权重被压缩,避免少数极端分布绑架全局模型;还有一些鲁棒聚合方法(如 Krum、Median)直接剔除偏离过大的“恶意节点”。至此,从认知异质性、量化异质性、约束本地训练到优化聚合方式,我们已经有了一整套对抗客户端漂移的完整工具箱。

回到中央厨房的故事:有了异质性温度计,有了 FedProx 的弹性绳,有了 SCAFFOLD 的方向修正,再配合“按客流加权 + 按偏态度打折”的聚合策略,新版标准菜谱终于能让大部分门店的顾客满意。数据孤岛依旧是孤岛,但智慧已经在孤岛之间流畅地传递。

AI 应用场景

多中心医疗影像协作建模

阶段:模型训练(联邦学习 + 漂移缓解)

解决的问题:多家医院的影像数据(CT、X光)因设备品牌、人群结构不同呈现出强烈的非 IID 特征——有的医院小儿患者多,有的医院老年患者多。传统做法是强制所有医院共享数据到中心机房,这既违反数据合规,又因影像体积庞大而难以传输。使用 FedProx + 样本量加权聚合,可以在数据不出院的前提下训练出泛化能力强的诊断模型,同时避免模型被某家大型三甲医院的数据分布“带偏”。

具体案例:某区域医疗联合体联合 8 家医院做肺炎筛查模型,使用 FedProx(μ=0.01)替代 FedAvg,在保持各家医院数据本地的同时,将模型在独立测试集上的 AUC 提升了约 6%,且训练轮数缩减了 40%。

手机输入法个性化训练

阶段:端侧训练与在线更新

解决的问题:手机输入法的下一个词预测必须依赖用户自己的输入习惯,但每个用户的用词风格天差地别——有人爱用网络热词,有人习惯正式书面语。直接聚合所有用户的模型更新会导致“平庸的模型”对谁都不够贴切。利用 SCAFFOLD 的控制变量机制,服务器能识别并校正用户特定偏差,在保护个人输入隐私的同时保留个性化效果。

具体案例:某输入法厂商把上亿用户的本地语言模型更新用 SCAFFOLD 聚合,相比 FedAvg 方案,输入预测准确率提升 11%,并且显著降低了因用户极端用词习惯导致的模型震荡。

联邦信贷风控与反欺诈

阶段:数据异质性评估与自适应聚合

解决的问题:不同金融机构的客户画像和欺诈模式差异巨大——互联网银行以年轻用户为主,传统银行以中老年储户为主,消费金融公司则覆盖下沉市场。训练全局反欺诈模型时,若忽略数据异质性,模型会对某类人群产生系统性误判。先计算各参与机构的标签分布 KL 散度与样本量,再据此做自适应加权聚合,能显著提升模型的鲁棒性。

具体案例:某金融联盟联合 6 家持牌机构做欺诈检测,通过数据异质性评估发现两家机构的标签分布 KL 散度超过阈值,将其聚合权重下调 30%,最终将欺诈召回率提升了 18%,误报率下降 9%。

Python 演示

python66 行
import numpy as np def gen_non_iid(num_clients=3, num_samples=60, seed=0):    rng = np.random.default_rng(seed)    slopes = [0.8, 1.6, 0.2]    xs, ys = [], []    for i in range(num_clients):        x = rng.uniform(0, 1, num_samples) + i * 0.3        y = slopes[i] * x + 0.2 + rng.normal(0, 0.1, num_samples)        xs.append(x)        ys.append(y)    return xs, ys def grad(x, y, w):    pred = w[0] * x + w[1]    return np.array([np.mean((pred - y) * x), np.mean(pred - y)]) def local_update(x, y, w, steps, lr, mu=0.0, w_global=None):    for _ in range(steps):        w = w - lr * grad(x, y, w)        if w_global is not None:            w = w - lr * mu * (w - w_global)    return w def federated(xs, ys, num_rounds=15, local_steps=5, lr=0.05, mu=0.0):    w = np.zeros(2)    for _ in range(num_rounds):        ws = []        for x, y in zip(xs, ys):            w_local = local_update(x, y, w, local_steps, lr, mu, None if mu == 0 else w)            ws.append(w_local)        w = np.mean(ws, axis=0)    return w def local_update_scaffold(x, y, w, steps, lr, c_global, c_local):    for _ in range(steps):        w = w - lr * (grad(x, y, w) + c_global - c_local)    return w def scaffold(xs, ys, num_rounds=15, local_steps=5, lr=0.05):    w = np.zeros(2)    c_global = np.zeros(2)    c_locals = [np.zeros(2) for _ in xs]    for _ in range(num_rounds):        ws = []        for i, (x, y) in enumerate(zip(xs, ys)):            w_local = local_update_scaffold(x, y, w, local_steps, lr, c_global, c_locals[i])            ws.append(w_local)            c_locals[i] = c_locals[i] - (w - w_local) / (local_steps * lr)        w = np.mean(ws, axis=0)        c_global = np.mean(c_locals, axis=0)    return w if __name__ == "__main__":    xs, ys = gen_non_iid()    w_avg = federated(xs, ys)    w_prox = federated(xs, ys, mu=0.05)    w_scaf = scaffold(xs, ys)    X = np.concatenate(xs)    Y = np.concatenate(ys)    w_ideal = np.zeros(2)    for _ in range(50):        w_ideal = w_ideal - 0.1 * grad(X, Y, w_ideal)    print("FedAvg   与理想模型偏差:", round(np.linalg.norm(w_avg - w_ideal), 4))    print("FedProx  与理想模型偏差:", round(np.linalg.norm(w_prox - w_ideal), 4))    print("SCAFFOLD 与理想模型偏差:", round(np.linalg.norm(w_scaf - w_ideal), 4))
目的:在非 IID 数据上对比三种联邦聚合算法与集中式理想模型的偏差,直观展示客户端漂移程度与缓解效果。
  1. x = rng.uniform(0, 1, num_samples) + i * 0.3给每个客户端注入特征偏移,模拟“口味差异”。
  2. w = w - lr * grad(x, y, w)本地梯度下降,相当于厨师按自家口味试菜。
  3. if w_global is not None:FedProx 近端约束的开关,只有 μ 非零时才启用。
  4. w = w - lr * mu * (w - w_global)每一步把参数往全局模型拉回,即弹性绳的数学实现。
  5. w = np.mean(ws, axis=0)服务端把所有客户端的更新做样本量平均聚合。
  6. w = w - lr * (grad(x, y, w) + c_global - c_local)SCAFFOLD 用控制变量校正梯度方向。
  7. c_locals[i] = c_locals[i] - (w - w_local) / (local_steps * lr)更新本地偏差档案,供下一轮纠偏使用。
  8. print("FedAvg 与理想模型偏差:", ...)输出三种算法与理想模型的差距,数值越小说明漂移越轻。

常见误区

误区我以为非 IID 数据主要就是“有的客户端数据多、有的客户端数据少”,只要数据量均衡就不会有漂移问题。

正解数据量差异只是“数量分布倾斜”这一种表现。更隐蔽的是标签分布倾斜(各客户端类别比例不同)和特征分布倾斜(同样的标签下特征分布不同),后两者即使样本量完全相等,也会造成严重的客户端漂移。就像两家店客流一样多,但一家全是辣味爱好者,另一家全是甜党,菜谱依旧无法统一。

为何常见:因为初学者最容易感知到的差异就是“样本数多少”,而标签和特征层面的异质性需要统计数据分布才能看到,直觉上不容易建立概念。

误区模型在本地训练得越充分,每轮迭代的质量越高,所以应该增加本地 epoch 数来解决漂移问题。

正解恰恰相反。本地训练轮数越多,模型越靠近本地最优解,离全局最优越远,客户端之间的参数差距越大,平均后的全局模型漂移越严重。FedProx 就是用近端项来“阻止”本地模型过度贴近本地分布;FedAvg 中合适的做法通常是减少本地轮数并增加全局通信轮数。

为何常见:人们容易把单机训练中“多训练几轮更好”的经验直接迁移到联邦场景,忽略了联邦中的本地更新方向是不同于全局方向的。

误区既然近端项能防漂移,那把 μ 设得很大,让本地模型完全贴近全局模型,不就没有漂移了吗?

正解μ 过大会导致本地模型几乎不做学习,每个客户端都返回“未改良的菜谱”,全局模型退化成多轮拷贝,无法从本地数据中汲取任何新知识,最终欠拟合。μ 的作用是“柔性约束”而非“完全锁死”,实践中通常需要结合验证集调参,一般取值在 0.001 到 0.1 之间。

为何常见:把“约束”理解成“禁止改变”是常见误区。近端项的本质是目标函数中添加的软惩罚,不是硬性的参数截断。

误区服务端只要把各客户端返回的参数做加权平均,梯度方向各异的更新互相抵消,漂移自然就被平均掉了。

正解算术平均只能消除随机噪声,无法消除系统性偏差。非 IID 数据下,各客户端的最优解方向是系统性偏离的——它们不是围绕全局最优呈随机分布,而是各自朝着不同角落稳定偏移。SCAFFOLD 之所以有效,正是因为它的控制变量显式估计了这种系统性偏差,而不是指望平均来“碰运气”。

为何常见:大数定律的直觉让人误以为“平均能消除误差”,但它成立的前提是误差均值为零、相互独立,这与客户端漂移的生成机制完全不符。

面试题

Q1. 联邦学习中最典型的“数据孤岛”困境指什么?

单选题 · easy

  • A.各客户端数据独立同分布
  • B.客户端数据无法集中共享← 正确答案
  • C.服务端算力资源受限
  • D.客户端网络带宽不足

答案:B。数据孤岛指数据分散在各机构且因隐私合规无法集中,这正是联邦学习存在的前提。选项 A 是理想假设而非困境;C、D 是工程限制而非数据孤岛本质。

Q2. 客户端漂移的直接成因是什么?

单选题 · easy

  • A.服务端模型初始化不当
  • B.数据分布非独立同分布← 正确答案
  • C.神经网络层数过深
  • D.客户端通信延迟过高

答案:B。客户端漂移源于各客户端数据分布(口味)不同,导致本地最优解与全局最优解错位。初始化、网络深度、通信延迟都不是漂移的本质成因。

Q3. 在 FedProx 中,近端项的作用是什么?

单选题 · mid

  • A.加速本地梯度下降收敛
  • B.约束本地模型贴近上轮全局模型← 正确答案
  • C.减少服务端通信频率
  • D.增加本地样本采样量

答案:B。近端项 \(\frac{\mu}{2}\|w-w_t\|^2\) 对偏离全局参数的模型施加惩罚,类似“弹性绳”将本地训练拉回全局方向。它不改变采样、通信或本地收敛速度。

Q4. SCAFFOLD 相比 FedAvg 的核心改进是什么?

单选题 · mid

  • A.增加本地训练轮数
  • B.引入控制变量校正梯度方向← 正确答案
  • C.加密上传的梯度参数
  • D.动态调整客户端学习率

答案:B。SCAFFOLD 维护全局控制变量和本地控制变量,在梯度更新中减去偏差项,降低非 IID 引入的梯度方差。加密是隐私技术,与漂移校正无关。

Q5. 以下哪些属于非 IID 数据的表现形式?

多选题 · mid

  • A.标签分布在各客户端间倾斜← 正确答案
  • B.特征分布在不同客户端间偏移← 正确答案
  • C.各客户端样本数量差异悬殊← 正确答案
  • D.各客户端服务器算力不同

答案:ABC。非 IID 包括标签倾斜、特征倾斜和数量倾斜三类数据层面的异质性。选项 D 是硬件资源的差异,不属于数据分布异质性。

Q6. KL 散度在联邦学习中的数据异质性度量中用于衡量什么?

单选题 · mid

  • A.客户端与服务端之间的通信量
  • B.客户端标签分布与全局分布的差异← 正确答案
  • C.客户端本地模型参数量的大小
  • D.客户端网络延迟的波动程度

答案:B。KL 散度衡量两个概率分布的差异,在联邦场景中常用来量化客户端标签分布与全局分布的偏离程度,是自适应聚合的重要依据。

Q7. 以下哪些策略可以有效缓解客户端漂移?

多选题 · hard

  • A.使用 FedProx 添加近端约束← 正确答案
  • B.使用 SCAFFOLD 控制变量校正← 正确答案
  • C.无限增加本地训练轮次
  • D.按样本量做自适应加权聚合← 正确答案

答案:ABD。FedProx 用约束限制偏离,SCAFFOLD 用控制变量消除偏差,自适应加权让可信客户端拥有更大话语权,三者都能缓解漂移。增加本地轮次会加重本地过拟合并加剧漂移。

Q8. FedProx 中 μ 取值为 0 时等价于哪种算法?

单选题 · hard

  • A.SCAFFOLD
  • B.FedAvg← 正确答案
  • C.Krum 聚合
  • D.集中式训练

答案:B。当 μ=0 时近端惩罚项消失,本地目标退化为纯本地损失函数,整个流程回归标准的 FedAvg。SCAFFOLD 包含控制变量机制,与 μ 无关。

Q9. 自适应聚合中,客户端权重通常如何设定?

单选题 · easy

  • A.与本地样本量成正比← 正确答案
  • B.与本地样本量成反比
  • C.与服务端内存成正比
  • D.与网络带宽成正比

答案:A。样本量越大的客户端数据代表性越强,权重应越大,对应公式 \(n_k/n\)。带宽影响通信速度而非统计置信度,权重与存储或网络无关。

Q10. 关于 SCAFFOLD 控制变量的作用,下列说法正确的有?

多选题 · extreme

  • A.估计本地数据与全局分布的偏差方向← 正确答案
  • B.消除非 IID 导致的梯度方差← 正确答案
  • C.完全替代本地训练过程
  • D.在聚合阶段做参数加权平均

答案:AB。本地控制变量 \(c_k\) 记录客户端与全局分布的系统性偏差,全局控制变量 \(c\) 是平均偏差,二者差值用于校正梯度方向,从而降低梯度方差。控制变量并不替代训练,也不负责聚合加权。