想象一下这所学校的场景:每个班级的课代表都会把自己班最近总结的学习心得(梯度)交给教研组长,教研组长把所有人的心得揉成一份新的年级版统一教材(全局模型)。可是突然有一天,有几个班集体使坏,他们的课代表交上来的不是“心得”,而是故意写错的重点、倒着教的解题步骤。如果组长不加分辨,把这些毒情报也揉进教材里,那整本教材就会被越带越偏,好学生也遭殃。 这个故事其实就是联邦学习的日常。在现实中,医院、银行、手机厂商各自在本地用数据训练模型,只把模型更新的“心得”传给参数服务器;服务器汇总后再分发给各方。可一旦有参与方遭到黑客劫持,或者本身就是恶意的,它就能上传精心篡改的梯度,把全局模型引向灾难。如何在这种“有人使坏”的前提下,仍然从一堆良莠不齐的心得里选出真知灼见?这就是我们要聊的联邦学习拜占庭容错机制。

岗位关联

学习联邦学习拜占庭容错,能让你在设计分布式AI系统时不再“裸奔”——面对参与节点被攻破、数据被投毒的真实威胁,你会拥有数学建模、鲁棒聚合算法与防御评估的完整工具箱,这是联邦学习平台架构师与安全研究者的核心生存技能。

目录
  1. 可视化演示
  2. 拜占庭问题
  3. 联邦学习基础
  4. 攻击建模
  5. 鲁棒聚合入门
  6. Krum 算法
  7. Median 算法
  8. Trimmed Mean
  9. 防御评估
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示拜占庭攻击威胁建模、Krum与中位数鲁棒聚合算法对比及防御效果评估,切换模式观察联邦学习如何抵御恶意客户端梯度投毒攻击。

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

拜占庭攻击威胁建模 恶意客户端篡改梯度方向,向服务器发送投毒梯度使全局模型偏离最优解 拜占庭攻击在联邦学习中尤为危险,因服务器无法直接审计客户端本地训练过程 Attack: g_malicious = g_true + δ×noise 当恶意客户端比例超过阈值时,简单平均聚合将完全失效

拜占庭问题

中世纪,东罗马帝国的将军们攻打一座坚城,四面围困的军队必须同时发起进攻才可能取胜。可坏消息是:传令兵可能被敌军截获、被调包,甚至某位将军早已叛变。每个人都不确定隔壁的将领会按时冲锋,还是临阵倒戈。这就是著名“拜占庭将军问题”的原始画面——在一个存在叛徒的系统里,成员之间如何达成可信的一致行动。

把城墙换成参数服务器,把将军换成参与联邦学习的客户端,同一个难题就迎面而来。1982年,Lamport 等学者正式给这个问题定了名,并指出:在存在叛徒的分布式系统中,仅靠常规通信协商几乎无法达成一致。联邦学习恰恰就是这样一个分布式系统——成千上万的手机、机构节点各自为政,任何一台设备都可能被黑客劫持,或者本身就是恶意方。

恶意客户端最常见的破坏手段叫作梯度投毒:它把自己本地算出的真实梯度丢弃,转而上传精心构造的假梯度。服务器若照单全收这份毒情报,全局模型就会沿着错误方向越走越偏。更麻烦的是,恶意参与者表面上与普通客户端毫无区别,服务器无法通过身份或者日志直接分辨谁是叛徒。防御必须转移到数学与统计层面,而不是靠身份认证。

所以教研组长遇到的不只是“有人交了烂心得”,还有“心得看起来挺像回事,实则是毒药”。要让年级教材不被带歪,唯一的办法就是升级汇总心得的方式——这正是后面各章要讨论的鲁棒聚合算法。

联邦学习基础

每一轮训练开始前,教研组长会把上一版教材发给各班课代表。各班同学在自己教室里,用本地数据琢磨这些重点,得出一点独家心得,也就是模型更新的梯度。这些心得只存在课代表脑子里,不会泄露到校外——这正是联邦学习保护隐私的巧妙之处。

假设总共有 $K$ 个班级,第 $k$ 个班级有 $n_k$ 位同学。课代表计算出梯度 $\Delta w_k$ 上传给组长;组长把 $K$ 份心得按班级人数加权平均,再沿着平均后的更新方向调整教材。这一标准流程叫作 FedAvg(联邦平均),它是联邦学习最基础的聚合算法。

