联邦学习(Federated Learning)让"数据不动,模型动"。但模型聚合的信任问题怎么办?谁来保证聚合者诚实?区块链加上经济激励和透明记录,成为联邦学习的天然搭档。
11.3.1 联邦学习基础
sequenceDiagram
participant A as 参与方A<br/>(本地数据)
participant B as 参与方B<br/>(本地数据)
participant BC as 区块链<br/>(信任锚 + 激励)
participant S as 全局模型聚合者
S->>A: 下发全局模型 w_t
S->>B: 下发全局模型 w_t
A->>A: 本地训练 → w_{t+1}^{(A)}
B->>B: 本地训练 → w_{t+1}^{(B)}
A->>BC: 上传梯度/模型更新
B->>BC: 上传梯度/模型更新
BC->>BC: 校验 + 记录 + 激励分配
BC->>S: 可信聚合输入
S->>S: FedAvg 加权平均
S->>A: 更新全局模型 w_{t+1}
S->>B: 更新全局模型 w_{t+1}
标准 FedAvg 协议
其中 是参与者 在第 轮的本地更新。聚合者计算全局模型,参与者只上传梯度,不下传原始数据。
隐私威胁
| 攻击类型 | 能力 | 威胁 |
|---|---|---|
| 梯度推断 | 看到梯度,反推训练样本 | 差分隐私保护 |
| 拜占庭参与者 | 上传有毒梯度 | 鲁棒聚合( trimmed mean / Krum) |
| 共谋 | 多个攻击者的联合推断 | 多方安全计算 |
11.3.2 区块链作为联邦学习的信任锚
区块链解决联邦学习的拜占庭聚合者问题:
typescript
/**
* 链上联邦学习协调:用智能合约替换可信聚合者
*/
interface LocalUpdate {
participant: string;
round: number;
gradientHash: string; // 不直接上链接度(太大),只上链 hash
stake: bigint; // 经济质押
}
interface AggregationContract {
updates: Map<string, LocalUpdate[]>;
rewards: Map<string, bigint>;
submitUpdate(update: LocalUpdate, signature: string): void {
// 验证:参与者签名、质押足够、轮次正确
// 真正梯度通过 IPFS 传输(经济上链总不可能)
this.updates.get(update.round)?.push(update);
}
finalizeRound(round: number, aggregatedHash: string, proof: string): void {
// 聚合者在链下完成聚合,上链提交最终哈希和 TEE / zk 证明
// 智能合约验证 proof 正确
// 如果正确,解锁质押的奖励
// 参与者奖励与他们 upload 的 hash 的 "数据量证明" 挂钩
const roundUpdates = this.updates.get(round) || [];
for (const u of roundUpdates) {
// 简化的声誉 + 质押机制
const base = u.stake;
this.rewards.set(u.participant, (this.rewards.get(u.participant) || 0n) + base);
}
}
}11.3.3 差分隐私与噪声注入
为了保护参与者,在本地梯度上添加高斯噪声:
其中 是梯度裁剪边界,。链上可验证参数: 的噪声期望为零,可审计。
11.3.4 去中心化 vs 性能的权衡
| 维度 | 中心化 FedAvg | 链上联邦学习 |
|---|---|---|
| 聚合者信任 | 需信任服务器 | 智能合约 + 质押 |
| 共识延迟 | 秒级 | 分钟级 |
| 成本 | 低 | Gas/手续费 |
| 可审计性 | 日志不透明 | 链上透明 |
| 拜占庭容错 | 差 | 原生支持 |
当前应用:DATA DAO、Ocean Protocol 上的隐私计算市场、医疗数据协作。
> ← 上一节:11.2 去中心化AI | 前往 → 11.4 可验证计算与zkML |*
评论
0评论加载中…