阿尔托-CSE4740-联邦学习笔记-全-

阿尔托 CSE4740 联邦学习笔记(全)

001:课程概述 🎯

在本节课中,我们将学习阿尔托大学联邦学习课程(CS-E4740)的总体介绍。课程主讲人是Alexander Youngung副教授。我们将了解课程的基本信息、先修要求、学习目标、课程结构、评分方式以及联邦学习的初步概念。


课程基本信息

本课程名为“联邦学习”,将于2025年2月至5月期间进行。课程不强制要求线下出席,可以完全远程或在线完成。

课程内容包括讲座、作业和项目。阿尔托大学的学生可以通过常规系统注册。来自北欧科技大学(如KTH斯德哥尔摩、查尔姆斯理工大学)的学生可以通过本地管理部门注册。其他所有人可以通过一个简单的谷歌表单订阅本课程,表单链接由二维码提供。

先修要求与学习目标

在介绍课程内容之前,我们先来看看学习本课程需要具备哪些基础知识,以及完成课程后能达到什么目标。

先修要求

本课程假设你已经具备以下知识:

  • 线性代数:了解实值向量、矩阵的性质与运算、向量和矩阵的范数。
  • 微积分基础:熟悉微分或梯度的概念。
  • 机器学习入门:熟悉经验风险最小化的概念。
  • Python编程:具备Python基础,并了解NumPy、Scikit-learn等库,或者有能力在课程期间独立掌握这些技能。

学习目标

完成本课程后,你将能够:

  • 使用网络模型对联邦学习应用进行建模。
  • 将联邦学习表述为一个优化问题
  • 使用优化方法构建联邦学习算法
  • 掌握一些用于设计和诊断联邦学习系统的工具与知识。

课程定位

上一节我们介绍了本课程的基础和目标,本节中我们来看看这门课在更广泛的机器学习课程体系中的位置。以下是一些相关的课程示例:

  • 先修课程:矩阵代数/线性代数课程、机器学习入门课程、使用Python的应用机器学习或数据分析课程。
  • 有益课程(非必需):优化入门课程(有助于理解优化问题的构建模块)、凸优化课程(有助于研究梯度方法的收敛速度)。
  • 后续课程:无线系统课程(涉及联邦学习算法的硬件实现)、分布式智能自动化系统课程(物联网是联邦学习的重要应用领域)。

课程内容与安排

了解了课程的定位后,我们正式进入课程本身。本课程大致分为六个模块,每个模块包含一次讲座和一项作业。

以下是六个模块的主要内容:

  1. 模块一:机器学习基础回顾:快速回顾模型训练、验证和正则化等基本技术。
  2. 模块二:网络模型:引入无向图来表示联邦学习网络。
  3. 模块三:优化问题:基于联邦学习网络,构建其上的优化问题。
  4. 模块四:联邦学习算法:通过应用优化方法求解联邦学习的底层优化问题,从而系统性地获得联邦学习算法。
  5. 模块五:联邦学习变体:学习聚类联邦学习、纵向联邦学习、横向联邦学习,它们都是模块三中讨论的优化问题的特例。
  6. 模块六:可信联邦学习:学习如何衡量或确保联邦学习方法的可解释性、研究其对抗数据投毒攻击的鲁棒性,以及确保隐私保护的不同措施与方法。

评分方式

课程评分基于以下活动,我们将按以下方案计算总分:

  • 作业:共6次,每次最高7分,总计最高42分。
  • 项目:最终项目报告最高51分。
  • 论文评审(可选/替代作业):最高49分。
  • 同行评审:对他人项目报告进行评审,最高7分。

总分计算公式
总分数 = max(作业总分, 论文评审分数) + 项目报告分数 + 同行评审分数

分数与等级的对应关系如下:

  • 50分以上:等级1
  • 60分以上:等级2
  • 70分以上:等级3
  • 80分以上:等级4
  • 90分以上:等级5

作业与项目详情

现在,我们来详细了解评分项中的作业和项目具体是什么。

作业详情

共有六次作业,每次作业都需要使用Python实现对应模块的概念:

  1. 实现基本的机器学习方法(复习)。
  2. 使用networkx包实现联邦学习网络。
  3. 在Python中实现联邦学习的底层优化问题。
  4. 使用联邦学习算法在Python中求解该优化问题。
  5. 实现聚类和纵向联邦学习方法。
  6. 研究并实现隐私攻击(尝试从联邦学习算法传递的信息中推断敏感数据),并实现提高联邦学习方法可解释性的方法。

学生项目

学生需要自选一个应用方向,应用课程中讨论的联邦学习算法。项目要求包括:

  1. 撰写项目报告(会提供模板),报告需包含背景介绍、方法描述、数值实验与结果分析。
  2. 在四月底提交初版报告。
  3. 随后进入约两周的同行评审期,每位学生需评审3-5份其他同学的报告。
  4. 在五月底前,根据收到的评审反馈,提交最终修订版报告及一份回应信,说明如何采纳反馈。

课程规则与时间表

在开始学习之前,了解课程的基本规则和时间安排非常重要。

基本规则

  1. 诚实守信:所有作业、项目和论文评审都必须是独立完成。引用他人成果必须注明来源。课程可能会随机抽查学生,要求解释其提交的内容。若发现抄袭或无法解释自己的成果,将面临纪律处分。
  2. 相互尊重:本课程旨在为所有人提供一个安全、愉快的学习空间。任何形式的不尊重行为,包括在课程相关交流平台上的不当言行,都将受到严肃处理,并可能上报学校当局。

时间表概览

  • 讲座:每周一16:15开始,共6次,从2月24日开始。
  • 作业讲解:每周三16:15开始,在对应讲座之后进行,从2月26日开始。
  • 作业提交截止日期
    • 作业1&2:3月17日
    • 作业3&4:3月31日
    • 作业5&6:4月14日
  • 项目时间点
    • 初版报告提交:4月底
    • 同行评审期:至5月15日
    • 最终报告与回应信提交:5月底

什么是联邦学习?🤔

现在,让我们开始接触课程的核心主题——联邦学习。

联邦学习是一种在设备网络上以分布式方式训练机器学习模型的技术。例如,在疫情精准管理应用中,每个人的智能手机上运行一个联邦学习算法,用于预测外出是否安全。每个设备训练自己的个性化模型,并通过相互协作来改进各自的模型,而无需将原始数据集中到一处。

关键特性

联邦学习具有以下几个关键特性:

  • 去中心化:无需集中式数据收集,系统更健壮。
  • 个性化:每个设备训练针对自身的个性化模型,预测更精准。
  • 协作性:设备间共享信息和计算能力,共同解决更大的问题。
  • 可扩展性:能够解决单设备无法处理的大规模机器学习问题。
  • 隐私友好:通常不共享原始数据,只交换模型参数更新等概要信息,减少了隐私泄露风险。

应用领域

联邦学习在多个领域有广泛应用前景:

  • 医疗健康:在严格遵守隐私法规的前提下,利用分散的医疗数据训练更好的疾病预测模型。
  • 金融:用于改进欺诈检测和风险评估。
  • 智能电网:预测可再生能源(如太阳能)的供应情况,优化用电决策。

从机器学习到联邦学习

为了理解联邦学习,我们将其与传统的机器学习进行对比。

在传统机器学习中,我们使用一个数据集 (X, y) 训练一个单一的模型 model,核心是最小化经验风险
minimize (1/N) * Σ L(y_i, h(x_i))
其中 L 是损失函数(如平方误差损失),h 是假设函数。

在联邦学习中,我们有多台设备(节点),每台设备 i 拥有自己的本地数据 (X_i, y_i) 和(可能不同的)本地模型 model_i。它们通过协作来优化各自的模型。这种协作可以看作是在每个本地经验风险最小化问题的基础上,通过正则化约束引入设备间的耦合,从而形成一个全局的优化问题。

用Python代码类比:

  • 传统MLmodel.fit(X, y)
  • 联邦学习:多个设备上运行类似的流程,但 model_i.fit() 函数中的部分数据可能通过 read_data() 函数从其他设备获取,而获取的不是原始数据,而是模型参数更新等信息。

机器学习基础回顾 🔄

作为联邦学习的基石,我们快速回顾几个核心的机器学习概念。

  1. 模型训练与验证
    • 训练:在训练集上通过优化算法(如梯度下降)最小化损失函数,得到模型参数。
    • 验证:在未参与训练的验证集上评估模型性能(计算验证误差)。比较训练误差和验证误差是诊断模型(如是否过拟合、欠拟合)的关键。

  1. 正则化:一种防止过拟合的技术,通过在损失函数中添加惩罚项来约束模型复杂度。例如,岭回归(Ridge Regression)在平方误差损失基础上添加L2范数惩罚:
    minimize (1/N) * Σ (y_i - h(x_i))^2 + λ * ||w||^2
    其中 λ 是正则化强度参数,w 是模型参数。

  1. 数据增强:通过对原始训练数据进行一系列随机变换(如旋转图像、添加噪声)来人工扩展数据集,从而提高模型的泛化能力。

本节课中我们一起学习了联邦学习课程的概览,包括课程信息、目标、结构、评分方式,并初步了解了联邦学习的概念、特性及其与传统机器学习的区别。在下一个模块,我们将深入探讨如何用网络模型来为联邦学习应用建模,这是构建联邦学习系统的第一步。

002:课程先修知识 📚

在本节课中,我们将介绍学习本课程(联邦学习)所需具备的先修知识。了解这些基础知识将帮助你更顺利地跟上后续的课程内容。


线性代数基础

上一节我们介绍了课程概述,本节中我们来看看所需的数学基础。本课程假定你熟悉线性代数。

以下是需要掌握的核心概念:

  • 你应该了解什么是向量,特别是实值向量。在数学中,一个n维实值向量可以表示为:x ∈ ℝⁿ
  • 你应该具备矩阵性质的相关知识。
  • 你需要熟悉矩阵运算,以及向量和矩阵的范数。例如,向量的L2范数计算公式为:||x||₂ = √(Σᵢ xᵢ²)

微积分与机器学习基础

掌握了线性代数后,我们还需要一些其他数学和理论基础。

我们将使用微积分中的基本工具,因此你应该对微分梯度的概念有所了解。梯度是一个向量,指向函数值增长最快的方向。

同时,我们假定你已经学习过机器学习入门课程,熟悉经验风险最小化的概念。其核心目标是找到最小化训练集上平均损失的模型参数,公式可表示为:min (1/n) Σᵢ L(f(xᵢ; w), yᵢ),其中 L 是损失函数,f 是模型,w 是参数。


编程技能要求

理论需要实践来巩固,本课程的实践部分将涉及编程。

在课程的实践环节和作业中,我们将使用 Python 语言。因此,我们假定你具备基本的Python编程能力,并且对 numpyscikit-learn 等常用科学计算库有所了解。或者,你应具备在课程期间独立掌握这些技能的能力。例如,你需要会用 numpy 进行向量和矩阵操作:

import numpy as np
vector = np.array([1, 2, 3])
matrix = np.array([[1, 2], [3, 4]])


本节课中我们一起学习了联邦学习课程所需的先修知识,主要包括线性代数、微积分与机器学习基础理论,以及Python编程实践能力。确保掌握这些内容将为后续深入学习联邦学习算法和完成课程实践打下坚实基础。

003:课程学习目标 🎯

在本节课中,我们将明确本课程的学习目标。完成本课程后,你将能够掌握联邦学习的基本建模、问题构建与算法设计能力。


概述

本课程旨在使你掌握联邦学习的核心知识与实践技能。具体而言,课程结束后你将达成以下四个主要学习目标。


学习目标详解

上一节我们概述了课程的整体方向,本节中我们来详细看看每一个具体的学习目标。

以下是本课程的四个核心学习目标:

  1. 使用网络模型为联邦学习应用建模
    你将能够识别和描述联邦学习场景中的参与方(如客户端、服务器)及其通信拓扑,并使用图论或网络模型来形式化表示这些关系。

  2. 将联邦学习表述为一个优化问题
    你将理解如何把分散在多个设备上的机器学习任务,抽象为一个统一的数学优化问题。其核心形式通常为:
    min_{w} [ Σ_i (n_i / N) * F_i(w) ]
    其中,w 是全局模型参数,F_i(w) 是第 i 个客户端上的局部损失函数,n_i 是其数据量,N 是总数据量。

  3. 运用优化方法构建联邦学习算法
    你将学会应用和改编经典的优化算法(如随机梯度下降SGD)来解决联邦学习中的优化问题。例如,联邦平均(FedAvg)算法的核心更新步骤可以用以下伪代码描述:

    # 服务器端执行
    for each round t:
        w_t_global = aggregate(client_updates) # 聚合来自客户端的模型更新
    # 客户端k执行
    w_{t+1}^k = w_t_global - η * ∇F_k(w_t_global) # 进行本地训练
    
  4. 掌握联邦学习系统的设计与诊断工具
    你将了解设计一个实用联邦学习系统时需考虑的关键要素(如通信效率、隐私保护、异构性处理),并学会使用相关指标和方法来评估、调试系统性能。


总结

本节课中我们一起学习了本课程的四大学习目标。总结来说,你将从建模问题构建算法实现系统设计,逐步建立起对联邦学习的完整知识体系与实践能力。接下来的课程将围绕这些目标展开深入讲解。

004:课程定位与相关课程 📚

在本节课中,我们将了解《联邦学习》这门课程在整个机器学习课程体系中的定位,并梳理其先修课程与后续相关课程。这有助于你明确学习路径,并为深入理解联邦学习内容做好准备。


课程定位

上一节我们介绍了联邦学习的基本概念,本节中我们来看看这门课程在更广泛的机器学习课程体系中的位置。

以下是在阿尔托大学或赫尔辛基大学开设的一些示例课程,其他大学或在线平台也很可能提供类似的课程。


先修课程 🧱

要顺利学习本课程,你需要具备一些基础知识。以下是必要的先修知识:

  • 线性代数/矩阵代数:我们假设你熟悉矩阵的基本性质、矩阵的合成以及矩阵的特征值分解。这些知识将在课程中频繁使用。例如,我们可能会用到矩阵乘法公式:C = A * B
  • 机器学习入门:你应该了解如何训练和验证一个模型。了解一些正则化技术也会很有帮助。
  • 应用机器学习或Python数据分析:如果你曾学习过使用Python进行应用机器学习或数据分析的课程,将会非常有帮助。即使没有,只要你能够快速适应并学习Python中的新方法,也不会有太大问题。

推荐课程(非必需但有益)✨

在掌握了必要的基础后,以下课程虽然不是强制要求,但能让你在本课程中学习得更深入、更轻松。

  • 优化导论:本课程将联邦学习表述为一个优化问题。如果你学习过优化导论课程,对优化问题的基本构建模块有所了解,这将为你提供一个非常好的起点。如果没有,我们也会在需要时逐步介绍这些优化问题的构建模块。
  • 凸优化:这门更高级的课程教授更先进的技术,例如研究不同梯度方法的收敛速率。这些技术对于联邦学习算法的设计与研究同样非常有用。

后续相关课程 🚀

学完本联邦学习课程后,你可以考虑以下相关领域的课程,以拓展知识面或深入特定应用。

  • 无线系统:在某个阶段,我们需要将课程中讨论的联邦学习算法,通过物理通信网络(尤其是使用无线通信的移动网络)在硬件上实现。这门课程与此密切相关。
  • 分布式智能自动化系统:物联网是联邦学习一个非常重要的应用领域,用于训练满足不同需求的预测模型。这门课程提供了深入探索该领域的机会。

总结

本节课中,我们一起梳理了《联邦学习》课程在整体课程体系中的定位。我们明确了必要的先修知识(如线性代数、机器学习基础),了解了有益的推荐课程(如优化理论),并展望了可能的后续学习方向(如无线系统、物联网)。这为你规划学习路径和充分准备本课程内容提供了清晰的指引。

005:课程大纲与安排 📋

在本节课中,我们将详细介绍《联邦学习》课程的整体结构、学习模块、考核方式以及重要的时间安排和课程规则。通过本节内容,你将清晰地了解整个学期的学习路径和需要完成的任务。

课程模块概览 🧩

本课程内容主要分为六个核心模块,它们构成了从基础到高级的完整知识体系。

上一节我们介绍了课程的基本背景,本节中我们来看看课程的具体内容是如何组织的。

模块一:机器学习基础回顾 🔄

第一个模块是对基础机器学习技术的快速回顾,特别是模型训练、验证和正则化。这为后续学习联邦学习打下坚实的理论基础。

模块二:联邦学习网络介绍 🌐

第二个模块将介绍网络模型。我们将使用无向图来表示联邦学习网络。这是理解联邦学习系统通信和协作方式的关键。

模块三:联邦学习的优化问题建模 ⚙️

在第三个模块中,我们将利用这些联邦学习网络,在其上构建优化问题。这些优化问题为我们设计广泛的联邦学习算法提供了一个非常灵活的原则。

模块四:联邦学习算法设计 🧠

基于模块三的优化问题,我们将在模块四中看到,联邦学习算法可以通过应用优化方法来解决联邦学习底层的优化问题,从而以一种有原则的方式获得。

模块五:联邦学习的变体 🔀

在模块五中,我们将探讨不同的联邦学习类型,例如聚类联邦学习、纵向联邦学习和横向联邦学习。我们将看到,这些都是我们在模块三中讨论的联邦学习底层优化问题的特例

模块六:可信联邦学习 🛡️

最后一个模块建立在所有先前技术之上,内容是关于可信联邦学习。我们将学习如何衡量或确保联邦学习方法的可解释性,研究其鲁棒性(例如抵御数据投毒攻击),并学习不同的措施和方法来确保联邦学习方法的隐私保护

每个模块都包含讲座和一项作业。

考核活动与评分 📝

本课程的评分基于以下三项主要活动。以下是各项活动的具体说明:

1. 编程作业

共有六项作业,每个模块对应一项。在每项作业中,你需要使用Python实现讲座中提到的概念。这是一种通过实践学习的好方法。

2. 学生项目

学生项目是第二项主要活动。你可以将讲座中学到的技术应用到你希望研究的任何应用领域。这是一个个人项目,你可以完全自由地选择想要研究的联邦学习应用场景。

3. 论文评述

第三项活动是论文评述,可以作为编程作业的替代或补充。这项活动面向希望深入了解联邦学习前沿的更高级学生。你需要从提供的列表中选择一篇论文(也欢迎你提出建议),然后根据讲座中教授的概念来解读这篇论文。

例如,我们教你如何将联邦学习表述为一个优化问题,那么在你的评述中,你就需要告诉我们这篇论文中使用或研究的是该优化问题的哪个具体实例。

这项活动的交付成果是一个演示文稿。你需要用幻灯片进行讲解,并提交一段不超过10分钟的录制视频。

评分细则与等级划分 📊

在你从上述不同考核活动中获得分数后,我们将按照以下方案进行汇总:

以下是各项活动的最高分:

  • 每项作业最高7分,六项作业总计最高42分
  • 项目同伴互评最高7分
  • 个人最终项目报告最高51分
  • 论文评述最高49分

论文评述的分数将与作业分数按以下公式结合:
课程总得分 = max(作业总得分, 论文评述得分) + 最终项目报告得分 + 同伴互评得分

最后,我们将根据总得分划分等级:

  • 等级1:至少50分
  • 等级2:至少60分
  • 等级3:至少70分
  • 等级4:至少80分
  • 等级5:至少90分

作业内容详解 💻

如前所述,我们有六项作业。以下是各项作业的核心任务:

  • 作业1:实现基础的机器学习方法(对许多同学来说是复习)。
  • 作业2:使用名为 networkx 的Python包实现一个联邦学习网络。
  • 作业3:在Python中实现联邦学习底层的优化问题。
  • 作业4:使用联邦学习算法在Python中求解该优化问题。
  • 作业5:实现聚类和纵向联邦学习方法。
  • 作业6:研究或实现一种隐私攻击(例如,尝试仅通过观察联邦学习算法中传递的消息来确定私有或敏感信息),并实现提高联邦学习方法可解释性的方法。

学生项目流程 📑

对于学生项目,你需要选择任何你感兴趣的应用方向。唯一的要求是必须使用讲座中讨论的联邦学习算法。

以下是项目的主要步骤:

  1. 撰写报告:你需要撰写一份项目报告。我们将提供一个报告模板,其结构基本固定,包括背景介绍、方法描述、数值实验与结果分析等标准部分。
  2. 初稿提交:报告初稿需在四月底前提交。
  3. 同伴互评:初稿提交后,将有大约两周的同伴评审期。每位同学需要评审一定数量(约3-5份)的其他同学的报告。
  4. 终稿提交:项目需要提交最终版本。你必须在五月底前提交修订后的最终报告以及一份回应信,在回应信中需明确解释你如何考虑了其他同学给出的反馈。

我们根据你的最终提交(包括修订后的项目报告和回应信)来为你的项目评分。如前所述,你也会通过同伴评审任务获得少量分数。

课程时间表 🗓️

以下是本课程的重要时间节点:

  • 讲座:每周一16:15开始,共六讲,从2月24日开始。
  • 作业讲解:每次讲座后的周三16:15,进行对应作业的讲解,从2月26日开始。
  • 作业提交截止日期
    • 作业1和2:3月17日
    • 作业3和4:3月底
    • 作业5和6:4月14日
  • 项目时间节点
    • 项目报告初稿:4月底
    • 同伴评审期:截至5月15日
    • 项目终稿及回应信:5月底

课程基本规则 ⚖️

最后,我想强调本课程的两条主要基本规则:

1. 诚实守信

本课程包含大量独立工作,如编程作业、个人学生项目和论文评述。我们默认信任你会独立完成。严禁抄袭。无论何时使用了他人成果(包括其他同学提供的解题思路),都必须注明来源。为了核查,我们可能会在课程期间或结束时随机抽取学生,要求其详细解释任何已提交的作业或报告。如果我们认为你并不了解自己的解决方案,将考虑采取纪律措施。

2. 相互尊重

我个人的期望是,本课程能为每位参与者提供一个安全、愉快的学习空间。任何形式的不尊重行为,包括在课程相关交流平台上的不当言行,都将受到严肃处理,包括向大学当局报告。


本节课中我们一起学习了《联邦学习》课程的整体框架,包括六个核心知识模块、三种考核方式(作业、项目和论文评述)及其详细的评分标准。我们还明确了各项任务的时间安排,并强调了诚实与尊重这两条至关重要的课程规则。理解这些信息将帮助你更好地规划整个学期的学习。

006:联邦学习应用

在本节课中,我们将要学习联邦学习的基本概念及其核心特征,并探讨其在多个领域中的实际应用案例。

什么是联邦学习?🤔

联邦学习是一种在设备网络上以分布式方式训练机器学习模型的方法。

上一节我们介绍了联邦学习的定义,本节中我们来看看一个具体的应用示例。

下图展示了一个联邦学习的应用实例:高精度疫情管理。在新冠疫情期间,一个挑战是如何找到隔离人员或限制人员流动的最佳方式。一种可能的解决方案是使用运行联邦学习算法的智能手机应用,为用户提供“今天是否适合外出”的最优预测。如果预测结果为“绿色”,则表示安全;如果为“红色”,则表示不安全,类似于天气预报。

在这个联邦学习系统中,每个设备(即每部智能手机)都训练自己的模型,为用户提供个性化的预测。为了学习如何进行这些预测,这些联邦学习组件会相互协作。用户可以利用来自其他用户或其他潜在患者的一点信息,来为自己获得更好的模型。系统也可能整合来自公共机构等来源的大型公开数据库。联邦学习通常可以涉及不同类型的设备,即异构网络,我们将在后续课程中学习如何使用数学优化模型来建模这些异构网络。

联邦学习的核心特征 🔑

上一节我们看了一个应用示例,本节中我们来深入了解联邦学习的关键特征。

以下是联邦学习的几个核心特征:

  • 去中心化与鲁棒性:联邦学习不一定需要集中式的数据收集,这使其具有鲁棒性。在集中式服务器存储所有数据的模式下,服务器是单点故障。一旦数据存储被破坏,所有数据都会丢失。而在联邦学习中,信息和知识分布在数百万甚至数十亿个节点上。
  • 个性化模型:每个设备训练一个个性化模型,这是实现个性化的自然方式。为每个独立用户或设备训练的模型,其精确度或准确性远高于一个平均模型。例如,预测一次自行车骑行需要多长时间,你会希望得到一个根据你的体能水平和自行车状况定制的预测,而不是一个平均预测。
  • 协作方法:联邦学习具有协作性,它在设备间共享信息和计算能力。其他设备进行一些计算,这些计算的结果可以以某种形式发送回来,帮助我获得更好的模型。这些计算结果也承载着信息。因此,我们不仅分散了计算负担,还从其他节点共享或收集信息。
  • 可扩展性:协作使得联邦学习能够解决比任何单一设备(如一部智能手机)独自处理时规模大得多的机器学习问题。
  • 隐私友好:通常,联邦学习不共享原始数据。在典型的联邦学习系统中,我们不交换图像等原始数据,只共享一些汇总统计量或机器学习算法完成的计算结果。这些共享的结果所携带的关于私有属性或敏感数据的信息,远少于原始数据,这使得联邦学习天生具有隐私友好性。

联邦学习的应用领域 🏥💳⚡

了解了联邦学习的特征后,本节我们来看看它的一些潜在应用领域。下图展示了一些可能在你的项目中考虑的联邦学习应用。

以下是几个重要的应用领域:

  • 医疗保健:这可能是联邦学习最重要且真正兴起的领域。医疗保健领域有非常严格的隐私法规,人们不希望个人健康记录被随意共享。然而,人们可能愿意分享健康记录中包含的信息,以训练更好的疾病预测模型。联邦学习的要求与医疗保健领域的需求完全吻合:存在大量敏感且受保护的原始数据(如健康记录),无法轻易共享;但每位医生拥有的患者数据库蕴含着大量信息,可用于为每个人获得更好的预测模型或治疗建议。你可以在论文列表中找到相关的最新参考文献,用于论文评述或项目选题。
  • 金融:联邦学习技术也出现在金融领域,用于改进欺诈检测或风险评估。
  • 智能电网:另一个日益受到关注的新兴应用领域是智能电网。电力供应越来越以异构网络的形式存在,例如许多人拥有自己的风力涡轮机或太阳能电池板。以太阳能电池板为例,用户可能想知道启动洗衣机的最佳时间,以确保在接下来的一两个小时内仍有阳光。如果突然多云,太阳能电池板就无法提供足够的电力,用户将不得不从传统电网获取成本更高的能源。为此,用户可能希望有一个联邦学习应用,为其房屋所在区域提供未来两小时内是否有阳光的高精度预测。联邦学习或许能够实现这一点。

总结 📝

本节课中我们一起学习了联邦学习的基本概念。我们了解到联邦学习是一种分布式机器学习方法,其核心特征包括去中心化、个性化、协作性、可扩展性和隐私友好性。我们还探讨了联邦学习在医疗保健、金融和智能电网等多个领域的实际应用案例,这些案例展示了联邦学习在保护隐私的同时利用分散数据价值的巨大潜力。

007:机器学习基础回顾 🧠