FedAvg 的更新公式如下:

在“全班都诚实”的理想世界里,取平均无可厚非:人多声音大,意见自然向真理靠拢。可一旦混入谎报军情的课代表,平均就等于把毒药也喝了下去。组长开始意识到:需要一些特别的手段来辨别真假心得。

wt+1=wt−η∑k=1KnknΔwk\displaystyle w_{t+1} = w_t - \eta \sum_{k=1}^{K} \frac{n_k}{n} \Delta w_k
这个公式描述的是:新教材 = 旧教材 − 学习率 × 所有班级心得的加权平均。
  1. $w_{t+1}$更新后的全局模型,即教研组长修订出的“新一版年级教材”。
    wt+1w_{t+1}
  2. $w_t$当前轮的全局模型,也就是上一版教材。
    wtw_t
  3. $\eta$学习率,相当于组长采纳心得时打的折扣——一次只吸收一点点,避免步子迈太大。
    η\eta
  4. $\sum_{k=1}^{K}$对全部 $K$ 个班级逐一求和,每个班的心得都要算进来。
    ∑k=1K\sum_{k=1}^{K}
  5. $\dfrac{n_k}{n}$第 $k$ 个班级人数占总人数的比例。班级人多,说话的权重就大。
    nkn\frac{n_k}{n}
  6. $\Delta w_k$第 $k$ 个课代表上传的梯度,也就是他这份心得里的“修改意见”。
    Δwk\Delta w_k

攻击建模

毒笔记也有不同型号。有的课代表把自己的心得原样反着写,把解题步骤倒过来;有的干脆乱写一气,画满不知所云的符号;还有的只针对某一类例题埋雷,平时看不出来,用到时候才爆炸。

学术界把恶意客户端的行为建模为拜占庭攻击。设第 $k$ 个客户端本应上传真实更新 $\Delta w_k$,但它实际上传的是 $g_k$。最简单的一种策略是梯度翻转:把真实梯度反转方向,再加上噪声干扰:

翻转攻击之外还有后门投毒:恶意客户端只在含有特殊触发器的本地样本上做手脚,使模型对特定输入产生错误判断,平时模型表现依然正常。这些攻击的共同点是:恶意梯度与合法梯度在向量空间中显著偏离,却又没有唯一特征能被一眼识破。因此防御算法必须在“最坏情况下有 $f$ 个客户端叛变”的假设下设计。

教研组长不知道毒笔记长什么样,但心里有数:最多可能有多少份是假的。这个数字 $f$,将成为后续所有防作弊策略的出发点。

gk=−Δwk+ξ,k∈S\displaystyle g_k = -\Delta w_k + \xi, \quad k \in S
这条式子描述了“坏课代表把答案倒过来写,还故意涂花几个字”的数学形态。
  1. $g_k$恶意客户端 $k$ 真正上传给服务器的梯度值,也就是服务器实际收到的那份毒笔记。
    gkg_k
  2. $-\Delta w_k$真实梯度的相反数。方向翻转了 180 度,原本让模型往好的方向走,现在往相反方向带。
    −Δwk-\Delta w_k
  3. $\xi$随机噪声向量,用于掩盖恶意行为的规律性,避免被一眼识破。
    ξ\xi
  4. $k \in S$下标 $k$ 属于恶意客户端集合 $S$,表示这招只对叛徒生效。
    k∈Sk \in S

鲁棒聚合入门

假如组长面对的 11 份心得里有 3 份毒情报,直接平均肯定不行。普通人的第一反应是:把最夸张的几份抽出来扔掉。但扔多少?怎么判断哪份是“真夸张”?这就需要专门的统计工具箱。

FedAvg 的脆弱性其实可以量化:一个极端大的梯度值就能把平均值拉离真实方向。换句话说,“平均”这个操作对单点污染毫无免疫——统计学上称为均值缺乏稳健性。鲁棒聚合算法的目标,就是在不知道哪些客户端是坏人的前提下,从全部梯度中估计出一个接近真实更新的方向。

目前常用的鲁棒聚合算法大致分为三族:基于选择的算法(如 Krum),在一堆梯度里挑一个最可信的;基于排序的统计算法(如 Median),逐坐标取中位数;基于裁剪的算法(如 Trimmed Mean),排序后丢弃首尾极端值再平均。三族算法的共同哲学是:不轻易相信任何一个数值,而是通过相互比较与统计规律筛除异常。

