【建议收藏】研0/研一如何快速入门联邦学习?一份4-6周的“硬核”学习计划

作为一名研一新生或准研究生(研0),面对联邦学习(Federated Learning)这个交叉领域,最忌讳的是一上来就啃厚厚的理论书。
本文分享一份强调 “理论够用、代码先行、直奔科研” 的学习计划。目标是在 4-6 周内,让你从零基础到能够独立上手实验。


第一阶段:机器学习与深度学习速成(1 周)

目标: 不求深究数学证明,但求理解核心逻辑,并能用代码实现最基础的模型。

  • 重点概念:

    • 监督学习: 线性回归、逻辑回归(逻辑回归是理解分类任务的基础)、SVM(了解核函数思想)。
    • 神经网络: 多层感知机(MLP)、激活函数(ReLU, Sigmoid)、损失函数(MSE, Cross-Entropy)。
    • 优化算法: 梯度下降(SGD)、Adam、反向传播(Backpropagation)。
    • 评估指标: Accuracy, Precision, Recall, F1-score。
  • 动手实现:

    • 使用 scikit-learn 实现逻辑回归处理简单数据集。
    • 手写一个简单的梯度下降过程,理解参数是如何更新的。
  • 资料:


第二阶段:PyTorch 实战进阶(1 周)

推荐资源: B站“小土堆”《PyTorch深度学习快速入门教程》。【10小时左右,全部看完】

  • 必修模块:

    • Tensor 操作: 创建、维度变换(reshape/squeeze)、矩阵乘法。
    • 数据加载: DatasetDataLoader 的重写(这是联邦学习分发数据的核心)。
    • 模型搭建: nn.Module 的结构。
    • 训练流程: 定义优化器、Loss、写训练 Loop。
    • GPU 训练: .to(device) 的用法。【没用 GPU 的话可以试试 Google Colab
  • 作业:

    • 完整实现一个 CNN 网络训练 CIFAR-10 数据集。
    • 进阶练习(非常重要): 尝试把 CIFAR-10 手动切分成 10 份,模仿 10 个客户端的数据分布。

第三阶段:联邦学习核心原理与经典论文(1-2 周)

目标: 理解 FL 的工作流:本地训练 -> 参数上传 -> 服务器聚合 -> 下发更新。
【注:此阶段建议与第四阶段一同学习】

  • 必读经典:

  • 核心技能点:

    • 实验设计: 什么是 Round(通信轮数)?什么是 Local Epoch(本地训练轮数)?
    • 数据分布 (Non-IID): 学习如何用 Dirichlet 分布标签切分 (Shards) 构造非独立同分布数据。
  • 代码实践:

    • 手动实现简易 FedAvg: 不要用成熟框架(如 Flower),先用纯 PyTorch 写一个 Server 类和 Client 类,手动传输模型 state_dict

第四阶段:攻击、防御与鲁棒性(1-2 周)

目标: 掌握“投毒”与“防御”的博弈。

  • 攻击方式 (Attacks):

    • 数据投毒 (Data Poisoning): 翻转标签(Label Flipping)。
    • 模型投毒 (Model Poisoning): 恶意上传极大或随机的权重。
    • 后门攻击 (Backdoor Attacks): 在特定像素位置添加触发器。
  • 防御算法 (Robust Aggregation):

    • Krum / Multi-Krum: 核心思想是选出与其他模型“距离”最接近的模型,剔除离群点。
    • Trimmed Mean / Median: 基于坐标轴的中位数或修剪平均值聚合。
    • Bulyan: 结合了 Krum 和 Trimmed Mean,进一步增强鲁棒性。
  • 论文建议:


实验与数据集建议

  1. 数据集:
    • 入门:MNIST, CIFAR-10。
    • 进阶:FEMNIST (LEAF 库中的联邦学习专属数据集)。
  2. 数据划分 (Non-IID):
    • 手写一个 Python 函数,输入 α \alpha α 参数,利用 numpy.random.dirichlet 实现不同程度的数据偏斜。
  3. 对比实验设计:
    • Baseline 1: 集中式训练 (Centralized)。
    • Baseline 2: 原始 FedAvg 在 IID 数据下。
    • Baseline 3: 原始 FedAvg 在 Non-IID 数据下(观察准确率掉多少)。
    • Attack 实验: 在有恶意用户(如 20% 的节点投毒)时,对比 FedAvg 与 Krum/FLTrust 的表现。

“做联邦学习,首先要学会‘分’数据,其次要学会‘聚’参数。不要急着跑大型框架,先把 FedAvg 的双层循环(外层轮数,内层客户端)用 PyTorch 自己写一遍。等你手动实现了 Krum 剔除掉那个恶意的参数字典时,你就真的入门了。”

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