在本节课中,我们将快速回顾机器学习的基础概念。这些知识对于理解后续的联邦学习至关重要。我们将从机器学习的目标开始,逐步介绍其核心工作流程、评估方法以及一些关键思想。

机器学习的目标

机器学习旨在学习一个假设映射。这个映射可以非常复杂,例如一个歌曲推荐系统。其目标是为特定数据点(用户)找到最佳的歌曲以提升心情。

例如,在芬兰的十一月,天色很暗,人们很疲惫。此时,一首好歌或许能提振情绪。这就是一个机器学习问题:对于一个具有特定特征(如情绪、疲惫程度、当前是晚上)的数据点(用户),预测应该播放哪首歌(例如《Bohemian Rhapsody》)。需要指出的是,关于音乐疗法的研究是严肃且合理的,这展示了机器学习的实际应用潜力。

如何学习假设映射?

我们通过评估假设的有用性来学习它。在大多数机器学习方法中,有用性通过衡量预测误差来评估。

假设我们有一个数据点(例如图中的蓝点)。预测误差被定义为数据点的真实标签与预测标签(即假设函数值 H(x))之间的差异。

我们随后会平均这些损失。损失函数的选择是一种设计决策,例如,可以使用平方误差损失,它是衡量预测误差的常用选择。

平方误差损失公式:
L(y, ŷ) = (y - ŷ)²
其中 y 是真实值,ŷ 是预测值。

那么,机器学习或模型训练,本质上就是解决以下优化问题:

经验风险最小化公式:
min (1/n) * Σ L(y_i, H(x_i))

在本课程中,你将看到如何将联邦学习也表述为一个优化问题。我们将扩展这个称为“经验风险最小化”的公式,以引入与其他节点的耦合。因为如果设备之间不协作,我们只能独立地在每个设备上使用机器学习技术。而联邦学习的关键在于不同学习问题之间的协作。我们后续会看到,实现这种协作的方式实际上是一种正则化形式。

在讨论正则化之前,我们先完成对基础机器学习工作流程的介绍。

模型训练与验证

在解决了上述训练问题(例如,在Python中使用 .fit() 函数)后,我们会得到一个训练误差。应用机器学习中最重要的原则之一是:绝不要在模型训练后就直接停止

你必须始终验证训练好的模型。我们通过在一个验证集(图中红点所示)上计算预测误差或平均损失来验证模型。这个验证集在训练过程中未被使用。

通过比较训练误差验证误差,你可以在很大程度上诊断机器学习模型:

  • 如果验证误差远高于训练误差,模型可能过拟合
  • 如果训练误差和验证误差都很高,模型可能欠拟合

这构成了应用机器学习科学家的日常循环:尝试不同的模型、调整超参数、使用不同的训练数据集,观察训练误差和验证误差的变化。当训练误差和验证误差达到你设定的基准或目标性能水平时,工作就完成了。这是一个迭代循环,每次迭代都可能涉及模型、超参数或训练数据的变更(例如收集更多数据或替换可能被“污染”的数据点)。

从试错到正则化

除了上述离散的试错方法,我们可以采用更平滑的方法:正则化

许多应用机器学习技术基于数据增强的思想,即人为地扩展训练集。其理念是:与其只观察一个特征值为3的数据点,不如认为我们本可能观察到一个特征值为3.2的数据点,因为特征值可能来自有噪声的传感器(例如有2%的误差容限)。因此,为每个原始数据点添加轻微扰动的版本是合理的。

数据增强公式化描述:
对于原始数据集 {(x_i, y_i)},我们通过应用扰动函数 T(·) 生成增强数据 {(T(x_i), y_i)}

不同的数据增强方法源于对扰动的不同选择。扰动可以是添加随机噪声;如果数据点是图像,可以是旋转图像(因为旋转后,例如“猫”的标签通常不会改变)。

总结与展望

本节课我们一起快速回顾了机器学习的基础:其目标是学习假设映射,通过最小化经验风险(预测误差的平均)进行训练,并必须使用独立的验证集进行评估。我们还介绍了通过数据增强进行正则化的概念。

在下一个模块中,我们将看到如何通过引入网络的概念,将这些基础的机器学习设置扩展到联邦学习。具体来说,我们将介绍联邦学习网络的概念,这将成为我们为联邦学习应用建立的主要数学模型。在后续的模块中,我们将学习如何利用这些联邦学习网络来设计和分析联邦学习系统。

008:从机器学习到联邦学习 🚀

在本节课中,我们将要学习联邦学习与经典机器学习之间的核心区别,并了解如何从传统的机器学习范式自然地过渡到联邦学习范式。我们将通过概念对比和简单的代码示例来阐明这一过程。


从机器学习到联邦学习

上一节我们介绍了机器学习的基本概念。本节中我们来看看联邦学习如何扩展了这一范式。

传统的机器学习通常在一个集中的数据集上训练单个模型。其核心目标是最小化平均损失,用公式可以表示为:

min_θ L(θ) = 1/N Σ_{i=1}^{N} l(x_i, y_i; θ)

其中,θ 是模型参数,(x_i, y_i) 是数据样本,l 是损失函数,N 是总样本数。

在Python中,一个典型的机器学习工作流程如下:

# 1. 读取数据
X, y = read_data()
# 2. 选择模型
model = SomeModel()
# 3. 训练模型(最小化训练误差)
model.fit(X, y)

model.fit() 方法本质上就是通过调整模型参数 θ 来最小化训练误差。


联邦学习的范式转变

联邦学习是机器学习的一个子领域,其关键区别在于数据分布和模型架构。

在联邦学习中,我们不再拥有单一的数据集和模型。相反,我们拥有一个由多个设备(或客户端)组成的网络。每个设备 i 持有自己的本地数据集 D_i,并训练自己的(可能是个性化的)本地模型 M_i

因此,联邦学习的目标可以看作是协同优化一系列本地目标:

对于每个客户端 i: min_{θ_i} L_i(θ_i) = 1/|D_i| Σ_{(x, y) ∈ D_i} l(x, y; θ_i)

同时,通过某种机制(如交换模型参数更新 Δθ)使得这些本地训练过程能够协作,从而提升整体性能。


联邦学习的Python视角

从代码实现的角度看,联邦学习可以视为多个上述机器学习工作流程实例在不同机器上并行运行。

以下是联邦学习协作模式的关键点:

  • 每个设备(拥有不同IP地址)独立运行自己的训练流程。
  • 协作发生在 read_data() 函数或类似的通信模块中。
  • 设备间不共享原始数据,而是共享模型参数更新(例如梯度 ΔW)或其他模型衍生信息。
  • 这种设计将隐私保护融入架构之中。

一个概念化的伪代码如下:

# 在客户端设备上运行
def client_update(global_params):
    # 1. 读取本地数据
    X_local, y_local = read_local_data()
    # 2. 用接收到的全局参数初始化本地模型
    local_model = SomeModel(init_params=global_params)
    # 3. 在本地数据上训练,计算参数更新
    local_update = local_model.fit(X_local, y_local)
    # 4. 将更新(而非数据)发送回服务器
    return local_update

在服务器端,read_data() 函数可能负责聚合来自多个客户端的模型更新,以生成新的全局模型。您将在后续课程中看到如何具体实现这种机制。


联邦学习的网络与模型异构性

当然,在实际系统中,客户端通常无法与所有其他设备直接通信。联邦学习系统的通信结构可以用联邦学习网络的概念来表征和编码,这将在后续详细讨论。

此外,联邦学习的一个重要优势是支持模型异构性。这意味着网络中的不同设备可以使用完全不同的模型架构。

例如:

  • 设备A可能使用随机梯度下降回归模型。
  • 设备B可能使用线性回归模型。
  • 设备C可能使用决策树模型。

尽管模型不同,联邦学习框架仍能通过交换知识(如预测结果、模型参数子集等)使这些模型相互协作,从而各自获得更好的训练效果。


概念可视化总结

最后,我们可以通过一个抽象的视觉对比来总结这种范式转变:

  • 传统机器学习:可以看作是在一个大的点云(单一数据集)上学习一个模型。
  • 联邦学习:可以看作是在多个分散的点云(多个本地数据集)上分别学习多个模型,同时通过“信息桥梁”让这些点云之间能够进行知识交流,从而协同优化。

本节课中我们一起学习了联邦学习与经典机器学习的核心区别。我们了解到,联邦学习通过将训练过程分布在多个持有本地数据的设备上,并仅交换模型更新而非原始数据,实现了隐私保护下的协同机器学习。这种范式自然地扩展了传统的机器学习工作流程,并能够容纳网络通信结构和模型架构的异构性,为构建下一代分布式智能系统奠定了基础。

联邦学习:P09:联邦学习网络简介 🕸️

在本节课中,我们将学习联邦学习网络。联邦学习网络是描述联邦学习应用和系统的主要数学模型。我们将讨论联邦学习网络的组成部分,介绍与之相关的拉普拉斯矩阵,并探讨选择和构建联邦学习网络的不同策略。


联邦学习网络的组成部分

上一节我们介绍了课程主题,本节中我们来看看联邦学习网络的具体构成。一个联邦学习网络由多个参与方(例如设备或组织)以及它们之间的连接关系构成。

以下是联邦学习网络的核心组成部分:

  • 节点:代表参与联邦学习的各个实体,例如移动设备、数据中心或组织。每个节点 i 拥有自己的本地数据集 D_i
  • :代表节点之间的通信连接或协作关系。如果节点 i 和节点 j 之间存在一条边,意味着它们可以直接交换模型更新信息。
  • 邻接矩阵:这是一个数学工具,用于形式化描述网络中节点之间的连接关系。对于一个有 n 个节点的网络,其邻接矩阵 A 是一个 n x n 的矩阵。如果节点 i 和节点 j 相连,则矩阵元素 A_{ij} = 1,否则 A_{ij} = 0。公式表示为:
    A_{ij} = 1 如果 (i, j) 是边,否则 A_{ij} = 0

拉普拉斯矩阵

了解了网络的基本构成后,我们需要一个更强大的数学工具来分析网络的整体性质,这就是拉普拉斯矩阵。

拉普拉斯矩阵 L 可以从邻接矩阵 A 和度矩阵 D 推导得出。度矩阵 D 是一个对角矩阵,其对角线元素 D_{ii} 表示与节点 i 相连的边的数量(即节点的度)。拉普拉斯矩阵的定义为:
L = D - A

这个矩阵在联邦学习中至关重要,因为它编码了网络的连接结构,并可用于分析信息传播的效率、网络的连通性以及设计去中心化的优化算法。


网络选择与学习策略

最后,我们探讨如何为联邦学习任务选择合适的网络结构。网络结构直接影响通信成本、学习效率和隐私保护程度。

以下是几种常见的网络构建策略:

  • 中心化星型网络:所有节点只与一个中心服务器通信。这是最经典的联邦学习设置,通信简单,但服务器可能成为瓶颈。
  • 去中心化对等网络:节点只与相邻的少数节点通信。这种结构更健壮,通信负载分散,但协调和收敛可能更复杂。
  • 基于任务需求设计:根据数据分布、设备能力或隐私要求,手动设计特定的网络拓扑。
  • 动态学习网络:网络结构本身也可以在联邦学习过程中进行优化或自适应调整,以提升整体性能。


本节课中我们一起学习了联邦学习网络的基础知识。我们首先了解了其基本组成部分——节点和边,并通过邻接矩阵进行形式化描述。接着,我们引入了关键的拉普拉斯矩阵 L = D - A 作为分析网络性质的工具。最后,我们概述了从集中式到分布式,再到动态自适应的多种网络构建策略。理解这些概念是设计和分析高效、鲁棒联邦学习系统的重要基础。

010:联邦学习的数学模型 📐

在本节课中,我们将学习为何需要以及如何构建联邦学习的数学模型。我们将从一个复杂的现实系统出发,逐步抽象出其核心要素,最终得到一个用于分析和设计的简化网络模型。

为什么需要数学模型? 🤔

一个现实世界的联邦学习系统可能极其复杂。它可能涉及训练大语言模型的超级计算机,也可能包含运行轻量级机器学习模型的智能手机。这些智能手机可能通过蓝牙等不可靠的短距离无线链路连接。此外,系统还可能包括笔记本电脑(例如我现在录制视频使用的这台),它们运行着PyTorch等现成的Python包来实现机器学习模型。联邦学习系统甚至可能包含智能灯泡这样的小型设备,它们具备一定的计算能力并收集数据(例如房间内是否有人),以决定何时点亮。

这里涉及大量细节。所有通信链路都有其物理特性,可能存在光纤、移动网络或蓝牙等不同类型的连接,每种连接都有各自的通信协议。设备也千差万别,从智能灯泡中的嵌入式系统到超级计算机,它们通常使用不同的操作系统和计算软件(例如不同的Python包)。

面对如此多的细节和多样性,我们需要忽略其中许多细节才能进行有效的分析。而抽象细节的一种有效方法就是使用数学模型。

联邦学习网络模型 📡

本课程将使用的一个主要数学模型是联邦学习网络

一个联邦学习网络由节点构成。

  • 节点(图中用实心圆点表示)代表设备。例如,一个点可能代表一部智能手机,另一个点可能代表位于芬兰某处的超级计算机。
  • 代表设备之间的连接。这种连接能力(例如智能手机通过互联网连接向运行在超级计算机上的服务器发送请求)被建模为图中的边。
  • 我们还可以为边赋予权重。例如,权重可以代表链路的容量。如果权重 A 很大,意味着这两个设备之间每秒可以传输大量比特。

模型是现实的近似 🔍

重要的是,联邦学习网络是一个数学模型,而任何数学模型都是一种近似。

我们有一个想要研究和分析的现实世界系统。为了分析它,我们必须忽略细节,否则分析将变得难以处理。这种抽象、剔除我们认为不必要或无关细节的过程,就得到了联邦学习网络模型。

当然,这会产生建模误差。我们如何选择构建这个联邦学习网络模型(涉及许多设计决策),将决定建模误差的大小。本课程的一个主要目标,就是提供一些直觉,帮助你如何做出好的选择,以保持这个建模误差足够小。

总结 📝

本节课我们一起学习了联邦学习的数学模型。我们了解到,由于现实联邦学习系统的高度复杂性和异构性,必须通过数学模型进行抽象简化才能进行分析。我们引入了联邦学习网络作为核心模型,它用节点表示设备,用带权重的边表示设备间的连接。最后我们认识到,数学模型是对现实的近似,设计模型时需要权衡细节的取舍以控制建模误差

011:联邦学习网络的构成要素 🔧

在本节课中,我们将深入探讨联邦学习网络的基本构成要素或组件。我们将了解网络由哪些部分组成,以及每个部分在联邦学习框架中扮演的角色。


节点集合

上一节我们介绍了联邦学习的基本概念,本节中我们来看看其网络的具体构成。首先,联邦学习网络由节点构成。

在联邦学习网络的图示中,它包含有限数量的节点。为了方便起见,我们使用前 n 个自然数来标识这些节点。在本课程中,当我们谈论联邦学习网络的节点时,总是指的是前 n 个自然数。

使用前 n 个自然数并非一个严格的限制,但一个重要的限制是我们认为这个 n 是给定的。我们假设节点的数量是有限的,但这个数量可以任意大。本课程不涉及节点集为无限(例如所有整数或所有自然数)的图。因此,在本课程中,我们只考虑由任意多但数量有限的节点组成的联邦学习网络。


节点与设备

正如前面提到的,联邦学习网络中的节点代表设备



节点 i 代表或表示一个现实世界中的物理设备。这个设备可能是一部智能手机、一台超级计算机,或是一个智能灯泡。

在本课程中,我们可能会在语言上有些随意,交替使用“设备 i”和“节点 i”来指代同一个事物。严格来说,它们是不同的:联邦学习网络中的节点是一个介于 1n 之间的自然数,但我们用这个数字作为物理设备的数学模型。因此,节点 i 代表了设备 i。希望你能根据上下文理解其含义。


本地模型

既然每个节点代表一个设备,我们并不真正关心设备的技术细节。


我们不关心设备运行什么操作系统、安卓版本或硬件配置,也不关心设备有多少兆字节的 RAM 或主内存。这是我们需要进行抽象的地方。在本课程中,设备的本质在于它能够训练一个模型

每个设备被分配或承载一个机器学习模型,其形式是一个假设空间

例如,由节点 i 代表的设备可能承载一个线性模型。节点 i 的本地模型可能是一个线性模型,而节点 10 的本地模型可能是一个决策树。我们将看到如何开发联邦学习算法来训练任意的本地模型集合。

以下是不同本地模型的例子:

  • 线性模型:所有线性映射的集合。在 Python 中,可以使用线性回归类来实现。
    # 示例:使用 scikit-learn 的线性模型
    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    
  • 决策树模型:由决策树节点定义的分段常数函数集合。在 Python 中,可以使用决策树类。
    # 示例:使用 scikit-learn 的决策树
    from sklearn.tree import DecisionTreeRegressor
    model = DecisionTreeRegressor()
    

这些是数学上的抽象概念,但我们也会学习如何实现它们。在本课程的作业中,你将实际用 Python 实现这些不同的模型。


本地损失函数

除了本地模型,每个节点还有一个本地损失函数

为了训练一个模型,就像在基础机器学习中一样,我们需要某种方法来衡量模型参数或假设的有用性。为此,我们需要一个损失函数。

训练一个模型意味着从模型中选择一个有用的假设。例如,对于一个线性模型,训练意味着找到最有用的线性映射——是绿色的线性曲线、蓝色的,还是红色的?这个选择过程就是我们所说的训练模型。



本地损失函数正是用来量化这个“有用性”或“好坏”的工具,它指导设备选择最佳的假设。


无向加权图

联邦学习网络不仅包含节点及其属性(本地模型和损失函数),还包含节点之间的连接。

网络还包含一个无向图。一些设备通过无向边连接起来,每条边都被赋予一个边权重,用于衡量两个设备之间连接的强度。我们将在后续课程中看到边权重的不同解释,但目前它只是数学模型的一部分。

为了便于表示,在本课程中,我们通常将节点、边和边权重集合成一个无向加权图,并用花体字母 𝒢 作为简写。


总结

本节课中,我们一起学习了联邦学习网络的核心构成要素:

  1. 节点:代表物理设备(如手机、电脑),用有限个自然数标识。
  2. 本地模型:每个设备承载的机器学习模型(如线性模型、决策树),定义了可用的假设空间。
  3. 本地损失函数:每个设备用于评估和选择最佳假设的函数。
  4. 无向加权图:描述设备之间的连接关系及连接强度(边权重)。

这些组件共同构成了联邦学习算法的运行基础。在接下来的课程中,我们将看到这些部分如何协同工作,实现在不共享原始数据的情况下进行协作式模型训练。

012:联邦网络中的本地模型 🧠

在本节课中,我们将学习联邦学习网络中每个设备(节点)的核心组成部分:本地模型和本地损失函数。我们将了解如何抽象化设备的技术细节,专注于其作为模型载体的本质,并探讨不同模型类型的数学表示及其在代码中的实现方式。


上一节我们讨论了联邦学习网络的节点结构。本节中,我们来看看每个节点所承载的具体内容。

每个节点代表一个设备。我们并不关心设备的具体技术细节,例如它运行什么操作系统、是哪个安卓版本、硬件配置如何,或者有多少兆字节的内存。

这里我们需要进行抽象。在本课程中,设备的本质在于它能够训练一个模型。因此,每个设备都被分配或承载着一个模型,这个模型以假设空间的形式存在,是一个机器学习模型。

例如,一个由节点 i 代表的设备可能承载一个线性模型。这个线性模型是所有线性映射的集合,它被分配给了节点 i

另一个节点 i' 可能承载一个不同的模型,比如决策树模型。这是由决策树中的决策节点定义的分段常数函数的集合。

这些是数学上的抽象概念,但我们也会学习如何将它们具体实现。例如,在Python中,你可以使用线性回归来实现或操作线性模型。

类似地,你可以使用决策树类来表示和操作决策树模型。在本课程的作业中,你将实际实现这些不同的模型。


除了本地模型,每个节点还有一个本地损失函数。我们需要本地损失函数来选择或训练模型。训练模型意味着从模型中学习出一个有用的假设。

对于一个线性模型,训练它意味着找到或学习出最有用的线性映射。是这条绿色的线性曲线,这条蓝色的,还是这条红色的?这个选择或决策过程,就是我们所说的训练模型。


本节课中,我们一起学习了联邦学习网络中节点的核心抽象:本地模型和本地损失函数。我们了解到,设备被抽象为模型的载体,例如线性模型或决策树模型,并且这些模型可以通过代码(如Python类)来实现。本地损失函数则是用于训练模型、从假设空间中选择最优假设的关键工具。

013:联邦学习网络中的本地损失函数 🧠

在本节课中,我们将要学习联邦学习网络中一个核心组成部分:本地损失函数。我们将了解为什么需要损失函数,它在联邦学习中的特殊性,以及它是如何被定义和使用的。

为了训练一个本地模型,我们需要一种方法来评估特定假设(例如线性模型中的一条特定直线)的有效性。因此,我们需要一个损失函数。

在联邦学习网络中,每个节点都承载着自己的损失函数。特别地,不同的节点可以拥有不同的损失函数。


损失函数的通用性与差异性

上一节我们介绍了损失函数的基本作用,本节中我们来看看联邦学习中对损失函数的具体设定。

在本课程中,随着学习的深入,我们将对损失函数引入一些限制或假设。但正如之前所说,它们可以非常通用。特别是,它们可以是不同的,这意味着我们可以在不同节点为参数化模型使用不同类型的损失函数。

我们将损失函数直接根据模型参数来表述。


损失函数的表述形式

以下是关于损失函数表述的核心要点:

损失函数 L_i(θ) 被定义为模型参数 θ 的函数,用于衡量节点 i 上模型预测的误差。其通用形式可以表示为:

L_i(θ) = Σ loss(f(x; θ), y)

其中,f(x; θ) 是参数为 θ 的模型对输入 x 的预测,y 是真实值,loss 是具体的损失计算方式(如均方误差、交叉熵等)。


向强化学习场景的延伸

我们也可以考虑将此设定扩展到使用“奖励”的场景。奖励是一种特定类型的损失函数,对于在线学习或强化学习设置非常有用。但这超出了本课程的范围。



总结

本节课中我们一起学习了联邦学习网络中本地损失函数的概念。我们了解到,损失函数是评估模型假设好坏的关键工具,并且在联邦学习的分布式环境中,每个节点可以拥有各自不同但针对模型参数定义的损失函数。这为在保护数据隐私的同时,协同训练一个全局模型奠定了基础。

014:联邦学习网络的设计选择

在本节课中,我们将学习联邦学习网络中的关键设计选择。我们将探讨如何通过选择网络中的节点、边以及本地模型,来影响联邦学习算法的计算、统计和性能特性。


上一节我们介绍了联邦学习网络的基本概念。本节中,我们来看看如何具体设计一个联邦学习网络。

联邦学习网络是一个数学模型,其结构是可以被选择和设计的。作为机器学习或联邦学习的科学家或工程师,你可以选择网络的构成要素,例如节点之间的连接(边)。通常,你可以在一定程度上选择将哪些设备(节点)连接起来。

你也可以选择在系统中使用何种模型。模型选择是机器学习工程师的核心工作之一,即为特定任务选择合适的模型类型。这只是联邦学习网络的一个设计选择。

以下是联邦学习网络的主要设计维度:

1. 节点选择
首先,我们需要决定将哪些设备纳入网络。例如,可以选择将所有能通过互联网从当前设备访问的设备都纳入,这将构成一个非常大的网络。也可以选择仅将特定物理空间(如一个公寓)内的设备纳入网络。这个决定定义了网络中节点的集合。

2. 本地模型选择
其次,我们需要为每个节点选择本地模型。在做这个选择时,通常需要考虑对应设备的物理特性。例如,如果一个节点代表一个嵌入式系统,那么可能无法在其上训练或存储一个大型语言模型。因此,我们可能只选择使用决策树等轻量级模型。实践需求应指导模型选择,以最小化建模误差。

3. 边(连接)选择
在本课程中,我们将重点关注的主要设计决策是边的选择。后续内容将讨论如何在联邦学习网络中为设备之间选择良好的连接方式。

所有这些设计选择共同决定或影响着联邦学习算法的计算和统计特性。这将是后续课程的一个主题:研究当我们为本地模型或边选择不同的方案时,计算复杂度和统计特性将如何变化。


通常,这些设计选择之间存在着权衡关系。

例如,当你希望联邦学习系统训练出更精确的模型时,通常需要在节点之间的链路上进行更多的计算或通信。

此外,在其他属性之间也存在权衡。我们希望联邦学习系统能够抵御各种形式的有意或无意的干扰,即具有鲁棒性。我们希望它们具有可解释性。当然,联邦学习方法的一个关键特性是它们能提供一定程度的隐私保护。

然而,我们通常需要在隐私保护与计算复杂度或模型准确性之间进行权衡。


为了更直观地理解这个设计空间及其与目标的关系,我们可以进行如下总结:

作为联邦学习的设计者或工程师,你可以在一个设计空间内进行选择:

  • 你可以选择边,即决定哪些设备之间相互连接、通信并协作进行模型训练。
  • 你也可以选择要训练的模型类型。这当然是机器学习研究的一个关键课题:如何为特定应用找到正确的模型类型。

这些设计选择最终映射到我们的性能目标上:

  • 准确性:我们希望训练出的模型非常精确,例如具有很小的测试误差。
  • 计算效率:联邦学习算法需要的计算越多,消耗的资源(如电力)就越多,成本也越高。如果联邦学习系统中涉及云计算,还会产生货币成本。

因此,设计联邦学习网络是一个在多目标之间寻求平衡的过程。


本节课中,我们一起学习了联邦学习网络的三个核心设计选择:节点选择、本地模型选择和边(连接)选择。我们了解到,这些选择并非孤立存在,它们共同决定了算法的计算复杂度、统计特性以及最终的模型性能(如准确性和效率)。更重要的是,这些目标之间往往存在权衡关系,例如在准确性、计算成本和隐私保护之间进行取舍。理解这个设计空间是构建高效、实用联邦学习系统的关键第一步。

015:联邦学习网络 - 边与连接性 📡

在本节课中,我们将学习联邦学习网络的另一个核心组成部分:边(或连接)。我们将了解如何用边来建模设备间的交互,以及如何量化这些连接的重要性。

上一节我们介绍了联邦学习网络中节点的属性,如本地模型和本地损失函数。本节中我们来看看连接这些节点的边。

边的建模与含义

我们将联邦学习网络中的连接建模为无向边。这意味着,如果两个设备或节点 ii' 相连,它们之间就存在一条无向边。

一条边 e 可以表示为一个集合,其中包含它所连接的两个节点。由于是无向的,集合中的节点没有顺序之分。