教研组长手上从此有了三套防忽悠工具:一套是只听最像样的课代表,一套是每个问题都对答案取中间,一套是扔掉最离谱的答卷再批改。接下来三节分别拆解。

Krum 算法

Krum 的思路很像组长听汇报:他相信,真正在认真备课的课代表,彼此的心得会比较接近;混进来的叛徒,即便伪装,也总会和大家格格不入。于是组长决定:只采纳“和其他人气质最接近”的那份心得。

Krum 为每个客户端定义一个评分:它到其他梯度之间距离平方之和。距离越近的一组点越可信,最终选出的梯度满足:

Krum 的输出是评分最小的那个梯度本身,再乘学习率更新全局模型。它不要求知道攻击者的具体身份,只需要攻击者数量上界的估计。缺点是只使用一个梯度,合法信息利用不足,且需要计算两两距离,复杂度约为 $O(n^2 d)$。

只信最像样的那位课代表,好处是干净利落,坏处是万一叛徒彼此串通,伪装成一个小团体,组长可能会挑中团体中央的“伪装大师”。

si=∑j∈Topm(i)∥Δwi−Δwj∥2,m=n−f−2\displaystyle s_i = \sum_{j \in \text{Top}_m(i)} \| \Delta w_i - \Delta w_j \|^2, \quad m = n - f - 2
Krum 的分数衡量的是“这位课代表与其他人的心得有多合拍”,分越低越合拍。
  1. $s_i$第 $i$ 个客户端获得的“合拍评分”,数值越小越可信。
    sis_i
  2. $\Delta w_i$第 $i$ 个客户端上传的梯度,也就是他交来的那份心得。
    Δwi\Delta w_i
  3. $\| \Delta w_i - \Delta w_j \|^2$两份梯度之间的欧氏距离平方,用来量化“这两份心得差多远”。
    ∥Δwi−Δwj∥2\|\Delta w_i - \Delta w_j\|^2
  4. $\text{Top}_m(i)$与第 $i$ 个客户端最接近的 $m$ 个客户端集合。
    Topm(i)\text{Top}_m(i)
  5. $m = n - f - 2$最近邻数量由客户端总数 $n$ 减去最大恶意数 $f$ 再减 2,保证至少留出安全余量。
    m=n−f−2m = n - f - 2

Median 算法

另一条思路更像批改选择题:每个问题把所有课代表的答案罗列在桌上,按大小排成一排,取正中间的那个答案作为标准答案。一个故意填错答案的人,最多只能把自己的答卷歪到两端,却无法移动中间的位置。

Median 算法同样简单而优雅:不再看整个梯度向量做整体比较,而是把向量拆开,对每一个维度(也就是模型参数的一个分量)独立地取中位数。于是恶意客户端即使在某个维度上给出极端值,也会被中位数天然过滤掉。

中位数是统计意义上最稳健的位置估计:只要恶意客户端的数量不超过 $n/2$,中位数就不会被推离真实值的中心。它的计算复杂度只有 $O(nd \log n)$,比 Krum 快得多。代价是每个维度独立处理,可能破坏维度之间的相关性,在梯度分量高度耦合时收敛稍慢。

组长逐题取中间答案的做法,稳妥高效,不怕个别极端答卷。但若两个维度是联动的,“逐题判断”可能会忽略题目之间的内在联系。

w^j=median⁡{Δw1,j,Δw2,j,…,Δwn,j}\displaystyle \hat{w}_j = \operatorname{median}\left\{ \Delta w_{1,j}, \Delta w_{2,j}, \ldots, \Delta w_{n,j} \right\}
公式翻译过来就是:第 $j$ 个参数位,把所有人交上来的值排队,站在正中间的那个人说了算。
  1. $\hat{w}_j$最终被服务器采纳的第 $j$ 个参数值,即这一道题的“标准答案”。
    w^j\hat{w}_j
  2. $\operatorname{median}$取中位数的运算,对应“排队后正中间的那个人”。
    median⁡\operatorname{median}
  3. $\Delta w_{i,j}$第 $i$ 个客户端上传梯度在第 $j$ 个维度上的分量。
    Δwi,j\Delta w_{i,j}
  4. $\{ \Delta w_{1,j}, \ldots, \Delta w_{n,j} \}$全部 $n$ 个客户端在第 $j$ 个维度上的取值集合。
    {Δw1,j,…,Δwn,j}\{\Delta w_{1,j}, \ldots, \Delta w_{n,j}\}

