联邦学习游乐场:数据不出本地,模型怎么一起训
Federated Learning Playground · 开源项目,TensorFlow 游乐场的联邦学习分支
把神经网络游乐场改造成了联邦学习沙盘:同一份数据被切给 9 个客户端,各自只拿自己那份本地训练,服务器再把大家的模型聚合成一个。四种聚合算法、数据异质性、客户端掉线、差分隐私都做成了可以现场拖的滑块。
交互实验(可直接投屏)
原作是一个完整的网页应用,下面直接嵌入;屏幕小或要投影时,点「全屏打开实验」更清楚。
动手三步
- 先在原版模式下跑一遍,记下测试损失与收敛速度作为基准
- 点「开启联邦学习」,页面下方出现 9 个本地模型;点播放,看全局模型一轮一轮被聚合出来
- 把数据异质性从 10 拉到 0.1 再跑一次,看客户端损失分布怎么被拉开
- 把每轮参与比例从 0.2 调到 1.0,对照通信开销与收敛速度两张图,体会其中的取舍
- 打开差分隐私,把噪声系数往上调,看隐私保护怎样用精度换来
课堂怎么用
- 先用原版模式讲清「一个中心、一份数据」的普通训练,再一键切到联邦模式,对比「数据不动、模型动」
- 用数据异质性做课堂实验:全班分两组各押一个值,跑完比谁收敛更快
- 讲差分隐私时,让学生自己找「在准确率掉不超过两个点的前提下,噪声最大能调到多少」
- 接 E-07 隐私保护三讲:那件讲原理,这件让学生自己调参数看代价
思考题
- 联邦学习里的「一轮」和普通训练里的「一个 epoch」有什么区别?本地训练轮数调大,为什么不一定更好?
- 为什么客户端数据越不均衡,全局模型收敛得越慢?
- 加了差分隐私噪声之后模型仍能学出决策边界,这说明噪声是加在哪一步上的?
已知限制
- 原作自带的统计脚本已移除,只保留一个什么都不做的桩函数(原作交互代码会调用它,删掉会报错)
- 特征列里的数学记号按原样保留;四种算法名保留英文并加了中文括注
- 四张联邦指标图的坐标轴只有数值刻度,原作就没有文字标签
原作 Federated Learning Playground(oseltamivir(在 TensorFlow 游乐场基础上扩展;原作版权 Google Inc.),开源项目,TensorFlow 游乐场的联邦学习分支),Apache-2.0 许可(原文),界面已中文化。