e = {i, i'}

每条边还被赋予一个非负的权重 w_{i,i'} >= 0。这个权重的具体含义取决于联邦学习算法的设计。

在联邦学习算法中,边的作用是耦合相连节点的模型训练。如果两个节点之间存在一条边,算法会尝试让这两个节点的模型参数变得相似。

此外,每条边也可以代表一个通信链路。在这种情况下,边权重 w_{i,i'} 可以解释为信道容量。权重越大,表示在执行联邦学习算法时,节点间交换消息的通信能力越强。我们将在后续课程中详细讨论基于消息传递的联邦学习算法实现。

网络连接性的关键概念

定义一些描述联邦学习网络连接性的参数非常有用。

以下是几个核心概念:

  • 连通性:如果一个无向图是连通的,则意味着从图中任意一个节点出发,沿着边都可以到达任何其他节点。这是一个非常直观的连通性概念。
  • 连通分量:图 G 的一个连通分量 C 是一个连通的子图。它由节点的一个子集构成,并且满足:该子集内的任意两个节点,都可以通过仅连接该子集内节点的边构成的路径相互到达。一个图可能包含多个互不相连的连通分量。
  • 邻居节点:一个节点 i邻居节点集合 N(i),定义为所有通过一条边与节点 i 直接相连的其他节点的集合。重要提示:邻居集合不包括节点 i 自身。
  • 加权节点度:节点 i加权节点度 d_i,是其与所有邻居节点之间边权重的总和。
    d_i = Σ_{j ∈ N(i)} w_{i,j}
    
    如果一个节点通过高权重的边与许多其他节点相连,那么它就具有较高的加权节点度。这可能意味着该节点在网络中扮演着重要的角色。
  • 最大节点度最大节点度 d_max 是所有节点中度数的最大值。它是一个描述整个联邦学习网络全局性质的参数。
    d_max = max_{i} d_i
    
    相比之下,加权节点度是一个局部性质,它只告诉我们网络在特定节点 i 周围的情况。

示例分析

这里展示一个由两个独立连通分量组成的联邦学习网络示例。

整个网络包含 n = 6 个节点,形成了两个分量:C1C2。这两个分量之间没有连接,但在每个分量内部,任意节点都可以通过边构成的路径到达其他节点。

在这个例子中,我们假设所有边的权重是均匀的(例如,权重为1)。有时我们可能不知道如何精确分配表示相似度的量化值,此时使用统一的边权重是一个实用的选择。

当我们确定两个节点(或在这些节点上训练机器学习模型的设备)应该相似时,我们可以简单地使用权重为1的边。但在某些应用中,我们可以定义得更精确。例如,如果节点代表气象站,那么两个气象站距离越近,它们的模型就应该越相似。在我们的作业中,你会经常看到使用气象站的例子。

对于这个图,最大节点度为2(例如,图中某个节点的度为2,这是最大值)。而另一个节点的度则为1。

总结

本节课中我们一起学习了联邦学习网络中“边”的概念。我们了解到边用于建模设备间的无向连接,并通过权重来量化连接的强度或通信容量。我们还定义了描述网络结构的关键概念,包括连通性、连通分量、邻居节点、加权节点度和最大节点度。理解这些概念对于后续设计和分析联邦学习算法至关重要。

016:联邦学习网络的拉普拉斯矩阵 📊

在本节课中,我们将学习一种用于表征联邦学习网络的强大工具——拉普拉斯矩阵。这种表示方法极大地便利了系统分析,使我们能够深入探讨联邦学习算法的收敛速度、系统鲁棒性等关键问题。

概述

上一节我们讨论了联邦学习网络的基本构成要素。本节中,我们将介绍拉普拉斯矩阵,这是一种基于无向图来表征联邦学习网络的有效方法。通过分析该矩阵的性质,我们可以回答许多关于系统行为的重要问题。

拉普拉斯矩阵的定义

每个联邦学习网络都对应一个无向图。该图的边是无向的,并且每条边都有一个权重 A_{i, i'},表示节点 i 和节点 i' 之间的连接强度。

基于此图,我们定义拉普拉斯矩阵 L。其元素构造规则如下:

  • 非对角线元素:对于连接节点 ii' 的边,其对应的矩阵元素 L_{i, i'} 为边权重的负值,即 L_{i, i'} = -A_{i, i'}
  • 对角线元素:节点 i 对应的对角线元素 L_{i, i} 是其所有邻接边权重之和。这实际上就是该节点的加权度
  • 零元素:如果两个节点之间没有边连接,则对应的矩阵元素为 0

用公式表示,拉普拉斯矩阵 L 的元素定义为:
L_{i, i'} = { sum_{j} A_{i, j}, if i = i'; -A_{i, i'}, if i ≠ i' and there is an edge; 0, otherwise. }

一个简单示例

考虑一个包含3个节点的简单图,假设每条边的权重均为1(即单位权重图)。其连接关系和对应的拉普拉斯矩阵如下:

在这个矩阵中:

  • 节点1(第一行/列)的度为2(连接了节点2和3),所以 L_{1,1} = 2
  • 节点1和2之间有边,所以 L_{1,2} = L_{2,1} = -1
  • 节点2和3之间没有边,所以 L_{2,3} = L_{3,2} = 0

这是一种为任何给定图构造拉普拉斯矩阵的直观方法。

拉普拉斯矩阵的性质

拉普拉斯矩阵具有一系列重要且有用的性质,这些性质揭示了联邦学习网络的结构信息。

性质一:对称性与半正定性

首先,拉普拉斯矩阵是对称矩阵。这源于其定义以及底层图是无向图的事实。

其次,拉普拉斯矩阵总是半正定的。这意味着对于任何具有合适维度的向量 w(其维度等于网络中的节点数 n),以下二次型总是非负的:
w^T L w >= 0

这个性质带来了许多重要的推论。

性质二:与总变差的关联

向量 w 可以视为分配给联邦学习网络中每个节点的某个值(例如模型参数)。一个关键的发现是,上述二次型恰好等于网络中所有相邻节点对之间差值平方的加权和:
w^T L w = sum_{(i,i')} A_{i,i'} (w_i - w_{i'})^2

这个和被称为总变差。它衡量了参数值在整个网络中的变化程度。这就在图拉普拉斯矩阵与我们后续将学习的联邦学习算法之间建立了概念桥梁,因为有些算法会使用这个总变差项作为模型训练的正则器。

性质三:特征值分解

由于拉普拉斯矩阵是对称半正定的,它拥有一个良好的特征值分解。我们可以将其写为一系列秩为1的矩阵之和:
L = sum_{k=1}^{n} λ_k u_k u_k^T
其中,λ_k 是拉普拉斯矩阵的特征值,u_k 是对应的特征向量。这些特征向量可以被选为标准正交的。

对于图拉普拉斯矩阵,其特征值具有以下特点:

  • 所有特征值都是非负的:λ_k >= 0
  • 最小的特征值总是 0。其对应的特征向量可以是所有分量都相同的向量(例如全1向量),因为当所有节点值相同时,总变差为零。
  • 所有特征值都以最大节点度的两倍为上界:λ_k <= 2 * d_max

性质四:揭示网络连接结构

拉普拉斯矩阵的特征值能深刻反映网络的连接结构:

  • 连通分量数量:如果联邦学习网络由 K 个互不连接的连通分量组成,那么拉普拉斯矩阵恰好有 K 个特征值等于 0。零特征值的几何重数等于连通分量的数量。
  • 指示向量:对于每个零特征值,我们可以找到一个特征向量,该向量在属于对应连通分量的节点上取非零值,在其他节点上取零值。这实际上是该连通分量的指示函数。
  • 代数连通度:按升序排列特征值(λ_1=0 <= λ_2 <= ... <= λ_n)。第二个最小特征值 λ_2 被称为代数连通度。它有一个非常重要的性质:λ_2 > 0 当且仅当 整个图是连通的。如果 λ_2 = 0,则说明网络至少分裂成两个不连通的部分。

这个性质是谱图理论中的一个优美结论,也是谱聚类算法的基础。通过寻找与较小特征值对应的特征向量,我们可以识别出网络中的簇或社区结构。

总结

本节课我们一起学习了联邦学习网络的拉普拉斯矩阵。我们首先了解了如何根据网络的图结构定义拉普拉斯矩阵,然后探讨了它的关键性质:对称性、半正定性、与总变差的关联、特征值分解,以及其特征值如何揭示网络的连通性和聚类结构。理解拉普拉斯矩阵是分析联邦学习算法收敛性和鲁棒性的重要基础,在后续课程中,我们将看到如何利用这些性质来设计和分析具体的联邦学习算法。

017:联邦学习网络的设计与构建 🧠

在本节课中,我们将探讨如何为一个给定的联邦学习任务设计和构建网络。我们将通过一个具体的例子——芬兰气象研究所(FMI)的天气站网络——来理解设计决策背后的计算与统计考量。

上一节我们介绍了联邦学习网络的性质,特别是拉普拉斯矩阵及其谱(特征值集合)的重要性。本节中,我们来看看如何实际构建一个联邦学习网络。

网络构建:一个设计选择

构建联邦学习网络在某种程度上是一个设计选择。我们需要决定如何选择网络中的节点以及如何连接它们。

以下是一个使用芬兰气象研究所(FMI)天气站数据的具体例子。FMI在全芬兰运营着超过200个气象站,我们可以获取其观测数据。我的第一个设计决策是选择一个子集的气象站作为联邦学习网络的节点。

如何连接节点:添加边的影响

接下来的核心问题是:应该连接哪些节点?为了建立直觉,我们可以从系统的最小部分——一对节点——开始分析。

考虑两个不同的气象站 ii'。在这两个节点之间添加一条边会产生两方面的影响。

计算方面的影响

添加边意味着联邦学习算法需要通过这条边交换消息或计算更新。这带来了计算和通信开销。

  • 增加开销:每条边在算法的每次迭代中都会引入额外的通信和计算。
  • 影响收敛速度:联邦学习算法通常是迭代式的。网络的连通性,特别是拉普拉斯矩阵的第二小特征值 λ₂,是算法收敛速度的关键驱动因素。λ₂ 越大,算法通常收敛得越快
    • 对于一个完全断开的图,λ₂ 为0,算法无法收敛。
    • 对于一个完全连接的图,λ₂ 达到最大,每个节点在每次迭代中都能利用所有其他节点的信息,从而可能加速收敛。

因此,在计算方面存在一个权衡:添加边会增加单次迭代的开销,但也可能通过增大 λ₂ 来减少所需的总迭代次数。一个自然的设计目标是:在给定总边数的情况下,通过合理放置边来最大化 λ₂

统计方面的影响

联邦学习算法通常利用节点间的连接作为正则化器。简单来说,一条边会迫使相连两个节点的模型参数趋于相似

如果两个节点的本地数据集(例如天气观测数据)具有非常不同的统计分布,那么强制它们的模型相似可能不是一个好主意。因此,我们需要一种方法来衡量节点间的统计相似性。

衡量节点相似性的方法

如何判断两个气象站的统计特性是否相似?以下是几种可能的向量化表示方法,用于计算节点间的“距离”或相似度:

  • 概率模型参数:将本地数据(如温度测量值)视为某个随机过程的实现。用一个参数化的概率模型(参数记为 θ)来描述其分布。通过统计推断方法(如最大似然估计)估计出 θ̂,然后使用 ||θ̂_i - θ̂_i‘|| 这样的范数作为相似性度量。
  • 领域知识(如地理位置):一个直观的想法是,地理位置相近的气象站应有相似的数据。可以使用经纬度坐标作为向量表示,连接地理上最近的节点。但这种方法可能并不总是准确。
  • 损失函数梯度:为每个节点的本地数据定义一个损失函数。在某个模型参数 w(例如来自预训练模型)处计算该损失函数的梯度 ∇ℓ(w)。这个梯度向量封装了本地数据的信息,可作为该节点的向量表示。
  • 嵌入学习:使用更通用的方法,如自动编码器,为整个数据集学习一个嵌入向量。

在本课程中,我们不会深入探讨这些统计特性,但需要知道有多种方式可以定义节点间的相似性,而不同的定义会显著影响最终网络的拓扑结构。

网络构建实例对比

为了展示设计选择的影响,这里对比两个为FMI气象站构建的网络:

  1. 基于地理相似性(经纬度)的网络:连接地理坐标最接近的气象站。得到的网络结构主要反映地理邻近性。
  2. 基于统计相似性(平均温度)的网络:计算每个气象站在2024年5月中旬一段10小时内的平均气温,然后连接平均温度最接近的气象站。得到的网络结构与地理网络有根本不同。例如,一些沿海的气象站(如13、14、7、11号站)可能地理上不近,但由于都位于海岸线,气候和温度特征相似,因此在这个网络中会被连接起来。

这个例子清晰地展示了如何衡量节点相似性并据此定义边,会深刻影响整个数学模型以及由此衍生的联邦学习算法的性质

总结与展望

本节课中,我们一起学习了联邦学习网络的设计与构建。我们了解到,添加边需要在计算开销收敛速度之间进行权衡,并且需要考虑节点间数据的统计相似性。我们介绍了几种衡量节点相似性的方法,并通过FMI气象站的例子看到了不同设计选择如何导致截然不同的网络结构。

在下一讲中,我们将以此联邦学习网络为定义域,构建一个优化问题。这个优化问题将成为我们设计联邦学习算法的主要模型和原则,因为联邦学习算法本质上就是将现有的分布式优化方法应用于这个特定的优化问题。

018:课程介绍与机器学习基础回顾

在本节课中,我们将学习联邦学习课程的整体安排、学习目标以及作为基础的机器学习核心概念回顾。

课程概述与目标

欢迎来到阿尔托大学的联邦学习课程。这是一门完全在线的课程,共5个学分,包含6个模块。课程没有强制出勤要求,你可以根据自己的节奏完成学习。课程的核心目标是让你学会如何将现实世界的联邦学习应用建模为网络优化问题,并应用分布式优化方法来解决它,从而设计出联邦学习算法。此外,课程还将涵盖可信联邦学习的关键要求,如可解释性和隐私保护。

先修知识与学习目标

在深入学习之前,你需要具备以下基础知识:

  • 线性代数:熟悉向量、矩阵和范数等概念。
  • 微积分:了解可微函数和梯度的概念。
  • 基础机器学习:理解经验风险最小化等基本概念,并有过训练和验证模型的实践经验。
  • Python编程:能够使用Python进行数据处理和模型实现。

完成本课程后,你将能够:

  1. 使用网络模型来建模联邦学习应用。
  2. 将联邦学习问题表述为一个优化问题。
  3. 应用分布式优化方法来解决联邦学习问题。
  4. 设计具备一定可解释性和隐私保护能力的联邦学习系统。

课程结构与相关课程

本课程在阿尔托大学的机器学习课程体系中定位如下。它建立在矩阵代数、机器学习入门等课程的基础之上,并可能为你后续学习无线系统、分布式智能自动化系统等更深入的课程打下基础。

课程安排与评估

课程内容分为六个模块,每个模块都包含一次讲座和相应的作业。

以下是六个模块的主题:

  1. 机器学习回顾:复习核心的机器学习概念。
  2. 联邦学习网络建模:学习使用图或网络来建模联邦学习应用。
  3. 联邦学习设计原则:学习如何将联邦学习表述为一个图上的优化问题。
  4. 分布式优化方法:应用分布式优化方法来解决联邦学习问题,从而得到算法。
  5. 联邦学习的主要类型:探讨横向、纵向、聚类联邦学习等特定类型。
  6. 可信联邦学习:研究可解释性、鲁棒性和隐私保护。

课程成绩由以下活动决定:

  • 作业:共6次,每次最多7分,总计42分。你需要在Python中实现课程中讨论的理论概念。
  • 学生项目:51分。你需要选择一个联邦学习应用,使用课程所学的工具对其进行建模和研究,并撰写一份项目报告。项目还包括同行评审环节。
  • 论文评述:最多49分。这是一个可选的高级活动,你可以选择评述一篇近期研究论文,并用课程中的概念对其进行分析。

最终成绩计算最终分数 = max(作业总分, 论文评述分数) + 项目分数。总分达到50分即可通过课程。

核心概念:从机器学习到联邦学习

上一节我们介绍了课程的整体框架,本节中我们来看看联邦学习与经典机器学习的根本区别。

机器学习的核心是训练一个单一的模型,通过最小化在单个数据集上的平均损失来拟合数据。其目标可以形式化地表示为:

最小化 (1/n) * Σ L(y_i, f(x_i))

其中 L 是损失函数,f 是我们的假设模型,(x_i, y_i) 是训练数据。

联邦学习则是在一个设备网络中以分布式的方式训练多个机器学习模型。关键区别在于:

  • 分布式:每个设备(或节点)拥有自己的本地数据集,并训练自己的个性化模型。
  • 协作:这些模型通过交换信息(如模型参数更新或其他统计量)进行协作,而不是共享原始数据。
  • 个性化:每个设备最终得到的是为其本地数据定制的模型,同时利用了网络中其他相似设备的信息来提升性能。

因此,联邦学习可以看作是多个机器学习问题的集合,并通过网络连接起来进行协同优化。

机器学习基础回顾:训练、验证与正则化

为了确保我们站在同一起点,现在快速回顾机器学习的核心工作流程。一个完整的机器学习流程不仅包括训练,还必须包含验证。

标准的流程是:

  1. 训练模型:在训练集上最小化经验风险。
  2. 验证模型:在独立的验证集上评估模型性能。验证误差通常高于训练误差,这是正常现象。
  3. 比较基准:将验证误差与基准进行比较,例如现有文献中的最优结果(SOTA)、人类表现水平,或理论上的贝叶斯风险。

当模型在训练集上表现很好(低训练误差),但在验证集上表现不佳(高验证误差)时,就发生了过拟合。解决过拟合的核心技术是正则化

正则化主要有三种视角:

  1. 增加数据:通过数据增强(如为数据添加噪声)来有效扩大训练集。

  2. 约束模型:在损失函数中添加一个惩罚项,限制模型的复杂度。例如,对于参数模型,常用的方法是岭回归(Ridge Regression),其目标函数为:

    最小化 (1/n) * Σ L(y_i, f(x_i)) + λ * ||w||^2

    其中 w 是模型参数向量,λ 是正则化强度系数。

  3. 简化模型:直接选择更简单的模型架构(如减少神经网络层数)。

一个有趣且重要的技巧是,对于某些惩罚项(如岭惩罚),可以通过向训练集中添加特定的虚拟数据点来实现等价的效果。这个技巧非常强大,因为它允许我们将正则化思想推广到非参数模型(如决策树),而这些模型没有明确的参数向量 w 可供惩罚。

更重要的是,联邦学习的核心思想正是这种正则化技巧的延伸。在联邦学习中,我们不是用随机噪声或虚拟点来增强本地数据,而是用来自邻居节点的模型的预测来增强数据。通过强制本地模型的预测与邻居模型的预测在某种程度上保持一致,我们实现了模型间的耦合与协作。这种方法不依赖于模型的具体参数形式,因此可以用于耦合不同类型的模型(如线性模型、决策树、神经网络)。

总结

本节课我们一起学习了联邦学习课程的总体安排、学习目标和评估方式。我们明确了联邦学习与经典机器学习的区别:后者训练单一模型,而前者则是在网络中协作训练多个个性化模型。最后,我们回顾了机器学习的核心流程——训练、验证、正则化,并指出了联邦学习的协作机制可以视为一种特殊形式的正则化,它利用其他模型的预测来增强本地训练过程。

在下一个模块中,我们将开始学习如何使用网络(图)来形式化地建模联邦学习应用。

019:首次作业环境配置与任务概览 🚀

在本节课中,我们将学习如何访问阿尔托大学的联邦学习课程作业平台,获取并完成第一项编程练习。我们将详细介绍从登录到提交作业的完整流程,并概述作业中的核心任务。

概述

本次练习旨在帮助大家熟悉课程作业环境。阿尔托大学的学生将通过JupyterHub平台获取和提交作业,而校外学生将通过电子邮件接收作业文件。作业内容涉及数据预处理、模型构建与评估。

作业平台访问与提交流程

上一节我们介绍了课程背景,本节中我们来看看如何具体访问作业平台。

阿尔托大学学生访问流程

以下是阿尔托大学学生获取和提交作业的步骤:

  1. 登录平台:使用阿尔托大学邮箱登录JupyterHub平台:jupyter.cs.aalto.fi
  2. 启动服务器:在课程列表中选择“Federated Learning D 2025”并启动服务器。
  3. 进入作业列表:服务器启动后,点击顶部的“Nbgrader”选项,然后选择“Assignment List”。
  4. 获取作业:在作业列表中,找到“Assignment 1”并点击“Fetch”按钮。系统将自动创建名为“F_2025”的文件夹。
  5. 完成作业:在“F_2025/assignment1”目录下打开名为“ML_basics_autograded.ipynb”的笔记本文件,按照其中的说明逐步完成编程任务。
  6. 验证与提交:完成所有任务后,返回“Nbgrader”的“Assignment List”,点击“Validate”进行验证(可忽略TensorFlow优化警告),验证通过后点击“Submit”提交作业。

校外学生注意事项

校外学生已通过电子邮件收到作业文件。可以使用任何喜欢的平台(如Google Colab或本地Jupyter Notebook)完成作业。完成后,需将作业笔记本文件通过电子邮件发送给Alex教授。课程团队将在作业截止日期(3月17日)后发布参考答案。

作业任务核心内容概览

成功获取作业文件后,我们来看看本次练习需要完成哪些核心任务。

数据预处理与划分

首先,你需要加载并理解数据集。数据点对应芬兰气象研究所(FMI)站点的温度测量值。

核心任务:将数据集按80%的比例划分为训练集和验证集。具体操作是选取包含“lag”关键词的特征列来构建特征集。

# 示例:选取包含‘lag’的特征列
lag_columns = [col for col in data.columns if ‘lag’ in col]
X = data[lag_columns]

模型构建与训练

作业要求实现并比较三种不同的模型。

  1. 线性回归基线模型:实现一个简单的线性回归模型作为基线,并计算其在训练集和验证集上的误差。
  2. 一维卷积神经网络:构建一个CNN模型。提示中给出了网络结构指南,例如可以使用3到4个Conv1D层。训练时建议使用20个epoch
    model.fit(X_train, y_train, epochs=20, validation_data=(X_val, y_val))
    
  3. 决策树回归器:按照指示的树深度实现一个决策树模型。

正则化与数据增强

在基础模型上,需要进一步应用正则化技术和数据增强方法,以观察其对模型性能的影响。请注意,虽然我们使用增强后的数据训练模型,但最终评估(如MSE误差)仍需在原始缩放数据(X_scaled, X_val_scaled)上进行。

评分与验证

作业共包含多个任务,总计7分。每个任务都配有“健全性检查”代码单元。通过这些检查表明你的实现方向基本正确,但并非最终答案的绝对保证。最终评分将由课程团队的自动评分系统完成。

常见问题解答

在完成作业的过程中,你可能会遇到以下问题。

  • 关于训练轮数:在训练CNN等深度学习模型时,建议使用20个epoch
  • 关于健全性检查:通过“健全性检查”仅意味着你的代码在格式和基本逻辑上没有错误,处于正确的轨道上,但不保证与最终答案完全一致。
  • 关于项目:课程项目将于4月正式启动。3月份的建议是专注于听课和完成每周练习,为项目积累必要的数学和工具基础。关于将课程从5学分扩展到10学分的可能性,将在5月根据学生在前6次作业和基础项目中的表现个案决定。

总结

本节课我们一起学习了联邦学习第一次练习的完整流程。我们明确了阿尔托大学学生与校外学生不同的作业提交方式,详细介绍了从平台登录、作业获取到最终提交的每一步。我们还概述了作业的核心任务:数据划分、实现线性回归、CNN、决策树三种模型,以及应用正则化和数据增强技术。请记住,在遇到问题时,可以通过课程Slack频道或电子邮件及时联系助教或教授。

020:联邦学习网络 🕸️

在本节课中,我们将学习联邦学习的核心数学模型——联邦学习网络。我们将了解其基本构成、如何用矩阵(特别是拉普拉斯矩阵)来分析网络结构,并探讨如何为一个实际应用选择合适的网络模型。

概述

联邦学习网络是一个数学模型,用于抽象和表示一个由多个设备(节点)组成的联邦学习系统。每个设备拥有自己的本地数据和机器学习模型,设备之间通过边(链接)进行连接和通信。这个模型忽略了硬件、通信协议等底层细节,使我们能够专注于算法层面的设计和分析。

联邦学习网络的构成

联邦学习网络可以定义为一个元组,包含以下几个核心组件:

1. 节点集合

节点集合 𝒱 代表系统中的设备,例如智能手机、传感器或服务器。我们通常用数字 {1, 2, ..., n} 来标识这些节点,其中 n 是设备的数量。

2. 本地模型

每个节点 i ∈ 𝒱 都关联一个本地模型。这个模型代表一个假设空间,即一组可能的预测函数。例如,一个节点可能使用线性回归模型,而另一个节点可能使用决策树模型。在联邦学习中,每个设备训练的是为其自身数据定制的个性化模型。

3. 损失函数

每个节点 i 还拥有自己的损失函数 L_i,用于评估其本地模型的性能。不同节点可以使用不同的损失函数,例如,一个节点使用用于分类的交叉熵损失,而另一个节点使用用于回归的均方误差损失。

4. 边与权重

节点之间通过无向边连接。边 (i, i') 的存在及其权重 a_{i,i'} 具有双重含义:

  • 通信能力:权重反映了两个节点之间通信链路的容量或比特率。
  • 统计相似性:权重越大,表示两个节点所处理的学习任务或数据分布越相似。在训练过程中,算法会促使连接紧密的节点学习相似的模型。

网络的连通性与拉普拉斯矩阵

为了分析和设计联邦学习系统,我们需要工具来刻画网络的连通性。拉普拉斯矩阵是描述图结构的一个强大数学工具。

拉普拉斯矩阵的定义

对于一个具有 n 个节点和边权重 a_{i,i'} 的图,其拉普拉斯矩阵 L 是一个 n × n 的矩阵,定义如下:

  • 非对角线元素 (i, i'):如果节点 ii' 之间有边,则 L_{i,i'} = -a_{i,i'},否则为 0
  • 对角线元素 (i, i)L_{i,i} = Σ_{i'≠i} a_{i,i'},即节点 i 的加权度(所有关联边权重之和)。

用公式表示为:
L = D - A
其中 D 是对角度矩阵,A 是邻接矩阵。

拉普拉斯矩阵的性质

拉普拉斯矩阵是对称且半正定的。它具有以下重要性质:

  • 二次型:对于任意向量 w ∈ R^n,有 w^T L w = (1/2) Σ_{i,i'} a_{i,i'} (w_i - w_{i'})^2。这衡量了节点属性 w 沿着图中边的总变差。
  • 特征值:拉普拉斯矩阵的特征值都是非负实数。特别地,零特征值的数量等于图中连通分量的数量
  • 连通性:当且仅当拉普拉斯矩阵的第二小特征值(代数连通度)大于零时,图是连通的。

这些性质在谱图理论和后续的联邦学习算法分析中至关重要。

如何构建联邦学习网络

构建联邦学习网络是一个设计过程,需要将实际应用映射到数学模型。这通常是最具挑战性的部分。以下是关键的设计选择:

1. 定义节点

确定网络中的每个节点代表什么物理或逻辑实体(例如,每部手机、每个气象站、每个地理区域)。

2. 选择本地模型和损失函数

根据每个节点的任务,为其分配合适的机器学习模型和损失函数。

3. 确定边连接

决定哪些节点之间应该存在边,以及如何设置边的权重。这需要权衡:

  • 通信成本:更多的边意味着更多的消息传递和更高的计算开销。
  • 统计效益:连接统计相似的节点可以汇集信息,可能训练出更准确的模型,但连接不相似的节点则可能干扰训练。

实例:气象站网络

假设我们要为芬兰气象局(FMI)的多个气象站构建一个联邦学习网络,以协作进行天气预报。

  • 节点:每个气象站是一个节点。
  • 本地数据:每个站点的历史温度、湿度等时间序列数据。
  • 连接策略(两种可能):
    1. 基于地理距离:连接每个站点与其地理位置最近的 k 个邻居。这假设地理位置相近的站点天气模式相似。
    2. 基于数据相似性:计算每个站点数据的平均温度,然后连接平均温度最接近的站点。这直接让数据本身决定连接关系。

这两种策略会产生结构迥异的网络,进而影响后续联邦学习算法的性能和效率。在你的项目报告中,需要清晰阐述你做出这些选择的理由。

总结

本节课我们一起学习了联邦学习网络这一核心数学模型。我们了解了它的四个基本构成部分:节点、本地模型、损失函数以及带权重的边。我们介绍了如何使用拉普拉斯矩阵来分析网络的连通性,并探讨了如何为一个实际应用(如气象站网络)设计和构建合适的联邦学习网络。记住,联邦学习网络是对现实世界的抽象,建模时的选择至关重要,它直接影响到算法的性能和实用性。

在下一讲中,我们将以此网络模型为基础,探讨如何将联邦学习问题形式化为一个基于广义总变差最小化的优化问题。

021:联邦学习网络构建与分析 🧠

在本节课中,我们将学习如何从零开始构建一个联邦学习网络,并使用图论方法对其进行分析。我们将使用Python的networkx库来创建图结构,并计算节点度、拉普拉斯矩阵等关键指标,最后通过局部平均算法进行简单的预测。

概述

本次作业的目标是实现一个联邦学习网络。我们将从机器学习的基础概念过渡到联邦学习的网络构建。具体任务包括:使用networkx包创建图及其边,分析网络的节点度和拉普拉斯矩阵指标,并在该联邦学习网络中应用图学习网络和局部平均等距离度量方法。

任务详解

1. 环境准备与数据理解

首先,我们需要导入必要的库和包。数据已经过预处理,例如,气象站的纬度范围在60到65之间,经度范围在284到30之间。同时,数据还包含了温度均值和温度标准差等信息。

以下是需要导入的核心库:

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

2. 构建联邦学习网络

上一节我们介绍了作业的整体目标,本节中我们来看看第一个具体任务:构建两个联邦学习网络图。

任务要求创建两个图:一个基于地理坐标(geo),另一个基于统计属性(sta)。图中节点的数据(如模拟的温度值)需要由我们通过代码来初始化和填充。

以下是构建图结构的基本框架:

# 初始化一个空图
G = nx.Graph()
# 在此处添加节点和模拟数据
# ...

完成代码并运行后,如果测试通过,则表明两个图已成功创建。

3. 为网络创建边

在创建了图之后,我们需要为网络添加边。由于我们有两个不同的图(geosta),因此创建边的条件也不同。

construct_edges函数中,我们需要根据method参数的值来决定如何连接节点:

  • 如果方法是geo,则使用节点的经纬度坐标来计算距离。
  • 如果方法是sta,则使用节点的温度均值和标准差等统计属性。

以下是创建边的逻辑分支:

def construct_edges(graph, method='geo'):
    if method == 'geo':
        # 使用经纬度计算距离,为每个节点连接最近的5个邻居
        pass
    elif method == 'sta':
        # 使用温度统计属性计算相似度,为每个节点连接最近的5个邻居
        pass

运行此函数后,边将被创建。随后我们可以绘制网络图,将会看到两个节点位置相同但边结构不同的网络,这是因为它们的连接依据(地理属性 vs 统计属性)不同。

4. 分析网络连通性

接下来,我们将分析网络的连通性。这涉及到计算图的拉普拉斯矩阵及其特征值和特征向量。

具体任务是计算拉普拉斯矩阵的第二小特征值(即代数连通度)及其对应的特征向量。这个值反映了网络的连通强度。

计算拉普拉斯矩阵的公式为:
L = D - A
其中,D是度矩阵,A是邻接矩阵。

完成计算后,我们可以通过可视化来观察两个网络的连通性差异。

5. 实现局部平均算法

最后,我们将在构建的联邦学习网络上应用一个简单的图学习算法:局部平均。该算法用于根据邻居节点的数据来预测当前节点的温度值。

我们需要计算每个节点的预测误差。具体方法是计算节点自身温度与其所有邻居节点温度平均值之间的差值。

以下是计算预测误差的核心步骤:

prediction_errors = {}
for node in graph.nodes():
    neighbors = list(graph.neighbors(node))
    if neighbors:
        # 计算邻居节点的平均温度
        neighbor_avg = np.mean([graph.nodes[n]['temperature'] for n in neighbors])
        # 计算预测误差(绝对值)
        error = abs(graph.nodes[node]['temperature'] - neighbor_avg)
        prediction_errors[node] = error
    else:
        # 处理没有邻居的罕见情况(本次作业中每个节点都有5个邻居)
        prediction_errors[node] = None

通过分析这些误差,我们可以评估局部平均算法在该网络上的表现。

总结

本节课中,我们一起学习了如何从零构建一个联邦学习网络。我们使用networkx创建了基于不同属性(地理和统计)的图结构,为网络添加了边,并通过计算拉普拉斯矩阵分析了网络的连通性。最后,我们实现了一个简单的局部平均算法来在节点之间进行预测。本次作业没有使用现成的联邦学习框架(如FATE或TFF),而是专注于理解网络底层结构的构建与分析,为后续更复杂的学习任务打下基础。

022:作为电路的联邦学习

在本节课中,我们将学习如何将联邦学习问题类比为一个电路系统。我们将看到,在特定假设下,联邦学习网络的优化过程可以直观地通过电阻、电压和电流等电路概念来理解。


上一节我们介绍了联邦学习的基本框架,本节中我们来看看一个有趣的物理类比。

在特定的假设下,联邦学习网络可以被解释为一个电路。我们可以将联邦学习网络中的每一条边看作一个电阻。这个电阻连接在两个具有特定电势的节点之间。

在这里,每个设备的本地模型参数 θ_i 就像是电路中的电势

这些电势差会驱动电流流过电阻。这个抽象电流 I_ij 的值由边权重 w_ij 与本地模型参数之间的差值共同决定。

电流公式:
I_ij = w_ij * (θ_i - θ_j)

本地模型参数之间的差值就像是电压,它驱动着电流流过电阻。




上一部分我们将边类比为电阻,接下来我们引入电路理论中的核心定律。

对于那些学习过电路理论的人,会熟悉基尔霍夫电流定律。该定律指出,流入一个节点的所有电流之和必须为零,即电流是守恒的。

在联邦学习的电路类比中,流入一个节点的电流必须由另一个来源补偿。这个来源就是损失函数,或者更准确地说,是损失函数的梯度。

节点电流平衡公式:
∑_j I_ij = ∇L_i(θ_i)

损失函数的梯度在某种意义上就像是电流发生器,它们将电流“推入”电路网络。


理解了电路类比的基本构成后,我们来看看这个类比为何有用。

我认为这是一个非常精妙的解释,这源于我的电气工程背景。在我转型为机器学习专家之前,对此有深刻体会。

那么,这个类比酷在哪里?有人能想到吗?

它的一个潜在应用是,我们可以通过构建真实的物理电路来求解优化问题。

具体来说,你可以通过用真实的电阻和电压源搭建一个电路来解决图总变差最小化问题。然后测量每个连接点(节点)的电势,这些电势值就是GTV最小化问题的解。

当然,这里存在一些障碍,例如如何实现向量值的电势。但也许我们可以找到解决方法。

因此,一种解决优化问题的方法是:将问题具体化为一个物理系统(如带有电压的电阻网络),然后让物理过程自然发生。当你连接上电压源后,系统会达到一个稳态,此时电流和电势都稳定下来。



这些稳态的电势就是图总变差最小化问题的解。


本节课中我们一起学习了如何将联邦学习模型优化过程类比为一个电路系统。我们了解到:

  1. 本地模型参数 θ_i 可类比为节点电势
  2. 设备间的连接边可类比为电阻,其电流 I_ij 由权重和电势差决定。
  3. 损失函数的梯度 ∇L_i(θ_i) 充当了电流源的角色,遵循基尔霍夫电流定律。
  4. 这种类比揭示了一种可能性:通过构建真实的物理电阻网络并测量其稳态电势,来直接求解联邦学习中的优化问题。

这个电路视角为理解分布式优化提供了一个直观且跨学科的框架。

023:联邦学习 = 向量值流!🔁

在本节课中,我们将学习联邦学习的第二种重要解读视角:向量值流网络。我们将看到,联邦学习网络可以被建模为一个流网络,其中流动的不是物质或能量,而是梯度向量

上一节我们介绍了联邦学习作为势能网络的解读。本节中,我们来看看一个与之紧密相关的视角:向量值流

我们可以将联邦学习网络视为一个流网络。在这个网络的每一条边(即设备之间的连接)上,都有一个“流”在流动。这个流的具体数值,由差异度量函数在当前模型参数差值处的梯度给出。

用公式表示,设备 i 与设备 j 之间链路上的流为:
F_ij = ∇Φ(θ_i - θ_j)
其中,Φ 是差异度量函数,θ_iθ_j 分别是设备 ij 的模型参数。

在每个节点(设备)处,流向其所有邻居的净流出量,必须恰好由一个“源电流”或“需求”来平衡。这个需求是一个向量值的需求,它恰好由该设备上损失函数的梯度给出。

以下是关键点的总结:

  • 网络中的流由模型参数差异的梯度驱动。
  • 每个节点的净流出由该节点的本地损失函数梯度平衡。

也就是说,各个设备上损失函数的梯度,是整个联邦学习网络的驱动力。它们注入并吸收着流经联邦学习网络链路的抽象“电流”或“流”。

本节课中我们一起学习了联邦学习的“向量值流网络”模型。我们了解到,联邦学习过程可以形象地看作梯度向量在网络链路中流动,并由每个设备本地的损失梯度作为源或汇来驱动和平衡。这一视角将优化问题与网络流理论联系起来,为理解和分析联邦学习算法提供了有力的工具。

024:项目报告结构指南 📄

在本节课中,我们将详细介绍课程项目报告的撰写要求与结构。一份结构清晰、内容精炼的报告对于展示你的工作成果至关重要。

概述

项目报告需要遵循课程网站上提供的指定模板。报告必须使用 LaTeX 编写,并严格遵守模板中规定的结构。报告长度不应超过5页,其中第5页仅用于参考文献,因此正文内容应控制在4页以内。字体大小不得小于9磅,这是IEEE会议论文的典型要求。

报告结构详解

以下是项目报告必须包含的各个部分及其核心要求。

1. 摘要与引言

报告应以摘要(Abstract)开始,简要概述整个项目工作。紧接着是引言(Introduction)部分,介绍项目的背景、动机和目标。

2. 问题建模

在“问题建模”部分,你需要将你的联邦学习应用表述为一个优化问题。具体来说,在今天的课程中,你将学习如何将联邦学习建模为一个特定的优化问题,即全变差最小化问题。本节将为你提供完成这部分内容所需的全部工具。

核心概念可以表述为以下优化问题形式:
minimize F(w) = Σ_i f_i(w) + λ * R(w)
其中,f_i(w) 是第 i 个客户端的本地损失函数,R(w) 是正则化项(如全变差),λ 是正则化系数。

3. 联邦学习算法

在第三部分,你需要尝试并讨论不同的联邦学习算法。我们将在下周的课程中详细讲解这些算法,它们本质上是应用于我们今天讨论的优化问题的优化方法。

以下是几种常见的联邦学习算法:

  • 联邦平均:服务器聚合来自各客户端的模型更新。
  • FedProx:引入了近端项来处理数据异构性。
  • SCAFFOLD:使用控制变量来减少客户端漂移。

4. 数值实验

第四部分需要详细解释你所进行的数值实验。特别需要展示你获得的结果,包括训练误差、验证误差等性能指标。可以使用图表来直观地展示不同算法或参数下的性能对比。

5. 结论

第五部分应提供一个简要的结论,总结你的主要发现、项目的局限性以及未来可能的工作方向。

项目意义与建议

这个项目可以作为一个试点,为你将来向学术会议提交论文打下基础。你可以通过本项目获得同行评审意见,并在此基础上进一步完善你的工作,然后提交至真实的学术会议。据了解,明年在巴塞罗那举行的 ICASSP 会议是一个合适的选择,当然也存在其他优秀的会议。

常见问题解答

关于项目有任何问题,可以通过Zoom聊天或在讲堂现场提出。课程对项目细节有较多规定,这是为了确保同行评审的高效性。如果给予过多自由,可能会难以找到合适的评审人。因此,我们要求大家使用本课程讲座中教授的模型和方法,确保我们在同一框架下工作。

总结

本节课我们一起学习了联邦学习项目报告的结构和要求。关键点包括:必须使用LaTeX和指定模板,报告需包含摘要、引言、问题建模、算法实验、结果分析和结论等部分,且总页数不超过5页。通过遵循这些指南,你将能够撰写出一份专业、精炼的项目报告,并为可能的学术发表做好准备。

025:联邦学习中的正则化 - 如何提升模型性能与隐私保护 🔒

在本节课中,我们将探讨联邦学习中的一个核心概念:正则化。我们将了解为什么在联邦学习环境中需要正则化,以及如何通过三种不同的方式来实现它,从而提升模型性能并保护用户隐私。


上一节我们介绍了联邦学习的网络结构。本节中,我们来看看如何利用这个结构来实现正则化。

为什么我们需要在联邦学习中考虑正则化?为什么不直接让每个节点(设备)使用自己的本地数据和本地损失函数,独立运行一个简单的机器学习算法呢?

问题在于,这些设备通常无法访问足够的数据。换句话说,本地损失函数所包含的信息量不足以可靠地训练一个模型。这通常会导致机器学习的噩梦——过拟合

设想一个节点是一部智能手机,例如我的手机。我想训练一个非常复杂的模型,来告诉我明天应该进行什么活动(跑步、骑车还是游泳)以及时长,以最佳地提升我的健康水平。这无疑是一个高度复杂的物理过程,需要一个高维模型(例如拥有数十亿参数的大语言模型或Transformer网络)。训练这样的模型需要数十亿的数据点。

我个人不可能收集到如此海量的个人锻炼数据。然而,可能有数百万甚至数十亿的其他用户也在使用这个健康应用。如果每个人都能贡献一两个数据点,那么我们就可能拥有足够的数据。这就是本课程所教授的联邦学习的核心理念:利用邻居以及邻居的邻居的信息,通过网络传播这些信息,来正则化本地模型的训练

具体来说,对于图中的蓝色节点,它可以使用其邻居的模型来正则化自己的模型。相应地,该邻居节点也会使用其自身邻居的模型来正则化其训练,以此类推。这就是一种基于邻域的正则化思想

可以说,这是本课程的核心思想,也是我所教授的联邦学习方法背后的主要理念:利用邻居的损失函数或模型训练来实施正则化。


那么,我们具体该如何实现呢?如果你还记得基础机器学习知识,或者我在第一节课中回顾的内容,从原则上讲,有三种视角或方式可以实现正则化。这三种方式恰好对应机器学习的三个主要组成部分。

以下是机器学习的三个主要组成部分:

  1. 数据:我们需要数据。
  2. 模型:我们在联邦学习中训练本地模型。
  3. 损失函数

这三个组成部分都允许我们实施正则化。

1. 通过数据增强进行正则化
我们可以通过以高效或自动化的方式收集更多数据点来增强数据。例如,一种增强数据的方法是对数据点的特征添加一些噪声。另一种方法是利用“对称性”(广义上的)。例如,如果你知道一张图片显示的是猫,那么旋转后的图片仍然显示猫。你知道旋转后图片的标签,但其特征已经不同,因此它是一个新的数据点。图像的平移、缩放等对称性操作都可以用来增强数据。

在联邦学习中,一种非常原始的数据增强方式可能是直接将邻居节点的本地数据集发送到我们想要训练模型的节点。这是一个好方法吗?这会是联邦学习的一个好策略吗?例如,蓝色节点收集来自其所有邻居(其他蓝色节点和红色节点)的本地数据。

这通常不是好的做法。为什么通常不在邻居之间发送原始数据?出于隐私原因。联邦学习作为一个领域的主要动机之一,就是以隐私友好的方式进行分布式机器学习。在邻居之间共享原始数据显然不满足隐私友好的要求。例如,我可能愿意分享我的锻炼数据,但绝不会分享我的个人医疗记录。

因此,我们不想共享原始数据。

2. 通过模型剪枝进行正则化
另一种正则化的方式是使本地模型变得更小、维度更低。我们如何剪枝呢?我们可以通过要求模型在连接边上保持一致来实现。例如,我可以要求这个节点的模型行为必须与红色节点的模型相似。通过要求这种跨边的一致性,我们本质上缩小了假设空间,对模型进行了剪枝。

这种方式已经是隐私友好的,因为我们不需要交换原始数据。这对于联邦学习是可以接受的。

3. 通过惩罚项进行正则化
本课程的主要焦点将是第三种选择:通过在损失函数中添加惩罚项来耦合邻居节点的训练


本节课中我们一起学习了在联邦学习中实施正则化的必要性及其三种主要途径。我们了解到,由于设备本地数据有限,直接独立训练容易导致过拟合。联邦学习的核心思想是利用网络中邻居的信息来正则化本地模型。三种正则化方式分别对应机器学习的三个组成部分:数据增强(但受隐私限制)、模型剪枝(通过模型一致性实现)以及添加惩罚项(本课程的重点)。通过选择合适的方法,我们可以在保护用户隐私的同时,有效提升联邦学习模型的整体性能。

026:衡量个性化模型差异的简单方法 📏

在本节课中,我们将学习如何衡量联邦学习中不同设备(节点)上个性化模型之间的差异。核心思想是构建一个“惩罚项”,通过比较模型在特定测试集上的预测结果来强制模型之间达成某种共识。

概述

上一节我们介绍了联邦学习中个性化模型的概念。本节中,我们来看看如何具体衡量两个不同设备上训练的模型之间的差异。我们将通过一个简单的例子,解释如何构建惩罚项,并讨论测试集的设计选择。

核心思想

考虑两个节点,代表两个设备。例如,节点 i 代表我的智能手机,节点 i‘ 代表我朋友的智能手机。我们各自收集数据(如运动活动日志),并希望训练一个健身建议应用模型。我们知道彼此在某些方面相似(例如,都不喜欢在下雨时跑步)。这种共识可以通过强制两个训练好的模型在某个测试集上达成一致来实现。

以下是实现该想法的步骤:

  1. 选择测试集:精心选择一组参考数据作为测试集。例如,选择过去某些具有特定天气条件、且双方行为一致的日子(如35度高温时都决定去游泳)。
  2. 计算差异:通过最小化两个模型在该测试集上的预测差异,来强制模型达成共识。衡量差异的具体方法是设计选择。

差异衡量方法

如何衡量两个模型预测之间的差异?以下是几种常见的方法:

  • 均方误差:如果模型是回归模型,输出数值,可以使用均方误差。公式为:
    MSE = (1/n) * Σ (y_pred_i - y_pred_i')²
    其中 y_pred_iy_pred_i' 分别是两个模型在测试集上的预测值。
  • 交叉熵损失:如果模型是分类模型,输出类别标签,均方误差通常不是好选择。此时可以使用交叉熵损失等分类任务中常见的损失函数。

本质上,任何在基础机器学习中用作损失函数的方法,都可以用作此处的差异衡量指标。

测试集的设计

需要特别指出的是,用于比较两个模型的测试集,对于网络中不同的节点对(边)可以是不同的。这个测试集是为特定的一对节点量身定制的。对于联邦学习网络中的另一条边(另一对节点),我们可能使用另一个测试集。

因此,测试集的构建是一个重要的设计选择,你可以在联邦学习项目中尝试不同的构建方法。

那么,如何为联邦学习网络中的两个节点构建这样的测试集呢?假设两个节点各有一个本地数据集。

以下是几种可能的构建思路:

  • 随机抽样组合:从节点 i 的本地数据中随机选择10%,从节点 i‘ 的本地数据中随机选择10%,将它们组合成一个测试集。
  • 基于重叠区域:从一个节点的数据中,选取那些在另一个节点数据中有非常接近的邻居的数据点,本质上利用数据分布重叠的区域。
  • 针对任务生成:对于特定任务(如图像分类),可以随机生成符合任务定义的测试样本(如随机生成猫和狗的图片)。

隐私考量

一个关键问题是:如何在不泄露本地数据隐私信息的前提下构建测试集?

直接共享原始数据块(如10%的本地数据)可能不满足隐私保护要求。以下是更隐私友好的方法:

  • 完全随机生成:与本地数据无关,完全随机生成一个测试集,所有节点对都使用它。
  • 基于分布估计生成:先估计各本地数据集的分布,然后从这些估计的分布中随机抽取样本来生成测试集。

实际上,在计算差异时,节点间并不需要共享原始测试数据本身,只需要共享模型在测试集上的预测结果。仅共享预测值通常比共享原始数据更具隐私友好性。

线性模型下的具体形式

现在,让我们具体化这个差异衡量方法。假设我们在每个节点上都使用线性模型。

当我们代入线性模型的公式后,对于两个模型参数 w_iw_i‘ 之间的差异,可以得到如下表达式:

Disagreement = (w_i - w_i')^T * M * (w_i - w_i')

这个表达式非常简洁,它是一个广义范数(或平方范数)。如果中间的矩阵 M 是单位矩阵,那么这个表达式就变成了参数向量之差的平方欧几里得范数:

Disagreement = ||w_i - w_i'||²

但实际上,M 是一个由测试集数据决定的半正定矩阵,它定义了一个广义的平方距离。

关于课程重点的说明

有同学问,为什么本课程重点介绍这种“惩罚项”的视角?

主要原因在于,这种方法与当前的研究前沿紧密相关,并且提供了清晰的数学框架。但这并不意味着这是唯一或最好的方法。我们鼓励大家在论文评述等环节中,探索其他方法(例如隐私友好的数据增强方法),并与本课程介绍的方法进行对比,分析各自的优劣。

总结

本节课中,我们一起学习了衡量联邦学习中个性化模型差异的一种简单方法。核心是通过在精心设计的测试集上比较模型预测,来构建惩罚项,从而促使相似节点的模型达成共识。我们讨论了差异的衡量指标(如均方误差、交叉熵)、测试集的不同构建策略及其隐私考量,并推导了在线性模型下差异项的具体数学形式。理解这个基础框架,是后续学习更复杂联邦学习算法的重要一步。

027:广义全变差最小化的不动点方法 🎯

在本节课中,我们将学习如何将广义全变差最小化这一优化问题,转化为不动点方程,并理解这种转化如何为设计联邦学习算法提供通用框架。

上一节我们介绍了广义全变差最小化问题,本节中我们来看看如何通过不动点方法来求解它。

在接下来的课程中,我将介绍一些联邦学习算法,这些算法是用于求解广义全变差最小化问题的优化方法。

所有这些算法背后的一个共同或核心思想,是将这个优化问题表述为一个不动点问题。

事实证明,将此类优化问题转化为带有某个不动点算子的不动点方程,存在相当便捷的方法。

这意味着,每当有一个向量或一组局部模型参数时,为了记号的方便,我有时会将这些局部模型参数堆叠成一个长的单一向量。然后,我们可以使用某个算子,通过一个不动点方程来刻画广义全变差最小化解。

事实证明,这个算子通常不是唯一的,它是一个设计选择。因此,对于同一个广义全变差最小化问题,你可以找到非常不同、甚至无限多种的不动点算子选择。

为何采用不动点方法?🤔

你如何看待将优化问题转化为不动点方程这种方法?你是否觉得,我们究竟为什么要这样做?这难道不会让一切变得更复杂吗?或者,你是否对为什么这可能是一个好主意有一些直觉?

将优化问题转化为不动点问题,其美妙之处何在?

确实,有一些评论涉及分析方面,它可以帮助分析或解决问题。但从计算的角度来看,当你想要数值求解某个问题时,你需要一个算法,比如梯度下降法。

那么,求解这样一个不动点方程,一个非常自然的算法选择是什么?你想找到一个向量 Ŵ,它满足 Ŵ = F(Ŵ),其中 F 是不动点算子。

你如何求解这样的不动点方程?你只需重复它,迭代它。然后你得到的就是一个不动点迭代。这正是我非常喜爱的方法。几年前我爱上了不动点迭代法,并且这份热爱至今依然活跃。

因为一旦你成功地将你的问题(通常是数学相关的问题)表述为一个不动点方程,你几乎立即就得到了一个编程和算法的配方,一个数值算法,即不动点迭代。

事实证明,我真的很享受这一点,尽管有时这有点像一个奇怪的爱好:思考任何你觉得很酷的算法。比如说反向传播,或者其他什么算法,比如Q学习、强化学习算法。我几乎总是能够想出一个漂亮的不动点迭代表述。

因此,这是一个非常通用的原理或数值算法的设计模式。

具体示例:梯度下降法 📉

例如,当你观察这个针对光滑损失函数的优化问题时,你可以使用梯度下降法。事实证明,梯度下降法所做的就是应用一个不动点算子。它是一个不动点迭代。

梯度下降法是一个具有特定算子选择的不动点迭代。顺便说一下,这个算子是由学习率 η 参数化的。因此,学习率是整个算子族 F_η 的一个参数,该算子族刻画了此优化问题的解。

但这只是一个例子。还有其他方法可以将优化问题表述为不动点方程。你们有谁知道针对更一般的、不一定可微的优化问题的其他方法吗?

但仍然要求是凸的,或者我们说,是凸的。假设你想最小化两个函数或两个分量的和,它们都是凸的。

那么存在一种称为对偶性的方法。凸对偶性提供了非常巧妙的方法,来得出此类凸优化问题的不动点刻画,而无需梯度。

因此,你也可以将非光滑优化问题表述为不动点方程。例如,它们被称为原-对偶最优性条件,或者也称为KKT条件。

KKT条件也是优化问题不动点刻画的一个例子,特别是当你具有约束条件时。如果你有约束,那么仅仅使用梯度为零的条件是行不通的,你必须以某种方式引入约束。而KKT条件就是一种将有约束的优化问题表述为不动点方程的方法。

总结 ✨

本节课中,我们一起学习了将广义全变差最小化问题转化为不动点方程的核心思想。我们了解到,这种转化并非唯一,而是一种设计选择,其优势在于能直接引出一个自然的数值算法——不动点迭代法。我们以梯度下降法为例,看到了它正是不动点迭代的一种特例。最后,我们还提到了对于更一般的凸优化问题(包括非光滑和有约束的情况),可以通过对偶理论或KKT条件来建立不动点刻画,这为设计更广泛的联邦学习优化算法提供了强大的理论基础。

028:GTV最小化解的聚类结构与联邦学习中的本地模型

在本节课中,我们将要学习如何评估通过图总变差(GTV)最小化得到的本地模型参数解的质量。我们将探讨这些解如何自然地形成聚类结构,以及网络拓扑和正则化强度如何影响这一结构。

评估本地模型参数的质量

上一节我们介绍了通过GTV最小化得到本地模型参数向量 。接下来的问题是,我们如何知道这些解是有效的?

我们可以评估得到的 。其中,Ŵⁱ 向量的一个组成部分,通过读取 向量中对应的块来获得。

本地损失的局限性

以下是评估模型的一种直接方法:计算本地损失。然而,本地损失可能具有误导性。

  • 本地损失可能为0,但得到的模型参数却完全无效。
  • 这是因为模型可能过拟合了本地数据。

通过聚类避免过拟合

为了避免这个问题,一种方法是聚合本地损失函数。具体来说,是寻找近似相似的本地模型参数,或者根据本地模型对设备进行聚类

  • 当两个设备具有相似的本地模型参数时,它们属于同一个聚类。
  • 从节点 i 的视角,我们可以通过汇集所有与节点 i 具有相似训练模型参数的节点,来定义其自我聚类或本地聚类 Sⁱ

然后,我们可以通过对聚类中所有本地损失函数求和,来评估 Ŵⁱ 的质量。

GTV最小化解的聚类结构

那么,这种聚类结构具体是怎样的呢?事实证明,GTV最小化的解会形成聚类。这本质上是一种谱聚类的形式。

  • 这是一种考虑了本地损失函数的谱聚类。
  • 形成的聚类取决于两个因素:
    1. 网络结构:如果节点之间存在许多高权重的边,则更容易形成一个聚类。
    2. 参数 α:出现在GTV最小化公式中的正则化强度参数 α

参数 α 的全局调节作用

参数 α 全局性地调节边的权重,就像一个全局的额外因子,使边权重变大或变小。

  • 当我们将 α 设置得非常大时,聚类会变得越来越大。
  • 在某个时刻,当 α 足够大时,GTV最小化的解在各个节点上几乎相同。这意味着我们在所有节点上训练了同一个模型

这对于某些应用场景非常有用。实际上,联邦学习的原始设定就是关于以隐私友好的方式训练一个供所有人使用的单一模型。通过GTV最小化,只需将 α 设置得足够大,就能实现这一点。

  • α 设置得足够大,会导致各节点的本地模型参数几乎相同。
  • 你本质上在所有节点上训练了相同的模型,但以隐私友好的分布式方式解决了这个优化问题。

理论界限与模型对齐

为了使这一点更精确,我们可以推导出理论界限。

考虑一个连通的联邦学习网络(即其第二小特征值大于0),并且损失函数在一定程度上对齐。这意味着存在一个模型参数的选择,可以近似最小化所有本地损失函数。

在这种情况下,如果你求解GTV最小化问题,结果会显示,解会紧密地围绕模型参数的平均值聚集。

你甚至可以推导出一个上界,用以下量来界定本地模型参数围绕其均值的变异程度:

‖Ŵⁱ - (1/n) Σⱼ Ŵʲ‖ ≤ (ε / (α * λ₂))

这个界限取决于:

  • ε:衡量本地损失函数对齐程度的指标。如果所有节点具有相同的本地损失函数,则 ε = 0。通常,由于本地数据集可能存在采样噪声,损失函数略有不同,这种未对齐性由 ε 捕获。
  • α:正则化强度。
  • λ₂:网络拉普拉斯矩阵的第二小特征值(代数连通度)。

ε 越小,意味着本地损失函数对齐得越好,本地模型参数的偏差就越小。另一方面,如果我们使 α 非常大,就可以“熨平”本地模型参数,使其越来越集中在其均值周围,这意味着本地模型之间不再有差异。


本节课中,我们一起学习了如何通过聚类聚合来评估GTV最小化得到的本地模型,以避免过拟合。我们深入探讨了GTV解的聚类特性,它本质上是一种谱聚类,并分析了网络结构和正则化参数 α 对聚类形成的影响。最后,我们了解到,通过增大 α,可以促使所有节点学习到近乎一致的全局模型,这正对应了经典联邦学习的目标,同时整个过程是以分布式和隐私保护的方式完成的。

029:使用NetworkX构建图与求解GTV最小化 📚

在本练习课中,我们将学习如何使用NetworkX库构建一个气象站网络图,并在此基础上求解图总变差最小化问题。我们将通过两种方法实现:闭式解法和梯度下降法。


构建FMI气象站图 🌐

上一节我们介绍了本次练习的目标。本节中,我们来看看如何根据提供的数据构建一个图。

我们使用的数据来自芬兰气象研究所2025年的气象站数据。图中的每个节点对应数据集中的一个气象站。

以下是构建图的主要步骤:

  1. 创建节点:为数据集中的每个气象站创建一个节点。节点将包含该站的坐标(经纬度)和其他数据。
  2. 添加边:为每个节点找到其四个最近的邻居节点(基于坐标距离),并在它们之间建立连接(边)。

这样,我们就得到了一个无向图,其中节点代表气象站,边代表站与站之间的邻近关系。


处理节点数据 📊

上一节我们构建了图的结构。本节中,我们来看看如何处理每个节点内部的数据。

对于每个气象站(节点),我们使用以下数据:

  • 特征:将 Tmin(最低温度)和 Tmean(平均温度)组合作为特征 X
  • 标签:使用 Tmax(最高温度)作为标签 y

数据处理流程如下:

  1. 将数据集按一定比例分割为训练集、验证集和测试集。
  2. 将处理好的训练集和验证集数据,连同初始权重(通常设为0)以及该站的坐标信息,一起添加到对应的节点属性中。

这样,每个节点都包含了用于本地模型训练的数据和参数。


通过闭式解法求解GTV最小化 🧮

在之前的课程中,我们学习了图总变差最小化问题。当使用线性回归和均方误差损失时,该问题可以写成特定形式。

GTV最小化的目标函数是:
min_w ∑_i L_i(w_i) + λ * ∑_(i,j)∈E ||w_i - w_j||^2
其中,对于线性回归和MSE损失,本地损失函数为 L_i(w_i) = (1/m_i) * ||X_i * w_i - y_i||^2

我们可以通过以下步骤求得闭式解:

  1. 在每个节点 i 上,根据其本地数据计算矩阵 Q_i = (1/m_i) * X_i^T * X_i 和向量 q_i = (1/m_i) * X_i^T * y_i
  2. 将所有节点的 Q_iq_i 堆叠起来,形成全局矩阵 Q 和向量 q
  3. 引入图拉普拉斯矩阵 L 来编码图结构。
  4. 此时,最优权重 w* 可以通过以下闭式解求得:
    w* = (Q + λL)^(-1) * q
    前提是 (Q + λL) 是可逆的。

你的任务是实现计算 Q_iq_i 的函数,然后组装并求解上述闭式方程。


通过梯度下降法求解GTV最小化 📉

闭式解法并不总是可行,尤其是在模型复杂时。在机器学习中,我们更常使用迭代方法,如梯度下降。

根据教材第5.3节,求解GTV最小化的迭代更新规则如下:

  1. 计算本地梯度:对于节点 i,本地损失函数的梯度为 ∇L_i(w_i)
  2. 计算图惩罚项梯度:图正则化项的梯度与节点及其邻居的权重差有关,对于节点 i,该项为 2λ * ∑_(j∈N(i)) (w_i - w_j),其中 N(i) 是节点 i 的邻居集合。
  3. 组合并更新:节点 i 的总梯度为本地梯度与图惩罚梯度之和。然后使用该梯度进行权重更新:
    w_i^(t+1) = w_i^(t) - η * [∇L_i(w_i^(t)) + 2λ * ∑_(j∈N(i)) (w_i^(t) - w_j^(t))]
    其中 η 是学习率。

你的任务是实现上述本地梯度、图惩罚梯度计算以及权重更新规则。


总结

本节课中我们一起学习了联邦学习中的一个重要实践环节。我们首先使用NetworkX根据真实气象数据构建了一个图模型。然后,我们深入探讨了图总变差最小化问题,并掌握了两种求解方法:在满足线性假设时高效的闭式解法,以及更通用、基于迭代的梯度下降法。理解这两种方法为处理分布式、图结构数据上的机器学习问题奠定了基础。

030:联邦学习算法 🧠

在本节课中,我们将学习如何从数学优化问题出发,推导出具体的联邦学习算法。我们将看到,许多著名的联邦学习算法都可以统一在一个名为“广义全变差最小化”的优化框架下,并通过梯度下降等迭代方法求解。


联邦学习网络回顾 📡

上一讲我们介绍了联邦学习网络的概念。本节中,我们来看看如何基于这个网络来构建学习问题。

我们使用网络,特别是联邦学习网络,来为联邦学习应用建模。一个联邦学习网络由节点组成。例如,这里有三个蓝色节点和三个红色节点,它们代表设备。每个节点可以是一部智能手机、一台笔记本电脑或一台超级计算机。我们并不限制实际的物理设备或设备类型,只是用网络中的一个节点来表示它。

这些节点中的一部分通过边或链接连接,每条边还有一个边权重。这个边权重有两个作用:

  1. 我们用它在这些联邦学习算法中的节点之间传递中间结果。因此,如果两个节点由一条边连接,它们之间应该存在某种通信手段。
  2. 我们用边来耦合相连节点处的模型或模型训练,使得由一条边连接的节点拥有某种程度上相似的模型。

因此,一条边有两个方面:计算方面(我们通过该边共享中间结果,需要通信手段)和统计方面(它耦合了由这条边连接的节点处的模型训练)。


优化问题:广义全变差最小化 🎯

基于这个联邦学习网络,我们以优化问题的形式来建立一个学习问题。这就是我一直在谈论的核心设计原则。设计原则就是这个优化问题。

以下是该优化问题的一个特例,称为广义全变差最小化。这个实例是针对参数化模型表述的。这里,每个节点 i 都有一组模型参数 w_i。这意味着我们为每个节点训练单独的或个性化的模型。

但是,这些模型训练是耦合的。我们如何耦合呢?我们要求这些模型参数具有较小的“变差”。测量这种变差有不同的方式,这在某种意义上是一种设计选择。一种测量变差的方法是使用相连节点间模型参数差的平方欧几里得范数。对于联邦学习网络中的每一条边,我们都有这样一个项。如果我们有更多的边,这个求和项就有更多的组成部分,这意味着更多的计算。

这是一个特例。当我们选择这里的正则化参数 α = 0 时,耦合就消失了。我们基本上分别最小化每个局部损失函数,即仅在各自的局部数据集上独立训练个性化模型。

这总是个坏主意吗?或者有时使用 α = 0(即完全跳过边上的耦合)实际上是一个好的选择?你能想出一个场景或设定,其中训练这些模型的最佳方式就是独立或分别训练局部模型吗?

换句话说,我们为什么要费心加入这个耦合项?为什么我们希望耦合模型训练?为什么我们希望节点或某些节点拥有相似的训练模型?

关于 α 与边权重的区别:这里的 α 可以看作是一个全局缩放因子。通过 α,我们可以以相同的方式使所有权重变大。当然,你也可以总是定义 α = 1 并固定它,然后为边权重选择不同的值。这只是记法上的便利。

关于耦合的目的:我们希望向邻居学习。我们希望耦合。我们希望从邻居那里汇集信息。这就是为什么我们希望耦合局部模型的训练。

关于何时独立训练:当边缘设备拥有大量样本且它们非常异构时,每个设备 i 的局部数据集很大,使得其损失函数是一个良好的学习目标(不会导致过拟合),那么分别训练每个模型于其自身的局部数据集,完全不考虑耦合,可能是最佳选择。

但这可能过于理想。在许多应用中,我们通常没有足够大的局部数据集,因此我们需要以某种方式汇集数据。

关于 α 的作用:这个调节参数 α 决定了我们允许模型独立(个性化)的程度。当 α 非常大或足够大时,可以证明这个优化问题的解(即模型参数)在网络的所有连通分量内的节点处是近似相同的。如果网络是连通的,并且你选择 α 非常大,那么广义全变差最小化的解实际上是每个节点近似恒定的模型参数。这在某些应用中很有用,因为你希望所有节点拥有相同的模型(即一个全局模型),但希望以分布式方式使用局部数据集进行训练。实现这一目标的一种方法(无需任何服务器-客户端架构)就是使用足够大的 α 进行广义全变差最小化,并通过分布式优化方法求解。

α 可以看作是广义全变差最小化的一个超参数,可以通过交叉验证等技术来选择。

关于为何参数应相似:因为当你选择 α 非常大时,为了最小化目标函数,你必须使用在边上变化不大的局部模型参数。如果任意两个节点由一条路径连接,你可以迭代地或归纳地证明它们必须彼此接近,因为在连接两个节点的路径上的任何边都不能有大的变差。


本讲学习目标 🎓

在完成本模块(包括作业)后,你应该能够或应该知道:

  1. 联邦学习算法如何从梯度下降法推导出来。
  2. 如何使用消息传递来实现这些梯度下降步骤。
  3. 如何将梯度下降(其定义仅适用于参数化模型)推广到非参数化模型。
  4. 异步算法的重要概念。

梯度下降法 📉

现在,让我们从梯度下降法开始。这只是针对广义全变差最小化的普通梯度下降。

我们假设损失函数是平滑、可微的,因此可以计算梯度。一旦你能计算这些损失函数的梯度,你就能计算整个目标函数的梯度,因为第二项(耦合项)在构造上总是平滑的。

当你计算出梯度后,会得到如下表达式。一旦有了梯度,就可以进行梯度下降步。我们使用当前局部模型参数的选择来计算梯度,并用它来更新某个节点 i 的当前模型参数。整个梯度下降步包括对网络中所有节点并行应用此类更新。这里的更新步骤是同步或同时应用于网络中所有节点的。

当你这样推导出梯度下降步时,会得到一个很好的解释,它基于两项:

  1. 局部损失函数的梯度:这一项试图将节点 i 处的当前局部模型参数推向该节点损失函数的局部最小值。这是任何机器学习的基本思想:选择模型参数以最小化损失。
  2. 来自邻居的耦合项:第二项确保你学习的模型参数与邻居的模型参数不会相差太大。这一项促使网络中连接良好的节点间的局部模型参数达成一致。在某种意义上,这一项相当于以隐私友好的方式汇集来自邻居的局部数据集。我们不在邻居之间汇集所有局部数据集,而是仅使用涉及局部模型参数的耦合项。我们在邻居之间共享的唯一东西是当前模型参数。当然,这些参数通常携带关于局部数据的信息,因此不可避免地会存在信息泄漏。但通常,你可以选择这些模型参数,使它们不会泄露关于局部数据特定属性的太多信息。

这里的 α 乘以边权重,它调节了这两种效应之间的平衡。如果 α 乘以边权重的乘积非常小,那么邻居之间的协调或合作就很少,该联邦学习算法主要是在为每个节点进行独立的模型训练。你选择的 α 越大,就越耦合邻居节点或相邻节点处的训练。当 α 选择得非常大时,第二项占主导地位,并确保最终在所有节点处得到相同或几乎相同的模型参数。

关于整体效应:整体效应在很大程度上取决于整体网络结构。虽然这里的更新只涉及网络的局部结构(即节点 i 的邻域),但梯度下降在每个节点上产生的结果也取决于网络的整体结构,特别是网络的聚类结构。梯度下降步可能会收敛到这些节点处近似相同的模型参数,以及那些节点处近似相同的模型参数,因为它们由许多权重较大的边紧密连接,而这两个聚类之间只有一条边。整体效应是什么,很大程度上取决于实际的网络结构。


消息传递实现 🔄

这个梯度下降步需要来自其邻居的信息,因此你无法在不与邻居交换信息的情况下计算一个节点的梯度下降步,因为第二项需要这些信息。

因此,在进行梯度下降步之前,每个节点必须将其当前的局部模型参数广播给所有邻居。在这个简单情况下,节点 i 只有一个邻居节点 i'。另一方面,节点 i' 需要将其局部模型参数发送给它的邻居节点 i。在这些节点交换了它们的模型参数之后,每个节点可以同时执行这个更新步骤。然后下一次迭代开始:你与邻居共享新的模型参数,再次进行梯度下降步,依此类推。


联邦梯度下降 🚀

现在我们已经讨论了梯度下降步,让我们看看基于此梯度下降步的、使用其变体或扩展的一些著名联邦学习算法示例。

第一个是联邦梯度下降,它本质上是使用这些同步梯度下降步来构建完整算法。

一个算法通常包括对初始化的精确描述。例如,我们可以用所有模型参数的零向量初始化。但这可能不是最佳选择。你也可以通过随机选择来初始化模型参数。另一种选择是,你可以在自己的数据集上独立训练模型(不与邻居耦合),并使用这个训练好的模型作为初始选择。但这可能不是最优的,因为你可能会过拟合。

使用零初始化并没有数学上的理由或 justification,它只是一种可能的初始化方式。

然后你开始重复这些梯度下降步。但这对算法来说是一个有点草率的表述,或者说是一个不太实用的算法,因为我没有说明停止准则。这是一个只启动一次但永不停止的算法,这当然不太实用。人们(包括现在的我)喜欢避免或不谈论停止准则。但你有某种直觉吗?我们如何知道何时停止这些迭代?我们如何将这个算法草图发展成一个包含停止准则的更实用的算法?

可能的停止准则

  • 你可以跟踪进度。在每次梯度下降步之后,观察它减少了多少局部损失函数。你可以监控局部损失函数。
  • 如果你有一个足够大的局部数据集,你可以将部分局部数据集用作验证集(不用于构建局部损失函数),当验证误差/损失不再下降时停止。这实际上是最广泛使用的实用停止准则方法。
  • 如果权重本身不再有太大变化,那么继续迭代似乎没有意义,因为更多迭代不会产生太大效果。
  • 你可以进行数学分析,以限定特定迭代次数下的次优性。然后你选择最小迭代次数,使得你处于广义全变差最小化目标函数实际最优值的某个范围内。但这需要数学分析,并且你需要做出假设(例如,假设你的局部损失函数具有某些凸性性质)。

我想再次强调同步执行此步骤的困难。当我在这里写“进行梯度下降步”时,这是非常简化的,几乎掩盖了你必须在所有节点同时进行此梯度下降步的复杂性。

关于同步的挑战:为了同步这些梯度下降步,我们需要一个时钟。这个时钟包括向所有节点发送一个同步信号。每个节点只有在收到同步信号后才开始进行梯度下降步。它执行梯度下降步并发回更新后的局部模型参数。只有在服务器从所有节点收到这些更新后的局部模型参数后,它才使时钟滴答一次并发出新的同步信号。

在一个简单的 Python 演示中(针对两个节点),如果为一百万个节点实现这个,你会遇到许多问题。首先,这个算法规定,只有在收到所有更新后的模型参数后才能发出新的同步信号。这意味着你必须知道联邦学习网络中有多少客户端或节点。你必须进行一些簿记或管理,每个节点都需要在服务器注册。在某些更随意的系统中,这可能非常不实用,可能没有中央服务器来维护参与联邦学习网络的所有节点的列表。

关于信号丢失:如果任何同步信号或模型参数更新未能到达目的地,整个算法就会崩溃。例如,如果服务器发出的同步信号由于某种原因未能到达某个节点,该节点将永远不会继续执行另一个梯度下降步,因此也永远不会发回另一个更新,这反过来意味着服务器将无限期地等待时钟滴答,因为它不再从该节点收到更新。我们应该避免这种情况。但如何在实际硬件和软件中实现这个算法,远远超出了本课程的范围。

我强烈鼓励你下载并尝试运行这个启动 Python 脚本,你会看到这些状态消息(同步信号和局部模型参数的更新)被打印在 Python 控制台中。


联邦随机梯度下降 🎲

接下来是联邦随机梯度下降,它只是联邦梯度下降的一个小变体,区别在于我们使用梯度的估计值而不是精确梯度。

计算梯度可能需要大量计算(例如,在线性回归设置中计算求和),即使数据点不多,计算本身也可能成本高昂。此外,访问这些数据点可能具有挑战性。因此,使用梯度的近似值可能是有用的。

一种计算近似值的方法是使用训练集中随机选择的数据点子集(或批次)。你只需在梯度计算中用这个随机子集或批次的和替换原来的求和。这样,你就得到了联邦随机梯度下降。这里没有太多额外的挑战。


联邦平均 🤝

现在,我们来看可能是联邦学习中最广为人知的算法:联邦平均

联邦平均实际上是联邦梯度下降的一个变体。在联邦平均中,我们希望在每个节点学习相同的模型参数。我们希望学习一个可用于所有节点的单一模型,但希望通过使用分布式局部数据集中的信息来学习这个模型,并且不希望收集所有局部数据集来训练这个单一模型。

实现这一目标的一种方法是使用带有硬约束的广义全变差最小化。在广义全变差最小化中,我们只惩罚相连节点之间的差异,但在这里我们要求任何两个节点的局部模型参数完全相同。可以证明,在所有局部数据集上一起训练一个单一模型,等同于在这些约束下最小化局部损失函数之和。

对于这种约束优化问题,梯度下降有一个很好的变体,称为投影梯度下降。它的基本思想是:为这个优化问题计算一个梯度下降步,然后将结果投影到允许的局部模型参数集合中。允许的局部模型参数集合是那些在所有节点都相同的集合,这些约束定义了一个常数局部模型参数的子集。我们可以通过计算平均值轻松地投影到这个子集。

投影梯度下降中的投影步骤包括:独立地对这些局部损失函数进行梯度下降步,然后将得到的更新后的局部模型参数投影到这个约束集上。

然后我们写出算法:首先需要一个服务器来协调整个训练或学习算法,该服务器还维护全局模型参数。我们用零初始化一组全局模型参数,并将其广播给所有客户端或节点。然后每个节点独立进行一个梯度下降步(就像每个节点仅在其本地数据上本地训练其模型一样)。但我们通过让服务器收集所有这些更新后的模型参数并计算平均值来耦合它们。这个平均值就是投影梯度下降中的投影步骤。因此,联邦平均是投影梯度下降的一个实例。

关于掉队者:掉队者是指未能跟上节奏的客户端或节点。例如,在某个迭代中,一个节点停止更新(如电量耗尽)。如果服务器严格要求所有节点都返回局部模型参数,那么整个系统就会崩溃。我们可以做的是只要求至少一定比例(如10%)的节点返回局部模型参数,一旦收到就进行更新。但这可能会破坏收敛性质。掉队者可能不会完全使系统崩溃,你可能仍然有一个运行的算法在某些节点更新模型参数,但局部模型参数序列可能不再收敛到优化问题的最小值。

同样,你可以在我的 GitHub 仓库中找到这个演示,其中包含一个说明各个部分的小 readme markdown 文件、一个启动 Python 脚本、一个服务器和多个工作器脚本实例。我强烈鼓励你尝试运行这些脚本。

联邦平均的要点:它是投影梯度下降的一种形式。在创造“联邦平均”这个术语的实际论文中,作者使用了一些变体,例如他们使用梯度的随机近似,并且他们使用多个梯度下降步(因为计算能力更强的节点可能能够取得更多进展)。


联邦近端算法 🔧

接下来要讨论的算法叫做 FedProx。它用另一个更新步骤替代了梯度下降步。

这个更新使用当前全局模型参数的选择来构建一个正则化项,然后求解一个正则化的经验风险最小化问题。这里的第二项确保了这个更新步骤的解接近于当前的全局模型参数。因此,第二项促使更新不会偏离当前全局模型参数太远。另一方面,更新应该试图使局部损失变小。这实际上与梯度下降的想法相同:你想找到一个新的模型参数选择,使损失函数变小一些,但你不允许更新过于剧烈,只进行小的更新。

我们在这里使用一个近端步骤,即使用这个惩罚化的局部损失函数。你可以将这个近端步骤解释为梯度下降或梯度步骤的推广。通过使用损失函数的局部线性近似,你可以重新得到梯度下降步。

关于这个近端步骤的好处是,它为我们如何将梯度方法推广到非参数化模型提供了一些思路。你可以尝试为非参数化模型实现这个正则化。例如,在第一次作业中,你不得不为决策树实现一个正则化项。你使用测试集上的预测来构建惩罚项。这为你提供了一种技术,可以为像决策树这样的非参数化模型实现或推广这个惩罚项,从而可以在 FedProx 算法中使用这些近端算子。

一旦你使用近端算子表述,为像决策树这样的非参数化模型表述整个算法就不太具有挑战性,因为你可以像在第一次作业中那样,通过使用带有特定标签或伪标签的额外数据点来增强损失函数的训练集,从而实现这个惩罚项。

关于模型假设:在 FedProx、联邦平均和联邦梯度下降中,它们只适用于使用相同参数空间(即使用相同形状、相同大小的参数向量)的参数化模型的联邦学习网络。否则,它们可以是不同的。有些节点可以使用线性模型,其他节点可以使用逻辑回归,还有一些节点可以使用深度神经网络,只要所有这些模型使用相同长度的参数向量,你就可以使用 FedProx 和联邦平均。但你甚至可以进一步摆脱这个限制,一种方法是使用下面介绍的联邦松弛算法或其非参数化形式。

关于 FedProx 的实践:有论文报告称,FedProx 似乎更容易使用(在需要更少超参数调优的意义上),在实践中似乎更容易处理或调优。但我没有找到真正有说服力的理论论证,表明 FedProx 在广泛的环境中比联邦平均收敛得更快。


联邦松弛算法 🛋️

现在介绍联邦松弛算法。思路如下:为了最小化广义全变差最小化,需要考虑两个部分:局部损失函数之和以及全变差最小化项。如果这些耦合项消失,最小化这个目标函数会容易得多。

让它们消失的一种方法是固定除一个节点外所有节点的模型参数,然后仅针对节点 i 的模型参数进行优化。这类似于块坐标下降或坐标下降。我相信你们许多人在线性代数或数值线性代数课程中遇到过这个优化思想,因为它与求解线性方程组的雅可比迭代法思想相同。

你假设已经找到了除节点 i 外所有模型参数的最优选择。那么你现在应该做什么?你仅针对 w_i 优化这个目标函数。这变得非常容易,因为优化变量之间没有耦合了,只剩下这个一个优化变量 w_i 的二次项,这就很容易求解了。

这就是得到的算法:你从每个节点 i 的某个初始选择开始,然后为 w_i 计算这个更新。这实际上又是一个近端步骤或近端算子,这个近端项包含了所有邻居的当前局部模型参数估计值。

同样,我们看到了这种算法模式:你必须在邻居之间交换模型参数。然后每个节点使用其邻居的模型参数来计算更新,以改进自己的局部模型参数。在这个算法中,我们通过使用由所有邻居之和给出的惩罚项来实现。

这看起来很自然:我们想要最小化局部损失函数,但同时也要确保节点 i 的局部模型参数不会离邻居的当前局部模型参数太远。

一个很好的练习是:你可以将这个求和项重新表述为另一个没有求和的惩罚项,即 w_i 与某个 w_tilde 的平方欧几里得距离,而这个 w_tilde 正是所有邻居模型参数的平均值。因此,你可以用 α 乘以这个优化变量(即我们要更新的节点 i 的模型参数)与邻居模型参数当前平均值之差的平方欧几里得范数来替换这个求和项。

顺便说一下,这又是一个正则化训练问题,是岭回归的一种形式。在岭回归中,你最小化当前权重向量的训练误差(如均方误差)加上正则化参数乘以平方欧几里得范数。在联邦松弛算法中,我们使用的不是模型参数的平方欧几里得范数,而是模型参数与某个其他参数向量(即邻居模型参数的平均值)之差的平方欧几里得范数。

FedProx 与 FedRelax 的主要区别:FedProx 学习所有节点相同的模型参数,适用于单一模型的联邦学习设置。而 FedRelax 学习每个节点不同的模型参数,适用于完全分布式、去中心化的个性化联邦学习。如果 α 很大且网络连接良好,我们最终也可能得到几乎相同的模型参数,但通常不会总是得到相同的模型参数,这取决于网络的聚类结构。

推广到非参数模型:FedRelax 非常自然地允许推广到非参数模型。我们只需要一种方法来扩展或重新表述这个惩罚项(即变差项)以适用于非参数模型。一种方法是使用测试集上预测的平方差来比较两个模型(例如两个决策树),如果它们在测试集上给出近似相似的预测,我们就说两个模型相似。

这意味着不同节点处的模型不一定都是决策树。它们只需要在其预测中具有相同的值域。节点 i 处的假设可以是决策树,而节点 i' 处的假设可以是深度神经网络,只要它们都输出可比较的数值量。因此,不同节点处的模型可以完全不同,它们只需要在其预测中具有相同的值域(例如,都需要是回归模型,输出可比较的数值量)。


异步算法 ⏱️

本节课要介绍的最后一个概念是异步算法

为了解释或介绍异步算法,有必要意识到到目前为止我讨论的所有算法(联邦梯度下降、联邦平均、联邦随机梯度下降、FedProx)都是同一类型的,因为它们都基于不动点迭代。你可以为它们找到一个算子,将这些算法写成不动点迭代:在每次迭代中,你应用某个算子,这个算子对于不同节点可以不同。你将这个算子应用于节点当前使用的所有局部模型参数。

每个节点 i 的更新可以用一个算子 F^i 来数学表示。找出联邦梯度下降、联邦平均、FedProx 的算子具体是什么,将是一个很好的练习。例如,对于梯度下降,算子看起来像这样,它使用了局部损失函数的梯度和耦合项。如果你使用这个选择,得到的算法就是联邦梯度下降。如果你用其他选择替换它,就会得到联邦平均。

因此,到目前为止讨论的所有算法都基于这种同步不动点迭代,因为它们在每个节点同时或同步地计算这个不动点迭代。

一个联邦学习算法由其不动点算子决定。与其写出伪代码,你可以直接说明你的不动点算子是什么,这样就明确地定义或确定了一个联邦学习算法。

但是,实现这种同步更新在许多应用中是不切实际的。例如,执行这些更新的设备可能非常不同(有些是高速处理器,有些是低速处理器)。此外,要实现这种同步更新,你需要这些当前的局部模型参数可用。节点 i 原则上需要知道其所有邻居(或在极端情况下所有其他节点)的局部模型参数。因此,每次迭代后,你都需要用你的新模型参数更新所有邻居。如果存在带宽限制,或者在某些时候没有连接(如蓝牙或无线链路中断),这可能无法实现。你可能只有过时的信息,只有邻居在之前第10次迭代时的局部模型参数,而没有当前的,因为已经有10次迭代没有连接了。

因此,我们可能希望使用一种异步算法,它工作方式如下:它看起来与同步算法非常相似,也使用这些不动点,但方式略有不同。首先,它使用的不动点迭代不是使用当前的局部模型参数,而是使用来自过去其他节点的局部模型参数。具体来说,存在一个延迟。这个延迟由当前迭代计数器 k 减去这里的变量 s 给出。这个 s^{k}_{i,i'} 是第 k 个时间步从节点 i' 到节点 i 的延迟。这个延迟可能随 kii' 变化,这实际上提供了很大的自由度。这是一个非常通用、广泛适用的异步模型,可以涵盖许多应用或计算设置。

在异步算法中,我们允许使用过时的信息。节点 i 的每次更新可以使用其他节点在10次或100次迭代前的模型参数。这个延迟可以非常大。事实证明,对于某些算法,可以容忍无限大的延迟,算法仍然有效。

与同步算法的第二个区别是,这里我们只在某些时间步对某些节点进行更新。换句话说,节点 i 仅在某些时间步(用 T^i 表示)使用这个更新算子,这些时间步表示节点活跃(唤醒或有电量)的时间。否则,我们假设它只是保持其已有的局部模型参数不变,只是存储模型参数直到它能够再次进行更新。

设计异步算法现在变得相当简单。你首先需要找出这些不动点算子是什么,它们看起来像什么。对于联邦梯度下降,它们看起来像这样。然后你只需插入这些过时的信息,使用这些过时的局部模型参数进行更新,并且只在这些活跃时间步进行更新。

同样,我准备了一个演示,你可以查看,并强烈鼓励你运行这个异步梯度下降的演示。

在准备这些演示时,我深刻意识到实现异步算法是多么美好或容易,因为异步本质上意味着你不需要确保同步操作。实现异步算法比实现同步算法要容易得多、好得多。但当然,拥有异步算法很好。

关于内存要求:例如,每当节点 i 收到来自另一个节点的局部模型参数时,它需要将其存储在某个地方,直到它从该节点收到新的更新。这是一个要求,节点必须有一些内存,而且这个内存必须是非易失性的,以便在节点不活跃时也能持久保存。

正如我所说,与同步算法相比,实现异步算法是小菜一碟,因为你需要为同步开发大量基础设施(如同步服务器)。如果你不需要这样做,实现这些分布式算法就变得容易得多。然而,你可能没有相同的性能或统计性质。

根据它们能容忍的程度,我们有不同的异步算法概念。

  • 完全异步算法:如果它最终仍能收敛到广义全变差最小化的解,我们就说它“有效”。那么,一个完全异步算法在以下条件下有效:

    1. 每个节点的活跃集是无限的。这意味着没有节点在某个时间点完全停止。如果我们等待足够长的时间,每个节点都会在某个时间点再次活跃。它永远不会“死亡”。
    2. 这些延迟的更新时间也是无界的。这意味着在某个时间点,每个节点都会再次向它的每个邻居发送一次更新。没有哪个时间步之后,一个节点不再向它的某个邻居发送任何更新。
      这两个要求基本上是说算法持续工作,没有节点完全死亡,没有连接完全中断。然而,连接可能非常差,导致大量延迟。延迟的大小不一定需要有界,但节点必须永远不会停止偶尔向其邻居发送更新。
  • 部分异步算法:这是介于完全异步和同步之间的一种概念。如果每个节点至少每 B 个时间步唤醒一次,我们就说一个算法是部分异步的。这个 B 是异步性的度量,B 越大,算法异步性越强。极端情况下,如果 B=1,则意味着同步。部分异步算法的要求是:每个工作器在每 B 个时间步或事件中至少唤醒一次,并且从每个节点到其他每个节点的延迟不能大于 B(即有界延迟)。

我们有一个异步算法的层次结构:完全异步是一个大类,包含各种算法;然后是具有不同异步性度量 B 的部分异步算法。


异步算法的收敛性 📈

现在我们已经描述了完全异步和部分异步算法,这很好,但它们何时有效?一个部分异步算法何时收敛到广义全变差最小化的解?

这取决于两件事:

  1. 不动点算子:这些算子由你使用的算法以及损失函数或边(即联邦学习网络)定义。联邦学习网络包括损失函数和边作为设计选择,所有这些设计选择都会影响这些不动点算子的样子。例如,联邦梯度下降的不动点算子涉及算法参数(步长 η)、局部损失函数以及通过邻域和边权重体现的联邦学习网络结构。所有这些组件决定了不动点迭代的样子,决定了算子的性质。
  2. 异步计算:算法异步的程度,由更新时间 T^i 和延迟来表征。

为了节省时间(时间快到了),我们快速过一下。事实证明,为异步算法提供充分条件的一种方法是使用伪压缩的概念。如果这些不动点算子是伪压缩的,意味着当你将这些算子应用于给定的局部模型参数选择时,算子会将它们更多地推向广义全变差最小化的解,这是非常自然的。最终,这些联邦学习算法重复应用不动点算子,你当然希望不动点算子的结果越来越接近广义全变差最小化的解。

事实证明,如果这些不动点算子是伪压缩的,那么一旦你证明了对于局部损失函数、边和联邦学习算法的任意选择,所产生的不动点算子 F 是伪压缩的,你就有了一个完全异步算法。有一篇来自斯德哥尔摩 KTH 作者的精彩近期论文表明,只要这是伪压缩的,它就是完全异步的。

你还可以根据异步性度量计算出明确的收敛速率。你可以说明这个联邦学习算法的局部模型参数以多快的速度收敛到广义全变差最小化的解,这个收敛速率很自然地包含了异步性度量 BB 越大,这个指数就越小,收敛到距离零(即与广义全变差最小化解的距离)的速度就越慢。毕竟,我们的原则是学习最小化广义全变差的模型参数,我们求解广义全变差最小化,因此我们希望从这个算法中得到的迭代值越来越接近广义全变差最小化的解。

如何确保伪压缩性:这是困难的工作。你需要针对你特定的局部损失函数选择、联邦学习网络中的边集等,分析这个不动点算子。所有这些属性或设计选择都会影响所产生的不动点算子是否是伪压缩的,以及压缩参数 κ 是多少(κ 应该非常小,越小越好)。


总结 📝

本节课中,我们一起学习了几种广为人知或流行的联邦学习算法。事实证明,它们都属于同一类型或形式,即都是不动点迭代。联邦梯度下降、联邦平均、FedProx 都可以写成这样的不动点迭代。

这个算子 F 的不动点是广义全变差最小化的一个解。我们希望通过重复应用 F 来计算这个解。这个不动点迭代的收敛性取决于算子 F 的压缩性质,特别是它是否是伪压缩的。如果它是伪压缩的,事实证明它对异步实现效应具有相当的容忍度,特别是可以处理客户端之间任意大的延迟。它基本上是一个完全异步算法,只要求每个客户端持续工作一段时间(没有客户端在某个时间后完全退出联邦学习算法),并且联邦学习网络中两个邻居之间的连接不会在某个时间后完全中断。在足够长的时间后,节点总会再次唤醒并进行更新,节点也总能够再次向它的每个邻居发送更新。


下节预告 🔮

下一讲的悬念是,我们将研究联邦学习的一些主要类型,包括横向和纵向联邦学习。我们将看到这些如何再次成为广义全变差最小化的特例。我希望你们会越来越体会到广义全变差最小化对于各种联邦学习模型、设置和算法的多功能性和灵活性。

另外,正如我所宣布的,下周一的一半讲座时间将用于一位来自加拿大的研究人员的客座演讲,内容是关于区块链技术与联邦学习之间的相互作用。

感谢大家的关注!

031:联邦学习练习课

在本节课中,我们将学习联邦学习的基本概念,特别是如何实现联邦松弛算法,并将其应用于非参数化模型,例如决策树。我们将使用与作业3相同的数据集和网络结构,但会引入新的方法来处理更复杂的模型。


数据集与网络构建

我们使用与作业3相同的 F_data225 数据集。该数据集包含多个气象站的信息,包括站名、坐标和温度数据。

我们使用相同的方法构建联邦学习网络。网络中的每个节点代表一个气象站,节点之间的连接代表它们之间的地理或数据相关性。


联邦松弛算法

在作业3中,我们学习了线性模型。但有时线性模型的表达能力有限。因此,我们引入联邦松弛算法来增强模型的灵活性。

联邦松弛算法的核心思想是:对于每个节点 i,我们假设其所有邻居节点 j 的模型权重 W_j 已经是最优的,并且是固定的。

基于这个假设,我们可以使用以下公式来更新节点 i 自身的权重 W_i

W_i^{new} = argmin_{W_i} [ L_i(W_i) + α * Σ_{j∈N(i)} A_{ij} * ||W_i - W_j||^2 ]

其中:

  • L_i(W_i) 是节点 i 本地数据上的损失函数。
  • N(i) 是节点 i 的邻居集合。
  • A_{ij} 是邻接矩阵,表示节点 ij 的连接强度。
  • α 是一个超参数,用于控制邻居模型一致性的重要性。

由于我们固定了邻居的权重 W_j,这个优化问题相对容易求解。这种方法的思想类似于雅可比迭代法:在每次迭代中,我们固定其他参数,只优化一个参数。


非参数化模型与联邦学习

上一节我们介绍了联邦松弛算法,本节中我们来看看如何处理非参数化模型。

我们回顾图总变差最小化的思想。联邦学习的核心思想是:如果两个节点(或个体)紧密相关,那么它们的模型也应该相似。

在GTV最小化中,我们通过计算模型参数(权重)之间的欧几里得距离来衡量模型的相似性。但是,如果模型没有参数呢?例如决策树模型,我们通常无法直接访问其“权重”参数。

如何比较非参数化模型?

在计算机科学中,一个函数可以看作是一个从输入到输出的映射。如果我们能获取一个函数在所有可能输入上的输出,那么我们就能定义这个函数。

因此,如果两个函数相似,那么给定相同的输入,它们应该产生相似的输出。基于这个想法,我们引入模型不可知的联邦松弛算法

我们重新定义模型 h_ih_j 之间的差异 D(h_i, h_j)。我们将其重构为一个损失函数:

D(h_i, h_j) ≈ Σ_{x in X_public} l( h_i(x), h_j(x) )

其中:

  • X_public 是一个公开的数据集(不包含任何节点的私有信息)。
  • l(·,·) 是一个损失函数,例如均方误差。
  • h_i(x) 是节点 i 的模型对输入 x 的预测。

构建增强数据集

由于我们无法直接从决策树等模型中获取参数,我们需要一种方法来应用上述思想。

以下是构建和使用增强数据集的步骤:

  1. 生成公共数据集:创建一个不泄露任何节点隐私的公共数据集 X_public。例如,可以从整个数据集的最高温度和最低温度范围中均匀采样一些数据点。
  2. 获取邻居预测:对于节点 i,请求其每个邻居节点 j 使用它们自己的本地模型对 X_public 进行预测,得到预测标签集合 {y_j = h_j(X_public)}
  3. 构建增强数据:对于节点 i 的每个邻居 j,将 (X_public, y_j) 视为一组新的数据。
  4. 合并数据集:将节点 i 原始的本地数据集 (X_i, y_i) 与所有新构建的 (X_public, y_j) 数据合并,形成一个增强数据集。
  5. 训练本地模型:使用这个增强数据集重新训练节点 i 的本地模型。这样,新模型在拟合自己原始数据的同时,也会倾向于与邻居模型在公共数据 X_public 上产生相似的输出。

通过这种方式,我们无需知道模型的具体参数,就能利用邻居的信息来约束本地模型,实现联邦学习的效果。


任务总结与实施步骤

本节课中我们一起学习了如何将联邦松弛算法扩展到非参数化模型。

以下是本次练习任务的具体步骤:

  1. 初始化模型:为联邦网络中的每个节点初始化一个本地模型(例如决策树)。
  2. 构建公共数据集:根据全局数据特征(如温度范围)生成一个公共数据集 X_public
  3. 执行联邦学习迭代
    • 对于每一轮迭代,遍历每个节点 i
    • 节点 i 从其所有邻居节点 j 处获取它们对 X_public 的预测结果 y_j
    • 节点 i(X_public, y_j) 作为增强数据,与自己的本地数据合并。
    • 节点 i 使用这个增强后的数据集重新训练自己的本地模型。
  4. 评估:重复步骤3若干轮,然后评估最终模型在各自测试集上的性能。

关键点回顾

  • 联邦松弛:通过假设邻居模型最优且固定,简化单个节点的优化问题。
  • 模型不可知学习:当模型没有明确参数或参数不可比时,通过比较模型在公共数据上的输出来衡量其差异。
  • 隐私保护:使用公共数据集 X_public 作为中介来交换信息,避免了直接共享私有数据。
  • 增强训练:将邻居的预测作为监督信号,通过数据增强的方式将联邦约束融入本地训练过程。

这种方法使得联邦学习能够应用于更广泛的机器学习模型,包括决策树、支持向量机甚至结构不同的神经网络。

032:异步联邦学习算法

概述

在本节课中,我们将要学习联邦学习中的异步算法。我们将了解到,之前讨论的联邦梯度下降、联邦平均等算法都属于同步固定点迭代算法。然而,在实际应用中,由于设备性能差异、网络连接不稳定等因素,同步更新往往难以实现。因此,本节将重点介绍异步算法的概念、模型及其收敛性条件。


同步算法的固定点迭代表示

上一节我们介绍了多种联邦学习算法。本节中我们来看看这些算法的一个共同数学框架。

之前讨论的所有算法,包括联邦梯度下降、联邦平均和联邦近端算法,本质上都属于同一类型:它们都基于固定点迭代。这意味着,对于每个节点 i,其更新过程可以用一个算子 F^i 来描述。该算子作用于所有节点当前使用的本地模型参数上。

具体而言,每个节点 i 的更新可以表示为:
w_i^{k+1} = F^i(w_1^k, w_2^k, ..., w_n^k)

以下是联邦梯度下降算子的一个示例:
F^i(w) = w_i - η * [∇f_i(w_i) + Σ_{j∈N(i)} a_{ij} (w_i - w_j)]

如果使用上述算子,得到的算法就是联邦梯度下降。如果替换为其他算子,则可以得到联邦平均等算法。所有这些算法都基于同步固定点迭代,因为它们在每个节点上同时(或同步地)计算这个固定点迭代。

因此,一个联邦学习算法可以通过其固定点算子来定义。与其编写伪代码,不如直接说明所使用的固定点算子是什么。


同步算法的挑战与异步算法的引入

然而,实现这种同步更新在许多应用中是不切实际的。原因如下:

以下是导致同步更新困难的主要因素:

  1. 设备异构性:参与设备的计算能力差异巨大(例如,高性能笔记本电脑与低速树莓派)。
  2. 通信约束:节点需要知道其所有邻居(甚至所有其他节点)的当前本地模型参数。每次迭代后都需要向邻居广播更新,这在带宽受限或连接不稳定的情况下难以实现。
  3. 信息过时:由于网络中断,节点可能只能获得邻居在很久以前(例如10次迭代前)的模型参数,而非最新参数。

因此,我们需要引入异步算法。异步算法的工作方式与同步算法类似,也使用固定点迭代,但有两个关键区别。


异步算法模型

异步算法的更新公式如下:
w_i^{k+1} = { F^i(..., w_j^{k - d_{ji}^k}, ...), 如果 k ∈ T^i; w_i^k, 如果 k ∉ T^i }

这个模型包含两个核心要素:

  1. 使用过时信息:节点 i 在更新时,使用的不是邻居节点 j 的当前参数 w_j^k,而是其过去某个时刻的参数 w_j^{k - d_{ji}^k}。这里的 d_{ji}^k 表示从节点 j 到节点 i 在时间步 k延迟。这个延迟可以很大,并且可能随时间、节点对而变化。
  2. 节点激活时间:节点 i 只在特定的时间步集合 T^i 中才执行更新操作。T^i 表示节点“激活”或“唤醒”的时刻(例如,当设备有电、恢复连接时)。在非激活时间步,节点只是保持其本地模型参数不变。

这个模型非常通用,能够涵盖许多实际的计算场景。设计异步算法变得相对直接:首先确定同步版本下的固定点算子 F^i(例如联邦梯度下降的算子),然后在更新时直接代入过时的邻居参数,并且仅在该节点激活时才执行此更新。

从实现角度看,异步算法通常比同步算法更简单,因为它消除了同步要求。你不需要构建复杂的基础设施(如同步服务器)来协调所有节点同时更新。


异步算法的类型与要求

并非所有异步设置都能保证算法收敛。我们根据算法对延迟和激活的容忍度,定义了两类异步算法。

以下是两种主要的异步算法类型及其要求:

  • 完全异步算法

    • 要求1(无限激活):每个节点的激活时间集 T^i 是无限的。即,没有节点会永久停止工作。只要算法运行得足够久,每个节点最终都会再次被激活。
    • 要求2(无限更新):任意两个邻居节点之间的信息延迟 d_{ji}^k 的上限可以是无界的(即延迟可以任意大),但必须保证,对于任意一对邻居,发送方最终总能在某个时刻成功将更新发送给接收方。没有连接会永久失效。
    • 核心:算法在即使存在任意大但有限的延迟,且节点仅保证最终会激活的条件下,仍能收敛到全局目标(GTV最小化)的解。
  • 部分异步算法

    • 要求1(有界激活间隔):存在一个常数 B,使得每个节点在任意长度为 B 的时间窗口内至少激活一次。B 被称为异步度量B=1 对应同步情况,B 越大表示异步程度越高。
    • 要求2(有界延迟):所有延迟 d_{ji}^k 都有一个共同的上界 B。即,信息不会过于陈旧。
    • 核心:对延迟和激活频率提出了更严格、有界的限制,通常能带来更可预测的收敛性能。

完全异步算法构成了一个更大的算法家族,而部分异步算法是其中的一个子集,其异步度量 B 可以不同。


异步算法的收敛性

那么,异步算法在什么条件下能够收敛呢?这主要取决于两个方面。

收敛性由以下两个因素共同决定:

  1. 固定点算子的性质:这由你选择的联邦学习算法(如梯度下降、平均)、本地损失函数以及联邦学习网络的图结构(边和权重)共同决定。所有这些设计选择影响了算子 F 的数学特性。
  2. 异步计算模式:这由节点的激活时间 T^i 和信息延迟 d_{ji}^k 来描述,即算法的“异步程度”。

一个关键且强大的分析工具是伪压缩映射的概念。如果组合所有节点算子的整体固定点算子 F 是一个伪压缩映射,那么意味着每次应用该算子都会将模型参数向GTV最小化问题的解推近一步。这是一个非常自然的要求。

研究表明,只要固定点算子 F 是伪压缩映射,那么对应的联邦学习算法就是完全异步的。也就是说,即使在允许任意大延迟和仅要求节点最终激活的条件下,算法也能保证收敛。

此外,对于部分异步算法,我们可以推导出明确的收敛速率。收敛速度与异步度量 B 密切相关。通常,B 越大(异步程度越高),收敛速度越慢。收敛速率公式可以表示为与 B 相关的指数衰减形式。

因此,确保算法收敛的“硬功夫”在于:针对你特定的损失函数、网络结构和算法选择,分析并证明其导出的固定点算子 F 是一个伪压缩映射,并尽可能获得一个较小的压缩系数。


总结与下节预告

本节课中我们一起学习了联邦学习异步算法的核心内容。

我们了解到,联邦梯度下降、联邦平均等流行算法都可以统一为同步固定点迭代的形式。这种迭代的固定点就是GTV最小化问题的解。

然而,同步更新在实际中面临挑战。因此我们引入了异步算法模型,它允许节点使用过时的邻居信息,并在自身激活时才进行更新。我们区分了完全异步部分异步算法,前者对延迟和激活的要求最弱,后者则有更严格的有界要求。

算法的收敛性关键在于其固定点算子是否为伪压缩映射。如果是,则算法能容忍极大的异步性(完全异步),并且可以分析其收敛速率。

最后,留下一个悬念:在下一讲中,我们将探讨联邦学习的几种主要类型,包括横向联邦学习纵向联邦学习。大家将会看到,这些不同类型也不过是GTV最小化框架下的特例。这将进一步展现GTV最小化框架在描述各种联邦学习模型、设置和算法时的通用性与灵活性

此外,下节课的一部分时间将用于一场关于区块链技术与联邦学习交互的嘉宾讲座。


感谢大家的关注。

033:联邦平均算法 (FedAvg) 🧠

在本节课中,我们将要学习联邦学习领域最广为人知的算法——联邦平均算法。我们将了解其核心思想、数学原理、具体执行步骤,并探讨其在实际应用中的一些考虑。

概述

联邦平均算法是联邦学习中最具代表性的方法。它的核心目标是在不汇集各节点本地数据的前提下,协同训练一个统一的全局模型。本节将揭示联邦平均算法本质上是投影梯度下降的一种变体。

联邦平均:投影梯度下降的视角

上一节我们介绍了联邦学习的基本框架,本节中我们来看看最经典的联邦平均算法是如何工作的。

我们希望每个节点学习相同的模型参数,得到一个可供所有节点使用的统一模型。但我们希望利用分布式本地数据集中的信息来学习这个模型,而不希望将所有本地数据集集中起来训练这个单一模型。

实现此目标的一种方法是使用带有硬约束的全局总变差最小化。在GTVV最小化中,我们只惩罚两个相连节点之间的差异。但在这里,我们要求非常严格:我们要求任意两个节点的本地模型参数必须完全相同。

可以证明,在所有本地数据集上联合训练一个单一模型,等价于在这些约束条件下最小化本地损失函数之和。对于任意两个节点的可能组合,我们都要求其本地模型参数相同。这意味着所有本地模型参数必须一致。

对于这类带约束的优化问题,梯度下降法有一个很好的变体,称为投影梯度下降。它的基本步骤是:首先为这个优化问题计算一个梯度步长,然后将结果投影到允许的本地模型参数集合中。允许的本地模型参数集合就是那些在所有节点上都一致的参数集合。这些约束定义了所有可能的本地模型参数集合的一个子集,具体来说,它定义了恒定本地模型参数的子集。

我们可以通过计算平均值轻松地投影到这个子集。这个计算平均值的步骤,就是投影梯度下降中的投影步骤。

投影梯度下降的流程包括:独立地对这些本地损失函数进行梯度下降步骤以最小化损失,然后将更新后的本地模型参数投影到这个约束集合上。

联邦平均算法步骤

以下是联邦平均算法的具体执行流程:

  1. 初始化:首先需要一个服务器来协调整个训练算法。服务器维护全局模型参数,并将其初始化为0。
  2. 广播:服务器将当前的全局模型参数广播给所有客户端或节点。
  3. 本地计算:每个节点独立地在其本地数据上执行一个梯度下降步骤。这类似于每个节点仅使用自己的本地数据训练模型。
  4. 聚合与平均:服务器收集所有节点更新后的模型参数,并计算其平均值。这个“平均”步骤正是投影梯度下降中的投影操作。
  5. 更新与迭代:服务器用计算出的平均值更新全局模型参数,然后重复步骤2-4,开始新一轮迭代。

因此,联邦平均算法是投影梯度下降的一个实例

关键问题讨论

在算法实施中,有几个关键问题需要考虑:

  • 模型参数的定义:公式中的 W_i 指的是节点 i 的本地模型参数,而不是权重。这些参数可以是一个向量,例如,如果我们有10个模型参数,它就是 R^10 空间中的一个向量。
  • 掉队者的处理:“掉队者”指那些无法跟上算法节奏的客户端或节点。例如,某个节点在迭代中因电量耗尽而无法完成梯度计算或传回参数。如果服务器严格要求所有节点都必须返回参数,那么整个系统就会崩溃。一种可行的处理方式是,只要求一定比例(例如10%)的节点返回参数,一旦达到这个比例就进行更新。但这可能会破坏算法的收敛性。系统可能仍在运行,部分节点仍在更新参数,但参数序列可能不再收敛到优化问题的最优解。

实践与演示

你可以在我提供的GitHub仓库中找到相关的演示代码。该仓库包含一个解释各个部分的README文件、一个启动脚本、一个服务器脚本以及多个工作节点脚本。执行这些工作节点脚本可以演示联邦平均算法的运行。强烈建议你实际操作并探索这些脚本。

算法变体与总结

本节课中我们一起学习了联邦平均算法。其核心结论是:它是一种投影梯度下降的形式。

在实际的论文表述中,提出“联邦平均”这一术语的作者们使用了一些变体。例如,他们使用梯度的随机近似来代替精确梯度。此外,他们并非只执行单个梯度步长,而是使用了多个梯度步长,因为计算能力更强的节点可能可以取得更大的进展。

总结:联邦平均算法通过协调分布式节点进行本地计算,并在中央服务器进行参数平均,巧妙地实现了在数据隐私保护下的协同模型训练,其数学基础源于带约束优化的投影梯度下降方法。

034:联邦梯度下降算法详解 🧠

在本节课中,我们将学习联邦学习中的核心优化算法——联邦梯度下降。我们将从基础的梯度下降步骤开始,逐步剖析其组成部分、工作原理、实现挑战以及一些常见的变体。

概述

联邦梯度下降旨在解决一个分布式优化问题,即在保护数据隐私的前提下,让网络中的多个节点协同训练一个机器学习模型。其核心思想是结合本地数据拟合与邻居节点间的模型参数一致性。

梯度下降步骤解析

上一节我们介绍了联邦学习的基本优化目标。本节中,我们来看看如何通过梯度下降来求解该问题。

对于一个平滑可微的损失函数,我们可以计算其梯度。整个目标函数的梯度可以通过基础微积分得到,表达式如下:

∇F_i(w_i) = ∇L_i(w_i) + α * Σ_{j∈N_i} A_{ij} (w_i - w_j)

一旦计算出梯度,就可以用它来更新当前节点的本地模型参数 w_i。整个梯度下降步骤由网络中所有节点的并行更新组成。

这个更新步骤可以同步或同时应用于网络中的所有节点。

梯度项的双重作用

梯度步骤可以基于两项进行解释:

  1. 本地损失函数梯度 ∇L_i(w_i):该项试图将本地模型参数 w_i 推向其本地损失函数的最小值。这是任何机器学习的基本思想:选择模型参数以最小化损失。

  2. 耦合项 α * Σ A_{ij} (w_i - w_j):仅最小化本地损失函数可能因样本量过小而信息不足,导致过拟合。此项通过引入邻居信息来提供更多信息。它确保学习到的模型参数不会与邻居的模型参数有太大差异,从而驱动网络连接节点间本地模型参数的一致性。

从某种意义上说,此项相当于以隐私友好的方式汇集邻居的本地数据集。节点 i 不是要求所有邻居共享原始数据,而是通过这个仅涉及本地模型参数的耦合项来共享信息。虽然模型参数不可避免地会携带一些本地数据集的信息,但通常可以选择不泄露特定敏感属性的模型。

参数 α 与边权重 A_{ij} 的乘积控制着这两种效应之间的平衡。如果乘积很小,则邻居间的协调或合作很少,算法主要在各个节点上进行独立的模型训练。α 越大,邻居节点间的训练耦合就越强。当 α 非常大时,第二项占主导地位,确保所有节点最终获得相同或几乎相同的模型参数。

同步更新的挑战与消息传递

虽然用纸笔或幻灯片很容易写下梯度步骤,但在实际中需要以同步方式执行。这意味着网络中的所有节点(可能多达数百万或数十亿)必须在任何节点进行下一步梯度更新之前,完成当前的更新步骤。在物联网等连接质量差、可靠性低的网络中,这可能根本无法实现。

此外,节点 i 的梯度步骤需要其邻居的信息(用于第二项)。因此,在执行梯度步骤之前,节点必须与邻居交换当前的模型参数。

以下是消息传递的实现方式:

  1. 每个节点将其当前的本地模型参数广播给所有邻居。
  2. 交换信息后,每个节点可以(同时)执行梯度更新步骤。
  3. 然后下一次迭代开始:节点与邻居共享新的模型参数,再次执行梯度步骤,依此类推。

网络结构对整体效果的影响

梯度更新虽然只涉及节点的局部网络结构(即邻居),但最终在每个节点上产生的结果也取决于网络的整体结构,特别是其聚类结构。例如,梯度下降可能使紧密连接(通过许多高权重边)的节点群收敛到大致相同的模型参数,而不同集群之间可能因连接稀疏而保持差异。整体效果无法一概而论,它高度依赖于实际的网络拓扑。

联邦梯度下降算法构建

现在我们已经讨论了梯度步骤,让我们看看基于此梯度步骤或其变体/扩展的几个著名联邦学习算法示例。

第一个是联邦梯度下降,它本质上是利用同步梯度步骤展开的一个完整算法。

一个算法通常需要精确描述初始化方式。例如,我们可以用零向量初始化所有模型参数,但这可能不是最佳选择。也可以随机初始化,或者先在本地数据集上独立训练一个模型作为初始值,但这可能导致过拟合。需要指出,使用零初始化并没有严格的数学理由,它只是众多可能选择之一。

然后算法开始重复这些梯度步骤。然而,这种描述有些笼统,因为它没有说明停止准则。一个只启动但永不停止的算法显然不实用。

可能的停止准则

那么,如何为梯度方法设计停止准则呢?以下是一些可能的选择:

  • 跟踪进度:在每次梯度步骤后,观察本地损失函数减少了多少。可以监控本地损失函数。
  • 使用验证集:如果本地数据足够大,可以留出一部分作为验证集(不用于构建本地损失函数),当验证损失不再下降时停止。这可能是最广泛使用的实用方法。
  • 参数变化微小:如果模型参数本身不再发生太大变化,那么继续迭代似乎没有意义。
  • 理论分析:通过数学分析,确定达到目标函数最优值一定范围内所需的最小迭代次数。但这需要假设本地损失函数具有某些凸性等性质。

算法实现的复杂性

再次强调,实现同步梯度步骤 do a gradient step 的描述过于简化,几乎掩盖了必须在所有节点同时执行此步骤的复杂性。

为了同步这些梯度步骤,我们需要一个时钟。这个时钟可以通过服务器向所有节点发送同步信号来实现。每个节点只有在收到同步信号后才开始执行梯度步骤,完成后将更新后的本地模型参数发送回服务器。只有在服务器收到所有节点的更新后,时钟才“滴答”一声,并发出新的同步信号。

然而,这种实现方式面临许多挑战:

  1. 节点管理:服务器需要知道网络中有多少节点,每个节点需要向服务器注册。
  2. 信号丢失:如果任何同步信号或模型参数更新在传输中失败,整个算法就会崩溃。例如,如果服务器发出的同步信号未能到达某个节点,该节点将永远不会继续执行梯度步骤,服务器也将无限期等待,导致死锁。

将这些数学上看似简单的更新规则转化为实用的算法,需要考虑所有这些细节。如何在真实硬件和软件中实现它,远远超出了本课程的范围。

联邦随机梯度下降

最后,我们来看一个变体:联邦随机梯度下降。它只是联邦梯度下降的一个小变体,区别在于用梯度的估计值代替了精确梯度。

计算精确梯度可能成本很高。例如,在线性回归中需要计算涉及大量数据点的求和,即使数据点不多,计算本身也可能很耗时,或者访问数据(如从传感器读取)具有挑战性。

因此,使用梯度的近似值是有益的。一种常见的近似方法是使用训练集中随机选择的数据点子集(即一个批次)来计算梯度。只需将梯度计算中的求和替换为对这个随机批次求和的近似值,就得到了联邦随机梯度下降。这并没有引入太多额外的挑战。

总结

本节课我们一起学习了联邦梯度下降算法。我们从其数学基础——梯度下降步骤开始,深入分析了由本地损失梯度和邻居耦合项构成的双重优化目标。我们探讨了算法同步执行的挑战、消息传递的必要性,以及网络结构对最终模型的影响。接着,我们讨论了如何构建一个完整的算法,包括初始化和停止准则的选择,并指出了将简洁的数学公式转化为鲁棒实用系统所面临的工程复杂性。最后,我们简要介绍了通过使用随机批次来近似梯度的联邦随机梯度下降变体。理解这些基本原理是设计和实现有效联邦学习系统的关键。

035:作为同步定点迭代的联邦学习

在本节课中,我们将学习如何将联邦学习算法统一理解为一种同步定点迭代过程。我们将看到,之前讨论的联邦梯度下降、联邦平均等算法,都可以用这种统一的数学框架来描述。

核心概念:同步定点迭代

上一节我们介绍了多种联邦学习算法。本节中我们来看看它们背后的共同数学原理。

到目前为止讨论的算法,例如联邦梯度下降、联邦平均和联邦乘积,都属于同一类型。它们都基于定点迭代。这意味着,可以为这些算法找到一个算子,将算法表示为一种迭代过程。在每次迭代中,应用某个算子,这个算子在不同节点上可以不同。

该算子作用于节点当前使用的所有本地模型参数。这里的参数是所有节点当前的本地模型参数。每个节点 i 的更新,在数学上都可以用一个算子 F^(i) 来表示。

以下是定点迭代的通用形式:

w_i^{k+1} = F^(i)(w_1^k, w_2^k, ..., w_n^k)

其中,w_i^k 表示节点 i 在第 k 轮迭代时的模型参数,F^(i) 是定义节点 i 更新规则的算子。

示例:联邦梯度下降的算子

理解这个概念的一个很好的练习是推导出联邦梯度下降、联邦平均等算法的具体算子形式。

这里我们以梯度下降为例。对于梯度下降,算子形式如下:

F^(i)(w) = w_i - η * [∇f_i(w_i) + (w_i - w̄)]

它使用了本地损失函数的梯度 ∇f_i(w_i) 以及一个耦合项 (w_i - w̄),其中 是全局平均参数。这是一个显式表达式,是算子 F^(i) 的一种可能选择。

如果使用这个选择,得到的算法就是联邦梯度下降。如果将这个选择替换为其他形式,就会得到联邦平均

因此,到目前为止讨论的所有算法都基于这种框架。我称之为同步定点迭代,因为所有节点同时(或同步地)计算这个定点迭代。

总结

本节课中我们一起学习了如何用同步定点迭代的数学框架来统一理解联邦学习算法。我们了解到,联邦梯度下降、联邦平均等算法都可以表示为对一个特定算子 F^(i) 的迭代应用。这个统一的视角有助于我们分析和比较不同联邦学习算法的性质。

036:联邦学习的主要类型 🧩

在本节课中,我们将学习联邦学习的几种主要类型。我们将看到,这些不同类型都可以通过一个统一的优化框架——广义全变分最小化——来理解和构建。课程内容将涵盖单模型联邦学习、横向联邦学习、纵向联邦学习、聚类联邦学习以及个性化联邦学习。

课程信息与项目安排 📅

在开始正式课程之前,先提供一些关于本课程和项目的重要信息。

我们将安排两次答疑辅导课,时间定于4月14日和4月21日下午4点15分开始,形式与本次讲座类似,均在Zoom上进行。在这些辅导课上,你可以随时加入,询问关于课程项目的任何问题。

本课程的基础课程版本包含一个强制性的项目部分。项目的大部分信息已发布在课程网站上。最重要的信息是提交截止日期:4月30日。整个4月都可以用来完成项目报告。

项目报告模板已发布,其中包含了详细的撰写说明。报告必须遵循该模板的结构,不得更改章节标题和章节选择。此外,报告字体大小不得小于9磅,总页数最多为5页,其中第5页仅能包含参考文献,正文内容必须限制在4页以内。这个格式要求参考了顶级学术会议(如ICLR)的投稿规范。

我们强烈建议使用LaTeX来撰写报告,以练习排版数学文本和技术报告。模板文件夹中提供了.tex文件和一些辅助样式文件,将它们放在同一目录下即可编译。如果遇到问题,请通过邮件或课程讨论论坛联系课程团队。

项目评审表也已发布。你可以提前查看评审时将被问及的问题,例如“报告是否清晰定义了联邦学习网络的节点和加权边?”等。根据描述的清晰程度,每个问题可获得2分、1分或0分,总计约12个问题。

我们计划使用两个提交系统。对于阿尔托大学的注册学生,可以在MyCourses平台上提交项目和进行同行评审。同时,我们也为所有参与者(包括非阿尔托学生)提供了通过EasyChair会议管理系统提交和评审报告的选项。这将模拟完整的学术会议论文提交与评审流程。EasyChair的提交入口将于下周开放。

关于项目,目前有任何问题吗?

关于辅导课日期,原计划定于4月2日和7日,但后来得知那周是考试周,因此已调整至4月14日和21日。对于由此造成的困惑,我们表示歉意。请放心,课程团队(包括我和助教)会通过Slack或邮件提供充分的支持,也乐意安排一对一的Zoom会议解答疑问。

如果没有其他问题,我们现在开始今天的正式主题:联邦学习的类型。

联邦学习网络与GTV最小化框架 🔗

回忆一下,在本课程中,我们将联邦学习建模为一个在联邦学习网络上定义的优化问题。

联邦学习网络本身是一个数学模型,它近似于现实世界的联邦学习系统。这个模型由节点组成。节点以抽象的方式代表设备,例如个人、智能手机、服务器等。边则代表节点之间的连接,其设计选择会影响联邦学习的类型。

每个设备都能生成数据,并具备训练模型的计算能力。对于参数化模型,我们通过求解以下形式的广义全变分最小化问题来进行训练:

minimize Σ_i f_i(w_i) + α Σ_{(i,j)∈E} ||w_i - w_j||^2

其中,f_i(w_i) 是节点 i 的本地损失函数,α 是正则化参数,求和项 Σ_{(i,j)∈E} ||w_i - w_j||^2 被称为广义全变分。如果选择 α = 0,那么GTV最小化问题就分解为各个节点独立的训练问题。当 α > 0 时,这些学习问题就通过边耦合在了一起。

今天,我们将看到如何通过对本地损失函数、本地模型、边以及用于计算损失的本地数据集做出不同的设计选择,从而衍生出联邦学习的不同类型。这些类型包括:单模型联邦学习、横向联邦学习、纵向联邦学习、聚类联邦学习和个性化联邦学习。

单模型联邦学习 🌐

我们从单模型联邦学习开始,这可以说是联邦学习领域的起点。

在这种类型中,我们的目标是训练一个单一的全局模型。例如,训练一个大型语言模型。训练模型需要数据,而数据通常分布在许多不同的客户端上。在单模型联邦学习中,我们希望通过使用本地数据集来迭代改进全局模型参数 w^kk 代表迭代步骤)。

一个基本的方法是:服务器在时间 k 将当前全局模型参数的猜测值广播给所有客户端。每个客户端利用自己的一小部分本地数据计算一个本地更新。然后,这些更新后的本地模型参数被发送回服务器,服务器以某种方式(例如计算平均值或更复杂的聚合方法如裁剪均值)进行聚合,从而得到新的全局模型参数估计。

一个关键问题是:客户端如何利用本地数据来改进模型参数?一个广泛使用的更新技术是梯度下降随机梯度下降。这是一种将数据集信息转化为模型参数更新的基本方法。

这种服务器-客户端的实现方式有一个明显的缺点:服务器是单点故障。如果服务器宕机,整个联邦学习系统就会失效。因此,采用更分布式或去中心化的方法可能更好,这正是GTV最小化所做的。实际上,我们可以将这种服务器-客户端设置转化为一个等价的GTV最小化实例,只需确保网络是连通的(例如星型拓扑),并选择足够大的 α 值。当 α 足够大时,GTV最小化的解将是常数,即所有节点的模型参数相同,我们可以将其解释为全局模型参数的副本。

因此,单模型联邦学习只是GTV最小化的一个特例,它使用连通图和一个足够大的正则化参数 α

横向联邦学习 ↔️

接下来,我们看看横向联邦学习。

在横向联邦学习中,本地数据集是某个底层全局数据集的子集。网络中的节点只能访问这些数据点的不同子集,但每个数据点的所有特征都是可用的。这些子集可能存在重叠。

例如,在医疗保健领域,本地数据集 D1 可能是赫尔辛基某家医院的病人数据库,另一个本地数据集 D2 可能是维也纳某家医院的病人数据库。他们测量了标准化的指标,如血压、体温、体重等(特征相同),但测量的是不同的人群(数据点不同)。我本人可能恰好是这两个数据集重叠部分中的少数人之一。

横向联邦学习对应于对损失函数和边权重的特定选择。损失函数是这些本地数据集上的平均损失,且本地数据集部分重叠。边权重的选择似乎很自然:如果两个本地数据集(例如两家医院)有很多共同的数据点(病人),那么我们可能希望训练相似的预测模型,因此可以设置较大的边权重。如果两家医院记录的人群差异很大,则可能不希望强制它们训练相似的模型。

因此,在横向联邦学习中,我们可以使用本地数据集之间的重叠程度来构建边权重。如果两个本地数据集有很多共同数据点,则赋予较大的边权重。

当然,构建边权重还有其他方式。例如,即使没有共同数据点,也可以比较两个本地数据集的统计特性(如年龄分布、疾病频率等)。如果统计数据相似,则认为它们相似。这是一个重要的设计选择,不同的边权重构造方法会导致不同的联邦学习方法。

关于隐私的一个问题是:如何以保护隐私的方式衡量两个数据集的相似性或重叠度?直接共享完整数据库显然会泄露过多隐私。这是一个在构建优化问题(即选择边权重)的预处理阶段就需要谨慎处理的隐私泄露问题,可能超出了本学生项目的范围,但如果能在报告中讨论这一点将非常出色。

纵向联邦学习 ↕️

现在,我们来看纵向联邦学习,这在概念上更具挑战性。

在纵向联邦学习中,所有本地数据集都包含关于相同数据点的信息,但使用的是不同的特征。例如,考虑所有拥有芬兰社会保险号的人。关于我的信息存储在不同的地方:我的银行有我的财务信息,我的医疗保健提供商有我的健康信息,我的雇主有我的职业信息,超市的会员卡系统有我的购物信息。这些不同的机构或公司都拥有芬兰人口的不同类型信息。

纵向联邦学习的目标是:如何在不违反隐私法律的前提下,利用所有这些信息来训练一个模型?例如,如何开发一个最优的购物推荐应用,同时利用Kela(芬兰社保机构)、税务部门、零售商等的信息?

为了将纵向联邦学习简化为GTV最小化的一个特例,我进行了一个假设:所有节点都能访问标签。在某些应用中,这可能并非不合理,因为所有拥有相同人群数据的节点可能对该人群有共同的了解。

以线性回归为例,我们可以将这个线性回归问题写成一个共识问题的形式。我们希望训练一个全局线性模型,但要以分布式的方式进行。为此,我引入辅助模型参数 s_i,它应该是全局线性模型预测值的副本。为了确保这些辅助变量在所有节点上一致,我将它们放在一个连通联邦学习网络的节点上,并选择足够大的 α。当最小化GTV问题时,这些辅助变量 s_i 将趋于一致,其共识值正是全局线性模型的预测。

这个技巧是分布式凸优化中一个非常通用的设计模式:将集中式问题克隆到所有节点,并强制它们达成一致。然而,必须强调,这个GTV最小化技巧仅在每个节点都能访问标签时才有效,因为节点需要标签来构建其本地损失函数。

聚类联邦学习 🧩

近年来受到广泛关注的另一种类型是聚类联邦学习。

在聚类联邦学习中,我们假设联邦学习网络的节点自然地形成了聚类。一种理解方式是,同一聚类内的节点,其本地数据集的统计分布是近似独立同分布的。例如,芬兰的所有医院可能具有相似的统计数据,或者在流感爆发期间,所有医院的数据分布可能相似。

问题在于,在实践中,我们并不知道哪些设备属于同一个聚类。我们只观察到小规模的本地数据集,需要从中推断出聚类结构。

有趣的是,GTV最小化本身就很适合聚类联邦学习。正如我们之前讨论的,GTV最小化的解往往具有聚类结构。α 值越大,越大的节点子集最终会拥有近似相同的模型参数。特别是,如果我们使用某些范数(而非本课程主要使用的平方欧几里得范数)来衡量连接节点间模型参数的差异,那么在大节点子集上,模型参数可能完全相同。

然而,GTV最小化产生的聚类结构 Ĉ 仅取决于本地数据集和网络结构,可能与真实的聚类假设 C 不同。为了最小化这种估计误差,我们可以使用统计检验来判断两个本地数据集是否来自同一分布,或者使用概率分布之间的距离度量(如KL散度)来选择边权重。另一种方法是使用在给定模型参数下评估的深度神经网络梯度,如果梯度向量相似,则认为两个节点之间应有较大的边权重。

个性化联邦学习 🎯

最后,我们简要介绍个性化联邦学习。

在个性化联邦学习中,我们允许每个本地模型都不同,不再强制任何聚类结构。实现方式是我们只耦合本地模型的一部分。例如,假设本地模型是一个人工神经网络。我们只使用输入层的参数(如输入神经元和隐藏层神经元之间的权重)来构建全变分项,而完全不使用输出层的参数。这意味着在GTV最小化中,我们强制所有节点的输入层相同(即从特征到隐藏层的转换相同),但输出层(即如何从隐藏层得到输出)则根据本地数据集自由变化,从而实现了模型的个性化。

总结 📝

本节课我们一起学习了联邦学习的几种主要类型。我们看到,单模型联邦学习、横向联邦学习、纵向联邦学习、聚类联邦学习和个性化联邦学习都可以被视为广义全变分最小化框架的特例。它们之间的区别源于对联邦学习网络的边结构、本地损失函数的构建方式以及衡量模型参数差异的惩罚项所做的不同设计选择。理解这些类型及其与统一框架的关系,有助于我们根据具体应用场景设计和实现合适的联邦学习系统。

037:聚类联邦学习 🧩

在本节课中,我们将要学习联邦学习的一个重要变体——聚类联邦学习。我们将探讨其基本概念、应用场景以及如何通过图总变差最小化等方法来实现它。


概述

上一节我们讨论了联邦学习的基本框架。本节中,我们来看看一种考虑数据分布自然分组的联邦学习范式,即聚类联邦学习。在这种设置下,我们假设联邦网络中的节点会自然地形成多个簇,每个簇内的数据分布近似独立同分布。

聚类联邦学习的基本概念

聚类联邦学习的核心假设是:联邦网络中的节点会自然地形成多个簇。例如,一个节点可能代表一家医院,其本地数据集是医疗记录。来自同一地区(如芬兰)的所有医院,或在同一流感爆发期间收集数据的医院,其本地数据集的统计分布可能非常相似。这些节点就形成了一个簇。

这可以通过一个简单的概率模型来表述:同一簇内的所有节点,其本地数据集都是从同一分布中独立同分布地抽取的

然而,在实际应用中,我们并不知道哪些设备属于同一个簇。我们只能观察到小规模的本地数据集,因此需要找出哪些节点属于同一簇。

以下是聚类联邦学习的一些关键应用领域:

  • 医疗健康:为具有相似患者群体的医院训练个性化模型。
  • 个性化推荐:为具有相似身体质量指数、运动偏好的用户训练相同的智能手机健身计划模型。

通过图总变差最小化实现聚类

我们之前讨论过的图总变差最小化方法,也非常适合用于聚类联邦学习。这是因为GTV最小化的解本身就倾向于呈现聚类结构。

GTV最小化问题的公式通常如下:
min_{x} ∑_{i} f_i(x_i) + α ∑_{(i,j)∈E} w_{ij} ||x_i - x_j||^2
其中,f_i(x_i)是节点i的本地损失函数,α是正则化参数,w_{ij}是边权重,||·||^2表示欧几里得范数的平方。

调整参数α的大小可以控制聚类程度:α越大,最终模型参数近似相似的节点子集就越大。有趣的是,如果我们使用某些特定的范数(而非平方欧几里得范数)来衡量相连节点间模型参数的差异,那么同一簇内节点的模型参数将变得完全一致。

需要指出的是,通过GTV最小化得到的簇结构Ĉ,仅依赖于本地数据集和网络结构,可能与真实的簇假设C有所不同。这是因为真实的簇信息是一种“先知”信息,而我们只能通过有噪声的数据样本来进行估计,这必然会引入估计误差。

如何减少簇估计误差

为了最小化这种估计误差,我们可以借助统计学方法。核心问题是:判断两个本地数据集是否来自同一分布。

以下是几种可行的方法:

  • 统计检验:使用假设检验来判断两个数据集是否源自同一分布。这是一个统计学中的经典问题,已有大量成熟的方法。
  • 分布距离度量:使用概率分布之间的距离度量,如KL散度,来设置图中的边权重。由于我们通常不知道真实分布,因此可以使用经验分布来计算。
  • 梯度相似性:将本地数据集通过某个模型参数下的深度神经网络梯度“翻译”成一个向量。如果两个节点的梯度向量相似,则认为它们之间应有一条权重较大的边。

总结

本节课中,我们一起学习了聚类联邦学习。我们了解到,在这种范式中,节点会根据其数据分布的相似性自然形成簇。我们探讨了如何利用图总变差最小化方法来促进这种聚类结构,并介绍了使用统计检验、分布距离度量和梯度相似性等方法来识别和构建节点间连接,以减少簇估计的误差。这为在数据非独立同分布且存在自然分组的场景下进行有效的联邦学习提供了思路。

039:单模型联邦学习 🧠

在本节课中,我们将要学习联邦学习的一个基础范式——单模型联邦学习。这是联邦学习领域的起点,其核心目标是利用分布在多个客户端上的数据,协作训练一个单一的全局模型。

概述

单模型联邦学习旨在训练一个全局模型,其参数记为 W。这个模型可能部署在中央服务器上,但训练所需的数据却分散在各个客户端。因此,我们需要一种方法,在不直接共享原始数据的前提下,利用这些分散的数据来改进模型。

基本流程

上一节我们介绍了单模型联邦学习的目标,本节中我们来看看其具体的工作流程。整个过程是一个迭代的循环,主要包含以下步骤:

以下是单模型联邦学习的一个基础实现步骤:

  1. 服务器广播:在每一轮迭代 k,服务器将当前的全局模型参数 W^(k) 广播给所有参与的客户端。
  2. 客户端本地更新:每个客户端 i 收到 W^(k) 后,利用其本地私有数据集 D_i 计算一个模型更新。一种广泛使用的方法是执行一步(或几步)随机梯度下降(SGD):
    W_i^(k+1) = W^(k) - η * ∇L(W^(k); D_i)
    其中,η 是学习率,∇L 是在本地数据 D_i 上计算的损失函数梯度。
  3. 客户端上传:每个客户端将其更新后的本地模型参数 W_i^(k+1) 发送回服务器。
  4. 服务器聚合:服务器收集所有客户端的更新后,通过某种聚合机制(例如计算平均值)来生成新一代的全局模型参数 W^(k+1)。一个简单的聚合方式是联邦平均(FedAvg):
    W^(k+1) = (1/N) * Σ_{i=1}^{N} W_i^(k+1)
    其中 N 是参与的客户端数量。

架构与挑战

这种“服务器-客户端”的架构是联邦学习早期的主流形式。然而,它存在一个明显的缺点:中央服务器是一个单点故障。如果服务器出现故障或遭受攻击,整个联邦学习系统将无法工作。

与图信号处理的联系

为了解决中心化架构的潜在问题,我们可以转向更分布式的设计。有趣的是,单模型联邦学习可以被视为图信号处理中图总变差(GTV)最小化的一个特例。

我们可以将联邦学习网络建模为一个图,其中节点代表客户端。如果我们确保这个图是连通的(例如星型拓扑就满足条件),并选择一个足够大的正则化参数 α,那么GTV最小化的解将会在所有节点上趋于一致。这个一致的解,就可以被解释为我们想要训练的单一全局模型参数。

因此,单模型联邦学习 = 强正则化(大α值)下的连通图GTV最小化

总结

本节课中我们一起学习了单模型联邦学习的基本概念。我们了解到,其核心流程包括服务器广播、客户端本地更新(常基于SGD)、结果上传和服务器聚合。同时,我们也认识到其中心化架构存在单点故障的风险,并且可以从分布式优化的视角,将其理解为图总变差最小化在特定参数设置下的一个实例。这为我们后续学习更复杂、更去中心化的联邦学习范式奠定了基础。

040:个性化联邦学习 🎯

在本节课中,我们将简要介绍个性化联邦学习。这是一种允许每个本地模型保持差异性的联邦学习范式,不再强制所有模型结构完全一致。

上一节我们讨论了联邦学习的基本框架,本节中我们来看看如何实现模型的个性化。

核心概念

在个性化联邦学习中,我们允许每个本地模型彼此不同。我们不再强制实施任何集群结构。实现模型差异化的方法是,我们只耦合本地模型中的特定部分。

例如,假设本地模型是一个人工神经网络。我们只使用输入层的参数(例如,输入神经元与隐藏层神经元之间的权重)来构建总变差项。我们完全不使用输出层的参数。

这意味着,当我们在此处使用T最小化时,我们耦合的是输入层。我们希望所有模型使用相同的输入层,即从特征到隐藏层的相同输入变换。

公式表示: 设第 k 个客户端的模型参数为 θ_k = [θ_k^(in); θ_k^(out)],其中 θ_k^(in) 是输入层参数,θ_k^(out) 是输出层参数。个性化联邦学习的优化目标可以表示为:
min_{θ_1, ..., θ_K} Σ_k L_k(θ_k) + λ * Σ_k ||θ_k^(in) - θ_global^(in)||^2
其中,L_k 是第 k 个客户端的本地损失函数,θ_global^(in) 是全局共享的输入层参数。

实现方式

以下是实现个性化联邦学习的关键步骤:

  1. 参数划分: 将每个本地模型的参数明确划分为共享部分(如输入层)和个性化部分(如输出层)。
  2. 共享部分耦合: 在联邦聚合过程中,只对共享部分的参数进行平均或优化,强制它们趋向一致。
  3. 个性化部分独立: 每个客户端的个性化参数完全由其本地数据决定,在联邦过程中不进行聚合。

因此,输出层是自由的。输出如何从隐藏层获得,取决于本地数据集和各个节点本身。

通过这种方式,我们获得了一种个性化联邦学习的形式。

总结

本节课中我们一起学习了个性化联邦学习的基本思想。其核心在于只耦合模型的部分参数(通常是底层、通用的特征提取层),而允许上层、与具体任务相关的参数根据本地数据自由演化,从而在保持联邦协作优势的同时,更好地适应每个参与方的数据特性。

041:联邦学习中的差分隐私 🔒

在本节课中,我们将探讨联邦学习中的隐私泄露问题,并介绍一种重要的隐私保护技术——差分隐私。我们将了解隐私泄露是如何发生的,以及如何通过数学方法量化并保护隐私。


上一节我们介绍了联邦学习的基本算法流程。本节中我们来看看在节点间交换模型参数时可能引发的隐私泄露问题。

以一个节点(例如Alex)的视角来看联邦学习的基本步骤。Alex从邻居节点(例如Miko和Salvatore)那里获取模型参数。这些参数通过蓝牙连接传输。Alex使用这些参数,结合自己设备上的本地数据(例如血压测量值),在本地运行Python和Scikit-learn进行模型训练,并构建一个正则化项。

当然,Alex从邻居那里获得信息后,也需要回馈一些东西。因此,Alex将自己的新模型参数分享给Miko和Salvatore。这样,在下一轮迭代中,他们就可以使用Alex的模型参数来正则化他们自己的本地模型训练问题。

这里需要指出的是,信息流既流入设备(从邻居),也从设备流出(发送给邻居)。从隐私角度看,流出的信息流更为关键,因为这意味着本地数据的信息离开了设备这个“安全空间”。

核心问题是:发送给邻居的模型参数泄露了多少关于本地数据(例如最新的血压测量值)的敏感信息?我们如何衡量这种泄露?

量化隐私泄露:差分隐私的核心思想

为了精确地衡量隐私泄露,我们需要借助概率论和数学工具。我们将节点 i 在第 k+1 轮迭代中更新的模型参数 w_i^{k+1} 建模为一个随机变量。其概率分布可能泄露信息。攻击者(如邻居)可以通过多轮迭代,使用估计方法来推断这个分布,从而推测Alex的血压值。

为了衡量泄露程度,我们可以设想一个实验。假设Alex的本地数据集 D 包含过去10天的血压测量值。我们关注攻击者Salvatore能否判断Alex是否有高血压。

以下是实验思路:

  1. 考虑两个仅在一条记录上不同的数据集实例:D(血压正常)和 D‘(血压高)。
  2. 如果联邦学习算法在这两个不同数据集上运行时,输出的模型参数分布有显著差异,那么Salvatore就有可能通过观察输出来区分是 D 还是 D‘,从而推断出Alex的血压状况。
  3. 差分隐私的目标就是确保这两个分布尽可能相似,使得任何统计测试都无法有效区分它们。

具体来说,差分隐私要求,对于任何可能的输出结果集合(统计测试的拒绝域 T),算法在数据集 DD‘ 上输出结果属于 T 的概率非常接近。这可以用一个严格的数学公式来定义:

对于所有相邻数据集 DD‘(仅相差一条记录),以及所有可能的输出子集 S,满足:
Pr[ A(D) ∈ S ] ≤ e^ε * Pr[ A(D‘) ∈ S ] + δ
其中 A 是算法,ε 是隐私预算,δ 是一个通常很小的失败概率。

实现差分隐私:添加噪声

差分隐私的一个优点是,我们可以通过向算法输出中添加噪声来控制隐私保护水平(εδ)。

核心方法是:对任何你想保护的算法输出,添加适量的噪声。噪声的大小取决于两个因素:

  1. 隐私预算 ε:你想要的 ε 越小(隐私保护越强),需要添加的噪声就越大。
  2. 算法的敏感度:敏感度衡量了当输入数据集发生微小变化(如改变一条记录)时,算法输出的最大变化量。公式可以表示为:
    Δf = max_{D, D‘} || f(D) - f(D‘) ||
    其中 f 是算法函数,||.|| 是某种范数(如L1或L2范数)。敏感度越低,算法固有的隐私泄露风险就越小,为实现特定 ε 所需添加的噪声也越少。

在联邦学习中调整敏感度

在联邦学习的背景下,我们可以通过设计本地训练过程来影响敏感度。

以下是可能影响敏感度的因素:

  • 本地损失函数的选择:损失函数的曲率等性质可能会影响模型参数对数据变化的敏感度。
  • 添加正则化项:使用仅依赖于本地模型参数的正则化项(而不是邻居参数),有助于稳定模型更新,从而可能降低敏感度。

通过精心设计这些组件,我们可以塑造算法的敏感度。敏感度越低,在满足相同差分隐私保证的前提下,需要添加的噪声就越少,从而能在隐私和模型效用之间取得更好的平衡。


本节课中我们一起学习了联邦学习中的隐私泄露挑战以及差分隐私这一核心保护技术。我们了解到,模型参数的交换可能导致本地数据信息泄露,而差分隐私通过严格的数学定义量化了这种泄露风险。通过向算法输出中添加与敏感度相关的噪声,我们可以实现可控的隐私保护。虽然差分隐私的数学框架非常优雅,但其实际含义的直观解释仍是一个活跃的研究领域。在联邦学习中,我们还可以通过设计损失函数和正则化项来降低算法敏感度,从而更高效地实现隐私保护。

042:可信联邦学习 👨‍🏫

在本节课中,我们将学习联邦学习中的可信赖性要求,包括鲁棒性、隐私保护和可解释性。我们将探讨如何通过数学建模和算法设计来满足这些要求,确保联邦学习系统不仅高效,而且安全、可靠且易于理解。


课程组织更新 📅

上一节我们介绍了联邦学习的基本模型和算法,本节开始前,我们先进行一些课程组织更新。

现在我们已经完成了包含六个模块的基础课程,包括讲座和测验。接下来,你们将开始进行项目工作。

以下是项目工作的格式要求:

  • 项目报告需在4月30日前完成,需使用我们提供的模板。
  • 模板包含详细的结构和内容说明,请仔细阅读。
  • 强烈建议使用LaTeX来准备报告,我们提供了TeX源文件模板。

此外,网站上提供了评审问题清单。在准备报告时,阅读这些问题有助于满足评审要求。例如,在引言部分,需要清晰地阐述联邦学习应用的动机并提供相关背景。

项目报告不是正式的会议或期刊论文,无需提供详尽的文献综述,请合理控制工作量。

在4月底提交报告后,你们将进行同行评审,并根据收到的反馈改进报告。最终提交物是修订后的项目报告以及一份回应信,解释如何采纳了同行评审意见。

提交将使用两个系统:阿尔托大学的常规学生通过MyCourses提交;外部参与者将通过会议管理工具EasyChair提交。相关技术细节将通过邮件通知。


联邦学习核心概念回顾 🔄

在深入探讨可信赖性之前,我们先快速回顾本课程的核心概念。

联邦学习可以建模为一个网络优化问题。网络中的每个节点(如智能手机)代表一个设备,拥有本地数据集和本地模型。训练模型需要定义一个本地损失函数。

使联邦学习成为“联邦”的关键在于,我们通过边来耦合网络中不同节点的机器学习任务。每条无向边有一个权重,表示节点间耦合的强度。

我们通过一个称为广义全变分(GTV)的耦合项来惩罚每个节点独立训练模型的误差。这个耦合项累加了跨边的模型参数差异。为了使这个项最小化,连接紧密的节点必须学习相似的模型参数。

因此,GTV最小化问题的解是:在连接紧密的节点子集上,模型参数近似恒定。这相当于一种对本地数据集进行池化的对偶方法,但优势在于它不需要交换原始数据,从而保护了隐私。

这个框架非常通用。损失函数的构造方式决定了你使用的模型(如CNN、Transformer)和数据类型(文本、视频、音频)。它甚至可以实现强化学习。关键在于,联邦学习与机器学习的区别仅在于我们构造正则化项的方式:我们使用邻居的模型参数或预测来惩罚本地的训练损失。

实现这种耦合有两种等价方式:一是在损失函数中添加惩罚项;二是通过数据增强,使用邻居的预测来生成伪标签并扩充本地训练集。数据增强的方法尤其适用于非参数模型或节点间模型结构不同的情况。


可信赖人工智能的关键要求 🛡️

上一节我们回顾了联邦学习的技术核心,本节中我们来看看如何将“人”的因素纳入系统设计。联邦学习系统最终服务于人类用户,因此设计时必须考虑可信赖性。

欧盟提出了可信赖人工智能的七个关键要求,这些要求同样适用于联邦学习:

  1. 人类能动性与监督
  2. 技术鲁棒性与安全性
  3. 隐私与数据治理
  4. 透明度(包括可解释性)
  5. 多样性、非歧视与公平性
  6. 社会与环境福祉
  7. 问责制

除了欧盟,澳大利亚、美国国防部、联合国教科文组织和经合组织等也发布了类似的伦理准则。

本节课,我们将重点讨论其中三个与我的专业领域更相关的要求:鲁棒性隐私保护可解释性


鲁棒性:对抗数据污染 🛡️

首先,我们探讨如何使联邦学习系统更具鲁棒性。为了简化问题,我们考虑一个最简单的机器学习问题:均值估计。

假设你有一个数字序列,需要估计其背后概率分布的均值。最直接的方法是计算样本平均值。然而,这基于一个强假设:所有数据点都是可信的。

在现实中,数据可能被污染(投毒)。假设有10%的数据点可以被恶意攻击者任意篡改,且攻击者可以分析干净数据的统计特性来智能地选择篡改点(对抗性设置)。

在这种情况下,计算样本平均值不再是最优策略。最优策略是使用截尾均值:在排序后,丢弃最大和最小的10%数据点,然后计算剩余数据的平均值。这与直接使用中位数不同,后者是针对数据点被随机篡改(非对抗性设置)时的最优策略。

中位数可以表示为最小化绝对误差损失问题的解:
median = argmin_w Σ_i |w - x_i|

这对联邦学习的启示是:为了提高鲁棒性,我们可以在GTV耦合项中使用欧几里得范数(L2范数)而非平方欧几里得范数。平方范数对应平滑优化,但对异常值敏感;而范数本身虽然更鲁棒,但它是非光滑的,需要使用更复杂的优化算法(如次梯度方法),计算成本更高。

对于非参数模型,我们可以比较邻居模型在测试集上的预测差异,并使用绝对误差而非平方误差作为相似性度量,以提高鲁棒性。


隐私保护:差分隐私 🔒

上一节我们讨论了鲁棒性,本节我们关注隐私保护。在联邦学习中,节点会与邻居交换模型参数。虽然这避免了原始数据泄露,但模型参数本身仍可能泄露关于本地数据的敏感信息。

我们需要一种方法来量化隐私泄露的程度。差分隐私提供了一个严谨的数学框架。

其核心思想是:考虑两个仅在一条记录上有所不同的本地数据集DD‘(例如,一个包含高血糖读数,另一个包含低血糖读数)。联邦学习算法在任一数据集上运行时,其输出的模型参数应具有非常相似的概率分布。这样,攻击者即使观察到输出,也很难判断底层使用的是哪一个数据集,从而无法推断出特定的敏感信息。

差分隐私用参数(ε, δ)来量化隐私保护强度。ε越小,隐私保护越强。我们可以通过向算法输出中添加噪声来实现差分隐私。所需的噪声大小取决于ε和算法的敏感度——即输入数据发生微小变化时,输出变化的最大幅度。

因此,我们可以通过设计损失函数或添加额外的正则化项来降低算法的敏感度,从而在相同的噪声水平下获得更好的隐私保护。


可解释性:基于测试的度量 🧠

最后,我们探讨模型的可解释性。可解释性是指用户理解模型如何做出预测的能力。但如何衡量一个解释是否有用呢?

我们可以借鉴教学中的方法:通过测试来评估教学效果。类似地,我们可以通过一个“测试集”来衡量可解释性。

具体方法是:向用户提供一个小的测试数据集,让用户给出预测标签(用户信号)。然后,比较模型的预测与用户信号之间的差异。两者越一致,说明用户对模型的理解越好,即模型对该用户而言可解释性越高。

这种度量是主观的,因为不同用户可能提供不同的标签。有趣的是,我们可以将这种可解释性度量转化为一个正则化项,加入到损失函数中:

新的损失函数 = 原始损失函数 + λ * (模型在测试集上的预测 - 用户标签)^2

这本质上是一种数据增强:我们利用用户的领域知识(体现为用户在测试集上的标签)来扩充训练数据,从而引导模型学习更符合人类直觉的行为。

例如,在预测芬兰最高气温的问题中,一个过拟合的多项式模型可能会出现“最低气温升高,预测最高气温反而降低”的反直觉现象。我们可以构建一个测试集:将每个训练数据点的最低气温特征加1,并设定用户标签为最高气温也相应加1。将这个可解释性项加入训练后,新模型会变得单调递增,更符合物理常识。


总结与课程结束语 🎓

本节课我们一起学习了联邦学习中的可信赖性议题。

我们回顾了欧盟提出的可信赖人工智能关键要求,并深入探讨了其中三点:

  • 鲁棒性:通过使用截尾均值、中位数等思想,以及在设计耦合项时选用更鲁棒的范数,可以防御对抗性数据污染。
  • 隐私保护:差分隐私提供了量化隐私泄露的框架,通过添加噪声和控制算法敏感度来保护用户数据。
  • 可解释性:提出了一种基于测试的主观可解释性度量方法,并展示了如何将其转化为正则化项或数据增强技术,使模型行为更符合人类直觉。

本讲是联邦学习基础课程的最后一讲。后续重点是完成作业和项目。请记住,项目工作量应控制在课程总学分的合理范围内。如有疑问,请通过邮件或Slack频道联系。

祝大家在项目工作中一切顺利!

043:数据投毒及其防御 🛡️

在本节课中,我们将学习联邦学习中的数据投毒问题,并通过一个简化的均值估计问题来理解其核心防御策略。我们将探讨在不同攻击者设定下,如何选择最优的估计方法,并分析这些方法如何应用于联邦学习模型以提高鲁棒性。


从机器学习到联邦学习的鲁棒性

上一节我们讨论了联邦学习的非鲁棒性问题。本节中,我们来看看如何通过大幅简化联邦学习来阐述鲁棒性的概念。

首先,我们考虑一个只有一个节点的联邦学习网络。这实际上就是一个机器学习问题。因此,联邦学习中任何关于鲁棒性的要求,都隐含着对机器学习鲁棒性的要求,因为机器学习是联邦学习的一个特例。

一个最简单、最特殊的联邦学习或机器学习问题是均值估计问题。

均值估计:所有机器学习问题之母 👩‍🏫

假设给你一个数字序列,这些数字是从某个未知的概率分布中抽取的。你的任务是估计这个分布的期望值或均值。

这可以被表述为一个机器学习问题:学习一个线性模型的单一权重参数,其中特征值恒为1。这是一个非常简单的模型,但它能捕捉均值估计问题的本质。

那么,估计未知分布均值的最佳方法是什么?

最佳估计方法:样本均值

如果你的数据源完全可信,并且数据是独立同分布的,那么最佳估计方法是计算样本均值。具体做法是将所有数字相加,然后除以数字的个数。

公式
样本均值 = (x₁ + x₂ + ... + xₙ) / n

在数学上,在很强的意义上,样本均值是最优估计器。

现实挑战:数据投毒与对抗性设定 🦹

然而,现实中的数据可能并不可信。例如,数据可能来自一个不可信的来源,其中一部分数据点可能被恶意篡改。这就是数据投毒。

我们假设有10%的数据点可以被任意篡改,并且攻击者知道哪些数据点是干净的,可以分析干净数据集的统计特性,从而以最有害的方式选择投毒点。这种设定称为对抗性设定

这与另一种更简单的设定不同:在那种设定中,攻击者只是随机选择10%的数据点进行随机篡改,而不依赖于干净数据集的统计特性。这种攻击者相对“愚蠢”。

在对抗性设定下,使用样本均值不再是最佳策略。

对抗性攻击下的最佳防御策略

面对可能被精心投毒的数据,你的直觉策略是什么?一个合理的想法是考虑异常值。

以下是几种可能的策略:

  • 考虑异常值:识别并处理那些明显偏离的数据点。
  • 使用其他统计量:例如中位数或众数。

然而,聪明的攻击者可能会预判你的策略。如果他们知道你会检测异常值,他们可能会将投毒点伪装成正常值,而不是放在极端位置。但如果他们将投毒点放在中间位置,其破坏力就会减弱。

实际上,最佳策略是:识别并排除异常值,然后对剩余数据计算均值。这种方法称为截尾均值

截尾均值:对抗性设定的最优解

当你知道有特定比例(例如10%)的数据点可能被任意投毒时,最佳方法是避免顶部10%和底部10%的数据点(它们可能是异常值),然后计算剩余数据的均值。

公式
截尾均值 = 均值( 排序后的数据序列[αn : (1-α)n] )
其中 α 是预计的投毒比例。

有数学证明(例如2021年的相关论文)表明,在对抗性设定下,截尾均值是最优的估计策略。

中位数:应对“懒惰”攻击者的策略

对于之前提到的“懒惰”攻击者(随机投毒,不依赖数据分布),最佳防御策略是使用中位数

定义:中位数是这样一个值,使得数据集中大于它的数据点数量等于小于它的数据点数量。

中位数对极端值具有极强的鲁棒性。例如,将某个高点变得任意大,只要不改变大于和小于中位数的数据点数量,中位数就不会改变。

然而,在对抗性设定下,中位数被证明是次优的,因为聪明的攻击者可以利用对干净数据集的了解来隐藏投毒点。

关联到联邦学习:正则化视角 🔗

那么,这个简单的均值估计问题如何与联邦学习关联起来呢?关键思想在于将联邦学习问题分解或归结到正则化的视角。

联邦学习中的优化问题可以改写为一个向量值数据点的均值估计问题。这启发我们如何修改联邦学习算法,使其具备类似于简单均值估计问题的鲁棒行为。

具体来说,我们可以考虑不使用平方欧几里得范数,而使用欧几里得范数本身。

从损失函数看鲁棒性

我们可以从损失函数的角度来理解这一点。中位数实际上是最小化绝对误差损失问题的解。

公式
中位数 = argmin_θ Σ |x_i - θ|

这与线性回归(最小二乘回归)类似,只是这里使用的是预测误差的绝对值,而不是平方。

类似地,为了使联邦学习更鲁棒,我们可以在总变差项中使用欧几里得范数,而不是平方欧几里得范数。

联邦学习鲁棒性修改
将目标函数中的 ||w_i - w_j||² 替换为 ||w_i - w_j||

鲁棒性提升的代价

然而,使用欧几里得范数(或绝对误差损失)会带来一个主要缺点:不可微性

平方范数是可微的,便于使用梯度下降等高效算法。而范数本身在零点不可微,这意味着无法直接使用标准的梯度下降法,必须转而使用诸如近端梯度下降等更复杂的优化算法,这通常会带来更高的计算成本。

因此,我们通过投入更多的计算资源来换取更强的鲁棒性

扩展到非参数模型

对于非参数模型(例如复杂的神经网络),我们比较的不是权重向量 w 的差异,而是模型在测试集上预测结果的差异。

此时,鲁棒性的考量依然存在:是使用预测差异的平方,还是使用预测差异的绝对值?从鲁棒性角度出发,使用绝对值通常更好。

非参数模型下的比较
损失 = |f_i(x) - f_j(x)| 对比 损失 = (f_i(x) - f_j(x))²
其中 f_i, f_j 是不同节点训练出的模型。

总结与核心要点 📝

本节课中,我们一起学习了联邦学习中的数据投毒问题及其防御策略。

  • 核心问题:数据可能被恶意篡改,破坏模型训练。
  • 简化分析:通过均值估计这一基础问题,我们理解了不同攻击设定下的最优防御策略。
  • 对抗性攻击:面对能分析数据分布的聪明攻击者,截尾均值是最优策略。
  • 随机攻击:面对随机投毒的“懒惰”攻击者,中位数是更鲁棒的选择。
  • 联邦学习应用:为了提高联邦学习的鲁棒性,可以考虑在模型正则化或比较项中使用非平滑的损失函数或范数(如 L1 范数、绝对误差),这对应于使用中位数或截尾均值的思路。
  • 权衡:这种鲁棒性的提升以更高的计算复杂性为代价,因为需要采用更复杂的非平滑优化算法。

核心结论:为了鲁棒性,使用如绝对误差损失或向量欧几里得范数等非可微损失函数可能是更好的选择,但这需要付出更多的计算资源。你可以尝试在Python中比较最小绝对误差回归(Huber回归)和最小二乘回归,观察它们在相同数据集上的计算时间差异,以直观理解这种权衡。

044:耦合个性化模型详解 🧩

在本节课中,我们将学习如何通过构建一个惩罚项,来耦合联邦学习网络中不同设备的个性化模型。核心思想是让相似设备训练的模型在特定参考数据上达成一致。

上一节我们介绍了联邦学习中个性化模型的概念,本节中我们来看看如何具体实现模型间的耦合。

核心思想与设定

首先,考虑一个包含两个节点的简单场景,代表两个设备。

  • 设节点为 ii'。例如,这可以代表我的智能手机和我朋友的智能手机。
  • 我们各自收集数据,例如来自健身活动的日志数据。
  • 我们各自希望训练一个模型,比如一个健身建议应用。
  • 我们知道彼此在某些方面相似,例如,我们都不喜欢在下雨天跑步。

这种共识可以通过强制两个训练好的模型在某个测试集上达成一致来实现。

  • 节点 i 训练得到模型 h_i
  • 节点 i' 训练得到模型 h_i'
  • 我们让这两个模型在一个精心挑选的测试集上达成一致。

这个测试集可以是精心选择的参考数据。例如,过去某些具有特定天气条件(如35度高温)的日子,我们俩都决定去游泳。这些日子就构成了一个参考测试集。

实施方法:差异度量

我们可以通过使这两个假设(模型)在测试集上的差异最小化来实施上述想法。这是本课程中将学习的所有方法背后的核心思想。

我们可以使用不同的方式来度量这种差异,就像机器学习方法中的损失函数一样。具体如何度量差异是一个设计选择。

以下是几种常用的差异度量方法:

  • 平方误差损失:如果模型输出是数值(回归问题),我们可以比较两个模型在测试集上的预测值,并计算它们之间的平方误差。
    • 公式:差异 = (h_i(x) - h_i'(x))^2,其中 x 是测试集中的样本。
  • 交叉熵损失:如果模型输出是类别或标签(分类问题),那么平方误差可能不再适用,此时交叉熵是一个典型的好选择。
    • 公式:差异 = CrossEntropy(h_i(x), h_i'(x))

基本上,任何你在基础机器学习中了解到的可用作损失函数的方法,都可以用于此处的差异度量。

重要说明:测试集的特性

需要指出的是,用于比较两个模型的这个测试集,对于网络中不同的连接(边)可以是不同的。

这个测试集是为特定的一对节点量身定制的。它仅用于节点 ii' 之间。在我们联邦学习图(网络)的另一条边,即另一对节点之间,我们可能会使用另一个完全不同的测试集。

本节课中我们一起学习了耦合个性化模型的核心机制。我们了解到,可以通过在精心设计的、针对特定节点对的测试集上,最小化两个模型预测的差异(使用如平方误差或交叉熵等度量),来促使相似设备的模型达成共识,从而实现模型的个性化与协作学习的平衡。

posted @ 2026-03-26 12:21  布客飞龙III  阅读(58)  评论(0)    收藏  举报