Trimmed Mean

Trimmed Mean 的做法则最有“批改潜规则”味道:老师把某道题的所有答案排序,先划掉最离谱的最高分和最低分,剩下的再取平均。它比 Median 更温和——不是只留中间一个,而是把两端剪掉一截。

参数是 $r$,即每个维度需要裁剪掉的极端值个数。把第 $j$ 个维度上的全部 $n$ 个值按大小排序,得到序列 $\Delta w_{(1),j} \leq \dots \leq \Delta w_{(n),j}$,然后丢弃前 $r$ 个和后 $r$ 个,用中间 $n - 2r$ 个值求平均:

从公式可以看出,$r=0$ 时 Trimmed Mean 退化为 FedAvg,毫无防御;$r$ 接近 $n/2$ 时只剩中间的少数几个值,行为逐渐接近 Median。为了保证防御效果,通常要求 $r$ 至少不小于恶意客户端数量 $f$。它比 Median 多利用了中间样本的信息,收敛通常更快,但多了一个需要人工设定的超参数 $r$——这正是它比前两者更依赖调参经验的地方。

组长的批卷方法有了弹性:扔多少份离谱答卷,取决于他心里估计的“坏孩子数量”。扔少了防不住毒情报,扔多了又把好学生的心得浪费了。这一刀切在哪里,就是 Trimmed Mean 的灵魂所在。

w^j=1n−2r∑i=r+1n−rΔw(i),j\displaystyle \hat{w}_j = \frac{1}{n - 2r} \sum_{i=r+1}^{n-r} \Delta w_{(i),j}
这个公式的意思是:把答卷按分数排队,划掉最离谱的两端各 $r$ 份,剩下的再取平均。
  1. $\hat{w}_j$第 $j$ 维最终采纳的参数值,也就是这道题批改后的得分。
    w^j\hat{w}_j
  2. $\Delta w_{(i),j}$第 $j$ 维上从小到大排序后的第 $i$ 个值,$(i)$ 下标表示已经排序过。
    Δw(i),j\Delta w_{(i),j}
  3. $r$每端裁剪掉的极端值个数,是算法最重要的超参数。
    rr
  4. $n - 2r$裁剪后剩余值的数量,作为平均的分母。
    n−2rn - 2r
  5. $\sum_{i=r+1}^{n-r}$从第 $r+1$ 个值一直加到第 $n-r$ 个值,正好跳过两端被划掉的部分。
    ∑i=r+1n−r\sum_{i=r+1}^{n-r}

防御评估

工具备齐,教材成稿,教研组长还要回答一个问题:这套防作弊手册真的把教材编好了吗?评判标准不是看谁信誓旦旦,而是看期末考试——模型的准确率能不能保住,训练流程能不能准时收敛。

评估拜占庭容错机制一般从三个维度入手:一是攻击下模型精度,即加入 $f$ 个恶意客户端后,全局模型仍能达到的准确率;二是收敛速度,即模型到达目标精度所需的训练轮数;三是攻击容忍上限,即恶意客户端占比超过多少时算法彻底失效。经典结论是:在独立同分布数据下,当 $f < n/2$ 时,Median 与 Trimmed Mean 等算法可证明收敛;Krum 则需要更宽松的 $f + 2 < n$ 条件。

实际对比中,还应关注恶意梯度的仿真方法。梯度翻转攻击下,Krum 和 Median 表现接近;在协同投毒下,Trimmed Mean 因为裁剪了更多端点信息,往往更稳定。算法选型没有银弹:客户端数量多、算力充足时可用 Krum;要求高吞吐时用 Median;想要平衡精度与稳健性时用 Trimmed Mean,并用验证集提前扫描 $r$ 的取值。

教研组长最终做成了一本“防忽悠手册”:先摸清毒笔记的最坏数量,再选择手头分寸最适合的汇总策略,拿到验收报告后持续调参。联邦学习的安全,从来不是某一次聚合的运气,而是一整套可评估、可取舍的机制设计。

---

AI 应用场景

银行联盟反欺诈模型

阶段:联邦训练的聚合与安全加固

解决的问题:几十家中小银行结成联盟,在不共享原始交易流水的前提下联合训练反欺诈模型。过去采用 FedAvg,某家银行若被黑客攻破并注入恶意梯度,整个联盟的模型会快速失灵。引入 Trimmed Mean 后,即使少数节点被攻破,恶意梯度也会在排序裁剪中被过滤,其他成员仍能维持较高的欺诈识别率。

具体案例:某省级银行联盟有 12 家成员行,每轮训练时假设最多 2 家节点可能异常。平台将聚合层从 FedAvg 切换为 $r=2$ 的 Trimmed Mean 后,在模拟梯度翻转攻击下,模型 AUC 从掉到 0.62 回升并稳定在 0.91。

海量设备联邦学习

阶段:边缘设备上传更新后的鲁棒聚合

解决的问题:手机厂商向海量用户设备分发模型,设备端用本地数据微调后再上传更新。攻击者可能通过恶意 App 控制部分设备,用“后门攻击”让模型在特定图案出现时产生错误预测。采用 Median 聚合后,单台设备的极端更新很难影响全局,设备生态的大盘保持稳定。

具体案例:某智能输入法厂商在 100 万台设备上训练下一词预测模型,其中约 3% 设备被注入恶意后门。使用逐维 Median 后,后门触发成功率从 87% 降至 4% 以下,正常输入准确率几乎不受影响。

多中心医疗影像协同

阶段:分布式训练中的异常节点防御

解决的问题:多家医院协作训练肺部 CT 诊断模型,某个机构的设备因校准异常,产出的梯度等价于一个无意的“拜占庭节点”。鲁棒聚合能同时防御恶意攻击与无意的数据退化问题。

具体案例:某多中心医学影像项目中,5 家医院中 1 家因扫描仪参数错误导致梯度分布偏移。改用 Krum 聚合后,其余 4 家机构的协作模型敏感度保持在 0.88,避免了因单点异常导致的整体模型崩溃。

Python 演示

python46 行
import numpy as np TRUE_UPDATE = np.array([1.0, -0.5, 0.8, 1.2]) def generate_updates(n=8, f=2, seed=0):    rng = np.random.default_rng(seed)    updates = []    for _ in range(n - f):        noise = rng.normal(0, 0.2, size=TRUE_UPDATE.size)        updates.append(TRUE_UPDATE + noise)    for _ in range(f):        flip = -TRUE_UPDATE + rng.normal(0, 0.3, size=TRUE_UPDATE.size)        updates.append(flip)    return np.array(updates) def fed_avg(updates):    return updates.mean(axis=0) def krum(updates, f):    n = len(updates)    m = n - f - 2    scores = []    for i, g_i in enumerate(updates):        dists = np.sort(np.linalg.norm(updates - g_i, axis=1))        scores.append(dists[:m].sum())    return updates[int(np.argmin(scores))] def median(updates):    return np.median(updates, axis=0) def trim_mean(updates, r):    sorted_u = np.sort(updates, axis=0)    return sorted_u[r:-r].mean(axis=0) def cos_sim(a, b):    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b) + 1e-12) updates = generate_updates(n=8, f=2, seed=42)for name, grad in [    ("FedAvg", fed_avg(updates)),    ("Krum", krum(updates, f=2)),    ("Median", median(updates)),    ("TrimmedMean", trim_mean(updates, r=2)),]:    sim = cos_sim(grad, TRUE_UPDATE)    print(f"{name:12s} 与真实更新的余弦相似度: {sim:.4f}")
目的:在 8 个客户端(含 2 个恶意客户端)中模拟梯度翻转攻击,对比 FedAvg、Krum、Median、Trimmed Mean 四种聚合算法产出的梯度与真实更新方向的一致性。
  1. rng = np.random.default_rng(seed)固定随机种子,保证每次运行可复现,方便不同算法公平对比。
  2. noise = rng.normal(0, 0.2, size=TRUE_UPDATE.size)为合法客户端的梯度添加小幅噪声,模拟真实的本地数据差异。
  3. flip = -TRUE_UPDATE + rng.normal(0, 0.3, size=TRUE_UPDATE.size)恶意客户端把真实更新方向翻转 180 度并加噪声,对应梯度翻转攻击。
  4. updates.mean(axis=0)FedAvg 对全部客户端梯度直接取平均,未做任何防御。
  5. dists = np.sort(np.linalg.norm(updates - g_i, axis=1))计算当前梯度到所有其他梯度的欧氏距离并排序。
  6. scores.append(dists[:m].sum())取最近的 m 个距离之和作为 Krum 评分。
  7. np.median(updates, axis=0)对每个参数维度独立取中位数,实现 Median 聚合。
  8. sorted_u[r:-r].mean(axis=0)排序后裁剪首尾各 r 个极端值,再对剩余值取平均。
  9. cos_sim(grad, TRUE_UPDATE)用余弦相似度衡量聚合结果与真实更新方向的一致程度,越接近 1 越好。

常见误区

误区人家都说联邦学习保护隐私,数据都不出本地,恶意客户端能搞什么破坏?所以直接用 FedAvg 就安全了。

正解联邦学习防御的是“数据泄露”,但模型更新(梯度)本身就是富含信息的载体。恶意客户端可以把本地梯度篡改后发给服务器,这直接破坏全局模型。FedAvg 对单份极端梯度毫无招架之力,隐私保护与拜占庭容错是两个独立的问题。

为何常见:把“隐私保护”与“安全健壮性”混为一谈。隐私解决的是“不泄露原始数据”,鲁棒性解决的是“不被恶意输入破坏”,二者是联邦学习安全的不同层面。

误区中位数就是排序后中间那个数,跟平均数差不了多少,随便用一个就行。

正解在无异常数据时二者接近,但出现恶意极端值时,一个极大值就能任意拉伸均值,而中位数几乎不动。以 11 个客户端为例,5 个恶意客户端把值取到极大,均值可能偏到外太空,而中位数仍是第 6 个(合法区域)的值。

为何常见:平时数据集干净时两者差异不大,只有极端值出现才显现差别,而拜占庭攻击恰好就是制造极端值。

误区Krum 也算了所有梯度的距离和,所以它本质上是对所有梯度做了加权平均,是 FedAvg 的高级版。

正解Krum 不做加权平均。它先对每个梯度计算与其余梯度的距离和,然后选择得分最小的那一个梯度,直接用这个梯度更新模型。除了这一个被选中的梯度,其余梯度全部被丢弃。

为何常见:看到 Krum 中计算“距离和”就把“和”误解为“平均”,忽略了最终返回的是一个单点,而不是所有点的加权求和。

误区Trimmed Mean 把两端裁掉,r 越大裁剪越多,毒情报肯定越难混进来,那就把 r 设大一点,最好裁掉一半。

正解r 要配合恶意客户端数量 f 来设定,通常要求 r ≥ f 才能保证基本安全。但 r 过大会误删大量合法信息,模型精度和收敛速度都会显著下降。r 接近 n/2 时,算法退化为只保留中间一两个值,合法梯度信息几乎被浪费殆尽。

为何常见:直观上“多扔点垃圾总没坏处”,忽视了合法信息也被一起扔掉,这是防御与信息利用之间的经典权衡。

面试题

Q1. 拜占庭将军问题最早描述的是哪种分布式场景?

单选题 · easy

  • A.多个将军围城时协调作战← 正确答案
  • B.银行间共享交易流水
  • C.手机厂商训练语音模型
  • D.搜索引擎抓取网页内容

答案:A。拜占庭将军问题源自军事通信场景:将军们需要通过信使协调进攻时间,而信使可能被截获、将军可能叛变。问题核心是如何在存在内部叛徒时达成一致行动。联邦学习中的恶意客户端就是现代版的“叛变将军”,其余选项都是 AI 应用场景而非问题起源。

Q2. 联邦学习默认的 FedAvg 聚合算法在存在拜占庭攻击时表现如何?

单选题 · easy

  • A.依然保持模型稳定
  • B.可以被单份恶意梯度拉偏← 正确答案
  • C.自动忽略异常客户端
  • D.需要客户端互相通信核对

答案:B。FedAvg 对全部客户端梯度取平均,一个极端大的恶意值就能把平均值拉离真实方向,就像教研组长把毒笔记也揉进教材。它既不会自动忽略异常,也不要求客户端互相通信,因此 B 正确。

Q3. Krum 算法最终选取的梯度是哪个?

单选题 · mid

  • A.所有梯度的加权平均
  • B.距离和最小的单个梯度← 正确答案
  • C.数值最大的那个梯度
  • D.顺序排列后的中间梯度

答案:B。Krum 为每个梯度计算到其他梯度的距离平方和,选择该距离和最小的那一个梯度作为全局更新,其余全部丢弃。它不是加权平均,也不取中间或最大值,而是选“与所有人最合拍”的单个梯度。

Q4. Median 聚合算法对每个参数维度采用什么统计量?

单选题 · mid

  • A.该维度的平均值
  • B.该维度的中位数← 正确答案
  • C.该维度的众数值
  • D.该维度的最大值

答案:B。Median 算法把梯度向量拆成多个维度,对每个维度独立排序并取中位数。中位数的稳健性保证了只要恶意客户端少于一半,极端值就无法移动中心位置,因此选中位数。

Q5. 客户端总数 n=10,恶意客户端数 f=3 时,Krum 的最近邻数量 m 应为多少?

单选题 · hard

  • A.m 等于 3 个
  • B.m 等于 5 个← 正确答案
  • C.m 等于 7 个
  • D.m 等于 8 个

答案:B。Krum 的最近邻数量公式为 m = n − f − 2,代入 n=10、f=3 得到 m=5。减 2 是为攻击者数量估计留出安全余量,保证评分不会被恶意梯度主导。

Q6. 设定 Trimmed Mean 的裁剪量 r 时应注意什么?

多选题 · mid

  • A.r 应不少于恶意数量← 正确答案
  • B.r 总是越大效果越好
  • C.r 过大会损失合法信息← 正确答案
  • D.r 与恶意数量不相关

答案:AC。为了保证防御效果,r 至少要等于恶意客户端数 f,否则极端值会漏进平均;但 r 也不是越大越好,过大时会裁掉大量合法信息,导致精度和收敛速度下降。r 与恶意数量强相关。

Q7. 梯度翻转攻击的恶意客户端会如何操作?

单选题 · easy

  • A.上传反方向的梯度← 正确答案
  • B.上传与真实相同的梯度
  • C.随机丢弃本地数据
  • D.拒绝参与任何训练

答案:A。梯度翻转攻击是把真实梯度取相反方向再上传,服务器若采纳这份梯度,模型更新就会朝目标相反方向移动。选项 B 是诚实行为,C 和 D 属于不参与或数据问题,不属于翻转攻击。

Q8. 深入理解 Krum 算法时,正确的说法包括哪些?

多选题 · extreme

  • A.计算复杂度随客户端增多上升← 正确答案
  • B.本质上是对所有梯度加权平均
  • C.最近邻数量依赖恶意上限← 正确答案
  • D.需要客户端之间直接通信

答案:AC。Krum 需要计算所有客户端之间的两两距离,复杂度约 O(n²d),随客户端数上升。最近邻数量 m = n − f − 2 直接依赖恶意上限 f。它返回单个梯度而非加权平均,且所有通信都通过服务器,客户端之间不直接通信。

Q9. 与 FedAvg 相比,鲁棒聚合算法的核心改进是什么?

单选题 · mid

  • A.增加本地训练轮次
  • B.在聚合阶段过滤恶意梯度← 正确答案
  • C.提高服务器通信频率
  • D.扩大模型的参数量

答案:B。FedAvg 的弱点在聚合阶段——对全部梯度一视同仁。鲁棒聚合算法(Krum、Median、Trimmed Mean)都在聚合时加入筛选或修正机制,降低恶意梯度对全局模型的破坏。本地轮次、通信频率、参数量都不是核心差异。

Q10. 评估拜占庭容错防御效果时,合理的指标包括哪些?

多选题 · hard

  • A.攻击下的模型精度← 正确答案
  • B.全局模型的收敛速度← 正确答案
  • C.客户端本地的数据量
  • D.恶意梯度的偏离程度← 正确答案

答案:ABD。防御评估关注攻击下精度能否保持、模型能否按时收敛,以及恶意梯度与合法梯度的偏离程度(用于仿真与分析攻击强度)。客户端本地数据量是隐私与算力指标,与防御效果好坏无直接关系。