CMU-概率图模型笔记-全-

CMU 概率图模型笔记(全)

001:导论 🎯

在本节课中,我们将要学习概率图形模型(PGM)的基本概念、课程安排以及学习这门高级课程的意义。我们将从为什么需要图形模型开始,探讨如何将领域知识融入数学模型,并初步了解衡量变量间关系的不同方法。


课程概述与安排 📅

我很高兴看到这么多同学。这门课是机器学习领域最先进的技术课程之一。最初是为少数学生设计的,今年是课程开设的第15周年。第一年只有大约10名学生,而今年注册人数达到了160人,另有50人在等待名单上。

这门课技术内容具有挑战性,每年都会收到关于课程难度的反馈。我无意降低难度,但希望你们都能从中学到很多,并取得好成绩。

课程没有期中或期末考试。评分主要由几次作业(占50%)和一个主要的课程项目(占40%)构成。课程项目鼓励组成3-4人的团队,许多往届学生在此发表了他们的第一篇论文。

课程会被录制,并会定期发布额外的阅读材料。每节课的内容都足够深入,可以作为一学期课程的指南。

课程资源与要求 📚

以下是课程相关的后勤信息:

  • 课程主页:请定期访问以获取材料、更新和信息。
  • 教材:推荐两本教材作为理论基础和经典用例参考,但请注意它们不包含最新的解决方案。
  • 讨论区:使用Piazza论坛进行提问和课堂互动。
  • 作业提交:通过Gradescope提交。
  • 教学团队:我们有多位优秀的助教和课程助理Amy负责后勤问题。
  • 旁听:允许旁听,但需要填写表格。

课程要求包括完成作业、参与课堂笔记记录以及完成团队项目。我们鼓励尽早组队。课程中还设有加分机制和中期反馈调查。


为什么需要图形模型?🤔

如今,机器学习领域非常活跃,每年有数百种算法变体发表,很难全面掌握。本课程的目标之一,就是尝试用一个统一的框架来组织这些纷繁复杂的算法和模型实例。

我们希望用一棵或几棵“树”来统一当前乃至未来几年出现的大多数算法实例,让你能更好地定位自己的研究,设计出更具通用性和影响力的算法。

为了实现这个目标,我们需要从基础开始。大多数机器学习算法的核心动机源于对数据的统计建模。让我们看看如何使用概率模型来建模数据。


从基础概率模型到图形模型 📊

假设我们有一个具有8个二元特征的数据实例。如何为其写出概率分布?最直接的方法是枚举所有可能的特征组合并给出每个组合的概率,即创建一个巨大的概率表。

然而,这种方法存在明显缺陷:表格的行数随特征数量呈指数级增长,会迅速耗尽计算资源。此外,在学习和推断(例如计算某些事件的概率)时,也会面临巨大的复杂性挑战。

融入领域知识 🧬

在现实中,数据实例通常对应着真实世界的现象。例如,考虑一个描述细胞信号通路的生物学问题,其中有8个分子随机变量(开或关)。生物学家会提供额外的知识:哪些分子在细胞表面,哪些在内部,以及它们之间的触发关系图。她还会指出某些分子(如受体A和基因H)在生命周期中从未相遇,因此不可能直接相互作用。

作为数学家或计算机科学家,这些领域知识是否有用?答案是肯定的。这正是本课程的核心问题:如何将各种形式的领域知识整合到数学框架中,使模型表达式更具信息性、更简单、更可解释、更可操作

一言以蔽之,这引出了我们对图形模型的介绍。模型与表示它的图相结合,就成了图形模型。我们最关心的是图形模型内在的严谨含义。


定义“关系”:从模糊到严谨 🔍

“关系”这个词很容易产生歧义。例如,一张基于《圣经》人物共现频率绘制的网络图,其边的定义(如“在同一页中出现”)就是主观的。不同的人使用相同的材料但采用不同的共现范围定义,可能会画出不同的图。

因此,我们需要更严谨地定义随机变量之间的关系。关系可以有很多种解释:相关、独立、依赖、条件独立/依赖,甚至因果。我们需要定量地确定这些关系的存在与否。

一种方法是探索使用单一数值摘要作为关系强度的度量。以下是一些常见的度量指标:

  • 皮尔逊相关系数:衡量线性依赖关系。公式为 corr(X, Y) = E[(X-μ_X)(Y-μ_Y)] / (σ_X σ_Y)。注意:若X与Y独立,则相关系数为0;但相关系数为0不能推出X与Y独立(例如,Y = X²)。
  • 互信息:基于Kullback-Leibler散度,衡量两个分布之间的差异,能捕捉非线性依赖。公式为 I(X; Y) = KL( P(X,Y) || P(X)P(Y) )。计算可能具有挑战性。
  • 希尔伯特-施密特独立性准则:使用核方法将分布嵌入到希尔伯特空间,然后计算距离,适用于更复杂的分布形式。
  • 偏相关:在给定其他变量(如Z)的条件下,衡量两个变量(X与Y)之间的线性关系。公式涉及计算残差之间的相关性。

在多元高斯分布的假设下,偏相关可以通过精度矩阵(协方差矩阵的逆)方便地计算。此时,偏相关与条件独立性等价。


超越成对检验:全局视角 🌐

即使我们有了衡量成对关系(边际的或条件的)的方法,直接为包含多个变量的大领域构建图形模型仍然面临操作上的困难。例如,对于三个变量:孩子的身高(X)、词汇量(Y)和年龄(Z)。如果仅进行成对独立性检验,可能会发现每对变量都相关,从而得到一个全连接的图。

然而,根据我们的先验知识,更合理的模型可能是年龄(Z)同时影响身高(X)和词汇量(Y)。这说明,我们需要超越局部的成对检验,从全局条件独立性的角度来定义和构建图形模型。这正是我们将在第二讲中深入研究的条件独立图(也称为马尔可夫网络或无向图模型)。

这类模型用途广泛,例如著名的伊辛模型,最初用于模拟原子自旋状态,后来被应用于图像建模。


课程路线图与总结 🗺️

本节课我们一起探讨了图形模型的动机、基本思想以及定义变量间关系的挑战。以下是后续课程的简要路线图:

  1. Lecture 2: 条件独立图:深入研究马尔可夫网络等无向图模型及其统计含义。
  2. Lecture 3: 有向图模型:研究贝叶斯网络,探讨其因子化特性、可解释性(如因果)和计算优势。
  3. Inference & Learning:用多讲篇幅深入探讨图形模型上的推断(如计算条件概率、最可能配置、采样)和学习(从数据中学习参数和结构,融入规则、奖励等丰富知识)。
  4. Modern PGM:研究现代图形模型,展示其如何成为强化学习、深度学习、迁移学习等技术的统一框架。
  5. Student-Selected Topics:本学期将实验保留部分课时,由同学们投票选择感兴趣的主题进行深入探讨。

图形模型的核心价值 💎

最后需要明确:图形模型是一个领域或一种思维方式的名称,而不是一个特定模型的名称。它提供了一种语言,用于:

  • 交流领域知识和设计模型。
  • 组织和规划计算
  • 进一步开发模型

其优势包括:

  • 表示优势:通过局部结构(超越成对)全局地构建模型,节省参数。
  • 模块化与可组合性:易于组合不同模块或研究成果。
  • 统一框架:贝叶斯推断等都可以视为在图形模型框架下引入额外节点和边。

希望在本学期结束时,你们不仅能带走许多公式,更能掌握几个核心的“主方程”,并能根据具体问题插入不同的构建模块,从而高效地启动甚至完成你们的研究工作。

我们周三见! 👋

002:无向图模型 📊

在本节课中,我们将要学习概率图形模型中的一个重要类别——无向图模型。我们将探讨其基本定义、如何从图中读取独立性、以及一些经典的实际应用模型。


课程概述与回顾

上一讲我们讨论了如何通过条件独立性测试(如偏相关、互信息)来判断两个随机变量之间的依赖关系。然而,当变量数量庞大时,这种“自底向上”地测试所有变量对及其条件集的方法在计算上是不可行的。

本节中,我们将采用“自顶向下”的视角:首先定义一个图结构,然后探讨如何从该图中系统地“读出”它所蕴含的所有条件独立性关系。如果图与概率分布之间能建立良好的对应关系,那么通过图来构建模型将变得简单高效。


基本符号约定 📝

在深入之前,我们先统一一些基本符号,这在统计学和机器学习领域尤为重要:

  • 随机变量:通常用大写字母(如 X)表示,其具体取值用小写字母(如 x)表示。
  • 随机向量:可表示为粗体大写字母 X 或带箭头的 \vec{X}
  • 参数:通常用希腊字母表示,如 α, β, θ

什么是无向图模型?

一个无向图模型由一个无向图 G 定义。图中的节点代表随机变量,边代表变量之间的对称关联关系(非因果性)。该模型定义了这些随机变量联合概率分布的一种特定参数化形式。

那么,图中的边具体意味着什么?它们对节点的联合配置有何影响?这就是本节课的核心。


动机与应用实例 🌅

让我们通过一个实际问题来感受无向图模型的价值:图像语义分割。任务是将图像中的每个像素或图像块分类(例如,分为“天空”或“水”)。

仅看一个孤立的图像块很难判断。但如果我们知道它在图像中的位置(例如,在顶部或邻*陆地),判断就会容易得多。这种“邻*区域标签倾向于一致”的常识,正是无向图模型可以自然表达的。

具体做法是:将图像网格化,每个格点定义一个随机变量表示其标签。在相邻的格点(变量)之间连接一条边,并为这条边上的联合配置(如“同为天空”、“同为水”、“一水一天空”)分配一个数值。这个数值表达了我们对这种配置的“偏好”或“兼容性”,例如,赋予“标签相同”的配置更高的分数。

这种思想广泛应用于多个领域:

  • 计算机视觉:图像去噪、分割。
  • 统计物理:伊辛模型描述原子自旋相互作用。
  • 计算生物学:蛋白质相互作用网络。
  • 自然语言处理:词性标注、主题模型。

形式化定义:吉布斯分布 ⚙️

一个无向图模型(也称为马尔可夫随机场或吉布斯分布)的联合概率分布定义如下:

给定一个无向图 G,我们首先找出其所有。一个团是图中所有节点都相互连接的一个子集。极大团是指不能再添加任何其他节点而仍保持为团的团。

对于每个团 c,我们定义一个势函数 φ_c。势函数是一个正的实值函数,其输入是该团中所有随机变量的某种联合配置 x_c。它衡量了该配置的“可能性”或“能量”,但本身不是概率。

整个模型的联合分布由所有团上的势函数乘积归一化后得到:

P(X) = (1/Z) * ∏_{c ∈ C} φ_c (x_c)

其中,归一化常数 Z 称为配分函数

Z = ∑_{x} ∏_{c ∈ C} φ_c (x_c)

对于连续变量,求和应替换为积分。

为什么使用势函数而非概率?
势函数提供了更大的灵活性。它可以是任何正数,便于注入人类知识(如“相邻像素标签相同的兼容性得分为10”)。直接将其定义为条件概率或边缘概率反而困难且不必要,因为势函数在因子分解中并不对应唯一的概率解释。


从图中读取独立性:马尔可夫性质 🔍

无向图模型的核心价值在于,其图结构直接编码了随机变量间的条件独立性假设。以下是三种等价的马尔可夫性质定义:

  1. 全局马尔可夫性:对于图中不相交的节点子集 A, B, C,如果 C 在图分离了 AB(即所有连接 AB 的路径都必须经过 C),则在概率分布中满足 A ⊥ B | C
  2. 局部马尔可夫性:一个节点 X_i,在给定其所有邻居节点(即马尔可夫毯)的条件下,独立于图中所有其他非邻居节点。
  3. 成对马尔可夫性:对于两个没有边直接相连的节点 X_iX_j,在给定所有其他节点的条件下,它们相互独立。

这些性质为我们提供了一套从图结构直接推断独立性关系的规则。


图与分布的对应关系:I-map 🗺️

为了建立图模型与概率分布之间的严格联系,我们引入 I-map 的概念。

  • I(P) 为分布 P 中所有成立的条件独立性语句的集合。
  • I(G) 为根据图的全局马尔可夫性质所能读出的所有条件独立性语句的集合。

如果 I(G) ⊆ I(P),即图 G 中蕴含的所有独立性在分布 P 中都成立,则称图 G 是分布 P 的一个 I-map

重要性:如果一个分布 P 可以表示为基于图 G 的吉布斯分布,那么 G 一定是 P 的一个 I-map。这意味着,通过吉布斯分布的形式定义模型,我们能自动保证图结构所编码的独立性在分布中成立。这比直接通过数字定义分布并验证独立性要方便得多。

哈默斯利-克利福德定理 进一步强化了这种对应关系:如果一个严格正的分布 P 满足图 G 是其 I-map,那么 P 一定可以表示为基于 G 的吉布斯分布形式。这为无向图模型的合理性提供了理论基础。


指数族形式与经典模型 🌡️

在实际应用中,直接指定正的势函数有时不直观。更常用的形式是将其写为指数族形式,即对数线性模型

P(X) = (1/Z) * exp( -∑_{c ∈ C} E_c(x_c) )

其中 E_c(x_c) 称为能量函数,可正可负。-E 可视为“得分”,得分越高(能量越低),该配置概率越大。这种形式与统计物理中的玻尔兹曼分布一致。

以下是两个经典的无向图模型:

  1. 伊辛模型:变量取值为 {+1, -1}。通常只定义单点势和相邻节点间的成对势。常用于建模二值图像或铁磁体自旋。
  2. 波茨模型:伊辛模型的推广,变量可取 K (K>2) 个离散状态。常用于彩色图像分割或多类标签问题。

受限玻尔兹曼机:深度学习的先驱 🧠

受限玻尔兹曼机 是一个两层结构的无向图模型,包含一层可见单元 v(对应观测数据,如图像像素)和一层隐藏单元 h(对应潜在特征或表示)。它是一个二分图,可见层和隐藏层内部无连接,只有层间有连接。

其联合分布定义为:

P(v, h) ∝ exp( -E(v, h) )
E(v, h) = - (b^T v + c^T h + v^T W h)

其中 W 是层间连接的权重矩阵,bc 是偏置项。

RBM 的关键性质

  • 条件独立性:给定可见层,所有隐藏单元条件独立;给定隐藏层,所有可见单元条件独立。即:
    P(h|v) = ∏_i P(h_i|v)P(v|h) = ∏_j P(v_j|h)
  • 这一性质使得吉布斯采样等推断和学习算法变得非常高效,是后续深度信念网络等模型的基础。

条件随机场:考虑全局上下文的序列模型 📄

条件随机场 是一种在给定观测序列 X 条件下,对标签序列 Y 进行建模的无向图模型(通常是链式结构)。与之前模型不同,CRF 是条件模型,直接对 P(Y|X) 建模。

其形式为:

P(Y|X) = (1/Z(X)) * exp( ∑_{i} λ_i f_i(Y, X) )

其中 f_i(Y, X) 是特征函数,可以依赖于整个观测序列 X 和标签序列的局部(如相邻标签对 (Y_i, Y_{i-1}) 或单个标签 Y_i)。λ_i 是特征权重。

优势:通过特征函数 f_i,CRF 能够灵活地融入长距离的、依赖于整个观测序列 X 的上下文信息,这在自然语言处理等任务中非常强大。


总结与要点 ✅

本节课我们一起学习了概率图形模型的核心组成部分之一——无向图模型。以下是需要掌握的关键点:

  • 无向图模型(马尔可夫随机场)通过无向图定义变量间的对称关联,并用吉布斯分布表示联合概率。
  • 势函数定义在团的配置上,是模型表达先验知识或数据偏好的载体。
  • 图结构编码了条件独立性,主要通过全局、局部和成对马尔可夫性质来体现。
  • I-map 概念严格定义了图与概率分布之间的对应关系。哈默斯利-克利福德定理确立了这种表示的完备性。
  • 马尔可夫毯的概念在推断中极其有用,它允许我们将一个变量对其余所有变量的条件分布,简化为对其马尔可夫毯的条件分布。
  • 我们介绍了几个经典模型:伊辛模型波茨模型、作为深度学习基石的受限玻尔兹曼机,以及广泛应用于序列标注的条件随机场

理解如何从图中读取独立性以及如何通过势函数构建模型,是掌握更复杂的概率推断和学习算法的基础。在接下来的课程中,我们将探讨如何在这些模型中进行参数学习和概率推断。

003:有向图模型 🎯

在本节课中,我们将继续讨论图形模型的结构。我们将介绍另一个非常重要的图形模型家族——贝叶斯网络。我们将探讨如何利用有向图模型进行灵活的知识工程,并深入理解其与概率分布之间的等价关系。


知识工程与有向图模型

上一节我们介绍了无向图模型,它通过定义在团上的势函数来捕捉随机变量之间的关联关系。本节中,我们来看看有向图模型,它能够表达更丰富、更灵活的变量间关系,尤其适合进行知识工程。

有向图模型,或称贝叶斯网络,其节点代表随机变量,有向边代表变量间的直接影响。它是一种数据结构,为表示联合概率分布提供了一个系统化的因子分解框架。

以下是知识工程在有向图模型中的一个经典历史案例:

这是一个用于医疗诊断的专家系统贝叶斯网络。网络中的每个节点代表一个医学现象,如症状、病因或后果。领域专家(如医生)可以将他们的知识编码为概率关系(例如,给定某种病因,出现特定症状的概率)。通过将所有局部知识合成为一个连贯的图模型,我们可以对网络进行各种概率查询(即推理),这比直接操作庞大的联合概率表要高效得多。


实例:赌场骰子游戏 🎲

为了更具体地展示如何构建模型,我们来看一个有趣的例子:赌场骰子游戏。

场景设定:

  • 庄家有两种骰子:公*骰子(每个面概率相等)和灌铅骰子(例如,6点朝上的概率为1/2,其余点数*分另外1/2概率)。
  • 你作为玩家,观察到一连串的投掷结果(例如50次)。
  • 你看不到庄家每次具体选择了哪种骰子。

我们希望解决的问题(知识工程的目标):

  1. 评估问题: 给定观察到的投掷序列,这个序列由公*庄家或狡猾庄家产生的可能性有多大?即计算 P(观测序列 | 模型)
  2. 解码问题: 在给定整个观测序列的条件下,估计每一次投掷具体使用的是哪种骰子?即计算 P(第i次骰子选择 | 所有观测结果)
  3. 学习问题: 如何从数据中学习模型的参数,例如骰子的偏置以及庄家切换骰子的策略?

构建贝叶斯网络模型

以下是构建模型的步骤:

第一步:确定随机变量

  • X_i:第 i 次投掷的结果(观测变量)。其取值域为 {1, 2, 3, 4, 5, 6}。
  • Y_i:第 i 次投掷所使用的骰子类型(隐变量)。其取值域为 {公*, 灌铅}。

第二步:确定变量间的结构(定性知识)
基于我们对物理世界的了解:投掷结果 X_i 由所使用的骰子 Y_i 直接“导致”。因此,存在从 Y_i 指向 X_i 的边。
此外,狡猾的庄家在选择骰子时可能具有策略性。例如,他可能倾向于连续使用同一种骰子。这意味着 Y_{i+1} 可能依赖于 Y_i。因此,存在从 Y_i 指向 Y_{i+1} 的边。

由此,我们得到一个链状结构:
Y_1 -> X_1, Y_1 -> Y_2 -> X_2, Y_2 -> Y_3 -> X_3, ...

这个模型就是著名的隐马尔可夫模型

第三步:确定局部概率(定量知识)

  • 初始概率: P(Y_1),即第一轮使用各种骰子的概率。
  • 转移概率: P(Y_{i+1} | Y_i),描述庄家切换骰子的策略。例如:
    • P(Y_{i+1}=公* | Y_i=公*) = 0.99
    • P(Y_{i+1}=灌铅 | Y_i=公*) = 0.01
    • (灌铅到公*/灌铅的概率可类似定义)
  • 发射概率: P(X_i | Y_i),描述给定骰子类型下,各个点数出现的概率。
    • Y_i = 公*,则 P(X_i=k | Y_i=公*) = 1/6, k=1..6。
    • Y_i = 灌铅,则 P(X_i=6 | Y_i=灌铅) = 0.5, P(X_i=k | Y_i=灌铅) = 0.1, k=1..5。

模型的因子分解与计算挑战

根据贝叶斯网络的定义,上述模型的联合概率分布可以优雅地因子分解为:
P(Y_1, ..., Y_n, X_1, ..., X_n) = P(Y_1) * ∏_{i=2}^{n} P(Y_i | Y_{i-1}) * ∏_{i=1}^{n} P(X_i | Y_i)

然而,当我们需要回答“评估问题”,即计算边际概率 P(X_1, ..., X_n) 时,需要对这个联合分布关于所有 Y_i 求和:
P(X_1, ..., X_n) = ∑_{Y_1} ... ∑_{Y_n} [ P(Y_1) * ∏_{i=2}^{n} P(Y_i | Y_{i-1}) * ∏_{i=1}^{n} P(X_i | Y_i) ]

如果骰子类型有 K 种,序列长度为 n,朴素求和的计算复杂度是 O(K^n),这是指数级的,对于长序列不可行。这引出了图形模型的一个核心优势:利用图结构,我们可以设计出高效的算法(如前向-后向算法),将这类推理问题的复杂度降低到 O(n * K^2),即多项式级别。这只是一个预告,后续课程会深入讲解。


贝叶斯网络的形式化定义与独立性

现在,让我们回到贝叶斯网络的形式化定义。一个贝叶斯网络由两部分构成:

  1. 结构(定性): 一个有向无环图 G
  2. 参数(定量): 与每个节点相关联的局部条件概率分布 P(X_i | Parents(X_i))。对于没有父节点的根节点,则是其先验概率 P(X_i)

该网络定义了一个联合概率分布:
P(X_1, ..., X_n) = ∏_{i=1}^{n} P(X_i | Parents(X_i))

图结构蕴含的条件独立性

有向图通过三种基本结构(或称“图元”)来编码条件独立性假设:

  1. 共同父节点(Common Parent)

    含义: 给定父节点 B,子节点 AC 条件独立。即 A ⊥ C | B
    例子: 一个基因 B 调控两个下游基因 AC。如果已知 B 的状态,AC 的发生是独立的。

  2. 链式结构(Cascade)
    含义: 给定中间节点 B,头节点 A 和尾节点 C 条件独立。即 A ⊥ C | B
    例子: A 导致 BB 导致 C。如果已知 B,那么 AC 没有额外的预测能力。

  3. V型结构(V-structure / Common Effect)
    含义: 父节点 AB 在先验情况下是独立的(A ⊥ B)。但是,当它们的共同子节点 C 被观测到时AB 会变得相关。这种现象称为“解释消除”(Explaining Away)。
    例子: A=钟表不准,B=交通拥堵,C=上课迟到。AB 本身无关。但如果你迟到(C 被观测到),并且得知交通畅通(B 为假),那么你会更怀疑是钟表出了问题(A 为真的概率增加)。AB 为解释同一个结果而竞争。

全局独立性:D-分离

对于图中任意三个不相交的变量集 X, Y, Z,我们如何判断是否满足 X ⊥ Y | Z?这需要用到 D-分离 准则。

D-分离的判定可以通过一个直观的“球类算法”来理解:想象在图上沿着边传递信息(一个“球”)。规则如下:

  • 链式 A -> B -> C 或共同父节点 A <- B -> C 如果 BZ 中(被观测),则球无法从 A 传到 C;如果 B 不在 Z 中,球可以通过。
  • V型结构 A -> C <- B 如果 C 或其任何后代节点在 Z 中(被观测),则球可以从 A 传到 B(反之亦然);如果 C 及其后代都不在 Z 中,球无法通过。

如果所有从 X 中某节点到 Y 中某节点的路径都被 Z “阻塞”(根据上述规则),则称 XYZ D-分离,这意味着在概率分布中 X ⊥ Y | Z 成立。


图与分布的等价性:可靠性与完备性

I(G) 表示由图 G 通过 D-分离得到的所有条件独立性集合。
I(P) 表示从概率分布 P 中实际成立的所有条件独立性集合。
P_F 表示通过因子分解公式 P(X) = ∏ P(X_i | Parents(X_i)) 从图 G 定义出的所有可能概率分布的集合。

我们关心两个性质:

  • 可靠性: 如果分布 P 根据图 G 因子分解(即 P ∈ P_F),那么图 G 中的所有独立性都必须在 P 中成立。即 I(G) ⊆ I(P)这个性质是始终成立的。 这意味着我们从图读出的独立性故事,在任何符合该图因子分解的分布中都是真实的。
  • 完备性: 如果某个独立性关系在所有根据图 G 因子分解的分布 P ∈ P_F 中都成立,那么它一定能从图 G 中通过 D-分离推导出来。即,如果某个独立性不在 I(G) 中,我们总能找到某个 P ∈ P_F 使其不独立。这个性质在一般情况下也成立,但存在一些极端反例。 例如,即使图中 A -> B 有一条边(表示依赖),我们仍可以故意选择参数使得 P(B|A) = P(B),从而在数值上制造出 A ⊥ B。不过,这种参数选择是“测度为零”的,在从数据学习或合理设定参数的自然情况下,完备性可以认为是成立的。

因此,在实践中,我们可以放心地认为贝叶斯网络的图结构与其所定义的分布家族在条件独立性意义上是等价的。


连续变量与混合模型

贝叶斯网络不仅限于离散变量。我们可以轻松地构建包含连续随机变量的模型。

例子:

  • 节点 XY 是连续变量,我们将其建模为高斯分布:X ~ N(μ_x, σ_x^2), Y ~ N(μ_y, σ_y^2)
  • 节点 Z 依赖于 XY。我们可以定义其条件分布,例如:Z | X, Y ~ N( w1*X + w2*Y + b, σ_z^2 )。这里 w1, w2, b 是参数。
  • 节点 M 是一个离散变量(例如,类别标签)。节点 N 是一个连续变量,其分布依赖于 M,例如:N | M=k ~ N(μ_k, σ_k^2)。这构成了一个高斯混合模型,常用于聚类。

模型的设计(选择何种分布形式、如何参数化依赖关系)是知识工程和模型构建的核心部分。


总结

本节课中我们一起学习了:

  1. 有向图模型(贝叶斯网络) 是一种强大的知识表示工具,通过有向无环图和局部条件概率分布来定义联合概率分布。
  2. 知识工程 的过程包括:识别关键随机变量、根据领域知识确定变量间的依赖结构(定性)、以及指定或学习局部概率参数(定量)。隐马尔可夫模型是一个典型例子。
  3. 图结构通过共同父节点、链式、V型结构三种基本模式编码条件独立性。判断任意变量集间的独立性可使用 D-分离 准则。
  4. 贝叶斯网络具有可靠性:从图读出的独立性在所有符合其因子分解的分布中都成立。在自然参数设置下,也具有完备性
  5. 贝叶斯网络可以灵活地结合离散和连续变量,构建复杂的混合模型,用于应对各种现实世界的问题。

掌握有向图模型为我们打开了用概率语言系统化地构建、理解和推理复杂系统的大门。在接下来的课程中,我们将深入探讨如何在这些模型上进行有效的推理和学习。

004:精确推断

在本节课中,我们将开始学习图形模型,并介绍第一个核心主题——推断。具体来说,我们将专注于精确推断。虽然随着模型规模的增长,精确推断在许多应用中已变得不太可行,但它仍然是理解当前*似推断方法的重要基础。本节课我们将学习精确推断的基本原理和算法。

什么是推断?

上一节我们介绍了图形模型,本节中我们来看看什么是推断。推断是指,在给定一个模型后,计算某些查询的答案。在图形模型的语境下,这通常意味着计算某些随机变量子集在给定其他变量观测值下的条件概率。

推断的应用非常广泛,例如:

  • 计算数据的似然度。
  • 计算后验概率分布。
  • 在存在缺失值或隐变量的模型中,估计这些变量的值(例如EM算法中的E步)。
  • 寻找最可能的变量赋值(MAP估计)。

然而,一个悲观的结论是:在一般情况下,计算这些量是NP难问题,因为需要对所有未观测变量的可能配置进行求和,其复杂度是指数级的。

变量消除算法

为了应对指数级复杂度,我们引入变量消除算法。其核心思想是通过系统地“消除”我们不关心的变量,将全局的指数求和分解为一系列局部的、可管理的计算。

让我们通过一个经典的隐马尔可夫模型例子来理解这个过程。我们的目标是计算某个隐变量 Y_i 在给定整个观测序列 X 下的后验概率 P(Y_i | X)

直接计算需要边缘化所有其他隐变量,导致嵌套求和与指数复杂度。变量消除通过选择变量消除顺序(例如从 Y_1Y_T),并反复应用一个称为和积的原子操作来简化计算。

以下是和积操作的核心步骤:

  1. 识别因子:收集所有包含待消除变量(例如 Y_1)的局部概率因子。
  2. 乘积:将这些因子相乘。
  3. 求和:对乘积结果关于待消除变量求和(即边缘化)。
  4. 生成新因子:求和的结果是一个不再包含已消除变量的新因子,将其放回因子列表中。

这个过程持续进行,直到只剩下我们关心的变量。最终,通过对剩余因子进行归一化,即可得到所需的后验概率。

变量消除的计算复杂度取决于消除过程中产生的最大因子的规模。这个规模由消除顺序决定,并且可以直接在图形上通过“消除节点并连接其所有邻居”的操作来可视化地确定。最优消除顺序的寻找本身也是一个NP难问题。

信念传播与消息传递算法

变量消除算法是针对单一查询的。如果我们希望对图中多个节点进行查询,重复运行变量消除效率低下。信念传播(或消息传递)算法解决了这个问题。

信念传播的核心是将变量消除过程理解为在图上传递“消息”。每条消息本质上是一个因子,它汇总了来自图的一部分的信息,并将其传递给相邻部分。

树结构的图上,信念传播算法具有以下特性:

  • 可以安排一个有效的消息传递调度(例如,从叶子节点收集信息到根节点,再从根节点分发信息回叶子节点)。
  • 经过两轮传递后,每个节点都收到了来自图中所有其他部分的信息。
  • 此时,我们可以快速计算图中任意节点的边际分布,而无需重新运行整个算法。

消息 m_{j->i} 从节点 j 传递到节点 i 的通用公式(对于无向图)是:
m_{j->i}(x_i) = ∑_{x_j} φ(x_j) * ψ(x_i, x_j) * ∏_{k ∈ N(j) \ i} m_{k->j}(x_j)
其中 φ 是节点势函数,ψ 是边势函数,N(j) \ i 是节点 ji 之外的所有邻居。

联结树算法

对于包含环(即非树结构)的通用图,直接在原图上运行信念传播不能保证得到精确结果。联结树算法为解决此问题提供了一个系统性的框架。

该算法的步骤如下:

  1. 道德化(针对有向图):将每个节点的所有父节点两两连接,将有向图转化为无向图。
  2. 三角化:通过添加边,确保图中任意长度大于3的环都有一条弦。
  3. 识别团:找出三角化后图中所有的极大完全子图(团)。
  4. 构建联结树:将这些团作为节点,构建一棵树,使得满足联结树性质(即对于图中任何变量,包含该变量的所有团在联结树中形成一个连通子树)。
  5. 在联结树上进行信念传播:在团节点之间传递消息,计算每个团的联合分布,进而通过边缘化得到单个变量的分布。

联结树算法将任意图的推断复杂度明确地体现在最大团的规模上。对于像网格模型这样的结构,最大团可能非常大,导致精确推断依然不可行,但这揭示了问题的内在计算难度。

总结

本节课中我们一起学习了精确推断的核心方法。

  • 我们从变量消除算法入手,理解了如何通过和积操作和选择消除顺序来高效计算单一查询。
  • 接着,我们将其推广到信念传播算法,它通过在树结构图上传递消息,能高效计算所有节点的边际分布。
  • 最后,对于带环的通用图,我们介绍了联结树算法,它通过将图转化为树结构(联结树)来保证推断的精确性,同时其复杂度由图中最大团的规模决定。

精确推断是图形模型的理论基石,它为我们理解和分析更复杂的*似推断方法提供了重要的参考和基准。

005:参数估计 📊

在本节课中,我们将要学习概率图形模型中的参数估计。我们将从最简单的完全观测模型开始,逐步深入到更复杂的部分观测模型,并介绍一种强大的学习算法——期望最大化算法。


概述

参数估计,也称为学习,是概率图形模型中的核心任务。我们通常从一个已知结构的图模型和一组独立同分布的观测数据开始,目标是估计模型中的参数,例如贝叶斯网络中的条件概率表或马尔可夫网络中的势函数参数。


完全观测图模型的参数估计

上一节我们介绍了图模型推断的基本概念。本节中,我们来看看当图模型结构已知且所有变量都被观测到时,如何进行参数估计。

最大似然估计原理

我们从定义损失函数开始,即数据的似然函数。对于贝叶斯网络,联合概率可以表示为许多局部项的乘积。我们通常使用对数似然作为目标函数。

以下是构建似然函数的关键步骤:

  1. 写出给定参数下数据的联合概率。
  2. 利用图模型的因子分解性质,将其分解为局部项的乘积。
  3. 取对数,得到对数似然函数。

指数族分布:一个统一的框架

对于任意复杂的图模型,其参数估计都可以分解为对更小组件的处理。指数族分布为描述这些组件提供了一个强大而统一的框架。

指数族分布的定义如下:

\[p(x|\eta) = h(x) \exp(\eta^T T(x) - A(\eta)) \]

其中:

  • \(\eta\)自然参数
  • \(T(x)\)充分统计量
  • \(A(\eta)\)对数配分函数,用于确保概率归一化。

这个形式的关键在于,参数 \(\eta\) 和数据 \(x\) 通过充分统计量 \(T(x)\) 以线性方式(点积)相互作用。

指数族包含了绝大多数常见的分布,例如:

  • 伯努利分布、多项分布(离散)
  • 高斯分布、泊松分布、伽马分布(连续)

在指数族框架下,参数的最大似然估计有一个通用模式:矩匹配。具体来说,对数配分函数 \(A(\eta)\) 的一阶导数给出了充分统计量的期望(一阶矩),二阶导数给出了方差(二阶矩)。参数估计的过程就是让模型计算的矩等于从数据中观测到的经验矩。

这种统一视角的核心思想是充分性。充分统计量 \(T(x)\) 包含了从数据 \(x\) 中估计参数 \(\eta\) 所需的全部信息。这意味着,在存储数据时,我们只需保留充分统计量,而无需保存所有原始数据点。


广义线性模型:两节点图模型的构建块

理解了单节点的指数族分布后,我们将其扩展到更常见的两节点图模型,例如线性回归和逻辑回归。这些模型可以通过广义线性模型统一描述。

广义线性模型由三部分组成:

  1. 线性预测器\(\zeta = \theta^T x\),将输入进行线性组合。
  2. 响应函数\(\mu = f(\zeta)\),将线性预测值映射为输出变量的条件期望 \(E[y|x]\)
  3. 条件分布:输出 \(y\) 的条件分布属于指数族,其自然参数 \(\eta\) 与均值 \(\mu\) 通过一个可逆函数关联。

通过选择不同的响应函数 \(f\) 和指数族分布,我们可以得到不同的模型:

  • 线性回归:响应函数 \(f\) 是恒等函数,条件分布是高斯分布。
  • 逻辑回归:响应函数 \(f\) 是逻辑函数,条件分布是伯努利分布。

在广义线性模型下,参数 \(\theta\) 的学习可以通过一个通用的梯度上升规则进行(在线学习):

\[\theta \leftarrow \theta + \alpha (y - \mu) x \]

其中 \(\alpha\) 是学习率,\(\mu\) 是当前模型预测的响应值。对于更快的收敛,也可以使用基于牛顿法的批量学习算法。


部分观测图模型与EM算法

在实际应用中,我们经常遇到包含未观测(隐)变量的图模型,例如混合模型或隐马尔可夫模型。本节中,我们来看看如何处理这种部分观测的情况。

挑战:似然函数难以处理

当存在隐变量 \(Z\) 时,观测数据 \(X\) 的(边际)似然函数需要对 \(Z\) 进行求和或积分:

\[L(\theta; X) = p(X|\theta) = \sum_Z p(X, Z|\theta) \]

这个求和项通常在对数内部,导致对数似然函数 \(\log L(\theta; X)\) 不再是简单的求和形式,参数之间相互耦合,直接优化变得困难。

EM算法:一种坐标上升方法

期望最大化算法 通过优化一个更容易处理的替代目标函数——完全数据对数似然的期望(也称为Q函数或证据下界ELBO)来解决这个问题。

EM算法迭代执行以下两步:

  1. E步(期望步):固定当前参数 \(\theta^{(t)}\),计算隐变量后验分布 \(p(Z|X, \theta^{(t)})\),并利用它计算完全数据对数似然的期望:

    \[Q(\theta|\theta^{(t)}) = E_{Z|X,\theta^{(t)}}[\log p(X, Z|\theta)] \]

  2. M步(最大化步):固定Q函数中的分布,寻找最大化 \(Q(\theta|\theta^{(t)})\) 的新参数:

    \[\theta^{(t+1)} = \arg\max_{\theta} Q(\theta|\theta^{(t)}) \]

EM算法的直观理解:以高斯混合模型为例

高斯混合模型假设数据来自多个高斯分布的混合,但每个数据点具体来自哪个分布是未知的。

  • E步(软分配):基于当前的高斯分布参数,计算每个数据点属于每个高斯成分的“责任”(后验概率)。这类似于K-means中的“分配”步骤,但这里是概率性的软分配。
  • M步(参数更新):基于E步计算出的“责任”,重新估计每个高斯成分的参数(均值、方差)和混合权重。这相当于用“加权计数”代替了完全观测情况下的“硬计数”。

EM算法的关键洞察

EM算法的核心在于,它通过引入隐变量的分布 \(q(Z)\),将对数边际似然 \(\log p(X|\theta)\) 分解为两部分:

\[\log p(X|\theta) = \underbrace{E_{q}[\log p(X,Z|\theta)] - E_{q}[\log q(Z)]}_{\text{证据下界 } \mathcal{L}(q,\theta)} + \underbrace{KL(q(Z) || p(Z|X,\theta))}_{\text{KL散度}} \]

其中KL散度非负。EM算法实际上是在交替优化证据下界 \(\mathcal{L}\)

  • E步:固定 \(\theta\),令 \(q(Z) = p(Z|X,\theta)\),这使得KL散度为0,从而证据下界等于对数似然。
  • M步:固定 \(q(Z)\),优化 \(\theta\) 以增大证据下界。

一个重要且常见的误解是:EM算法就是用隐变量的期望值代替缺失值。这是不准确的。正确的做法是计算充分统计量在隐变量后验分布下的期望,并用这个期望值进行后续计算,因为参数是通过充分统计量与数据交互的,而非原始数据本身。


总结

本节课中我们一起学习了概率图形模型的参数估计。

  1. 我们从完全观测模型开始,介绍了基于最大似然估计的原理,并引入了指数族分布作为描述模型组件的统一框架,其参数估计可通过矩匹配完成。
  2. 接着,我们探讨了广义线性模型,它统一了如线性回归、逻辑回归等两节点模型的学习,其参数可以通过通用的梯度规则进行估计。
  3. 最后,我们深入研究了包含隐变量的部分观测模型。为了解决其似然函数难以直接优化的问题,我们介绍了强大的期望最大化算法。EM算法通过交替执行E步(计算完全数据似然期望)和M步(最大化该期望)来迭代优化参数,本质上是最大化对数似然的一个下界。理解“用充分统计量的期望进行估计”是掌握EM算法的关键。

通过将这些构建块——指数族、GLM、EM算法——组合起来,我们可以为各种复杂的概率图模型设计出有效的参数学习算法。

006:案例研究-隐马尔可夫模型和条件随机场 🧠

在本节课中,我们将学习两个经典的序列建模工具:隐马尔可夫模型和条件随机场。我们将回顾它们的基本形式、推理算法和学习方法,并探讨它们各自的优缺点。

概述

我们已经学习了有向和无向图模型的基本形式,以及如何进行精确推理和最大似然学习。本节课我们将聚焦于具体的应用案例,从最基础、最著名的模型开始,逐步深入到一些现代案例。我们将看到之前学过的所有知识如何在一个具体问题中汇聚。

隐马尔可夫模型

上一节我们介绍了图模型的基础,本节中我们来看看一个经典的序列模型——隐马尔可夫模型。

HMM可以被视为对独立数据点堆栈的时间展开。数据点通过隐藏变量Y连接起来。例如,在语音识别中,我们的发音具有时间依赖性;在生物信息学中,人类基因组序列的解码也使用了HMM,其状态可以代表基因内、基因外或其他功能元件。

HMM的基本构成

一个HMM包含以下几个基本要素:

  • 观测序列:一个序列,其值域可以是离散的类别空间或连续的实数空间。
  • 隐藏状态:通常是离散的索引集 {1, 2, ..., M},每个索引可以赋予不同的属性(如聚类名称、位置、基因功能等)。
  • 转移概率:定义从状态i到状态j的转移概率 a_{ij}。通常假设其具有*稳性,即对所有时间步t使用相同的转移矩阵。
  • 初始概率:定义第一个隐藏状态Y1的分布,类似于图模型中的根节点边际分布。
  • 发射概率:定义给定隐藏状态下观测变量的条件概率 P(X_t | Y_t = i)。对于聚类问题,这可以是一个以状态i为索引的高斯分布。

整个模型的联合概率可以依据图模型分解定理写出:
P(X, Y) = P(Y_1) * ∏_{t=2}^{T} P(Y_t | Y_{t-1}) * ∏_{t=1}^{T} P(X_t | Y_t)

HMM的推理:前向-后向算法

推理任务之一是计算给定整个观测序列下,某个隐藏状态的后验概率 P(Y_t = i | X_{1:T})

这可以通过消元法实现,从前向后或从后向前消除不关心的变量。前向算法是一种从左到右的消息传递算法。

以下是前向算法的核心递归公式,用于计算前向消息 α_t(i)
α_t(i) = P(X_{1:t}, Y_t = i)
α_t(i) = [∑_{j} α_{t-1}(j) * a_{ji}] * P(X_t | Y_t = i)

类似地,后向算法计算后向消息 β_t(i)
β_t(i) = P(X_{t+1:T} | Y_t = i)
β_t(i) = ∑_{j} [a_{ij} * P(X_{t+1} | Y_{t+1}=j) * β_{t+1}(j)]

得到前向和后向消息后,单个状态的后验概率可以方便地计算:
P(Y_t = i | X_{1:T}) ∝ α_t(i) * β_t(i)

前向-后向算法本质上是和积算法在HMM这个树状图上的具体应用。

维特比算法:最可能状态序列解码

如果我们想找到最可能的整个隐藏状态序列 argmax_Y P(Y | X),直接计算联合后验并存储所有可能序列的代价是指数级的。

维特比算法通过动态规划巧妙地解决了这个问题。它定义了一个量 δ_t(i),表示到时间t为止,以状态i结尾的最可能路径的概率。
其递归公式为:
δ_t(i) = max_{j} [δ_{t-1}(j) * a_{ji}] * P(X_t | Y_t = i)
与和积算法(前向算法)的关键区别在于,求和符号 被最大化操作 max 所取代。

在实现时,需要注意数值下溢问题,通常通过对数域操作将乘积转换为求和来解决。

HMM的学习

HMM的学习分为有监督和无监督两种情况。

有监督学习:当隐藏状态序列Y和观测序列X都已知时,学习非常简单。以下是参数估计公式(使用参数共享和*稳性假设):

  • 转移概率 a_{ij} 的估计:从状态i转移到状态j的次数,除以从状态i出发的总转移次数。
  • 发射概率的估计:在状态i下观测到符号x的次数,除以处于状态i的总次数。

为了避免零计数导致的过拟合,可以使用加*滑(伪计数)技术,这可以从贝叶斯角度用先验分布来合理化。

无监督学习:当隐藏状态序列Y未知时,需要使用EM算法(在HMM中特称为Baum-Welch算法)。

  • E步:利用当前模型参数,运行前向-后向算法,计算所有单状态后验 γ_t(i) = P(Y_t=i|X) 和相邻状态对的后验 ξ_t(i,j) = P(Y_t=i, Y_{t+1}=j|X)
  • M步:将有监督学习MLE公式中的计数(如从i到j的转移次数 N_{ij}),替换为它们在当前后验分布下的期望值 E[N_{ij}] = ∑_t ξ_t(i,j)。然后像有监督情况一样更新参数。

从HMM到条件随机场

尽管HMM非常成功,但它存在一些局限性,这促使了条件随机场的发展。

HMM的局限性

HMM主要有两个短板:

  1. 难以系统性地捕获非局部知识:HMM的转移和发射概率都是局部定义的。例如,预测下一个词可能只依赖于前一个词,而无法方便地利用整个句子的语境、格式(如斜体、括号)等信息。
  2. 学习目标与预测目标不匹配:HMM的学习目标是最大化联合概率 P(X, Y) 或边际概率 P(X),但我们的最终任务通常是给定X预测Y,即最大化条件概率 P(Y|X)。这就像为了去华盛顿DC,先坐火车到纽约再折返。

一个经典的“标注偏置问题”揭示了局部归一化带来的弊端。在一个状态转移选项中,如果一个“孤僻”的状态只有少数几个转移方向,那么即使它对某个目标的“倾向”绝对值不高,其转移概率也可能显得比一个“社交”状态对其“最好朋友”的转移概率还要高,因为后者的概率被众多选项稀释了。这种局部比较可能产生违反直觉的全局最优路径。

条件随机场的定义

CRF直接对条件分布 P(Y|X) 建模,绕过了对 P(X) 的建模。它使用全局归一化的势函数,而非局部归一化的条件概率。

CRF的条件概率定义如下:
P(Y|X) = (1/Z(X)) * exp( ∑_{t} ∑_{k} λ_k f_k(Y_t, X) + ∑_{t} ∑_{l} μ_l g_l(Y_t, Y_{t+1}, X) )
其中:

  • f_k 是状态特征函数,依赖于当前状态 Y_t 和整个观测序列 X
  • g_l 是转移特征函数,依赖于相邻状态对和整个观测序列 X
  • λ_kμ_l 是待学习的权重参数。
  • Z(X) 是配分函数,用于全局归一化。

关键优势在于,特征函数 fg 可以灵活地访问整个观测序列 X,从而能够融入非局部特征。同时,势函数 exp(...) 本身不需要局部归一化,归一化由全局的 Z(X) 完成,避免了标注偏置问题。

CRF的推理与学习

推理:在链式CRF上,计算条件概率 P(Y|X) 或寻找最可能序列 argmax_Y P(Y|X) 的算法,与HMM中的前向-后向算法和维特比算法在形式上几乎完全相同,只是将局部概率替换为相应的势函数。消息传递(和积算法或最大和算法)依然适用且高效。

学习:在完全观测(给定X和Y)的情况下,CRF的学习目标是最大化条件似然 P(Y|X)。与有监督HMM的简单计数不同,CRF的梯度计算涉及配分函数 Z(X)

损失函数 L = -log P(Y|X) 关于参数 λ_k 的梯度具有如下形式:
∂L/∂λ_k = E_{P(Y|X)}[f_k(Y, X)] - f_k(Y_{true}, X)
即,特征函数在当前模型条件分布 P(Y|X) 下的期望值,减去在真实标注 Y_{true} 下的观测值。

因此,即使是在有监督学习中,CRF的参数更新也需要进行推理(计算期望 E[f_k]),这通常通过运行前向-后向算法来计算所需的后验边际概率。学习过程通常使用基于梯度的优化算法(如梯度下降、L-BFGS)进行迭代,直到收敛。

总结

本节课中我们一起学习了两个核心的序列模型。我们回顾了隐马尔可夫模型的基本构成、高效的前向-后向推理算法、维特比解码算法以及有监督和无监督学习策略。接着,我们探讨了HMM的局限性,并引出了条件随机场模型。CRF通过直接对条件概率建模并使用全局归一化的势函数,提供了融入丰富非局部特征的灵活性,并避免了标注偏置问题。虽然CRF的学习因涉及推理而比有监督HMM更复杂,但其表达能力和理论上的优势使其在许多序列标注任务中成为强大的工具。理解这两个模型的联系与区别,对于在具体问题中选择和设计合适的模型至关重要。

007:变分推断 1 🧠

在本节课中,我们将学习一种强大的*似推断方法——变分推断。我们将从回顾精确推断的局限性开始,引出变分法的核心思想,并通过一个具体的主题模型(LDA)案例,详细讲解如何应用*均场*似进行变分推断。

精确推断的挑战

上一节我们介绍了精确推断,它要求图结构是树状的,并且变量范围是有限、离散的,或者有已知的积分方法(如高斯分布)。然而,在实际应用中,我们常常会遇到不满足这些条件的情况。

例如,图模型可能过于复杂,导致团的大小过大,使得精确求和或积分在计算上不可行。这时,我们就需要借助*似推断的方法。

*似推断概览

*似推断主要有两大技术路线:变分法和采样法。本节课我们聚焦于变分法。

变分法的核心思想是,用一个简单的、易于处理的分布 Q 来*似复杂的真实后验分布 P。我们通过优化一个距离度量(通常是KL散度)来找到最佳的 Q。从图的角度看,这相当于将原始复杂的图结构简化为一个更简单的子图结构。

以下是变分法中的一些主要技术:

  • *均场:将图简化为完全独立的节点,即 Q 是所有单变量边际分布的乘积。
  • 环状信念传播:忽略图中的环状结构,直接在所有边上迭代传递消息。
  • 结构*均场:将图简化为一些独立的簇(子图),而非完全独立的节点。
  • 期望传播:通过改变损失函数来进行*似。

变分法原理

变分技术历史悠久,其本质是将一个数学问题重新表述为一个优化问题。例如,矩阵的特征值可以表示为某个优化问题的解。

在我们的场景中,查询目标(如计算边际分布)通常通过解析的求和或积分来完成。变分法告诉我们,这也可以通过解决一个使用梯度下降的优化问题来实现。

具体步骤如下:

  1. 从一个复杂、难以处理的原始分布 P 开始。
  2. 将其投影到一个由参数 α 定义的、简单的分布族 Q 中。
  3. 通过最小化 QP 之间的距离(如KL散度),找到最优的参数 α,从而得到最佳*似 Q
  4. Q* 上执行查询(如计算边际分布)会变得非常容易。

对于*均场*似,我们通常定义 Q 为所有单变量边际分布的乘积。最小化 KL散度 KL(Q||P) 等价于最大化一个被称为变分下界自由能的目标函数,其形式为 Q 的熵加上 P 的“能量”在 Q 下的期望。

案例研究:主题模型与LDA

为了具体说明变分推断,我们以潜在狄利克雷分配模型为例。主题模型的设计源于处理海量文本的实际需求,其目标是从文档集合中自动发现隐含的“主题”,并将每篇文档表示为这些主题上的混合比例,从而实现降维和语义理解。

LDA是一个典型的贝叶斯层次模型:

  • 每篇文档有一个主题比例 θ,服从狄利克雷先验。
  • 对于文档中的每个词,根据 θ 选择一个主题 z
  • 根据该主题对应的词分布 β 生成观测到的词 w

推理任务是计算所有隐藏变量(z, θ, β)的后验分布。由于需要耦合地积分或求和所有连续和离散变量,精确计算是难解的。

应用于LDA的变分推断

我们引入一个完全分解的变分分布 Q 来*似真实后验:
Q(θ, z, β) = q(θ|γ) * ∏_n q(z_n|φ_n) * ∏_k q(β_k|λ_k)
这里,γ, φ, λ 是变分参数,分别对应主题比例、主题分配和主题词分布的*似。

通过将 Q 代入并优化变分下界,我们可以推导出更新这些变分参数的坐标上升方程。例如,λ_{k,j}(主题k中词j的频率参数)的更新依赖于所有文档中词j的出现次数,并按该词被分配到主题k的变分概率 φ 进行加权。

这些更新方程构成了变分E步:固定原始模型参数,迭代更新变分参数直至收敛。如果需要,还可以在此基础上设计M步来点估计原始模型参数(如 β),或者直接使用变分参数提供的充分统计量。

模型评估的思考

评估主题模型颇具挑战性,因为“主题”本身具有一定主观性。客观的评估方法包括:

  • 模拟研究:从已知参数的LDA模型生成合成数据,然后运行推断算法并比较恢复的参数与真实值之间的误差。
  • 经验评估:在带有类别标签的文档集上,使用推断出的主题向量进行分类,以准确率作为间接评估指标。
  • 计算困惑度:衡量模型对未见文档的预测能力。

然而,评估常常与模型设计、推断*似质量等因素交织在一起,需要谨慎对待。

总结

本节课我们一起学习了变分推断的核心思想。我们了解到,当精确推断不可行时,可以通过引入一个参数化的简单分布族 Q 来*似复杂后验 P,并通过优化KL散度来寻找最佳*似。*均场*似是其中一种强大而直接的方法,它假设所有变量独立。

我们以LDA主题模型为例,详细展示了如何构建完全分解的变分分布,并推导出变分参数的更新方程。变分推断不仅提供了后验的*似,其变分参数本身也包含了估计模型原始参数所需的信息。尽管评估存在挑战,但变分推断为处理复杂的概率图模型推理问题提供了一个坚实而灵活的框架。

008:变分推断(二)🎓

在本节课中,我们将继续学习变分推断。上一节我们介绍了变分推断的基础及其在主题模型中的应用。本节中,我们将探讨更高级的变分推断技术,包括随机变分推断和黑盒变分推断。最后,我们将从更高层次讨论均值场和信念传播等方法背后的统一理论。

回顾:主题模型与均值场推断

上次我们讨论了主题模型,这是一种忽略词序信息、对文档集合进行建模的混合模型。该模型的推断过程通常很困难,因此我们采用了*似推断方法,具体来说是变分推断,更具体地说是均值场变分推断。

均值场变分推断对应于将复杂的后验分布*似为一系列独立因子的乘积。通过优化证据下界,我们可以对变分*似参数进行坐标下降法优化。

在主题模型等隐变量模型中,通常存在两类参数:影响所有数据的全局参数(如主题参数 β)和仅与单个数据点相关的局部参数(如文档主题分布 θ 及其变分参数)。标准的变分推断需要遍历所有数据点更新局部参数后,再更新全局参数,这在数据量巨大时效率低下。

随机变分推断 🔄

为了解决大数据场景下的效率问题,我们可以借鉴随机梯度下降的思想,发展出随机变分推断。

其核心思想是将目标函数(证据下界)分解为全局参数部分和局部参数部分之和。由于全局部分不依赖于单个数据点,我们可以先对局部参数进行优化(这通常有闭式解且计算廉价),然后利用局部优化结果,对全局参数的梯度进行随机*似估计。这样,我们可以在处理每个或每小批数据后立即更新全局模型,实现更频繁的模型更新和更快的收敛。这种方法也被称为在线变分推断。

自然梯度 🌿

在优化与分布相关的目标函数时,我们需要注意到参数空间的距离与分布空间的距离是不同的。例如,两个高斯分布的均值参数相差相同,但若方差不同,它们之间的KL散度可能差异巨大。即使参数代表相同的分布,不同的参数化方式(如方差 vs. 精度)也对应着不同的距离尺度。

因此,在优化分布参数时,使用朴素的欧几里得几何可能不是最佳选择。自然梯度方法通过使用费雪信息矩阵(对数似然的负海森矩阵期望)作为二阶*似,来考虑参数空间的曲率信息。其更新规则类似于牛顿法,但使用了反映分布空间几何特性的度量。

将自然梯度融入随机变分推断,可以得到性能更优的算法。

黑盒变分推断 📦

传统的变分推断严重依赖于似然函数与先验分布的共轭性,以简化计算。然而,很多时候我们希望使用非共轭的先验,这时传统方法就失效了。黑盒变分推断旨在解决这个问题。

其核心思想是使用一个灵活的模型(如神经网络)作为变分分布 q(z; λ) 的*似,从而能够处理任意的生成模型 p(x, z)。我们主要介绍两种梯度估计方法:得分函数梯度和重参数化梯度。

我们的目标是优化证据下界 ELBO(λ),这需要计算其对变分参数 λ 的梯度。

得分函数梯度 通过一系列推导(利用对数导数的链式法则和得分函数的期望为零的性质),可以将梯度表达为关于变分分布 q 的期望形式:
∇_λ ELBO = E_{z∼q} [ (log p(x,z) - log q(z; λ)) ∇_λ log q(z; λ) ]
这个期望可以用蒙特卡洛采样来*似。这种方法也被称为强化梯度估计,但其方差通常较高。

重参数化梯度 是另一种方法,它将变分分布 q 表示为某个简单随机变量(如标准高斯)的可微变换。通过这种重参数化,可以将梯度“移入”期望内部,从而得到方差更低的梯度估计。这是变分自编码器(VAE)的核心思想。

变分推断的统一视角 🔗

接下来,我们从更高层次探讨均值场和信念传播等变分推断方法的统一理论。我们将看到,精确推断问题可以表述为一个变分优化问题。

我们考虑无向图模型(马尔可夫随机场)。推断任务中常关注的是单变量或变量对的边际分布,以及归一化常数(配分函数)Z。为了将这些查询表示为变分问题,我们需要指数族和凸分析作为工具。

指数族分布的概率密度函数可以写为:
p(x; θ) = exp(θ^T φ(x) - A(θ))
其中 θ 是自然参数,φ(x) 是充分统计量,A(θ) 是对数配分函数,它是一个凸函数。

许多马尔可夫随机场(如高斯MRF、伊辛模型)都可以写成指数族形式。在指数族中,边际参数(即充分统计量的期望 μ = E[φ(x)])与自然参数 θ 是对偶的。计算 μA(θ) 本质上就是在进行边际推断。

利用凸共轭函数的概念,我们可以将对数配分函数 A(θ) 表示为关于边际参数 μ 的变分问题:
A(θ) = sup_{μ∈M} {θ^T μ - A*(μ)}
其中 A*(μ)A(θ) 的凸共轭,在指数族中恰好等于分布 p(x; θ(μ)) 的负熵 -H(p)。集合 M 是所有可实现的边际参数 μ 构成的集合,称为边际多面体。

因此,精确推断问题等价于在边际多面体 M 上求解一个优化问题。然而,对于一般图结构,边际多面体 M 由指数级数量的线性不等式定义,使得该优化问题难以求解。

均值场方法 对应于用一個更简单的内*似集合 M_F ⊂ M 来替换原始的边际多面体 M。这通常通过考虑一个简化图模型(如完全断开连接或树结构图)来实现,该模型的推断是容易的。由于约束更紧,由此得到的 A(θ) 的变分下界是真实值的下界。

环状信念传播 则对应于用一個更简单的外*似集合 M^+ ⊃ M 来替换 M,并配合一个*似的熵项 B*(μ)。由此推导出的消息更新规则恰好是该外*似优化问题的拉格朗日乘子。

总结 📝

本节课我们一起学习了变分推断的进阶内容。

  • 我们首先介绍了随机变分推断,它通过随机梯度估计实现大规模数据下的高效在线学习。
  • 接着探讨了自然梯度,它考虑了参数空间的几何结构,能提供更合理的优化方向。
  • 然后,我们了解了黑盒变分推断,它利用得分函数梯度或重参数化梯度,使得变分推断能够应用于非共轭模型。
  • 最后,我们从统一视角回顾了变分推断,将精确推断表述为在边际多面体上的优化问题,并解释了均值场(内*似)和环状信念传播(外*似)作为解决该难解问题的两种*似策略的本质。

下节课,我们将进入采样方法的学习,如蒙特卡洛、重要性采样和马尔可夫链蒙特卡洛等。

009:蒙特卡洛方法

在本节课中,我们将要学习蒙特卡洛方法。这是一种基于采样的推断方法,用于处理复杂概率分布下的积分或期望计算问题。我们将从简单的朴素采样开始,逐步探讨拒绝采样、重要性采样,并最终深入到马尔可夫链蒙特卡洛方法的核心思想。

背景与动机

上一节我们介绍了变分推断方法,如*均场和环状信念传播。这些方法将推断问题转化为优化问题。然而,它们需要一定的数学技巧和推导。

本节中,我们来看看另一种强大的推断范式:基于采样的方法。其核心思想是,与其直接处理复杂的概率分布 $ P(x) $,不如从该分布中抽取一系列样本 $ {x^{(1)}, x^{(2)}, ..., x^{(N)}} $,然后用这些样本来*似计算我们感兴趣的统计量,例如期望值:

\[\mathbb{E}_{P(x)}[f(x)] \approx \frac{1}{N} \sum_{i=1}^{N} f(x^{(i)}) \]

这种表示是隐式的,没有解析形式,但非常灵活。

朴素采样与挑战

在概率图模型中,若图结构简单(如树结构或可管理的联结树),我们可以进行精确推断。对于更复杂的图,我们之前学习了变分推断方法。

基于采样的方法从一个简单的想法开始:从联合分布中生成样本。例如,在一个贝叶斯网络中,我们可以按照拓扑顺序,根据每个节点的条件概率分布进行采样。

然而,朴素采样面临几个主要挑战:

  1. 如何从复杂分布中采样:许多分布没有现成的采样方法。
  2. 样本利用效率:许多样本可能对估计目标量贡献很小,尤其是在估计罕见事件的条件概率时。
  3. 需要大量样本:为了获得稳定的估计,尤其是对尾部概率,需要非常多的样本。

蒙特卡洛方法这门学科正是研究如何解决这些问题。

拒绝采样

为了解决从复杂分布 $ \pi(x) $ 中采样困难的问题,拒绝采样引入了一个易于采样的提议分布 $ Q(x) $。

算法步骤如下:

  1. 从提议分布 $ Q(x) $ 中抽取一个样本 $ x^* $。
  2. 计算接受概率 $ A = \frac{\pi'(x^)}{K \cdot Q(x^)} $,其中 $ \pi'(x) $ 是目标分布未归一化的部分(处理难以计算归一化常数的问题),$ K $ 是一个常数,确保对于所有 $ x $,有 $ K \cdot Q(x) \geq \pi'(x) $。
  3. 以概率 $ A $ 接受样本 $ x^* $,否则拒绝并回到步骤1。

可以证明,被接受的样本服从目标分布 $ \pi(x) $。

拒绝采样的缺陷:其效率高度依赖于提议分布 $ Q(x) $ 与目标分布 $ \pi(x) $ 的匹配程度。如果 $ Q(x) $ 覆盖 $ \pi(x) $ 的区域很小(即 $ K $ 很大),那么绝大多数样本都会被拒绝,效率极低,在高维空间中这一问题尤为严重。

重要性采样

重要性采样不再拒绝样本,而是为每个样本赋予一个权重,从而更有效地利用所有样本。

基本重要性采样:假设可以从提议分布 $ Q(x) $ 中采样,且 $ Q(x) > 0 $ whenever $ P(x) > 0 $。我们计算每个样本的权重 $ w = P(x)/Q(x) $。期望的估计为:

\[\mathbb{E}_{P(x)}[f(x)] \approx \frac{1}{N} \sum_{i=1}^{N} w^{(i)} f(x^{(i)}) \]

归一化重要性采样:当目标分布 $ P(x) = P'(x)/Z $ 的归一化常数 $ Z $ 未知时,我们可以进行如下估计:

  1. 从 $ Q(x) $ 中抽取样本 $ {x^{(1)}, ..., x^{(N)}} $。
  2. 计算未归一化权重 $ r^{(i)} = P'(x{(i)})/Q(x) $。
  3. 估计归一化常数 $ Z \approx \hat{Z} = \frac{1}{N} \sum_{i=1}^{N} r^{(i)} $。
  4. 计算归一化权重 $ \tilde{w}^{(i)} = r^{(i)} / \hat{Z} $。
  5. 期望估计为 $ \sum_{i=1}^{N} \tilde{w}^{(i)} f(x^{(i)}) $。

重要性采样的问题在于,如果提议分布 $ Q(x) $ 与目标分布 $ P(x) $ 差异很大,权重值可能非常不*衡(少数样本权重极高,多数样本权重极低)。这会导致估计的方差很大,并且可能陷入对某个局部区域的高估,而错过分布的其他重要部分(如另一个峰值)。

加权重采样

为了解决重要性采样中权重不*衡的问题,加权重采样(或称重采样)在获得一批带权重的样本后,根据这些权重的大小,重新从中抽取新的样本。

过程如下:

  1. 通过重要性采样获得样本集 $ {x^{(i)}} $ 及其对应权重 $ {w^{(i)}} $。
  2. 将权重归一化为概率。
  3. 根据这个概率分布,从原有样本集中进行有放回地抽样,生成新的样本集。

这样,高权重的样本被复制的机会更大,低权重的样本被复制的机会更小。新的样本集可以*似看作来自目标分布,然后可以直接用于计算等。但这是一个批处理算法,需要存储所有样本。

马尔可夫链蒙特卡洛

MCMC的核心思想是构建一个马尔可夫链,其*稳分布恰好就是我们想要采样的目标分布 $ P(x) $。这样,当链运行足够长时间后,其状态就可以作为来自 $ P(x) $ 的样本。

Metropolis-Hastings 算法

MH算法是MCMC的一个经典实现。它使用一个任意的提议分布 $ Q(x' | x) $ 来建议下一个状态,然后通过一个接受概率来决定是否转移到该状态。

算法步骤如下:

  1. 初始化状态 $ x^{(0)} $。
  2. 对于 $ t = 0, 1, 2, ... $:
    • 从提议分布 $ Q(x' | x^{(t)}) $ 中生成候选状态 $ x^* $。
    • 计算接受概率:

      \[A = \min \left( 1, \frac{P(x^*)}{P(x^{(t)})} \cdot \frac{Q(x^{(t)} | x^*)}{Q(x^* | x^{(t)})} \right) \]

    • 以概率 $ A $ 接受候选状态,令 $ x^{(t+1)} = x^* $;否则拒绝,令 $ x^{(t+1)} = x^{(t)} $。

可以证明,在满足一定条件(不可约性、非周期性)下,该马尔可夫链的*稳分布就是 $ P(x) $。初始的一段样本可能不服从*稳分布,通常会被丢弃,这段时期称为“预烧期”。

Gibbs 采样

Gibbs采样是MH算法的一个特例,特别适用于概率图模型。它每次只更新随机变量向量的一个维度。

算法步骤如下:

  1. 初始化所有变量 $ \mathbf{x}^{(0)} = (x_1^{(0)}, ..., x_K^{(0)}) $。
  2. 对于 $ t = 0, 1, 2, ... $:
    • 对于每个变量维度 $ k = 1, ..., K $:
      • 从条件分布 $ P(x_k | x_1^{(t+1)}, ..., x_{k-1}^{(t+1)}, x_{k+1}^{(t)}, ..., x_K^{(t)}) $ 中采样得到 $ x_k^{(t+1)} $。在概率图模型中,这个条件分布通常只依赖于马尔可夫毯内的变量,易于计算。
    • 完成对所有维度的更新后,得到新样本 $ \mathbf{x}^{(t+1)} $。

Gibbs采样可以看作是MH算法中,提议分布取为精确条件分布 $ P(x_k | \mathbf{x}_{-k}) $ 的特例。在这种情况下,接受概率 $ A $ 恒为1,即所有提议都被接受,效率很高。

理论保证:马尔可夫链

为了理解MCMC的收敛性,我们需要一些马尔可夫链的基本概念:

  • 转移核 $ T(x' | x) $:给定当前状态 $ x $,下一时刻状态为 $ x' $ 的概率。
  • *稳分布 $ \pi(x) $:满足 $ \pi(x') = \sum_x \pi(x) T(x' | x) $ 的分布。一旦链达到*稳分布,后续的状态都将服从该分布。
  • 不可约性:从任何状态出发,经过有限步都能以正概率到达任何其他状态。
  • 非周期性:链返回任何状态的时刻没有固定的周期。
  • 细致*衡条件:如果转移核满足 $ \pi(x) T(x' | x) = \pi(x') T(x | x') $,则 $ \pi(x) $ 是该链的*稳分布。MH算法和Gibbs采样都构造了满足以 $ P(x) $ 为*稳分布的细致*衡条件的转移核。

总结

本节课中我们一起学习了蒙特卡洛方法的核心思想与主要算法。我们从最简单的基于采样的期望估计出发,指出了朴素采样的不足。接着,我们学习了拒绝采样和重要性采样,它们通过引入提议分布来从复杂分布中获取样本,但分别存在效率低下和权重失衡的问题。随后,我们进入了马尔可夫链蒙特卡洛的领域,Metropolis-Hastings算法通过构建一个以目标分布为*稳分布的马尔可夫链来生成样本。最后,我们探讨了特别适用于概率图模型的Gibbs采样,它通过迭代地从每个变量的条件分布中采样,高效地实现了MCMC。这些方法为在复杂概率模型中进行*似推断提供了强大而实用的工具。

010:高级MCMC方法 🚀

在本节课中,我们将学习高级马尔可夫链蒙特卡洛方法。我们将首先回顾并完成上次课程遗留的内容,然后探讨如何将梯度信息等优化技术融入采样过程,以提升采样效率。最后,我们会介绍一些结合变分推断与MCMC的混合方法。

回顾与问题诊断 🔍

上一节我们介绍了蒙特卡洛和MCMC方法。其核心思想是使用一个易于采样的提议分布来绕过难以直接采样的目标分布。MCMC通过一个随时间变化的提议分布(基于前一个样本)来生成序列,并最终收敛到目标分布。

然而,即使MCMC方法也可能遇到问题。在实践中,我们需要监控两个关键指标来判断采样过程是否有效。

以下是评估采样质量的两个核心指标:

  1. 接受率:如果提议分布与目标分布不匹配,可能导致大量样本被拒绝。例如,在目标分布概率密度变化剧烈的区域(如“悬崖”边缘),一个对称的高斯提议可能有一半的样本会落入极低概率区域而被拒绝。通常,50%左右的接受率被认为是良好的。
  2. 自相关性:MCMC样本序列通常是相关的,而许多估计方法假设样本是独立同分布的。高自相关性会降低样本的有效性。我们可以计算相隔 k 步的样本之间的自相关函数来评估。有效样本大小的计算公式为:ESS = N / (1 + 2 * Σ ρ(k)),其中 N 是总样本数,ρ(k) 是滞后 k 的自相关系数。

此外,还有其他诊断技巧,例如运行多个独立的马尔可夫链并观察它们是否混合良好——即不同链的样本轨迹是否收敛到相似的分布。另一种方法是监控基于样本计算的某个统计量(如数据的似然)是否稳定。

总而言之,蒙特卡洛方法是对我们之前学习的优化技术(如梯度下降)的补充。优化是确定性地沿着梯度方向更新参数,而采样则是以随机的方式抽取样本,并希望它们收敛到*衡分布。

接下来,我们将看到这两种看似迥异的技术如何被结合起来,产生更好的结果。

哈密顿蒙特卡洛 ⚛️

即使接受率为1的MCMC方法也可能不够理想。一个常见问题是随机游走行为可能导致低接受率或高自相关性。理想的提议应该能引导样本朝向高概率区域移动,而梯度信息正好能提供这种方向指引。

这就引出了哈密顿蒙特卡洛方法。它借鉴了物理学中的哈密顿动力学,通过引入辅助的动量变量,使我们能够在提议中利用目标分布对数概率的梯度。

在HMC中,我们定义了一个扩展的联合分布,它包含我们感兴趣的位置参数 q(对应目标分布)和辅助的动量参数 p。哈密顿量 H(q, p) 定义为势能 U(q)(即目标分布的负对数概率)与动能 K(p)(通常取简单的二次形式 p^T p / 2)之和。

哈密顿动力学由以下方程描述:
dq/dt = ∂H/∂p
dp/dt = -∂H/∂q

如果我们直接使用欧拉方法离散化这些方程来更新 qp,序列可能会发散。因此,HMC采用了一种称为蛙跳法的数值积分方法,它能保持相空间体积,从而产生稳定的轨迹。

HMC的采样步骤如下:

  1. 从标准正态分布中抽取动量 p
  2. 使用蛙跳法,从当前状态 (q, p) 出发,沿哈密顿轨迹模拟 L 步,得到提议状态 (q*, p*)。在模拟过程中,我们需要计算梯度 ∇U(q) = -∇ log π(q)
  3. 以概率 min(1, exp(-H(q*, p*) + H(q, p))) 接受提议状态 (q*, p*),否则保留原状态。

由于梯度信息引导了提议方向,HMC能更有效地探索高概率区域,并产生相关性更低的样本,尤其在处理高维分布时优势明显。

沿着利用梯度的思路,还有更进一步的变体,例如朗之万动力学MCMC。它本质上是只进行一步蛙跳积分的HMC,更新公式更紧凑。为了处理大数据集,还可以使用随机梯度朗之万动力学,即用小批量数据来*似计算梯度。

从提案发展的角度看,我们经历了从固定简单提议(MC),到基于前一样本的移动提议(MCMC),再到利用梯度信息构造智能提议(HMC)的过程。HMC巧妙地将优化中的梯度信息与MCMC的采样框架结合了起来。

注意:HMC通常适用于连续变量,因为离散变量的梯度难以定义。

与变分推断的结合 🤝

我们还可以从另一个维度改进提议分布:利用对目标分布本身的*似知识。

回顾变分推断,其核心是找到一个易于处理的分布 q(x) 来*似复杂的目标后验分布 p(x),通常通过最小化KL散度 KL(q||p) 来实现。

一个自然的想法是:将变分推断得到的*似分布 q(x) 作为MCMC的提议分布。这样做的 rationale 在于:

  • 在变分推断中,我们通过优化得到一个接*目标分布的 q(x)
  • 将这个 q(x) 作为MCMC的提议,由于两者相*,有望获得更高的接受率。
  • MCMC采样步骤可以进一步修正变分*似的偏差,推动样本更接*真实目标分布 p(x)

这个过程甚至可以迭代进行:用MCMC采样得到的样本信息来重新优化变分*似 q(x),然后用更新后的 q(x) 作为新的提议,如此循环。这种自适应提议方法结合了变分推断(优化)和MCMC(采样)的优势,可以提高混合速率。

在实际解决大规模复杂模型(如深度生成模型)的推断问题时,我们往往需要这种组合性思维。模型的不同部分可能适合不同的推断技术:有些子问题可以用变分*似简化结构,有些连续参数的采样可以用HMC加速,而整体框架则用MCMC来协调。多种方法可以灵活组合,以应对不同层面的挑战。

序列蒙特卡洛与粒子滤波 🔄

最后,我们简要介绍一种重要的序列化采样技术:粒子滤波,它基于序列蒙特卡洛重加权采样的思想。

考虑一个状态空间模型(如隐马尔可夫模型),其中转移概率或观测概率非常复杂,难以进行精确推断。粒子滤波的目标是在线地维护当前隐藏状态 p(x_t | y_{1:t}) 的分布。

其核心步骤是:

  1. 预测:根据上一时刻的样本集和状态转移模型,预测当前时刻的先验状态分布。
  2. 更新:当获得新的观测 y_t 后,为每个预测样本计算一个权重,权重正比于观测似然 p(y_t | x_t)
  3. 重采样:根据权重对样本进行重采样,淘汰低权重的粒子,复制高权重的粒子。这解决了样本退化问题——即大量粒子聚集在低概率区域。

通过不断重复“预测-加权-重采样”的循环,粒子滤波可以仅用一组样本(粒子)来*似表示随时间演变的复杂后验分布。这种方法在目标跟踪、机器人定位等在线时序推理问题中非常有效。

总结 📚

本节课我们一起学习了多种高级MCMC方法:

  • 我们首先学习了如何诊断MCMC的问题,如接受率和自相关性。
  • 然后,我们深入探讨了哈密顿蒙特卡洛,它通过引入物理动力学和梯度信息,能更高效地探索目标分布,尤其适用于高维连续空间。
  • 接着,我们看到了如何将变分推断与MCMC结合,使用变分*似作为智能提议分布,形成混合推断策略。
  • 最后,我们了解了序列蒙特卡洛粒子滤波,这是一种处理序列模型的在线采样方法,通过重加权与重采样来维持对时变后验分布的*似。

这些技术展示了如何将优化(梯度、变分下界)与采样(MCMC)的思想融合,为解决复杂的概率推断问题提供了更强大、更灵活的工具箱。从下节课开始,我们将进入深度学习与图模型交叉的领域,探索如变分自编码器等现代生成模型。

011:深度学习的统计与算法基础 🧠

在本节课中,我们将开始一个新的章节,探讨深度学习。深度学习是一个庞大的领域,但本课程将聚焦于其基础性问题,并建立其与机器学习其他领域(如图形模型)之间的联系,以探索潜在的交叉研究机会。

深度学习概述 📈

上一节我们介绍了图形模型,本节中我们来看看深度学习。从许多人的视角来看,早期的机器学习与深度学习有些相似:输入数据,调整参数,然后得到输出。随着领域发展,我们掌握了更多理论和内在机制。深度学习虽然历史悠久,但当前的理解是构建具有任意层数、宽度和连接性的庞大网络,然后进行训练。

那么,深度学习等同于机器学习吗?它们有何异同?为了回答这个问题,我们将从深度学习的历史和基础概念开始。

历史与基础:从生物神经元到人工神经元 🧬

神经科学家对人脑工作原理有长期研究。他们发现人脑约有100亿个神经元。每个神经元有细胞体、轴突(发出信号)和树突(接收信号),信号在突触处聚合。

受此启发,人们希望人工模拟这种结构。1943年,McCulloch和Pitts首次提出了人工神经元感知机的概念。其图形表示与生物神经元相似:有输入、一个线性组合器、一个门限(激活函数),然后产生输出。

他们希望用此模拟大脑活动。当然,模拟大脑活动需要多个这样的神经元连接成网络。

感知机的数学描述

以下是感知机的基本数学描述:

  • 输入x1, x2, ..., xn
  • 线性组合z = Σ (wi * xi) + b,其中 wi 是权重,b 是偏置。
  • 激活函数a = σ(z),其中 σ 是一个非线性函数,如Sigmoid函数:σ(z) = 1 / (1 + e^(-z))
  • 输出y = a

模型中未知的是权重 wi。我们可以通过最大化某个目标函数来学习权重。这类似于我们学过的逻辑回归,其输出似然函数是逻辑函数。在感知机中,有时会使用不同的方法,例如关心输出的大小而引入*方残差损失

然后,我们可以使用梯度下降算法:写出损失函数,求导并更新权重。Sigmoid函数的一个优良特性是其导数形式简洁:σ'(z) = σ(z) * (1 - σ(z))。由此得到感知机学习算法,它本质上是梯度下降。

当数据集很大时,计算整个数据集的梯度会很繁琐,因此有随机版本,每次使用一个样本进行更新。

从单层到多层:反向传播算法 🔄

将单个感知机扩展到神经网络。一个简单的网络可能包含多个感知机层。

现在的问题是:能否用同样的梯度下降思想来学习网络中所有权重?这里出现了新问题:中间层的节点没有可观察的输出用于比较。这引出了著名的反向传播算法。

从数学上看,我们有一系列输入变量,通过中间层生成输出。每个连接都有权重。我们需要计算输出相对于每个权重的导数。这可以通过链式法则实现。

这个过程可以看作是在一个计算图上操作。计算图记录了从输入到输出的每一步计算,也定义了计算梯度所需的反向步骤。这与图形模型不同,图形模型的节点和边是为了表示条件独立性而精心设计的,而这里的图主要是计算载体。

反向传播算法如今已被自动化,例如在TensorFlow等框架中。

深度网络的构建模块 🧱

现在,让我们从更高视角看看构建深度网络需要哪些基本模块。

  • 激活函数:如线性组合、ReLU、Sigmoid、Tanh等。
  • 网络结构/层
    • 全连接层
    • 卷积层(连接下一层节点与上一层节点的子集)
    • 循环连接(可展开为水*节点层)
    • 带有捷径或旁路的块结构(如残差网络)
  • 损失函数:用于衡量输出好坏,如交叉熵损失、均方误差损失。

这些模块可以任意组合,形成高度可组合的架构,并能同时容纳多个损失函数以完成多任务预测,甚至进行迁移学习。

人们通常相信,只要有足够的数据,深度架构就能不断学习并取得良好效果。这背后的一种观点是,深度神经网络在进行表示学习——网络能够从数据中逐步学习到越来越抽象的表示,并将它们“解耦”。例如,在训练人脸数据的深度网络时,人们发现底层权重像边缘检测器,中层权重像面部部件,高层权重则像完整的人脸。在语言处理中也有类似发现。因此,深度网络可以被视为表示学习。

深度学习与图形模型的哲学对比 🤔

到目前为止,我们所看到的深度学习与之前所学的图形模型有何根本不同?

在图形模型中,节点和边的设计非常严谨,每个节点都有明确含义(观测数据或隐藏原因),每条边也旨在反映特定的依赖关系。学习与推断是基于对结构的深入理解,并使用EM、消息传递、变分推断、MCMC等丰富工具。评估算法时,我们关心其能否准确恢复这些隐藏变量的真实值。

在深度学习中,表示主要是为了计算。它们是组织从输入到输出(或反向)计算的载体。节点的含义是事后发现的副产品,即使没有明确含义也无妨。人们不太担心学习算法本身(例如,直接调用TensorFlow库),而更关注设计惊人的网络架构。评估时,我们关心的是最终任务(如预测准确率、BLEU分数)的表现,而不是中间表示的恢复精度。

可以说,图形模型更偏向于严谨的数学实践,而深度学习更偏向于一种“艺术”,但它非常有效。早期这引起了很多争论,但现在人们更愿意调和,因为深度学习确实有效。这就像教学:我们不知道学生大脑中哪个神经元被激活,但我们相信通过教学,他们能神奇地学会知识。

历史交汇:作为图形模型的早期深度学习 🤝

实际上,回顾30或40年前,这两个领域是深度重叠的。许多早期的深度学习模型在数学形式上就是图形模型。

示例1:受限玻尔兹曼机

RBM是一个两层无向图模型(马尔可夫随机场)。其联合分布可以写成单点势函数和成对势函数的形式。

学习RBM的权重需要求导,其梯度公式包含两项期望:一项是关于给定观测下隐藏变量的后验分布(“正相”),另一项是关于可见层和隐藏层的联合分布(“负相”)。正相采样相对容易,因为给定观测后,隐藏变量相互独立。负相采样则较难。

有趣的是,Hinton等人给这两个采样步骤起了生动的名字:正相被称为“醒”或“ clamped wake phase”,负相被称为“睡”或“sleep phase”。这些思想后来启发了变分自编码器和生成对抗网络。

示例2:Sigmoid信念网络

这是早期用于决策(如医疗诊断专家系统)的流行模型。它使用Sigmoid函数作为激活函数。通过引入隐藏变量作为中继,网络可以产生复杂的非线性效应,而无需显式写出非线性函数。

然而,由于“解释远离”效应,精确推断变得困难。学习Sigmoid信念网络需要从给定可见变量下的隐藏变量分布中采样,而这个分布由于耦合而难以处理。

计算图与模型的等价性

如果我们观察RBM的吉布斯采样过程:从可见层开始,采样隐藏层,再采样可见层,如此反复。如果我们不是水*展开这个过程,而是垂直堆叠这些采样步骤,会得到什么?这看起来就像一个无限深的Sigmoid网络

因此,一个浅层但紧凑的图形模型(RBM)在计算上等价于一个深度网络模型。但有一个关键点:在这个展开中,每一层的权重是绑定的,即所有权重相同。只有当权重绑定时,这种等价性才成立。

这带来了训练网络的分层思想:你可以从训练一个RBM开始,然后在其上堆叠新的层,进行贪婪的逐层预训练。这就是分层预训练算法的思想基础。

在深度信念网络等混合模型中,人们正是这样做的:先无监督地逐层预训练一堆RBM,然后将网络上下翻转进行“解码”训练,最后用反向传播微调所有权重。这个过程变得非常机械化,其背后的数学等价性已不那么重要。

深层洞察:优化中的优化 🚀

图形模型(如RBM)可以展开为无限序列的有向模型。在这个展开中,每一步都是推断算法中的一个特定步骤。理论上,如果执行无限步梯度下降,就会达到最优解。

但在深度学习的实践中,人们做的是:在展开的有限步内,在每一步都进行多次优化来重新估计权重,然后才进入下一步。这就像在优化优化算法本身

一个比喻是:从罗马到北京修铁路。理论上应该一鼓作气修到底。但实际上,人们可能先完美地修建罗马到佛罗伦萨的段,再完美地修建佛罗伦萨到威尼斯的段。每一段都变得完善和现代化,服务于当地需求。最终是否能到北京可能已不是唯一目标。深度学习也是如此,它更关注在有限深度内完善每一层的表示和计算。

这是一个非常有趣的观点,将深度网络视为对优化过程本身的有限步*似。这也引出了开放问题:如果我们将所有图形模型的推断步骤展开,并在每一步内部重新进行优化迭代,会得到什么?这可能催生新的方法。

总结 📚

本节课中,我们一起学习了深度学习的基础,并将其与图形模型进行了对比。

  • 我们回顾了深度学习从生物灵感、感知机到反向传播和现代网络架构的发展。
  • 我们探讨了深度学习与图形模型在哲学和实用上的核心差异:前者侧重作为计算载体的表示和最终任务性能,后者侧重具有明确语义的表示和精确推断。
  • 我们揭示了两者在历史上的深刻联系,例如RBM和Sigmoid信念网络如何与深度网络在计算上等价。
  • 最后,我们提出了一个深刻见解:深度网络可以视为对传统优化过程的有限步展开和再优化。

两个社区虽有差异,但赢家通常通晓两者,并能从中汲取经验,创造出更有趣和强大的方法。从下节课开始,我们将更深入地探讨深度学习的前沿,如VAE和GAN,并分析它们与图形模型的数学渊源。

012:深度生成模型(全)

在本节课中,我们将要学习深度生成模型的基本概念、发展历程及其背后的核心理论。我们将从早期的模型开始,逐步过渡到现代流行的变分自编码器和生成对抗网络,并探讨它们之间的内在联系与统一视角。


概述

深度生成模型旨在通过多层隐藏变量来建模复杂数据的概率分布,并能够从中采样生成新的数据实例。*年来,以变分自编码器和生成对抗网络为代表的模型在图像、文本等领域取得了显著成果。本节课将梳理这些模型的理论基础,揭示它们之间的共性与差异。


早期深度生成模型

上一节我们介绍了深度生成模型的基本目标。本节中,我们来看看其早期的一些形式。

深度生成模型本质上是随机变量的概率分布,其“深度”体现在它包含多层隐藏随机变量。例如,我们之前学过的Sigmoid信念网络,其底层通过Sigmoid函数连接到上层,以此定义条件概率分布。其联合分布可以分解为:

\[P(X) = \prod_i P(X_i | X_{\pi(i)}) \]

可见层(如图像)的分布可以通过对隐藏变量进行边缘化得到,即 $ P(X_{\text{visible}}) = \sum_{Z} P(X, Z) $。这是一个原理清晰、基于贝叶斯规则的深度生成模型。

然而,早期模型很快出现了概念上的“扭曲”。例如,玻尔兹曼机在计算图层面被用来组织计算过程,而不仅仅表示一个唯一的概率分布。它包含一个由参数 \(\theta\) 控制的生成过程 \(P_\theta(X|Z)\) 和一个由参数 \(\phi\) 控制的推断过程 \(Q_\phi(Z|X)\)。这两个过程通过交替的推断和学习步骤联系在一起,模型本身由这个计算过程定义,而非一个全局的数学表达式。

另一种早期思路是“可预测性最小化”,这是一种训练过程而非明确的模型。其目标是学习观测数据的潜在表示,并确保这些表示之间具有最小的可预测性。具体来说,模型学习一组潜在变量 \(Z\) 和另一组镜像变量 \(\hat{Z}\),然后训练一个预测器根据 \(\hat{Z}\) 来预测 \(Z\)。目标函数包含两个对抗的部分:一是最小化预测的准确性(使潜在变量难以预测),二是最大化预测器本身的能力。这种对抗训练的思想与后来的生成对抗网络有相似之处。

这些早期模型表明,“模型”的定义已经不再局限于严格的概率表达式,而是与训练过程紧密交织。


深度生成模型的学习方法

上一节我们回顾了早期模型的多种形式。本节中,我们来看看伴随这些模型发展的几种核心学习方法。

以下是几种主要的学习方法:

  1. 直接采样与数据增强:这种方法直接根据当前模型参数推断隐藏变量(即计算后验 \(P(Z|X)\)),然后将其视为“已观测”数据来学习生成模型的参数。这类似于EM算法的思想,在渐*意义上是精确的。

  2. 变分推断:为了解决精确后验难以计算的问题,我们引入一个由参数 \(\phi\) 控制的变分分布 \(Q_\phi(Z|X)\) 来*似真实后验 \(P_\theta(Z|X)\)。目标是最大化证据下界:

    \[\mathcal{L}(\theta, \phi; X) = \mathbb{E}_{Q_\phi}[\log P_\theta(X, Z) - \log Q_\phi(Z|X)] \]

    这为似然函数提供了一个下界。学习过程交替优化 \(\phi\)(固定 \(\theta\))和 \(\theta\)(固定 \(\phi\))。

  3. Wake-Sleep算法:该算法也交替学习生成模型和推断模型,但使用了不同的目标函数。在“Wake”阶段,它使用观测数据 \(X\) 来优化推断模型 \(Q_\phi\),目标类似于变分推断。在“Sleep”阶段,它改为从当前生成模型 \(P_\theta\) 中采样“假想”数据 \(\tilde{X}\),并用这些数据来优化生成模型参数 \(\theta\)。这相当于改变了优化目标,虽然降低了计算方差,但失去了理论收敛保证。

直观上,变分推断好比直接攀岩,而Wake-Sleep算法则像利用岩缝来回借力攀登。后者可能更省力,但路径不一定最优。


现代深度生成模型:VAE与GAN

上一节我们介绍了包括Wake-Sleep在内的几种学习范式。本节中,我们来看看两种主导现代研究的深度生成模型:变分自编码器和生成对抗网络。

变分自编码器

VAE的核心思想是重参数化技巧。在标准变分推断中,对变分参数 \(\phi\) 求梯度会遇到高方差问题,因为梯度表达式中包含 \(\log Q_\phi(Z|X)\) 项,当概率值很小时,对数项会变得非常大。

VAE的解决方案是:不从 \(Q_\phi(Z|X)\) 直接采样 \(Z\),而是假设 \(Z\) 由一个简单的噪声变量 \(\epsilon\)(如标准高斯分布)经过一个由 \(\phi\) 参数化的确定性变换得到:

\[Z = g_\phi(\epsilon, X), \quad \epsilon \sim p(\epsilon) \]

这样,关于 \(\phi\) 的梯度就可以通过 \(\epsilon\) 的路径进行反向传播,避免了直接处理概率对数,从而得到了一个更低方差的梯度估计。VAE的损失函数就是变分下界:

\[\mathcal{L}_{\text{VAE}} = \mathbb{E}_{Q_\phi}[\log P_\theta(X|Z)] - D_{KL}[Q_\phi(Z|X) || P(Z)] \]

其中第一项是重构损失,第二项是KL散度,鼓励变分分布接*先验 \(P(Z)\)

生成对抗网络

GAN采用了截然不同的思路。它没有显式的推断模型。其核心包括两部分:

  • 生成器 \(G_\theta\):将一个从简单先验(如均匀分布)中采样的噪声 \(Z\) 映射到数据空间,生成假样本 \(X_{fake} = G_\theta(Z)\)
  • 判别器 \(D_\phi\):试图区分输入样本是来自真实数据分布 \(P_{data}(X)\) 还是生成器分布 \(P_\theta(X)\)

两者通过一个极小极大博弈进行训练:

\[\min_\theta \max_\phi \mathbb{E}_{X \sim P_{data}}[\log D_\phi(X)] + \mathbb{E}_{Z \sim P(Z)}[\log(1 - D_\phi(G_\theta(Z)))] \]

生成器的目标是生成以假乱真的样本来“欺骗”判别器,而判别器的目标是尽可能准确地区分真假。理想情况下,当生成器分布完全匹配真实数据分布时,达到纳什均衡。


模型对比与统一视角

上一节我们分别介绍了VAE和GAN。本节中,我们尝试建立一个统一的视角来理解它们。

差异观察

  • VAE:生成的图像往往比较模糊,但能覆盖数据分布的多种模式。
  • GAN:生成的图像通常更清晰、锐利,但可能只捕捉到数据分布中的少数主要模式,存在“模式坍塌”问题。

理论联系

通过引入辅助变量和改写目标函数,可以将GAN和VAE(乃至Wake-Sleep算法)纳入同一个分析框架。研究发现,它们都可以被表述为最小化两个分布之间的KL散度,但散度的方向不同

  • GAN的优化 本质上等价于最小化 前向KL散度 \(D_{KL}[P_{data} || P_\theta]\) 的一个变体。前向KL散度倾向于让生成分布 \(P_\theta\) 去覆盖真实分布 \(P_{data}\) 的所有模式,但如果容量不足,它可能会选择忽略一些低概率区域,从而导致模式缺失。这解释了GAN为何可能只生成少数几种“典型”样本。
  • VAE的优化(其重构项)则与最小化 反向KL散度 \(D_{KL}[P_\theta || P_{data}]\) 有关。反向KL散度要求生成分布 \(P_\theta\) 必须将其概率质量放在真实分布 \(P_{data}\) 概率高的地方,但可以忽略真实分布中概率为零的区域。为了满足这点,模型往往会生成一个“*均化”、“模糊”的结果来确保在所有高概率区域都有覆盖。

统一公式

更形式化地,通过定义生成分布 \(P_\theta(X|Y)\)(其中 \(Y\) 是指示变量,标记数据真假)和判别分布 \(Q_\phi(Y|X)\),可以将GAN的目标重新表述为交替优化两个KL散度项。同样,VAE的目标也可以被重新解释。在这个框架下:

  • Wake-Sleep算法 的Wake步和Sleep步分别对应了优化两个不同方向的KL散度。
  • VAE 主要执行了Wake步(优化推断模型),并在生成模型学习中加入了先验匹配项。
  • GAN 主要执行了Sleep步(优化生成模型以匹配“梦想”数据),并使用了对抗性的判别器作为学习信号。

这种统一视角表明,这些看似不同的模型共享着相似的理论根基,其差异主要源于优化目标中KL散度的方向以及是否引入对抗性训练。


总结

本节课我们一起学习了深度生成模型的演进历程。我们从基于贝叶斯网络的早期模型出发,探讨了变分推断、Wake-Sleep算法等核心学习范式。接着,我们深入分析了两种现代主流模型——变分自编码器和生成对抗网络的工作原理与特点。最后,我们通过一个统一的数学框架,揭示了VAE、GAN以及早期算法之间的内在联系,理解了它们在行为上(如模糊vs清晰,模式覆盖vs模式坍塌)产生差异的理论根源。这种统一视角有助于我们更好地理解、设计乃至改进新的深度生成模型。

013:深度生成模型(第二部分)

在本节课中,我们将继续探讨深度生成模型。上一讲我们概述了几种深度生成模型的统计与数学基础,特别是它们在概率图模型和变分推断历史中的位置。本节课将更加务实,介绍一些使这些方法变得更实用、更强大的技巧和新思想。

以下是本讲的大致计划,我们将介绍4到5种不同的模型。虽然内容会有些浅显,但我会提供相关论文供你深入阅读,同时为你讲解其核心思想。

深度生成模型的演进

在过去的几年里,自从生成对抗网络(GAN)模型发明以来,生成图像的质量每年都有显著、可见的提升。从最初模糊的图像,到如今细节丰富、有时甚至难以分辨真伪的人脸图像,其进步令人瞩目。人们发现,有时需要观察非常细微的地方,比如耳朵的自然对称性或牙齿的真实感,才能发现合成的痕迹。那么,如何实现这种质量的飞跃呢?

生成对抗网络(GAN)回顾

首先,我们来回顾一下生成对抗网络模型。称之为“网络”,是因为其每个组件,无论是生成器还是判别器,都不再是简单的函数(如逻辑回归),而是一个包含许多层和参数的大型网络。

在GAN中,生成器从一个简单的先验分布(如标准正态分布)中采样一个隐变量 z,然后通过一个多阶段的非线性变换过程生成图像。理论上,即使是单层或两层的网络函数,只要隐藏层足够宽,也能模拟任意复杂的函数。因此,生成器可以生成非常丰富的分布。

然而,在原始的GAN设计中存在一个奇特之处:我们无法对 z 进行推断,因为给定观测数据 y 时,其后验分布 p(z|y) 是隐式的,没有解析形式。虽然 z 本身可能没有具体语义,但原则上我们是可以推断它的,上节课提到的一些模型就允许这样做。

GAN的训练机制是同时学习两组参数:生成器参数 θ 和判别器参数 φ。判别器的训练目标是优化其预测的交叉熵,使其越来越擅长区分真假。生成器的训练目标则是最小化一个等效的对数损失,以最大限度地“欺骗”判别器。

分析表明,原始GAN的损失函数可以表述为经验数据分布与生成分布之间的詹森-香农散度。虽然这个分布无法显式表达,但它从概念上说明了学习的目标。后续更深入的分析(如上节课提到的)表明,学习生成模型的过程实际上是在最小化推断模型与真实后验分布变分*似之间的KL散度

改进一:使用更优的距离度量

了解上述理论有助于解释为什么有时训练效果不佳。例如,假设训练数据分布位于一个高维空间中的低维流形上(例如,一个三维空间中的*面)。当我们想用一个定义在全空间的三维分布 Q 去*似这个低维流形上的分布 P 时,像KL散度或詹森-香农散度这样的度量可能会失效。

原因在于,这些散度度量要求两个分布有足够的重叠区域,积分才有意义。如果两个分布初始时几乎没有重叠,那么散度值可能会是未定义的或无穷大,导致损失函数无法有效地驱动 QP 学习。这就像导弹制导:如果一开始完全捕捉不到目标信号,就无法进行后续的精确追踪。

因此,改进GAN的一个关键思路是重新定义距离度量。人们发现,瓦瑟斯坦距离(也称为推土机距离)是一个更好的选择。这个距离度量对分布的形状更敏感,即使两个分布没有重叠,也能有效地衡量它们之间的差异。直观上,它将两个分布看作两堆土,计算将一堆土移动成另一堆土所需的最小“工作量”。

其数学形式要求判别器函数 D利普希茨连续的,以确保在计算上确界时可以求导。然而,直接优化可能遇到梯度爆炸或消失的问题。一个常见的工程技巧是梯度裁剪,即计算所有梯度的范数,然后根据一个阈值重新缩放梯度,使其保持在可控范围内。

结合瓦瑟斯坦距离和梯度裁剪等技术,我们得到了Wasserstein GAN,其训练过程比原始GAN稳定得多,生成的图像质量也显著提升。

改进二:渐进式生成

第二个想法是渐进式GAN。当需要训练非常高分辨率的图像时,直接训练一个庞大复杂的模型可能非常困难。渐进式GAN采取了一种迂回策略:它从低分辨率图像和浅层网络开始训练。一旦这个基础模型训练好,就在其上添加新的层,逐步提高生成图像的分辨率。这个过程不断重复,直到得到最终的高分辨率模型。这种方法避免了直接训练巨型模型的困难,使优化路径更加*缓,就像盘山公路让汽车更容易上山一样。

改进三:直接规模化与架构简化

第三个思路是正面应对规模问题。我们直接构建一个大型GAN模型,并通过一些技巧使其可行:

  • 增加参数:使用更强大的GPU来训练更大的模型。
  • 增大批次大小:以防止过拟合,但这会增加GPU内存消耗。
  • 简化架构:通过减少不必要的连接或结构来提高可扩展性。

这些直接规模化的方法也带来了越来越好的生成质量。

改进四:标准化流

接下来介绍一个将简单分布转化为复杂分布的有力工具:标准化流。其核心思想非常简单:目标是通过一系列可逆变换,将一个简单分布(如均匀分布或单位高斯分布)逐步转化为一个任意复杂的分布。

数学上,我们从源分布中采样 z,然后应用一个可逆变换函数 f 得到 x。为了能够进行推断和反向传播,变换必须是可逆的。变换后的分布密度可以通过变量变换定理来计算,其中需要计算变换函数雅可比矩阵的行列式。为了使行列式计算简便,一个技巧是约束雅可比矩阵为三角矩阵。

通过将多个这样的可逆变换串联起来,我们可以构建非常复杂的分布。这体现了深度学习社区倡导的组合性理念:用具有良好数学性质的小模块构建出强大而复杂的模型。标准化流模型生成图像的质量可能暂时不如最先进的GAN,但它非常易于计算。

改进五:融入领域知识——师生模型

最后,我们探讨一个更深刻、更通用的思想:如何将领域知识整合到深度生成模型中。在传统机器学习中,我们通过贝叶斯先验或正则化来融入知识。但在深度学习中,由于参数众多且模型复杂,直接指定权重值并不够。

人类知识通常表现为规则,例如英语中“将动词变为过去式通常加‘ed’”,或者在情感分析中“句子中的‘but’之后的内容往往主导整体情感”。如何将这些规则融入语言或图像生成模型呢?

一个通用的想法是引入一个约束函数,用来衡量生成结果是否符合某条规则。我们可以将这个约束函数的期望值作为一个新的损失项,与原始的数据驱动损失(如交叉熵)结合起来。然而,直接优化这个包含期望的项可能遇到梯度方差过高的问题,这与我们在变分推断中遇到的困难类似。

解决方案是引入一个变分*似分布 Q(通常被称为“教师”模型),而我们要学习的目标分布 P 被称为“学生”模型。我们构建一个新的目标函数,一方面希望学生模型在教师模型的指导下(通过KL散度)尊重规则,另一方面也希望学生模型能拟合原始数据。通过引入权重参数(如 λ, α),我们可以*衡数据损失和知识约束损失。

这形成了一个师生交替优化框架:

  1. E步:固定学生模型,优化教师模型,使其在结合了规则知识后逼*当前的学生。
  2. M步:固定教师模型,优化学生模型,使其同时拟合数据和来自教师的“软”指导。

这个框架非常强大,可以同时利用有标签数据无标签数据逻辑规则。它甚至可以推广,将强化学习中的奖励函数也视为一种特殊的“教学”函数,从而用统一的视角看待监督、无监督和强化学习。

在实践中,将规则编码为可微的函数需要技巧。此外,教师和学生模型的架构设计也是一个活跃的研究领域。实验表明,这种能够学习规则权重(即规则重要性)的模型,在图像生成和自然语言处理任务中,都能在客观指标和主观人工评估上取得更好的效果。

总结

本节课我们一起学习了深度生成模型,特别是生成对抗网络的一系列改进方法:

  • 使用瓦瑟斯坦距离替代传统散度,以提供更稳定的训练信号。
  • 采用渐进式生成策略,逐步构建高分辨率生成模型。
  • 通过直接规模化架构简化来训练大型GAN。
  • 利用标准化流,通过一系列可逆变换从简单分布生成复杂分布。
  • 引入师生模型框架,将领域知识(规则)以可学习的方式整合到深度生成模型中。

这些创新从损失函数、训练过程、模型结构和知识融合等多个方面,不断推动着深度生成模型向前发展,使其变得更强大、更实用。

014:深度序列模型 🧠

在本节课中,我们将学习四种在深度学习中非常流行且基础的模型架构。我们将从用于空间建模的卷积网络开始,接着探讨用于序列建模的循环网络,然后介绍用于解决长程依赖问题并增强模型可解释性的注意力机制,最后学习作为注意力机制特殊形式的Transformer架构。


卷积神经网络 🖼️

上一节我们介绍了深度模型的基础,本节中我们来看看卷积神经网络。卷积神经网络是一种受生物学启发的多层感知机变体。

在标准的全连接神经网络中,给定一个输入(如图像),每个神经元都会连接到输入图像中的每一个像素。而在卷积网络中,我们引入了感受野的概念。每个神经元只连接到输入图像的一个局部区域,这些神经元被称为局部滤波器。这些局部子区域*铺开来,以覆盖整个视觉输入区域。

卷积网络具有三个基本属性:

  • 稀疏连接:每个神经元仅连接到前一层神经元的一个子集。
  • 权重共享:用于扫描整个图像的滤波器(即连接权重)在不同位置是共享的。
  • 层级化感受野:随着网络层数加深,神经元能接收到来自更广阔输入区域的信息,从而获得越来越全局的感受野。

基于这种层级化的生物结构,我们实现了层级化表征学习。从原始像素开始,底层网络学习到边缘、角落等基础特征;随着网络加深,学习到的特征变得更加抽象和高级,例如复杂的形状和纹理;继续深入,则能获得更高层次的特征。

利用卷积层这一基本构建块,衍生出了许多卷积网络的变体。例如,2012年首次在ImageNet图像分类竞赛中获胜的AlexNet,以及更深的VGG网络、22层的GoogleNet。目前,最先进的技术通常是拥有数百层卷积层的ResNet。


循环神经网络 🔄

上一节我们介绍了用于空间建模的卷积网络,本节中我们来看看用于序列建模的循环神经网络。

卷积网络用于空间建模,给定输入(如图像),我们通过前向计算逐层获取特征,输出仅依赖于当前输入。而对于序列建模,隐藏层和输出不仅依赖于当前输入,还依赖于隐藏层之前的状态。

如果将这个循环展开,我们可以看到输入是一个序列(例如一个句子,x0, x1, x2是其中的词元)。我们逐个输入这些词元,并逐步计算隐藏状态。每一步的隐藏状态不仅依赖于句子中的当前词元,还依赖于前一步的隐藏状态。这与具有固定计算步数的空间建模不同。

循环网络可以有不同的形式:

  • 一对一:如图像分类,可视为序列建模的特例,仅包含单步建模。
  • 一对多:如图像描述生成,输入是单张图像,输出是词元序列。
  • 多对一:如句子情感分类,输入是词元序列,输出是单个标签(如情感标签)。视频识别也属此类,输入是视频帧序列,输出是活动类别。
  • 多对多(序列到序列):如机器翻译,输入是源语言句子,输出是目标语言句子。
  • 多对多(序列标注):如命名实体识别,输入是句子,为其中每个词元预测一个标签。此类任务中,输入与输出序列长度相同。

循环网络在每个时间步的计算可以表示为一个单元。给定输入和上一步的隐藏状态,通过权重矩阵 W 等进行计算。标准循环网络的核心问题是梯度消失和梯度爆炸

问题根源在于,当计算某个早期隐藏状态(如 h0)的梯度时,梯度会涉及权重矩阵 W 的多次连乘。如果 W 的最大奇异值大于1,梯度会爆炸;如果小于1,梯度会消失。梯度爆炸可以通过梯度裁剪等简单方法缓解,但梯度消失问题则更难以有效解决。

由于梯度问题,如果序列很长,模型将难以有效学习长程依赖关系。例如,在预测句子中的下一个词时,如果相关词元距离很远,预测会变得非常困难。

为了缓解长程依赖和梯度问题,长短期记忆网络被提出。LSTM在每一步使用了更复杂的单元结构,核心是引入了三个门控函数来控制信息的读写:

  • 遗忘门:决定从细胞状态中丢弃多少信息。
  • 输入门:决定向细胞状态中写入多少新信息。
  • 输出门:决定从细胞状态中输出多少信息。

通过这种结构,在反向传播时,梯度路径上不再是与同一个矩阵 W 反复相乘,而是乘以不同的门控值,这降低了梯度消失或爆炸的风险。

基于基本的循环单元或LSTM单元,我们可以组合出更复杂的架构来建模不同类型的数据:

  • 双向循环网络:用于建模双向依赖,如语音识别。
  • 树结构循环网络:用于建模树状结构数据,如句法分析。
  • 用于二维序列的循环网络:可按特定顺序(如逐行、逐列或对角线)扫描图像像素进行建模。
  • 图循环网络:用于图结构数据,如图像分割,每个节点的特征依赖于其所有邻居的特征。

核心思想是,可以根据数据类型和建模需求,设计任意的网络架构。


注意力机制 👁️

上一节我们介绍了循环网络及其变体,本节中我们来看看注意力机制。注意力机制让模型在预测或生成时,能够选择关注哪些特征。

例如,在图像描述生成任务中,当模型生成“frisbee”这个词时,其注意力会集中在输入图像中飞盘出现的区域。在机器翻译任务中,当输出某个词时,其注意力会集中在源句子中与之对应的词上。

使用注意力机制主要有三个优势:

  1. 缩短路径,缓解长程依赖:在标准循环网络中,输出词元与远处相关输入词元之间的梯度路径很长。而注意力机制建立了直接的连接,缩短了路径。
  2. 获得细粒度表征:在没有注意力的情况下,编码器通常将整个输入序列压缩为一个单一的全局向量,解码器所有输出都依赖于此。而有了注意力,每个输出词元可以基于不同的、更细粒度的上下文向量。
  3. 提高可解释性:可以通过可视化注意力分布来理解模型的决策依据。

注意力机制的计算涉及三个核心组件:查询。计算过程如下:

  1. 将输入序列编码为一系列向量,作为
  2. 在解码时,当前解码器状态作为查询
  3. 计算查询与所有键的相似度(对齐分数)。
  4. 将对齐分数通过softmax归一化,得到注意力权重(分布)。
  5. 根据注意力权重,对值向量进行加权求和,得到上下文向量,用于当前步的解码。

相似度计算有多种方式,如余弦相似度、点积、缩放点积等。聚合值向量的方式也有软注意力(加权求和)和硬注意力(选择权重最大的值)之分。

注意力机制可以应用于复杂任务,如图像段落生成。该任务需要生成一个完整段落来描述图像的细节,涉及长期的视觉和语言推理。一种方法是先检测图像中的语义区域并为每个区域生成描述短语,然后使用注意力机制聚合所有区域和短语的信息,最后通过一个分层文本生成器生成连贯的段落。


Transformer 架构 ⚡

上一节我们介绍了注意力机制,本节中我们来看看其一种特殊形式——Transformer架构,它采用了多头注意力机制。

Transformer架构在机器翻译等任务上取得了最先进的结果,也是BERT、GPT-2等强大文本表示模型和语言模型的基础。

其核心是缩放点积注意力机制。给定查询、键、值,计算过程可概括为:
注意力(Q, K, V) = softmax(QK^T / sqrt(d_k)) V
其中 d_k 是键向量的维度,缩放因子用于稳定梯度。

多头注意力则是将这个过程重复多次(每个称为一个“头”),然后将所有头的输出拼接起来,再通过一个线性变换。这使得模型可以同时关注来自不同表示子空间的信息。

在Transformer中,多头注意力是核心构建块。编码器由多个相同的层堆叠而成,每层包含一个多头自注意力子层和一个前馈网络子层,并使用了残差连接和层归一化。解码器结构类似,但包含两个注意力子层:一个是掩码多头自注意力(确保当前位置只能关注之前的位置),另一个是编码器-解码器注意力层(其中查询来自解码器,键和值来自编码器)。

基于Transformer架构,BERT模型被提出用于生成上下文相关的词嵌入。与传统的静态词嵌入(如Word2Vec)不同,BERT为每个词元生成的嵌入向量依赖于其所在的上下文。BERT本质上是一个多层的Transformer编码器,通过在大规模语料上使用掩码语言模型和下一句预测两个任务进行预训练,从而学习到强大的语言表示。


本节课中我们一起学习了四种基础的深度模型架构:用于空间建模的卷积网络、用于序列建模的循环网络、用于解决长程依赖和增强可解释性的注意力机制(及其核心组件查询、键、值),以及作为注意力特殊形式的Transformer架构(及其在机器翻译和BERT预训练文本表示中的应用)。

015:深度生成模型案例研究 - 文本生成 📝

在本节课中,我们将学习深度生成模型在文本生成领域的应用。我们将探讨如何生成自然、流畅的文本,以及如何确保生成的文本包含从输入中推断出的期望信息。课程将分为两个主要部分:第一部分介绍文本生成的基本模型和训练挑战,第二部分探讨在无监督设置下如何实现可控的文本生成。


文本生成概述 🤖

文本生成是自然语言处理中一个非常广泛的概念,涵盖了一系列任务。其目标是从输入数据或机器表示中生成自然语言。

它跨越了广泛的NLP任务。例如,聊天机器人或对话系统,输入是对话历史,输出是回应。机器翻译的输入是英语句子,输出是中文句子。其他任务包括文本摘要,即给定文档生成总结其内容的短段落;图像描述,即输入图像或视频,输出对其中活动的简短描述;以及语音识别,将语音信号转换为文字记录。

因此,这个领域存在许多不同的任务。

在支撑这一系列广泛任务的基本问题中,主要有两个核心目标。第一个是生成类似人类的、语法正确且可读的文本。本质上,我们希望生成所谓的自然语言,语言必须自然、流畅,就像人类书写的那样。

第二个目标是生成包含从输入中推断出的期望信息的文本。例如在机器翻译中,生成的句子必须与输入句子具有相同的含义。在数据描述中,生成的报告必须描述输入表格。对于其他任务,我们希望控制句子的属性,例如情感标签。我们希望生成具有积极情感的句子,例如“我喜欢这家餐厅”。因此,输出必须包含输入中指定的期望信息。同样,对于对话流程,我们希望控制对话策略和主题。

所以,基本上有两个基本目标。让我们首先看看如何实现第一个目标,即生成自然语言。


文本生成的通用模型 📊

最基本的模型是语言模型。

在语言模型中,给定一个由一系列标记组成的句子Y,语言模型通过将整个句子的概率分解到时间步或标记上来计算句子或文本片段的概率。

每个标记都有一个条件分布,其分布以所有先前的标记为条件。

这有点像文本的模型。如果我们想实现它,通常可以使用循环神经网络,正如我们在上一讲中看到的,例如使用LSTM。

该模型是一系列标记。

这就是语言模型。为了整合输入数据,例如在机器翻译中,X是源句子,即输入句子。整个语言模型将额外以这个额外的上下文为条件。

因此,我们将有一个条件语言模型。上下文将作为输入进入这个语言模型,并且所有的推断,例如在解码过程中,都将以这个上下文为条件。


模型训练与挑战 ⚙️

那么,我们如何训练这个模型呢?训练算法有很多种,最流行或最简单的方法是最大似然估计,这非常直接。

为了训练模型,我们给定一组数据样本,然后最大化数据的对数似然。

给定真实数据Y*,我们评估并最大化数据的对数似然。这就是训练。然后对于评估,评估则有些不同。对于不同的任务,我们有不同的指标。

例如,在机器翻译中,我们有一个叫做BLEU的指标。我们可以计算模型生成的输出与真实数据之间的BLEU分数。这个BLEU分数基本上评估了输出与真实数据之间的相似性。

对于摘要,我们有另一个不同的指标。对于不同的任务,还有其他指标。

因此,我们可以看到,对于文本生成,最大似然估计基本上存在两个问题。

第一个问题是所谓的“曝光偏差”。我们可以看到,在训练时,我们最大化数据的对数似然。对于每个标记,我们根据先前的真实标记来预测下一个标记。这是在链式推理中。我们给定第一个真实标记Y1*,然后预测下一个标记Y2。但在评估时,我们没有这些真实标记。在评估时,我们根据模型自身生成的先前序列来预测下一个标记。

因此,我们可以看到训练和评估之间存在差异。在训练时,模型会看到真实标记。但在评估时,我们只能使用模型生成的序列。换句话说,在训练时,模型没有接触到它将要产生的序列。有时,模型产生的先前序列可能包含一些错误。例如,如果Y1是一个错误的标记,这个特定的标记会影响后续的推断,基本上,后续的标记也可能出错。这就是我们所说的曝光偏差。

第二个问题是,在训练时,指标是数据的对数似然,我们最大化似然。但在评估时,我们使用不同的指标来衡量模型的性能,例如机器翻译中的BLEU分数。因此,我们可以看到训练和评估之间存在另一个差异,我们在训练和评估中使用了不同的指标。

因此,有许多后续的训练算法试图解决这两个基本问题。


解决训练挑战的算法 🔧

一个可能的解决方案是强化学习,我认为后续的讲座会涵盖强化学习的某些方面。基本上,强化学习是在模型分布下最大化期望奖励。

这里,这是你的语言模型。你想学习这个模型,并且你有一些奖励函数或评估指标。目标是最大化在你的模型下的期望奖励。

因此,基本上,例如在机器翻译中,我们可以使用BLEU分数作为奖励。这基本上解决了训练指标和评估指标之间的差异问题,因为在训练时,我们正在最大化BLEU分数。

但是,当然,强化学习并不是完美的解决方案,它有自己的问题。你可以看到,基本上这里我们首先使用模型生成整个句子,然后使用评估指标评估句子的质量。但我们可以看到,这里的搜索空间可能非常大。例如,如果词汇量是50000,我们想生成包含50个标记的句子,那么这个空间将非常非常大。这意味着搜索空间太大,训练会非常低效。因为大多数时候,模型会生成一些根本没有意义的东西,分数会很低,你无法有效地改变模型。同样,由于这个非常大的序列空间,训练期间会出现高方差和探索效率低下的问题。

因此,有许多工作试图解决这些训练问题,使训练更实用。

其中一种算法是“奖励增强的最大似然”。其高层次思想是,我们可以向MLE数据样本添加奖励感知的扰动。给定一组MLE训练数据,我们可以向训练数据添加一些噪声,这样在训练时,模型也会看到训练数据中的一些错误,而不是完美的真实数据。这种噪声将由特定的奖励信息来指导。例如在机器翻译中,这个奖励是BLEU分数,因此我们可以以某种方式缩小训练时和评估时评估指标之间的差距。

另一种算法是“软最大策略梯度”,它是标准策略梯度的一种扩展,通过使用奖励分布进行有效采样和估计策略梯度。

我不想深入这些算法的细节。但这里我们只需要知道有不同的算法来解决最大似然估计和强化学习中的问题。

另一个算法是“数据加噪”,类似于奖励增强算法,是向数据添加随机噪声,以便模型在训练时接触到噪声和错误。


算法的统一框架 🧩

好的,所以有不同的算法。实际上,我们可以证明这些算法彼此密切相关。

基本上,我们可以确保这些不同的训练算法有一个统一的表述。特别是,我们已经看到了MLE、软最大策略梯度、RAML和数据加噪。

我们可以确保存在一种统一的表述。这个表述由三个超参数控制:R是奖励函数,α和β是两个*衡权重。通过将这些超参数设置为不同的值,我们可以恢复这些不同的算法。

本质上,例如,RAML和MLE的唯一区别在于它们使用了不同的奖励函数。我们稍后会看到更多细节。所有这些算法都是一个广义的熵正则化策略优化框架的特殊实例。

唯一的区别在于奖励R的选择以及一些超参数α和β的值。

基本上,这种统一的观点启发了新的和改进的算法。

让我们看看更多细节。这就是所谓的广义ERPO框架。

我们考虑一个序列生成模型,例如P(Y|X),这是一个条件语言模型。给定任意奖励函数R,Y是模型的生成结果,Y*是真实数据,例如机器翻译中的BLEU分数。

我们假设一个变分分布Q(Y|X),它是对你感兴趣的模型的*似。这个框架的目标是这样写的。基本上,我们在变分分布下最大化奖励。然后,在变分分布和感兴趣模型之间存在一个KL散度。此外,还有对变分分布的额外熵正则化项。

我们可以看到,这个目标非常接*你在变分推断或变分EM中看到的内容。本质上,它包含两个项:期望和KL散度。如果我们把P看作先验分布,Q看作变分分布。唯一的区别是这里有一个额外的熵正则化项,并且有两个超参数α和β来控制两个熵项的*衡。

所以,如果你了解强化学习,你会看到这个目标是许多流行RL算法的推广,例如相对熵策略梯度、策略搜索和信任区域策略优化。

我不会深入这些细节,但这就是广义目标。让我们看看这个目标如何真正恢复我们见过的特定算法,如MLE和RAML。

首先,稍微多了解一下RAML。给定这个目标,我们使用一种类似EM风格的步骤来解决它。在每个迭代步骤中,首先关于变分分布Q求解这个问题。对于这个变分分布,有一个闭式解,你可以看到它是模型和奖励函数的组合。α和β基本上是*衡这两个分量的权重。然后,在M步中,给定这个Q分布,我们最大化模型相对于从Q分布生成的样本的对数似然。

所以你可以看到,这非常接*变分EM。E步基本上为变分分布产生了一个闭式解,然后M步是关于模型参数的优化。

好的,所以这里有一些对这个目标和优化的直观解释。例如,α的作用。如果α趋于无穷大,那么我们可以看到,从这个部分,Q将等于模型。从这个解也可以看出。另外,如果α趋于无穷大,那么为了最小化KL散度,Q将等于模型。

对于β,如果β趋于无穷大,那么我们可以看到Q基本上是均匀分布。因为这里β非常大,对应于最大化熵,这意味着Q必须是均匀分布。

这里,M步基本上是最大化来自Q分布的样本的对数似然。

因此,有了这个目标和优化过程,让我们看看MLE实际上是这个框架的一个特例。

在MLE中,我们基本上使用这种类型的奖励函数。这里,如果样本Y等于真实数据,则奖励为1,否则奖励为负无穷。α和β设置为这些特定值:α是一个非常小的正值,非常接*0,β设置为1。

我们可以看到,基本上,如果我们将这个配置代入E步,我们可以证明Q分布将是这样的:如果Y等于真实数据,则得到1,否则为0。这本质上是经验数据分布。然后,正如我们所说,M步基本上是最大化来自Q分布的样本的对数似然。现在Q是数据分布,这意味着M步基本上是最大化数据的对数似然。

因此,我们通过将R、α和β设置为这些特定值来覆盖MLE算法。

所以这就是MLE。如果我们可视化这个训练过程,我们可以看到,假设这是整个探索空间,即序列的整个空间。我们给定一组数据样本,位于这个整个空间中的一些点上。

MLE可以被看作是一种策略优化,以δ函数作为奖励。这意味着模型在训练时的探索仅限于这组点。任何超出训练数据、超出这组点的探索都会得到负无穷的奖励,因此这种探索基本上会被抵消。这基本上解释了曝光偏差:模型在训练时只接触到这一小部分样本,而没有接触到整个序列空间。

但好处是,给定这个δ函数,因为Q基本上会简化为经验数据分布,所以从这里采样非常直接。这使得模型的计算非常高效。而且,所有这些样本都是高质量的,因为它们是真实数据。你总是能从Q分布中获得高质量样本。因此,模型的训练会非常高效。这就是MLE,从更通用框架的角度对其优缺点进行了直观解释。


其他算法的统一视角 🔄

那么,另一个算法RAML(奖励增强的最大似然估计)呢?MLE和RAML之间的唯一区别在于,现在我们用常见的奖励(如BLEU分数)替换了数据奖励函数。

因此,效果是这样的:现在有了这些特定的词,在E步中,我们得到了这个Q分布。它是一种指数奖励分布。在M步中,我们最大化奖励增强的最大似然对数似然。

所以你可以看到这里的区别。我们不再使用δ函数作为奖励,而是使用特定于任务的奖励。但在E步中,这基本上解决了MLE中训练时和评估时评估指标之间的差异问题。

基本上,这些词具有这种形状。例如,给定真实数据,如果Y等于Y*,奖励会给出最高分。但即使Y不完全匹配真实数据,你仍然会得到一些分数,而不是像在MLE中那样,如果使用δ函数奖励,只有这个点会得到分数1,所有其他点都会得到负无穷的奖励。

因此,如果我们可视化这个优化过程,与MLE相比,RAML使用了任务相关的奖励。这个奖励比δ函数更*滑。这有效地允许了围绕训练数据的更大探索空间。因为在序列空间中,我们基本上允许模型探索整个空间,接*训练数据点。

这里,因为α=1,β非常小,基本上忽略了模型分布对探索的影响,因为α非常小,所以这一项被忽略了。因此,所有的采样,所有来自这里的样本都将由奖励函数决定。

这就是RAML作为通用框架特例的情况。

下一个算法,软最大策略梯度,同样与RAML相比,唯一的区别在于,在RAML中,我们有R和β值。而在软最大策略梯度中,我们改变了α和β的值,使α=1,β=0。

那么这意味着什么呢?在E步中,我们现在有了Q分布的解。它是模型和奖励的一种乘积。同样,在M步中,仍然是最大化来自Q分布的样本的似然。

如果我们将其可视化,我们可以看到软最大策略梯度同时使用模型分布和奖励进行探索。这基本上允许了最大的探索空间。模型基本上可以生成整个序列空间中的任何序列。

但这里的困难在于,正如我们所说,在强化学习中,特别是在训练的早期阶段,模型还没有训练好,因此它很容易产生低质量的样本。这意味着有时来自Q分布的样本质量会很低,模型的训练效率就不会那么高。

因此,这里存在一个明显的权衡。从MLE到RAML,再到软最大策略梯度,我们在训练时逐渐扩大了探索空间。从另一个角度看这种扩展是,我们在训练时允许越来越多的噪声进入Q分布的样本中。给定这些噪声样本,模型分布的优化变得越来越困难。

对于这种情况,你甚至需要更多的训练技巧来实现实际的训练。

最后一个算法,数据加噪,同样是一个特例。这里,我们仍然有这些R和β值,但我们使用的是MLE中数据奖励的局部松弛变体。这里,我们并不严格要求样本必须完全匹配真实数据。相反,我们允许样本和真实数据之间存在一些差异。例如,我们可以允许两个序列在特定标记上存在差异。

这基本上就像我们随机选择真实序列中的一个标记,并用另一个均匀选取的标记替换它。这是我们可以添加到训练数据中的一种噪声,可以用这个奖励函数来描述。有许多向训练数据注入噪声的方法,因此你可以使用不同类型的条件来恢复给定的数据加噪策略。

这非常接*RAML,因为我们向训练数据添加了噪声,这本质上允许模型探索超出样本集的空间,即围绕训练数据的空间。

数据加噪和RAML之间的区别在于,RAML会添加奖励感知的噪声。因为在RAML中,我们使用像BLEU分数这样的奖励,这实际上是由奖励函数指导的噪声注入。而数据加噪则以更随机的方式添加噪声,例如我们随机交换真实序列中的一个标记。因此,这里的优势在于噪声易于实现,因为交换一个标记非常简单。但RAML中,如果我们想结合任务奖励来注入噪声,在实践中通常更难实现。


算法总结与权衡 ⚖️

好的,快速总结一下,对于这组用于训练序列模型的序列生成算法,我们看到每个算法都对应于超参数空间中的一个点。从左到右,我们在训练时逐渐增加了探索空间。

理论上,因为在训练时,模型接触到了更大的序列空间,所以理论上模型应该表现得越来越好。但这里的实际问题是训练也会变得越来越困难。因此,这里存在一个权衡。

一个自然的想法是,我们可以在算法之间进行插值。在最左边的点,MLE非常容易训练,但探索空间非常小。在最右边,训练非常困难,但我们允许更大的探索空间。因此,一个自然的想法是,我们能否从左到右进行插值?在早期阶段,我们用MLE训练模型。然后,在后期阶段,我们用特定于任务的奖励替换δ函数奖励,以允许更大的探索空间。然后,我们也将α和β从最小配置调整到最大配置。

实际上,我们允许模型在训练时逐渐增加曝光空间,并逐渐增加训练的难度。因此,通过调整这些超参数,我们可以在这些算法之间进行插值。

是的,基于这种解释和高层次想法,这里有一些结果。例如在机器翻译中,通过这种插值,我们获得了更好的BLEU分数。同样,在文本摘要中,我们也看到了改进。这基本上是训练曲线,随着我们训练模型,BLEU分数逐渐增加。如果我们与MLE和RAML比较,基本上,随着我们使用越来越大的探索空间训练模型,模型会获得更好的性能。

但这只是对这种插值方法的快速介绍。

好的,这是第一部分。我们如何生成自然语言?我们基本上回顾了序列生成的两个常见基本问题:第一个是曝光偏差,第二个是标准不匹配。

并且有许多算法被提出来解决这两个问题,如MLE、RAML、软最大策略梯度、数据加噪和标准策略梯度。

所有这些算法都可以被纳入一个统一的序列生成框架中。在这个框架下,这些算法对应于几个超参数(如奖励函数、α和β这两个*衡权重)的特定配置。是的,这是第一部分。


无监督可控文本生成 🎯

第二部分是如何确保我们的模型生成的文本包含从输入中推断出的期望信息。

我们看到,对于不同的任务,如机器翻译、数据描述和其他任务,我们基本上拥有不同数量的训练监督数据。正如我们所知,在机器翻译中,我们拥有非常大量的数据,例如数千万个配对样本。因此,你可以直接使用监督学习来训练模型。

数据描述同样拥有一定数量的数据,例如数万个数据样本。直接使用监督学习训练模型仍然是可行的。情感控制也是如此。

但对于其他设置,例如,我们想修改一个句子的情感,从积极到消极,同时保留句子的其他方面,如内容。基本上,我们没有任何监督数据。对于更复杂的设置,例如我们想学习控制对话策略和主题,同样,我们没有任何监督数据。

因此,在这些特定情况下,我们需要一些方法在无监督设置下学习这种控制生成或条件生成。

是的,这部分将特别关注这种无监督设置。

这里有一些这种设置下的具体例子,例如文本属性迁移或文本内容操作。对于对话,我们有目标引导的开放域对话。让我们看看这些不同的设置。

首先,文本属性迁移。

任务是:给定一个句子,我们希望修改这个句子以具有期望的属性值,同时保持所有其他方面不变。

例如,我们想迁移文本的情感、时态、语态和性别等不同属性。例如,迁移情感,从消极到积极。这是输入句子:“它超级干,味道很奇怪。”我们想把这个句子修改为具有积极情感:“它超级新鲜,味道美味。”这里的逻辑是,我们想改变情感,但仍然保持所有其他方面不变,例如内容、味道和“超级”等所有不同方面都保持不变。

这种任务的应用可以是个性化写作、个性化对话系统和其他不同的应用。

因此,正式表述是:给定输入X和原始属性A_X(我们想要控制的属性)。任务是,给定这个X和目标属性A_Y,我们想生成一个目标句子Y,Y具有期望的属性,并保持X的所有属性无关的特性。训练设置是这样的:我们只有像X和A_X这样的配对数据,但我们没有直接的监督数据,如X、A_X和Y、A_Y。我们没有这种*行数据。

那么,我们如何使用这些可用的数据来训练这个特定的条件生成模型呢?

这里有一个可能的解决方案。我们有一个模型,给定X和A_Y作为两种输入。目标是生成Y。

基本上,我们有一个编码器,首先将输入句子编码为一个隐藏向量Z,即特征向量。然后我们将这个特征向量与属性值连接起来,例如对于积极情感,A_Y等于1;对于消极情感,等于0。

仅以这两个特征的连接为条件,我们使用解码器生成Y。训练这个模型的关键直觉是,我们将任务分解为竞争性子目标,并为每个子目标使用直接监督。

例如,第一个目标是我们希望Y保持X的所有属性无关的特性。这意味着Y必须非常接*输入X,你只能改变整个序列中的某些标记。

一个非常直接且简单的方法来强制X和Y之间的相似性是使用自编码损失。基本上,我们希望Y与X完全相同。这是一种非常简化和直接的方式来鼓励这种属性保留。

第二个目标是,我们希望Y具有期望的属性A_Y。例如,如果A_Y是积极情感,那么我们希望Y真正具有积极情感。

我们如何鼓励这一点呢?我们使用分类损失。给定从模型生成的Y样本,我们将其输入到一个预训练的情感分类器中。我们希望情感分类器的预测与输入情感相同。因此,我们可以看到这里存在一个循环:给定Y,我们将其输入情感分类器,我们希望这个情感分类器恢复输入情感。

因此,我们基本上有两个损失函数,我们将联合优化这两个损失函数。

直观地看,这两个损失函数将模型推向两个方向。自编码损失鼓励Y完全恢复输入句子X。分类损失则鼓励Y真正实现期望的属性。

如果我们联合优化这两个损失,将会把模型推向我们期望的方向。

因为基本上,这两个损失是竞争的,最小化这个联合损失将避免模型崩溃。就这种竞争性损失而言,我们可以看到分类损失会阻止模型生成完全相同的X,因为X并不真正符合这个标准。同样,对于分类损失,自编码损失在某种意义上与分类损失竞争,因为例如,给定任意句子,如果我们只有分类损失,那么给定积极情感,解码器可以生成任何具有积极情感的句子,而不管输入句子是什么。因此,你可以看到这两个损失函数基本上是相互竞争的,但它们可以联合优化,以形成一个共同目标,将模型推向我们期望的方向。

因此,在性能上,如果我们联合优化这两个损失函数,我们基本上可以得到情感准确率在80-90%以上。与输入相比的BLEU分数大约在55%左右,这是一个相当不错的结果。BLEU分数评估了输出与输入之间的相似性。

这里有一些例子,给定输入,例如我们想将其改为积极情感。输入是:“我可以给他们零颗星。”输出是:“我可以给他们一颗甜心星评价。”你可以看到,这个模型基本上学会了正确地将情感从消极改为积极。并且你可以看到输出非常接*输入,我们保留了所有与情感无关的标记。

但这里存在一个特定问题:语言质量不是很好,因为“一颗甜心星评价”不是正确的语言。这也反映在困惑度上,如果我们使用语言模型评估输出的困惑度,会得到非常高的困惑度,这意味着语言质量不是很好。

因此,我们当然可以改进这个模型,通过使用另一种目标函数,另一种损失函数。我们使用语言模型作为直接监督。

这个额外的损失函数是:给定从模型得到的输出样本,目标是最大化这个样本在语言模型下的似然。基本上,我们希望改变生成模型,使得样本具有较低的语言模型困惑度。

有了这个额外的损失函数,我们基本上联合训练三个损失函数。然后我们得到了较高的准确率,很好地保留了输入内容,并获得了较低的语言模型困惑度。

这里有一些样本,例如输入是“我可以给他们零颗星”,输出是“如果可以,我会给他们一颗伟大的星评价”。基本上,语言模型将这个句子纠正为这个。

好的,这是第一个应用任务的例子。关键思想是,我们将任务分解为竞争性子目标,并为每个子目标使用直接监督。例如,为了保留情感,为了改变情感,我们使用情感分类器作为对话系数;为了保留输入内容或其他方面,我们使用自编码损失来提供监督;为了提高语言质量,我们使用语言模型来提供监督。

这是第一个应用设置。第二个设置与第一个非常接*。

我们可以生成句子来描述给定数据记录中的内容。同样,这里我们希望控制句子的写作风格,通过提供一个参考句子。

例如,这是一个内容记录,一个表格。基本上,我们想生成一个描述这个内容的句子。但是有很多方式来描述内容,我们可以有不同的写作风格。

为了控制写作风格,我们提供一个额外的句子,一个参考句子,它是由人类编写的,用于描述不同的内容。

任务是,我们如何重写这个参考句子来描述新内容?因此,这里的期望输出是,使用完全相同的措辞,但描述新的内容,例如“布朗·詹姆斯得到32分和7次助攻”。

基本上,目标是使用参考句子的写作风格来控制写作风格。方法与第一个任务中的方法非常相似,因为同样,我们希望保留参考句子的早期方面,只改变内容。因此,我们同样可以将这个任务分解为不同的子目标,并使用直接监督来确保模型能够完成每个子目标。

我不想深入更多细节,但这里有一些结果。例如,给定这个参考句子,我们的方法基本上产生了预期的结果。

并且有不同的基线方法,例如基于模板的方法和其他特定方法。

好的,这里有一些定量评估,我跳过。

这是第一部分,句子级别的控制。例如,我们如何改变句子的属性,如情感;或者我们如何重写句子的内容以表达一组新的内容。

下一部分是在对话级别,我们如何控制对话,特别是对话策略或开放域对话系统中的主题。

对话系统研究的快速概述,基本上有两类对话系统。第一类是任务导向对话。

在这种类型的对话系统中,我们使用对话系统来完成特定任务,例如预订航班或餐厅。这种对话通常是封闭域的。我们有一个特定航空公司的聊天机器人,这个聊天机器人会帮助你预订航班。但这个聊天机器人不能做其他任何事情。所以这是一个封闭域对话。

我们有用于开放域对话的聊天机器人,目标是提高用户参与度。指标是这个聊天机器人能与人类保持对话多长时间。这种对话通常是随机对话,没有任何对主题或其他方面的控制。

第三种对话类型是一个新的研究方向,即如何结合这两种类型的对话。首先是仍然开放域的对话,你基本上可以与人类就任何话题进行对话。但同时,我们希望控制对话策略,以在对话结束时达到期望的主题。

例如,我们希望聊天机器人从任何主题开始,我们希望聊天机器人有时隐式地引导对话流程到达特定的目标主题。例如,这种类型的对话系统可以用于对话推荐系统、教育或心理治疗。想象一下在心理治疗中,医生会与病人聊天,这种对话非常放松,是开放域对话。但医生有一些隐含的目标,他基本上想引导话题走向一个特定的主题,以激励病人说出他正在想的事情,以及相关的疾病或其他问题。

因此,同样,我们可以将任务分解为两个子目标。第一个目标是从任何主题开始,我们希望对话系统在对话结束时达到期望的主题。这就是所谓的“目标引导”。同时,我们希望这个对话是自然的,我们希望话题转换流畅,以便对话能与人类互动。

这是一个例子,从任何主题开始,例如一般问候,期望的主题是电子书,例如在推荐系统中,我们想推荐客户购买电子书。

这是代理和人类之间的对话。我们可以看到,在这个对话中,话题基本上逐渐从“累了”、“抱歉”、“工作”、“编程”、“书”转换到“电子书”。

我们也可以看到这个对话非常自然,话题转换非常流畅。这就是我们在这个特定任务中想要实现的目标。

这里的挑战同样是,我们没有直接的监督数据。因此,解决方案是使用竞争性子目标和部分监督。首先,为了实现自然对话,我们可以使用闲聊数据来学习流畅的单轮转换,因为我们有大量的闲聊对话数据。这种闲聊对话基本上提供了关于什么是流畅转换的信息。例如,从任意句子或对话历史,我们如何生成对此历史的流畅回应。

我们可以使用这种自然对话树数据来学习。第二个目标,达到期望的目标,我们可以使用基于规则的监控规划。我们希望每个回应的关键词逐渐接*目标对话、目标主题。

因此,模型架构的高层次说明是:给定人类的一句话,例如“我正在写关于他的程序”,我们首先从话语中提取关键词,即“程序”。我们可以将这些关键词视为这个特定话语的主题。这是关键词提取。

然后,我们有一个基于关键词的条件响应检索。这是一个基于检索的对话系统。当然,我们也可以使用基于生成的响应模型,基本上给定这个新的话题关键词,我们想生成对这个话语的回应。

例如,给定“编程书”,我们生成“有趣。我从一本书中读到编程。”这是对这个话题的实现。

关键部分是,我们如何进行话题转换,从“编程”到“编程书”。我们可以以某种方式使用一种特定的模型,一种基于核的模型,来捕捉这种话题转换。

然后是目标引导规则。首先,我们希望进行这种转换。给定任意关键词,我们希望将话题从这些关键词转换到另一个更接*目标关键词的关键词。例如,从“程序”,我们基本上转换到“编程书”,因为“书”更接*“电子书”。

我们使用词嵌入空间中关键词之间的距离评估。因此,下一个关键词必须更接*目标关键词。

同时,我们希望实现流畅的转换。因此,我们希望在这里施加约束,下一个关键词在词嵌入空间中接*原始关键词。这基本上确保了下个话题在语义上接*当前话题,从而确保了流畅的转换。

我们可以调整权重1和2来控制聊天机器人的攻击性,即聊天机器人将对话从原始主题引导到目标主题的积极程度。

因此,基本上,这是两个竞争性的损失或目标。我们结合这两者,基本上实现了所谓的目标引导开放域对话。

这里有一些结果。例如,目标是“跳舞”,从任何主题开始。我们看到对话,例如“玩运动”,话题是“运动”,然后是“篮球”,“我喜欢篮球”,这是关于兴趣的话题。然后是“说唱音乐”,从“运动”、“兴趣”、“音乐”、“歌曲”,然后到“唱歌”,再从“唱歌”到“跳舞”。因此,你可以看到在整个对话过程中,存在清晰的话题转换。

当然,这些是相当简单和初步的解决方案。当然,这个系统可能会在不同的情况下失败。

总的来说,这就是我们如何进行无监督可控文本生成,无论是在句子级别还是对话级别。关键思想是相同的:我们将复杂任务分解为竞争性子目标,并且这些子目标可以有直接监督用于学习。然后我们联合训练这些子目标,基本上可以将我们的模型推向我们想要的方向。

好的,这部分内容就这么多。关于生成包含从输入中推断出的期望信息的文本,以及文本生成的两个核心目标:如何生成自然语言,以及如何生成包含相关信息的输出。

这就是本节课的全部内容。有任何问题吗?

好的,很乐意离线回答任何问题。

016:结构学习 🧠

在本节课中,我们将要学习如何从数据中推断出概率图形模型的结构,特别是无向图(马尔可夫网络)的结构。我们将探讨如何将复杂的结构搜索问题转化为更易于处理的参数学习问题,并介绍一些具有理论保证的算法。


概述

到目前为止,我们通常假设对领域有足够的先验知识,并利用这些知识来设计模型结构,例如混合模型或隐马尔可夫模型。另一种方法是利用领域知识设计专家系统或知识图谱。

然而,今天我们将从另一个方向出发:假设我们只有数据,希望从数据中学习实体之间的依赖关系、相关性或因果结构。这就是结构学习的主题。我们将重点讨论在特定约束下(例如树结构或无向图)进行结构学习的数学上更清晰、更优雅的方法。

上一节我们回顾了利用互信息和最大生成树算法学习树结构的方法(Chow-Liu算法)。本节中,我们来看看如何学习更一般的无向图结构。


从结构学习到参数学习

结构学习的一个核心思想是,将离散的组合结构搜索问题,转化为在连续参数空间中优化模型参数的问题。这样我们可以计算梯度,并更容易地设计迭代收敛算法。

考虑一个社交网络片段,每个节点上我们观测到数据(例如投票的“是/否”)。我们如何对离散或连续的节点值数据集进行建模?一种方法是使用马尔可夫随机场。

在马尔可夫随机场中,我们定义团上的势函数。一种常见的表示是只定义单节点和相连节点对上的势函数及其权重。在这个数学模型里,参数化与模型结构之间存在隐含的联系:每一对节点之间的权重对应于连接这两个随机变量的边。如果该权重的值变为0,直观上就可以认为这两个变量之间没有边。

因此,如果我们能从数据中学习到这些参数的值,通过观察每一对势函数权重大小,实际上就可以推导出图的结构。这样,我们就在结构学习和参数学习之间建立了联系。

更具体地说,如果我们能学习到成对势函数的权重,并将它们组织成一个矩阵,那么这个矩阵的零元素与非零元素就与图的结构存在一一对应的关系。


高斯图模型

让我们看一个具体的马尔可夫随机场模型:多元高斯分布。这看起来不太像典型的马尔可夫场,因为标准形式是用均值向量和协方差矩阵来定义联合分布的。

不失一般性,我们假设均值为0(数据可以中心化处理)。然后引入一个新的矩阵,即协方差矩阵的逆矩阵(精度矩阵)。这样,我们可以将多元高斯分布的联合分布重写,从而更明确地揭示它是一个马尔可夫随机场。

精度矩阵 Q 中的元素,对应于这个连续值马尔可夫场中单节点和节点对势函数的权重。对角线上的 Q_ii 对应于单节点势函数,非对角线上的 Q_ij 对应于连接节点 i 和 j 的边上的势函数权重。因此,高斯图模型是一个成对马尔可夫随机场。协方差矩阵间接地携带了图的结构信息,只有将其求逆得到精度矩阵 Q,才能读出连接所有变量的图结构。

这听起来问题已经解决了:要学习图,只需计算样本协方差矩阵,然后求逆得到 Q。然而,直接求逆在实践中存在困难:

  1. 计算复杂度高(O(n³)),对于大规模网络(如数千节点)非常昂贵。
  2. 当样本量不足时,协方差矩阵可能是退化的,无法求逆。

因此,我们需要绕过求逆步骤,直接学习精度矩阵 Q。此外,真实的网络(如基因或社交网络)通常是稀疏的,这意味着 Q 中应该有很多零元素。这种稀疏性不仅符合实际意义,也使得从高维数据中学习成为可能。


基于回归的方法:图Lasso算法

接下来介绍一种基于Lasso回归的启发式算法,它能直接学习图结构。

Lasso算法的数学形式是解决带有约束的线性回归问题,其思想是对回归系数施加L1范数约束,这倾向于产生稀疏解。

将这个思想应用到图学习上:假设我们关注其中一个目标节点,其他所有节点作为输入,我们建立目标节点对其他节点的线性回归。通过执行稀疏回归(Lasso),我们可以估计出其他节点到该目标节点的权重。回归后,只有少数权重非零,这便定义了该目标节点的稀疏邻域。

对图中的每一个节点重复此过程,我们就能为每个节点估计出其邻居集合,最终组合起来得到整个图。需要注意的是,当分别对两个相连的节点做回归时,同一条边可能会得到两个不同的权重估计。我们需要通过某种规则(如取阈值、或选择其中一个)来确定边的存在与否。

这种对每个节点依次进行邻域选择的方法,被称为“图Lasso”算法。有理论证明,在满足一定条件下,该程序能以高概率恢复出真实的图结构。

你可能会好奇,为什么在高斯图模型中,这种线性回归的方法能等价地恢复图结构?这需要深入理解高斯图模型中的代数关系。


算法背后的理论联系

在高斯图模型中,一个关键性质是:给定其他所有变量,某一个变量 X_i 的条件分布仍然是一个高斯分布。这个条件分布的均值,是其他变量的线性组合。具体推导表明,这个线性组合的系数向量,与精度矩阵 Q 的第 i 列(或行)直接相关。

因此,为节点 X_i 估计其条件分布均值的回归系数(即Lasso求解的 β),其非零模式与精度矩阵 Qi 列的非零模式是一致的。通过对图中每个节点 i 执行这样的稀疏回归,我们就能逐步学习到整个精度矩阵 Q 的稀疏结构。

简而言之,我们通过将学习精度矩阵 Q 的问题,分解为一系列针对每个节点的稀疏线性回归问题,从而避免了直接求逆协方差矩阵,并能直接恢复出图的结构(即边的存在与否)。


离散图与扩展

我们讨论的方法主要针对连续值的高斯图模型。如果节点值是离散的(例如社交网络中的投票记录),情况类似,但回归形式需要改变。

此时,一个节点给定其他节点的条件分布不再是高斯分布,而是逻辑斯蒂分布。因此,我们需要将线性回归替换为逻辑斯蒂回归。算法流程依然类似,并且也有理论保证能一致地估计出图结构。

对于更复杂的情况,例如每个节点本身是一个向量(多属性节点),也有相应的方法(如基于偏相关计算的技术)来估计图结构。这类基于回归或偏相关的邻域选择方法,形成了一个具有良好统计保证的结构学习算法家族。


应用于时变网络

基本的图学习技术可以扩展到更有挑战性的场景,例如学习随时间演化的网络结构。这在社交网络、生物网络中非常常见。

主要挑战在于,每个时间点可能只有很少甚至一个数据样本,直接用传统方法估计每个时刻的图是不可靠的。关键洞察是:时间上相邻的网络并不是独立的,它们通常只发生微小变化。

以下是两种解决思路:

  1. 核加权L1正则回归:当估计特定时刻 t 的网络时,不仅使用 t 时刻的数据,也使用所有时刻的数据,但根据时间距离进行加权。距离 t 越*的时刻,其数据权重越大。这相当于利用所有样本通过核加权来“增强”当前时刻的样本量。

  2. 时间*滑L1回归:同时估计所有时间点的网络。在目标函数中,除了要求每个时刻的网络稀疏外,还额外施加一个约束,要求相邻时间点网络之间的差异(例如对应边权重的变化)也尽可能稀疏。这强制了网络随时间*滑演化。

这两种方法都有相应的理论保证,能够在样本量有限的情况下,有效估计出演化网络的结构。它们已成功应用于分析美国参议院的投票网络演化、以及癌症细胞基因表达网络的动态变化等实际问题。


总结

本节课中,我们一起学习了一系列用于估计马尔可夫随机场(无向图模型)连接拓扑结构的算法。

这些算法的核心是邻域选择,它将组合结构搜索或矩阵求逆估计问题,转化为一系列顺序的、回归风格的问题,从而提供更高效且具有一致性保证的解决方案。

我们首先看到了如何将结构学习转化为参数学习,并深入探讨了高斯图模型中精度矩阵与条件回归的深刻联系。接着,我们介绍了基于Lasso的图学习算法及其理论依据。最后,我们将这些基础技术扩展到更复杂的场景,特别是时变网络的估计,使得能够基于少量样本集同时估计多个相关图的结构。

通过这些方法,我们可以从数据中自动发现并刻画复杂的依赖关系网络。

017:因果关系(第一部分) 🧠

在本节课中,我们将学习因果关系的基本概念。我们将探讨为什么需要因果关系、因果模型与图形模型的关系、如何从数据中发现因果信息、如何在给定因果结构和观测数据的情况下推断因果效应,以及为什么反事实推理至关重要。


为什么需要因果关系? 🤔

在日常生活中和科学发现中,我们必须区分因果关系和关联关系。例如,有报道称“分担家务的夫妻更可能离婚”。这听起来令人惊讶。当我们看到这类信息时,我们希望进一步探究,以获取有用且有益的洞见。仅仅看到关联关系,我们不知道该如何行动。但一旦理解了因果关系,我们就知道为了达成某个目标,应该采取什么行动。


关联与因果:基本区别 🔗

关联意味着两个变量不独立。如果一个变量对预测另一个变量有用,那么它们就是关联的。

当我们说 X 是 Y 的原因时,我们必须进入另一个层面,不能仅仅使用关联,因为因果关系是底层过程的属性。我们基于干预的概念来定义因果关系。

因果关系的定义如下:如果你对变量 X 进行干预,并赋予 X 两个不同的值(例如 X1 和 X2),然后发现对应的 Y 的分布可能不同,那么我们就说 X 导致了 Y。

干预的定义是:如果你想干预变量 X,你只能改变变量 X 本身,而不能改变系统中的任何其他变量。这个行动确保不会改变任何其他变量。

因此,这个定义很自然:在系统中,这个行动只改变了 X 的值,然后你看到了 Y 分布的变化。由于所有其他变量都保持不变,Y 分布的变化必然是由 X 值的变化引起的,所以可以说 X 导致了 Y。


通过干预理解现象 🧪

让我们通过干预的概念来看几个例子。

例子1:炎热天气与冰淇淋高销量

  • 问题:炎热天气和高冰淇淋销量有因果关系吗?
  • 分析:如果我们能找到方法干预天气,使其变得非常炎热,那么很可能会看到冰淇淋销量上升。然而,如果我们干预冰淇淋销量(例如雇人大量购买),这并不会导致天气变热。因此,我们可以说炎热天气是冰淇淋高销量的原因。

例子2:离家时间与公交车到站

  • 问题:一个人早上离家去上班的时间,与公交车到站的时间高度相关。它们有直接的因果关系吗?
  • 分析:直觉上似乎没有,因为这个人看不到公交车来。让我们进行干预思考:
    • 干预公交车到站(例如迫使公交车停下),这个人仍会像往常一样离家。
    • 干预这个人离家(例如锁上门),公交车仍会像往常一样到站。
  • 结论:它们之间没有因果关系。那么如何解释这种依赖关系呢?通常是因为存在一个共同原因,比如公交时刻表。两者都根据公交时刻表运作。

理解干预的定义至关重要。例如,如果我通过改变公交时刻表来改变公交车到站时间,这个行动也会直接影响这个人离家的时间,因此这不是一个有效的干预。有效的干预必须只改变目标变量本身。


因果图表示法 📊

我们通常使用有向无环图来表示因果关系。如果图中有一条从 A 指向 B 的有向边,就意味着 A 是 B 的直接原因(相对于图中的变量集)。

在本课程中,我们将讨论:

  1. 基于干预的因果关系定义。
  2. 因果思维的好处。
  3. 因果图模型与普通图模型的区别(需要额外的约束或假设)。
  4. 因果效应识别的基本思想。
  5. 反事实推理的原因和方法。

在下一讲中,我们将看到如何进行因果发现,以及因果关系在机器学习中的意义。


依赖与因果:为何区分至关重要 🎯

如果你只想根据数据进行被动预测,那么依赖关系可能就足够了。但如果你想改变某些东西,或者想改变系统以实现目标,就必须关心因果关系。

一个经典的例子是:如果你想降低咳嗽的发病率,你不能针对与之高度相关的变量(比如黄手指),而必须找到原因(比如吸烟)。你必须深入到因果层面才能实现目标。


辛普森悖论:关联与因果的冲突 ⚖️

考虑一个真实数据集:医院有两组肾结石患者,一组结石较小,另一组结石较大。有两种治疗方法 A 和 B。

  • 对于小结石组,治疗 A 的康复率(93%)高于 B(87%)。
  • 对于大结石组,治疗 A 的康复率(73%)也高于 B(69%)。
  • 然而,如果合并两组数据,治疗 B 的总康复率却显得更高。

问题:作为医生,如果你想最大化康复几率,你会推荐治疗 A 还是 B?

分析:这个悖论之所以发生,是因为结石大小这个变量同时影响了治疗选择康复结果。当我们只看治疗与康复的关联(相关性)时,会受到这个共同原因的干扰,无法清晰看到治疗对康复的因果影响。要识别因果效应,我们需要“控制”或“调整”结石大小这个变量。


更多例子:选择偏倚与生存偏倚 🎲

例子1:大学录取中的性别与智商

  • 在整个人群中,性别和智商可能是独立的。
  • 但是,成为大学生是性别和智商的共同结果。
  • 一旦我们只观察被录取的学生(即给定这个共同结果),性别和智商就会变得相关(出现选择偏倚)。
  • 如果我们想基于样本推断总体情况,就必须注意并校正这种选择偏倚。

例子2:幸存者偏倚(二战飞机装甲)

  • 军方检查返航飞机上的弹孔分布,发现某些区域弹孔多,某些区域少。
  • 问题:应该在哪里加强装甲?
  • 关键:我们看到的只是幸存下来的飞机的数据。我们真正需要推断的是那些未能返航的飞机被击中的模式。这需要因果思维:弹孔位置和是否幸存都是被击中事件的结果。我们需要利用返航飞机的数据,在一定的过程假设下,推断出未返航飞机的受损模式。

例子3:蒙提霍尔问题

  • 在这个游戏中,参赛者初始选择一扇门,主持人打开一扇没有奖品的门后,参赛者是否应该换门?
  • 解释:初始选择与奖品位置最初是独立的。但当主持人打开一扇门(一个共同结果)后,这两个变量变得相关。你的初始选择包含了关于奖品位置的新信息,计算表明换门会增加获胜概率。

因果思维的优势 💪

从这些例子可以看出,因果思维至关重要。虽然我们经常将因果信息作为背景知识使用,但明确理解因果关系能带来以下优势:

  1. 主动干预:我们可以改变系统以实现目标,而不仅仅是进行被动预测。
  2. 泛化与适应:我们可以将知识推广或适应到新环境。
  3. 信息整合:我们可以将小部分世界的知识组合成更大的图景。

例如,如果知道 X -> Y -> Z 这个因果链,即使没有 XZ 的直接连接,我们也知道 X 通过 Y 导致 Z。然而,如果只知道 XY 相关,YZ 相关,我们完全无法确定 XZ 的关系(可能独立,也可能相关)。因此,因果理解使我们能够从系统的局部走向整体。

创造力本质上也是一个因果问题:提出“如果……会怎样”的问题,并整合不同方面的信息来回答它。


稳定性与领域适应 🌉

因果信息有助于提升在复杂情境下的预测性能。

例子:人影预测

  • 场景1:你只看到我的影子,能预测我的身形吗?相对容易,因为身形是影子的原因,从结果推断原因通常更稳定。
  • 场景2:你只看到我的身形(在一个新环境,不知道光源),能预测我的影子吗?非常困难,因为影子不仅取决于身形,还取决于未知的环境(光源)。
  • 分析:因果方向(身形 -> 影子)是稳定的映射。从果(影子)推因(身形),可以部分忽略环境变化的影响。但从因(身形)推果(影子),则严重依赖于易变的环境因素。

这与领域适应问题相关:我们拥有一个分布(领域)的数据,但需要在另一个不同分布的新领域进行预测。因果方向通常能提供更稳定的关系,帮助我们识别变化的来源并做出更好的预测。


机器学习中的因果问题 🤖

问题1:偏见与公*性

  • 例如,谷歌照片在2015年曾将非裔美国人错误分类为“大猩猩”。简单地移除“大猩猩”标签并非根本解决之道。
  • 需要思考:是什么导致了分类差异?如何从因果层面理解和解决数据或模型中的偏见?

问题2:对抗性攻击

  • 对图像添加微小扰动,就能使机器学习模型做出完全错误的分类,而人类不受影响。
  • 原因:人类的决策过程(基于高层次特征和因果理解)与机器的决策过程(通常直接基于像素的统计模式)不同。
  • 解决方案:让机器学会因果思维生成式思维,像人类一样理解世界,可能提升其鲁棒性。

问题3:分布外泛化

  • 传统机器学习常假设训练和测试数据分布相同。现实中往往并非如此。
  • 人类可以轻松地将技能(如打羽毛球)迁移到新任务(如打乒乓球),或在全新驾驶场景中做出正确决策。机器则很难做到。
  • 智能的关键可能在于拥有一个紧凑的、因果的世界表示,使我们能够解释所见、连接不同场景、分解复杂任务,并进行外推而不仅仅是内插。


从图模型到因果图模型 🕸️

我们学过图模型(如贝叶斯网络)用有向无环图紧凑地表示分布的因子分解和条件独立关系。

关键问题:如何确保这样的图模型表示的是因果关系

由于因果关系和关联处于不同层面,我们需要一种方法来描述干预的效果。为确保一个有向图 G 是因果的,需要满足三个条件(因果马尔可夫条件):

  1. 不变性:干预后的新分布仍然相对于原图是马尔可夫的(不会产生新的边)。
  2. 确定性:如果我们干预将变量 Xi 设为值 xi,那么 P(xi | do(xi)) = 1
  3. 模块性/自主性:干预 Xi 时,其他变量 Xj (j ≠ i) 的条件概率分布 P(xj | pa_j) 保持不变。

这意味着,对 Xi 进行干预,我们只是切断所有指向 Xi 的边,并将 Xi 设为固定值,图中其他部分保持不变。


结构因果模型 ⚙️

另一种表示因果关系的等价方式是结构因果模型(一组结构方程):
Xi = fi(PAi, Ei)
其中 PAiXi 的父变量(直接原因),Ei 是外生变量(噪声或未观测因素)。

在因果系统中,每个方程代表一个自主的机制。这些方程本身是模块化的、互不干扰的。这是因果系统最重要的属性,也是我们关心因果理解的核心原因:即使不想干预,模块性也意味着当系统某部分发生变化时,我们可以定位变化点,并利用对其他部分的理解进行预测。


三类基本问题 🎯

在人工智能中,通常有三类基本问题:

  1. 预测问题:给定一些变量的观测值,预测其他变量。例如 P(X3 | X1, X2)。这不需要因果模型,只需条件分布。
  2. 干预问题:预测对变量进行干预后的结果。例如 P(X3 | do(X2=1))。这需要因果模型,因为干预会改变数据生成过程。
  3. 反事实问题:在已观察到某些事实的情况下,问“如果当时做了不同的干预,结果会怎样?”。例如,已知乔治没有黄手指(X2=0)且咳嗽(X3=1),那么“如果当时我们确保他有黄手指(do(X2=1)),他会咳嗽吗?”。这需要最详细的因果信息。

因果效应的识别 🎯

识别因果效应的黄金标准是随机对照实验:将受试者随机分到处理组和对照组,确保其他变量在组间*衡,那么结果差异就可归因于处理。

然而,随机实验通常成本高昂或不可行。因此,我们需要利用观测数据因果结构知识来识别因果效应。这被称为因果推断

核心挑战:控制混杂偏倚。在辛普森悖论中,结石大小就是一个混杂因子。

因果效应的定义P(Y | do(X=x)),即对 X 干预设置为 x 后,Y 的分布。

可识别性:给定因果图 G 和观测变量的数据,能否从数据中唯一确定 P(Y | do(X=x))?如果可以,则称该因果效应是可识别的。


识别准则:后门准则与前门准则 🚪

后门准则:对于有序变量对 (X, Y),一组变量 Z 满足后门准则,如果:

  1. Z 中不包含 X 的后代节点。
  2. Z 阻断了所有 XY 之间指向 X 的路径(即后门路径)。

如果 Z 满足后门准则,则因果效应可识别为:
P(Y | do(X=x)) = Σz P(Y | X=x, Z=z) P(Z=z)
注意,这里 P(Z=z) 是边缘分布,而不是条件分布 P(Z=z | X=x)。这正是与普通条件概率 P(Y | X=x) 的关键区别。

前门准则:如果存在一组变量 Z 满足:

  1. Z 截断了所有从 XY 的有向路径。
  2. 没有从 XZ 的后门路径。
  3. 所有从 ZY 的后门路径都被 X 阻断。

那么,因果效应也可通过 Z 识别,公式略复杂,但提供了另一种在无法直接测量混杂因子时进行识别的方法。

这些图准则与潜在结果框架中的可忽略性条件是等价的。可忽略性条件为:给定 Z,潜在结果 Y(x) 与处理分配 X 独立。这为因果效应的识别提供了另一种表述。


总结 📝

本节课我们一起学习了:

  • 因果关系是基于干预来定义的,与关联有本质区别。
  • 因果思维对于主动改变系统泛化到新环境信息整合至关重要。
  • 辛普森悖论等例子揭示了依赖关联进行决策的风险。
  • 我们使用因果图模型结构因果模型来表示因果关系,其核心属性是模块性
  • 人工智能涉及三类问题:预测、干预和反事实推理。
  • 从观测数据中识别因果效应的核心是控制混杂偏倚,后门准则前门准则提供了可识别性的图论判断方法。

在下一讲中,我们将继续探讨因果效应的识别准则的统一,并深入介绍反事实推理以及如何从观测数据中发现因果结构(因果发现)。

018:因果关系(第二部分)

在本节课中,我们将学习因果推断与反事实推理,并探讨如何从观测数据中发现因果关系。我们将介绍后门准则、前门准则等图形化标准,以及如何利用这些标准识别因果效应。接着,我们会讨论反事实推理,并了解如何利用特定个体的信息进行更精确的因果分析。最后,我们将介绍因果发现的基本方法,包括基于约束的方法和基于分数的方法。

因果推断的识别准则

上一节我们介绍了因果推断的基本概念,本节中我们来看看用于识别因果效应的图形化标准,即后门准则和前门准则。这些标准可以直接通过因果过程的图形表示来验证。

后门准则与潜在结果框架

后门准则与潜在结果框架中的“条件可忽略性”相关。在潜在结果框架中,Y(x) 表示在干预 X 使其取值 xY 的随机变量,它代表了从 XY 的结构方程模型或因果机制的性质。

后门准则的图形条件,在潜在结果框架中等价于要求 Y(x)X 在给定一组协变量 Z 的条件下独立。这确保了在控制 Z 后,XY 的因果效应可以被无偏地估计。

前门准则与潜在结果框架

前门准则要求变量 Z 截断所有从 XY 的直接有向路径。在潜在结果框架下,这对应两个条件:

  1. 给定 Z 时,Y(x)X 独立。这意味着在给定 Z 后,X 不会通过因果机制直接影响 Y
  2. ZY 的因果机制以及 X 的生成过程相关的变量,需要与从 XZ 的因果机制独立。

图形化标准与潜在结果框架的标准紧密相关,在大多数情况下是等价的。

因果效应可识别性的充分条件

现在,我们来看一个用于识别 XY 的因果效应 P(y | do(x)) 的图形化充分条件。该条件比后门/前门准则更通用。

该充分条件陈述如下:如果 X 与其任何子节点之间不存在双向路径(即仅由双向边构成的路径),那么 XY 的因果效应是可识别的。

以下是该条件成立的几个图结构示例:

  • X -> Y
  • X -> Z <- U -> YXZ 之间无双向路径)
  • X -> Z1 <- U -> Z2 -> YX 与其子节点 Z1 之间无双向路径)

以下是该条件不成立(因果效应通常不可识别)的图结构示例:

  • X <-> Y (存在双向路径)
  • X -> Z <-> Y
  • X <-> Z -> Y

在某些情况下,如果对因果机制施加额外约束(例如假设系统是线性的),即使存在双向路径,因果效应也可能变得可识别。一个著名的例子是工具变量法。

倾向得分及其应用

当存在多个协变量时,直接匹配高维协变量 C 的分布很困难。倾向得分提供了一种简化方法。

倾向得分 e(C) 是一个随机变量,定义为 X=1 给定协变量 C 的条件概率:e(C) = P(X=1 | C)

关键性质是:给定倾向得分 e(C),处理变量 X 与协变量 C 条件独立。这意味着在因果效应识别中,我们可以用一维的倾向得分 e(C) 来代替高维的协变量 C 进行匹配或调整。

因此,XY 的*均因果效应可以估计为:
E[Y | do(X=x)] = E_{e(C)} [ E[Y | X=x, e(C)] ]
这比直接基于 C 进行计算要简单得多。

反事实推理

之前我们讨论了预测和干预问题。反事实推理则关注更具体的问题:对于一个已知特定情况的个体(单元),如果当时的情况发生改变,结果会怎样?

反事实问题的典型形式是:“给定我观测到个体 i 具有特征 X=x 和结果 Y=y,如果当时对 X 进行干预使其取值为 x',那么 Y 会是多少?”

这与一般的干预效应不同,因为它利用了关于该特定个体的观测信息。

反事实推理的框架

解决反事实问题的通用框架如下:

  1. 从观测证据 (X=x, Y=y) 中,推断出代表该个体特定属性的外生噪声变量 U 的取值或分布。
  2. 保持推断出的 U 不变,将 X 的值改为反事实值 x'
  3. 根据结构方程模型 Y = f(x', U),计算新的 Y 值。

例如,在一个简单的因果模型 Y = f(X, E)E 独立于 X 的情况下:

  1. 从观测值 (x, y) 可解出 e = y - f(x)(假设函数形式已知)。
  2. 反事实结果 y' 即为 f(x', e)

这使得反事实推理能给出比基于总体条件分布 P(Y | X=x') 的预测更个性化、更精确的答案。反事实推理可用于归因分析,识别导致特定结果的关键原因。

因果发现简介

在许多实际问题中,进行干预实验是不切实际或不可能的。因果发现旨在从纯粹的观测数据中推断出因果关系。

基本假设:因果充分性与忠实性

进行因果发现需要一些基本假设:

  • 因果充分性:所观测的变量集合 V 中,任意两个变量的所有直接共同原因也包含在 V 中。否则,就存在未观测的混杂因子。
  • 忠实性:数据中表现出的所有(条件)独立关系,都完全由因果图结构通过d-分离准则所蕴含。这意味着没有意外的、(由于参数巧合导致的)条件独立关系。

基于模块性假设, faithfulness 通常被认为在一般情形下成立(参数巧合的概率测度为0)。

基于约束的因果发现方法

基于约束的方法(如PC算法)的核心是利用数据中的条件独立关系来推断因果图的骨架和部分方向。

其基本逻辑基于以下两个发现:

  1. 骨架发现:在忠实性假设下,两个变量 XY 在因果图中相邻(有直接边相连),当且仅当它们在任何其他变量的子集条件下都不独立。
  2. 方向发现(V-结构):对于三个变量 X, Y, Z,如果 XY 不相邻,YZ 不相邻,但 XZ 相邻,且 XZ 在给定空集时独立,但在给定 Y 时不独立,那么可以推断出 X -> Y <- Z 的V-结构。

PC算法步骤:

  1. 从完全无向图开始。
  2. 逐步增加条件集的大小,进行条件独立性检验,移除那些在给定某个条件集下独立的变量之间的边,最终得到骨架。
  3. 识别所有V-结构。
  4. 基于避免产生额外V-结构和循环的规则,进行方向传播,尽可能多地确定边的方向。

最终输出通常是一个部分有向无环图,它表示一个马尔可夫等价类。有向边表示在该等价类中所有图的方向都一致;无向边表示方向不确定。

基于分数的因果发现方法

基于分数的方法(如GES算法)为每个候选的因果图(或等价类)计算一个分数(如BIC分数),该分数衡量图对数据的拟合优度与复杂度之间的*衡。然后通过搜索(如贪婪搜索)寻找分数最高的图。

这类方法通常假设分数具有分解性分数等价性(马尔可夫等价的图分数相同)和局部一致性等性质。

函数因果模型与因果方向发现

传统方法在只有两个变量 X, Y 时无法区分 X->Y 还是 Y->X。函数因果模型通过假设因果机制具有特定形式来解决这个问题。

考虑模型 Y = f(X, E),其中噪声 E 独立于原因 X。如果反过来用 X = g(Y, E') 建模,通常无法使 E' 独立于 Y。利用这种不对称性可以推断因果方向。

例如,在线性非高斯模型中,即使 XE 都是非高斯的,也只能在一个方向上满足噪声与原因的独立性。这构成了线性非高斯无环模型识别的基础,并与独立成分分析 相联系。

在实践中,因果发现需要处理非线性、混合变量类型、隐变量、选择偏差、缺失值、非*稳性等诸多挑战。

总结

本节课中我们一起学习了因果推断的核心内容。我们首先回顾了用于识别因果效应的后门准则和前门准则,并将其与潜在结果框架联系起来。接着,我们探讨了利用倾向得分简化因果效应估计的方法。然后,我们深入研究了反事实推理,了解了如何利用个体特定信息进行更精细的因果分析。最后,我们介绍了因果发现的基本思想,包括基于约束的方法(如PC算法)和基于分数的方法(如GES算法),并简要说明了如何利用函数因果模型中的噪声独立性假设来发现两个变量间的因果方向。因果观点为我们理解数据分布的变化、解决迁移学习等复杂机器学习问题提供了有力的指导。

019:作为推断的强化学习(第二部分)🎯

在本节课中,我们将继续学习从概率图形模型视角看待强化学习。我们将首先回顾上一讲的核心概念,然后深入探讨最大熵强化学习算法,包括策略梯度和经典的Q学习,并在此基础上构建出从“控制即推断”框架中衍生出的软Q学习和软策略梯度。

快速回顾 🔄

上一讲我们介绍了大量材料,建立了强化学习的概率视角。我们首先介绍了强化学习和马尔可夫决策过程的基础知识。

在上一部分,我们涵盖了MDP的基础。现在,我们将快速回顾已学内容和得到的主要方程与结果,然后进入第二部分,探讨最大熵强化学习算法。我们将首先介绍策略梯度和标准的经典Q学习算法,然后在此基础上构建软Q学习和软策略梯度,这些方法都源自我们的“控制即推断”框架。

马尔可夫决策过程与图形模型

首先,我们回顾两个核心概念。在幻灯片左侧是马尔可夫决策过程。我们有一个环境,一个智能体与环境交互。环境向智能体发送状态和奖励,智能体感知它们并采取行动。我们将MDP定义为初始状态的分布、转移算子的分布(即给定前一状态和动作的后继状态分布),以及一个通常是未知的奖励函数。策略在整个模块中都是概率性的。

在右侧是这个过程的图形模型表示,它是一个带有辅助可观测变量的标准隐马尔可夫模型。我们所做的唯一事情是,通过添加一个额外的条件概率分布来增广这个图形模型,该分布表示在给定时间步T最优的概率与在该时间点的指数化奖励成正比(或相等)。为了使数学上一致,奖励必须被缩放或*移,使其为负值,以避免概率大于一。除此之外,它基本上就是我们的标准隐马尔可夫链模型。

经典框架中的价值函数

在经典设置中,我们引入了价值函数的概念。我们从奖励开始,然后沿着轨迹对奖励求和,称之为回报。接着我们说,给定当前状态的期望回报是状态价值,给定当前状态和当前动作的期望回报是状态-动作对价值。这些期望是针对动态环境和策略计算的,因此这些价值函数依赖于策略。

我们引入了一些递归关系,称之为这些价值函数的贝尔曼最优性方程。这些方程基本上是说,如果我们有最优函数(最优Q和最优V),它们通过最大化算子相互关联。一旦我们获得了最优价值函数,就可以通过沿动作对Q函数进行argmax来推导出相应的最优策略。

推断框架中的对应概念

另一方面,在“控制即推断”这边,我们也推导出了与经典设置非常相似的表达式。首先,我们引入了轨迹的概率。给定这个图形模型,我们可以以“我们希望在整个轨迹上都是最优的”为条件。那么,如果我们知道我们正在最优地行动,轨迹的概率是多少?这基本上正比于轨迹的概率乘以指数化的奖励总和。

现在,我们引入了几个称为V(ST)和Q(ST, AT)的量。这些是某些量的对数,这些量被称为后向消息(我们稍微滥用了符号)。这个后向消息等于从时间点T到结束时最优的概率,给定我们从状态ST采取了动作A。我们特意将它们命名为V和Q,因为它们之间的关系与贝尔曼最优性关系非常相似。具体来说,V是Q的指数和对数,加上给定状态ST的动作先验概率的对数。这个对数积分指数基本上是一个softmax(对数求和指数),这对我们来说非常熟悉。因此,这个框架有时被称为“软”框架,这个方程是软最优性条件。

最后,我们得到了最优策略的表达式,即在给定我们希望在整个轨迹上最优的条件下,在时间T采取动作AT给定ST的条件分布。它非常方便地变成了Q函数和V函数之差,这个差通常被称为优势,即在状态ST采取动作AT相对于遵循策略继续前进的优势。

推断策略优化的目标

接着我们提出了一个问题:我们从图形模型中的推断开始,能够使用贝叶斯规则和图形模型的结构推导出这些条件分布。但问题是,这个推断策略优化了哪个目标?结果证明,如果我们计算由策略诱导的轨迹分布与已知奖励下图形模型中实际最优的轨迹分布之间的KL散度,我们实际上可以计算出幻灯片上给出的目标:期望累积奖励加上策略熵的某种熵奖励。目标的第一部分与经典强化学习目标相同,第二部分只是一个正则化项。对于确定性动态,我们可以直接通过查看KL散度得到这个结果;对于随机动态,我们必须克服一些障碍,但如果我们查看证据或对数概率,也可以得到。

强化学习算法概览 📊

在深入细节之前,我们先快速浏览一下强化学习中的主要算法类别。所有算法的底层问题是相同的。

第一类算法称为策略梯度,它试图直接针对策略的参数优化这个随机目标,因为我们直接搜索能够最大化该目标的策略。

第二类是基于价值的方法,它试图摆脱策略,转而使用价值函数V或Q函数(或两者)的某种表示,并直接从这些Q函数推导出策略。我们知道,如果我们能获得最优Q函数,就可以通过argmax Q函数轻松推导出策略。

第三类方法实际上同时表示V函数、Q函数和策略。这可以稍微稳定学习过程,并降低目标及其梯度的方差。基本上,你为V和Q函数以及策略分别设置参数集,然后在优化V、Q和策略之间迭代。

最后,还有一类方法称为基于模型的方法,除了估计策略或价值函数外,它们还尝试对环境的状态转移动态进行建模。一旦你对环境内的转移动态有了良好的估计,就可以将其用于规划。规划基本上是:与其在环境中进行实际探索,不如尝试根据你的模型预测环境的行为,然后尝试解决从当前状态寻找最优轨迹的问题。一旦找到最优轨迹,就可以尝试选择沿着这个最优轨迹的第一个动作。这就是基于规划的策略。通常这非常昂贵,所以在实践中,你会将规划与策略学习结合使用。例如,AlphaGo就是这样做的,它使用蒙特卡洛树搜索进行规划,然后将MCTS提炼成一个可以直接调用的策略。

在本讲中,我们不会深入所有这些方法。为了简单起见,我们将只关注策略梯度和基于价值的方法。我鼓励你自己去查阅其他方法。

策略梯度算法详解 📈

第一个方法是策略梯度。让我们更详细地看看它是如何工作的,以及我们究竟将如何优化这个随机目标。

我们将J(θ)称为依赖于θ的目标函数。我们面临的第一个问题是如何估计这个期望。为了估计这个期望,我们应该能够从中采样轨迹。通常,当你能够访问环境时,你可以遵循学生代码来采样轨迹:你从某个初始状态开始,环境给你这个初始状态,然后你从时间1迭代到时间T,在每个时间点,你根据当前策略选择一个动作,然后从环境中选择下一个状态和相应的奖励。因此,只要你有一个策略并能访问模拟器,只需将你的策略插入模拟器,就可以生成一堆这样的轨迹。因此,在生成一堆轨迹后,你可以得到目标函数的蒙特卡洛估计。它基本上是你使用在环境中运行的策略生成的轨迹上的奖励总和。

现在,一旦我们知道如何计算目标函数的估计,我们如何改进策略呢?答案很简单:我们应该计算目标函数相对于策略参数的梯度。注意,在这个目标中,我们完全没有提到策略的参数。如果你天真地计算梯度,基本上会得到零。但实际上,所有这些样本、奖励、状态和动作都依赖于策略。为了做到这一点,我们需要以某种方式保留对参数的依赖。为此,我们可以稍微重写目标函数:我们可以用积分形式重写期望,因为微分算子是线性的,我们可以将其推入积分内部,得到右侧的目标。然后,我们可以用以下形式重写这个概率分布的梯度,这被称为得分函数梯度技巧

我们如何得到这个?很简单,依赖于θ的概率的梯度等于该概率乘以(并除以)该概率,然后我们将分母和梯度这两项结合起来,这实际上等于对数的梯度。这只是一个等价关系。它给了我们积分下的概率分布,这样我们又可以把这个积分目标转换成一个期望。一旦我们有了期望,我们就能够再次从轨迹分布中采样轨迹,现在使用这个带有梯度的不同目标函数来估计J(θ)的梯度。

所以,这种从基本目标函数到另一个代理目标函数的转换,使我们能够保留目标对参数的依赖性,这样我们在微分时就不会只得到零。文献中有更通用的方法,例如查看梯度估计和随机计算图,我强烈推荐John Schulman的这篇论文。我们还研究了估计不同高阶梯度,如果可能的话。每当你计算这个目标的高阶梯度时,都必须对相应的目标函数进行一些繁琐的操作,你会得到另一个代理目标函数,它会保留允许你计算高阶梯度的某些项。代数上可能很繁琐,但有一种方法可以使用自动微分来实现。

最后,如果你对这个主题感兴趣,最*有一篇非常全面的综述,名为《蒙特卡洛梯度估计与机器学习》,它涵盖了许多不同的估计器。这个估计器只是其中一种方法,称为得分函数估计器,有时也称为REINFORCE估计器,因为我们将会看到REINFORCE算法使用了这个估计器。它有优点也有缺点,我们稍后会讨论。

现在我们知道如何计算相对于策略参数的梯度了。但请记住,这个P_θ(τ)实际上是整个轨迹的分布,也就是动态环境和策略的分布。让我们更明确地写出来,在这种情况下,我们得到的是这三个项梯度的和。注意,这两项并不真正依赖于参数,所以我们很幸运,与环境相关的一切都不在目标中,这意味着我们实际上不需要知道动态环境来计算这些梯度,这非常方便。最终,我们得到的是:J(θ)的梯度等于在我们策略下采样的轨迹的期望,然后我们计算在当前策略下给定状态的动作对数概率的梯度之和,这个和再乘以奖励总和进行加权。

这让我们想起了什么?基本上,发生的情况是:我们在策略下采样一堆轨迹,得到一堆轨迹,然后我们尝试最大化或鼓励策略去模仿或拟合那些具有较高奖励的轨迹,同时降低那些具有较低或负奖励的轨迹的权重。这就是算法直观上所做的。

有趣的是,如果你看一下模仿学习或行为克隆,那里已经给了你一堆轨迹,唯一的目标是模仿专家。目标函数看起来就像幻灯片底部给出的那个,基本上是说我们想要最大化给定策略下轨迹的似然,所以我们试图尽可能好地模仿专家。因此,这个策略梯度(REINFORCE目标)和这个模仿学习目标之间的唯一区别是,如果我们没有来自专家的轨迹,但我们可以访问某些奖励,我们基本上是根据相应的奖励重新加权似然。在某种意义上,这是一个由奖励加权的加权似然目标。

一旦我们有了这个加权目标,我们就可以直接插入我们最喜欢的优化算法,比如随机梯度下降,来优化这些参数。这里的一切基本上都给出了,唯一的要点是,为了*似期望,我们可以简单地通过在环境中根据给定策略采样轨迹来获得梯度的无偏估计。

所以,重点是这些方法有时也被称为同策略策略优化同策略学习,因为你需要在策略上,即你需要从当前策略采样轨迹,以获得这个目标的修正估计。你不能只是从某个其他任意策略采样,然后计算这个目标,因为那样会产生一些偏差,偏差的大小与用于采样轨迹的策略和当前正在优化的策略之间的差异成正比。

这只是为了提醒你我们将贯穿本讲使用的循环:通常采样以估计回报(在这种情况下,我们拟合的模型非常简单,只是这个回报的估计),然后我们改进策略,比如通过梯度步进。

REINFORCE算法超级简单,只有两个步骤:采样、计算目标,然后改进策略。

关于我们刚刚推导出的这个简单算法,有几个快速说明。首先,我们可以用不同的方式表示策略,通常你会用一些参数化函数来表示,例如神经网络,你可以使用梯度下降来学习函数的参数。我提到了策略梯度和行为克隆中最大似然目标之间的关系:在策略梯度中,你根据奖励按比例上调样本的权重;而在行为克隆中,你假设轨迹已经是最优的,所以你得到的任何样本都已经有高奖励,你甚至不需要为它们烦恼。

最后,这个算法虽然简单,但有一些显著的问题。其中之一是梯度或目标函数的估计可能噪声很大。根据环境的随机性和初始策略的好坏,方差可能非常高,这可能会大大减慢学习速度。当噪声很多而信号不足时,学习可能会大大减慢。此外,当奖励非常稀疏时,在某些环境中,你可能只在轨迹末尾的非常罕见的情况下获得正奖励。在这种情况下,最初的大多数轨迹只会得到零奖励。所以当你得到零时,基本上你的整个目标将乘以零,所以你将没有足够的信号来学习,因此你需要尽可能多地随机探索轨迹,并希望在某些时候命中一些非零奖励,这将给你足够的学习信号。

有一种方法可以改进这个目标,即使用动作因果性:你尝试根据该动作实际影响的累积回报来按比例更新动作,或者基本上稍微不同地重构这两项以考虑这种因果性。我不会在本讲中涵盖这一点,但你可以在Sutton和Barto书的第13章中查阅。

Q学习算法详解 🤖

接下来,我将介绍Q学习。到目前为止有问题吗?没有问题?好的,很好。请随时在聊天中输入问题或举手,我会尽量关注。

那么,Q学习是一种我们试图摆脱策略并直接处理价值函数的方法。我们如何做到这一点呢?如果我们再次查看我们刚刚推导出的目标梯度,它实际上依赖于策略的参数。我们如何摆脱对策略的直接依赖呢?一种看待它的方式是:记住,如果我们有一个最优Q函数,我们知道可以通过简单的argmax从这个最优Q函数诱导或推导出策略。这很好,但我们需要能够访问一个最优Q函数。如果我们没有,我们该怎么办?如果我们无法访问最优Q函数,我们可以做的是:从一个对应于某个策略的Q函数开始。给定一个策略,我们总是可以得到相应的Q函数。如果你还记得我们是如何做到的,我们可以简单地计算在策略下以状态和行动为条件的期望回报。然后,如果我们愿意,我们可以从这个Q函数推导出一个策略。让我们尝试使用这个技巧,并将其插入我们在这里的目标函数中,尝试消除表达式中的策略。

那么,我们能否通过与环境的交互来学习Q函数?答案是尝试这样做。假设我们有一个对应于某个策略的Q函数。现在,如果我们对这个Q函数进行argmax并设计一个新策略(在这种情况下将是一个确定性策略π'),结果证明π'将优于原始π。“更好”是在上一讲中介绍的意义上:如果一个策略对于每个状态,其相应的价值都优于或等于另一个策略,那么这个策略就更好。我们将尝试使用这个不等式,在给定Q函数的情况下改进策略。

所以,再次说明,假设我们从某个策略开始,我们可以生成一堆样本,然后我们可以将模型拟合到回报上。在这种情况下,我们将直接拟合Q函数,然后我们将改进策略。策略改进基本上由幻灯片上给出:你将使用这个argmax算子来获得一个比原始策略更好的策略π',然后你将再次生成样本,拟合模型,并在这三个步骤之间迭代。

这里的算法称为策略迭代。它从评估Q开始,一旦我们在某个策略下评估了Q,我们就可以更新策略,然后在步骤之间迭代。

让我们更仔细地看一下。Q函数根据定义满足这个递归关系:我们有一个给定状态和动作的奖励,加上下一个状态的伽马折扣期望值,其中期望是针对环境中的转移动态计算的。一旦我们这样写出来,我们需要做的就是能够估计给定策略下的Q函数。假设我们有一个策略,我们如何在这种情况下估计Q函数?我们可以使用我们在上一讲中介绍的标准备份图。从状态S开始,我们将根据策略行动,得到不同的状态-动作对,然后从那里根据转移动态进行转移,最终得到一些S'。对于这些节点中的每一个,假设我们知道V,我们可以直接通过它们进行备份,并重新计算原始状态下的V值。给定一个状态,我们将稍微扩展一下,或者可能一直扩展到树的底部,然后一旦我们在树的底部,我们就可以一直备份到树顶,并计算这个状态下的V值。这些转移是根据我们这里的动态发生的,并且是针对策略的。

这是我们到目前为止推导出的算法:给定原始的V函数(假设我们从某个V开始),我们可以计算Q;计算Q之后,我们可以计算更新后的策略π';一旦我们有了π',我们将不得不重新评估V函数。所以我们将取π',将其代入这个表达式,并为π'重新计算新的价值函数;一旦我们再次有了新的价值函数,我们将重新计算Q函数,并在这些步骤之间迭代。所以一步一步地,我们慢慢地消除对π的依赖。我们在这个更新规则中仍然有π。但在我从这些方程中消除π之前,让我们看看这个图。

为了建立一些直觉,再次说明,我们在这里处理的两个实体是V函数和π函数。我们从对应于某个随机π的某个随机V开始。我们将从某个策略π开始,评估V,得到对应于当前策略的某个V。然后我们去贪婪地(相对于当前V)找到策略,我们知道它会比之前的原始随机策略稍微好一些。现在,对于这个新策略,我们将再次重新评估V函数,然后我们将迭代。最终,这个迭代过程收敛到V和π。在某些条件下,你可以证明这个迭代过程实际上收敛到最优V和π,但我不打算在讲座中深入这些细节。

现在,让我们尝试最终从算法和表达式中消除所有策略表达式。我们如何做到这一点?记住,我们通过Q函数推导出这个贪婪策略。事实上,如果我们有Q函数的参数化表示(比如表格表示),我实际上不需要表示策略,因为它可以直接从Q诱导出来。这正是我们要在这里做的:我们将使用策略的表达式,然后写下第二步:我们将直接从Q函数转到V函数,而不是尝试从π策略推导π'。

这个表达式从何而来?它来自于最优V和Q之间的关系。记住,如果我们有最优V函数和最优Q函数,它们之间的关系基本上是V等于对a取max的Q(S, a)。所以,与其通过Q函数表示策略,我们将直接处理V函数和Q函数,并使用那个关系作为下一步。

我们可能还想摆脱V函数,因为基本上V和Q现在在某种程度上是可以互换的,因为一个可以在最优性条件下从另一个推导出来。我们可以利用这一点。但到目前为止,我讨论的是表格情况。在高维环境或高维观测甚至动作的情况下,我们该怎么办?在这种情况下,我们可以参数化地表示Q函数,并说它由参数φ参数化。与其直接以表格形式表示Q函数(在第一步中,我们必须遍历所有状态和所有动作,并更新Q的表格表示),我们必须做其他事情,因为现在我们通常无法遍历所有状态和所有动作,我们必须做一些聪明的事情来更新Q的参数。我们如何做到这一点?我们仍然假设我们有一些状态和动作对以及后继状态。因此,只要我们有一些S_i和相应的动作A_i,我们就可以计算这个Y_i,它等于当前状态和动作的奖励加上下一个状态的伽马折扣期望值。

假设我们可以计算这些Y_i,我们可以将它们代回这个方程,并解决关于Q函数参数的回归问题。所以,如果我们没有表格表示,我们可以通过解决这个回归问题来克服,而不是将这些Y_i直接写入Q表。

注意,我刚才提到的Q函数和V函数之间的关系是通过对动作取最大值来实现的。所以,我们现在可以用对当前参数φ下的Q函数估计取最大值来替代这个。

一旦我们这样做了,我们就得到了最终的算法。首先,我们将在某个策略下收集一个数据集,包含状态、动作、后继状态和相应的奖励。我们需要这些S_i和A_i来计算这些Y_i值,这些Y_i值是对应状态价值的估计。一旦我们有了这个数据集,我们可以使用当前参数下的当前Q的关系来计算这些Y_i。然后,我们可以解决Q函数参数的回归问题。事实上,我们可以在根据某个策略收集的数据集上重复这个步骤任意多次,然后在我们根据某个策略刷新数据集或获取更多数据之后,继续重复这个过程。我们什么时候停止?我们知道,当幻灯片上给出的Q函数的误差等于零时,我们是最优的。如果Q函数是最优的,那么这个关系应该得到满足。所以,只要这个误差足够小,我们就应该能够停止。当我们停止时,我们有一个接*最优的Q函数,然后我们可以通过对Q函数取argmax来推导出相应的接*最优的策略。

这就是拟合Q迭代算法。到目前为止有任何问题吗?

软策略梯度与软Q学习 🧠

好的,快速回顾一下:我们从策略梯度开始,展示了如何通过直接优化随机目标来优化策略的参数。然后我们问了一个问题:如果我们只对学习价值函数感兴趣,能否摆脱策略?在某些情况下,我们可以在表格设置中表示这些价值函数;在某些情况下,我们必须用一些连续函数来*似它们。因此,我们迭代地消除了对策略的依赖,从策略优化到策略迭代,再到价值迭代,最后是幻灯片上给出的拟合迭代。

这些是两种经典算法:基于价值的学习和基于策略的学习,它们适用于任意的MDP。现在,我们可以看看软策略梯度和软Q学习,这些实际上可以从我们在上一讲推导出的目标函数中得到。我们如何做到这一点?再次记住我们拥有的图形模型以及对应于推断的相应优化问题。在上一讲中,我们展示了通过优化这个目标,等价地,我们再次得到了这个图形模型的最优推断策略。

那么,我们能否直接取那个目标,将其插入我们的强化学习框架并进行优化,从而得到一些不同的策略学习或Q学习算法?答案是肯定的,这正是我们要做的。让我们尝试再次针对策略优化随机目标,但现在这个目标函数将被我们从软强化学习框架中得到的不同目标函数所取代。

首先,让我们稍微扩展一下这个目标函数。在幻灯片上,我现在写下了KL散度的*似,其中我们有仅依赖于奖励的原始项和仅依赖于熵的另一项。这是两个不同的期望,我们实际上可以将它们合并成一个单一的期望,其中我们针对从策略诱导分布中采样的状态-动作对取期望。

这个目标和非常经典的策略梯度目标之间的唯一区别是,我们有了我们试图优化的策略下的对数概率。

我们现在可以做的就是计算这个目标相对于策略参数的梯度,这里没有什么困难或复杂的地方,它与我为原始强化学习目标推导的策略梯度方法完全相同,但现在你将有一个额外的项在里面。

所以,软策略梯度基本上就是相同的策略梯度,但你做的唯一事情是你有这个熵正则化项,推导过程将完全相同,你将得到的REINFORCE算法也将完全相同,只是里面多了一个额外的项。

但有趣的是软策略梯度与Q学习的关系。问题是:我们能否以相同的方式,或者甚至比我们从策略梯度目标转向基于价值的目标时更有效的方式,摆脱策略?再次说明,这是我们随机目标的梯度。我们将在这里使用几个技巧:首先,我们扩展期望,并用一堆N条轨迹来*似它。我们将关于参数θ的梯度推过期望,得到在我们策略下给定状态的动作对数概率的梯度。然后,我们将在目标中引入并扩展这一项。记住,我们上次推导出的最优推断策略等于最优Q函数和最优价值函数之差的指数。

那么,现在为了摆脱策略或其参数化表示,我们可以做的是:我们可以使用这个关系。现在直接用一些参数θ参数化Q函数和V函数,并将它们插入这个目标函数。我们不需要逐步消除策略,然后慢慢地使用最优性条件、Q、V和π'之间的递归最优性关系。在这里,我们可以直接使用这个最优推断策略的表达式,并将其插入我们的目标函数。当我们这样做时,现在我们可以直接将V表示为关于动作的Q的对数求和指数。我们最终将得到一个仅依赖于Q函数的目标。首先,中间这个附加项大约等于给定你采取动作A_{t+1}时,状态S_{t+1}的Q。然后,在重新排列项的几个步骤之后,我们基本上得到了Q相对于Q参数的梯度(我稍微滥用了符号,因为这里我们用θ表示的π的参数可能与Q的参数不完全相同,但假设你重新参数化一切),你将得到Q函数的梯度乘以这个奖励加上下一个状态下Q_θ的softmax(关于下一个动作),然后减去当前状态和当前动作的当前Q估计。所以,这个新目标是软Q学习的目标,然后我们直接从软策略梯度的目标中得到了它,只需使用在最优性条件下应该成立的关系来替换策略。

要获得软策略梯度,我们只需在目标函数中添加一个小项。

软Q学习的工作原理 🛠️

那么软Q学习如何工作?现在我们可以用一个神经网络来参数化我们的Q函数,该网络接收动作和状态并输出Q值的某些估计。记住,在原始Q学习或拟合Q学习中,我们有这三个步骤:我们在某个策略下收集数据集,然后使用当前策略下的关系计算这些Y_i,然后我们重新拟合Q函数以更好地*似这些价值估计Y_i。

在Q学习中,我们的参数更新由幻灯片上给出:原始参数加上α乘以这个目标函数的梯度。如果你只是展开关于φ的参数,并用θ替换φ,这就是你将得到的梯度。你试图估计的目标价值函数将通过max算子计算。现在,软Q学习和Q学习在算法上的唯一区别是,更新操作将完全相同,但代替max,你将使用softmax。所以你将使用softmax算子来计算目标价值,将其代回这里,现在你可以计算整个表达式相对于Q函数参数的梯度,然后在这两个步骤之间继续迭代。算法将与原始Q学习相同,我们在步骤之间收集一些数据,然后可能再次重新收集数据。

这只是来自介绍软Q学习和软策略梯度的论文的插图。他们表明,即使你拥有相当复杂的多模态奖励分布(在这种情况下是一个二维环境,智能体必须移动到更高奖励的区域),当你学习软Q函数或软策略,使用软策略梯度时,智能体会探索整个空间,并最终命中环境中所有的高奖励区域。

那么这种软最优性的好处是什么?在众多好处中,我们可以强调几个具体的。首先,它改进了探索并防止策略的熵崩溃。通过“熵崩溃”,我的意思是,有时当你进行策略梯度或Q学习时,你可能会找到奖励分布的一个模式,并且可能一直只去那个模式,最终你的策略随着时间的推移通过优化会变得越来越不具熵,意味着它越来越不随机,越来越确定性。在某些存在不同模式的情况下,这可能并不理想,因为其中一些模式可能比其他模式具有更高的奖励,如果你发现了一个模式,你的策略可能会崩溃。软最优性允许你改进探索并防止这种熵崩溃。

经验表明,这些策略更容易微调到更具体的任务。假设你在一个任务上预训练了软策略(软策略梯度),那么将这个更具熵的策略微调到其他任务会容易得多。由于对状态的覆盖更广,策略最终可能更稳健。将策略简化为硬最优性也相当容易:如果你想的话,可以增加(或减少)温度参数,策略基本上会减少到不那么随机的策略。有时,当你将这个框架用于逆强化学习时(你试图推断专家或人类试图优化的奖励,或者你相信人类试图优化的奖励),使用这种随机或概率框架通常能更好地*似人类行为,因为人类行为可能容易出错,有时人类可能会采取一些在人类试图优化的目标函数下等价的随机轨迹,所以你希望你的框架确保你不会因为这些次优轨迹而惩罚你的逆强化学习目标。

总结与关键要点 📝

好的,总结一下这个模块的关键要点。

我们所做的是:我们首先涵盖了经典强化学习的一些基础知识,以及强化学习概率方法的一些推导。我们引入了这个带有辅助变量的图形模型,一切基本上都源于试图解决这个图形模型。我认为这里有几个重要的要点需要强调。

首先,概率图形模型为一系列序列决策问题提供了统一的视角,这也许是这个框架从PGM角度来看最有趣的原因之一。它允许我们将强化学习中的递归最优性关系与图形模型中消息传递产生的软类比联系起来,这是非常美妙的。最后,这种形式主义引导我们发现了某些算法的软版本,这些算法之间具有有趣的关系,而且这些算法在实践中也表现得相当好。

我们在这两讲中都没有过多涉及实际实现,但我鼓励你尝试实现其中一些算法,也许在你的项目中,或者希望你在下一次作业中能接触到其中一些内容,并亲自看看它效果如何。

好了,这个模块的内容就到这里。有什么问题吗?我们这次有充足的时间提问。

020:作为推断的强化学习(第一部分)

在本节课中,我们将学习强化学习的基本概念,并探索如何通过概率推断的视角来重新审视和控制问题。我们将介绍马尔可夫决策过程,并构建一个特殊的概率图模型,将最优行为建模为推断问题。


概述

强化学习是机器学习的一个重要范式,它关注智能体如何通过与环境的交互来学习最优策略以最大化累积奖励。与监督学习和无监督学习不同,强化学习直接面向决策问题。本节课将首先介绍强化学习的基础,包括马尔可夫决策过程、价值函数和贝尔曼方程。随后,我们将展示如何构建一个包含“最优性”变量的概率图模型,从而将寻找最优策略的问题转化为一个概率推断问题。这种视角不仅提供了新的理论见解,也为推导新的算法奠定了基础。


强化学习基础概念

上一节我们概述了本课程的目标。本节中,我们来看看强化学习的核心框架——马尔可夫决策过程。

马尔可夫决策过程

一个马尔可夫决策过程 定义了智能体与环境交互的框架。它包含以下元素:

  • **状态集合 **:环境所有可能状态的集合。
  • **动作集合 **:智能体所有可能动作的集合。
  • **状态转移概率 **:在状态 执行动作 后,环境转移到状态 的概率。该概率满足马尔可夫性,即只依赖于当前状态和动作。
  • **奖励函数 **:在状态 执行动作 后,智能体获得的期望奖励。奖励可以是确定性的,也可以是随机的。
  • **折扣因子 **:用于计算未来奖励的现值,确保无限时域下的回报是有限的。

智能体与环境的交互产生一个轨迹 :。

策略与回报

智能体的行为由策略 决定。策略可以是确定性的(),也可以是随机的,即从条件分布 中采样动作。

为了评估策略的优劣,我们定义回报 。对于有限时域 ,回报是未来奖励的和:。对于无限时域,我们引入折扣因子 :。回报可以递归地定义为:。

价值函数与贝尔曼方程

状态价值函数 衡量了从状态 开始,遵循策略 所能获得的期望回报:。

状态-动作价值函数 (或称Q函数) 衡量了在状态 执行动作 后,再遵循策略 所能获得的期望回报:。

价值函数满足重要的贝尔曼方程,它建立了当前价值与下一时刻价值之间的联系:

对于 :
对于 :

这些方程是动态规划方法的基础。

最优性与贝尔曼最优方程

强化学习的目标是找到最优策略 ,使得从任何状态开始都能获得最大的期望回报。我们定义最优状态价值函数最优状态-动作价值函数

它们满足贝尔曼最优方程

与策略评估的贝尔曼方程不同,最优方程中使用了 max 操作符,代表了在每一步都选择最优动作。

如果已知 和模型(即 和 ),最优确定性策略可以通过贪心方式得到:。最优轨迹可以通过从初始状态开始,每一步都遵循该策略来获得。


作为推断的强化学习

上一节我们介绍了经典强化学习中的最优控制问题。本节中,我们将通过构建一个概率图模型,将控制问题重新表述为一个概率推断问题。

构建概率图模型

我们从一个标准的MDP开始,但为其添加一系列二元最优性变量 。这些变量被定义为可观测的,并且其条件分布与奖励函数相关联:

其中 是一个归一化常数。这个定义意味着,在状态 下采取动作 获得的奖励越高,在该时间步被标记为“最优”的概率就越大。

现在,我们得到了一个特殊的隐马尔可夫模型:状态 和动作 是隐变量,最优性变量 是观测变量。模型完全由初始状态分布 、动作先验 、状态转移动态 以及上述的 定义。

模型能回答的问题

这个图模型框架允许我们以概率的方式提出并回答几个关键问题:

  1. 策略搜索(控制):给定奖励函数 ,最优策略是什么?即计算 。
  2. 逆强化学习:给定一组观测到的最优轨迹 ,背后的奖励函数 是什么?
  3. 轨迹最优性:计算一条轨迹 在所有时间步都被认为最优的概率 。

通过推断求解最优策略

我们重点关注第一个问题:如何通过推断得到最优策略。在图模型中,这对应于计算后验概率 。

通过应用贝叶斯规则和模型的因子分解,我们可以推导出这个后验分布。有趣的是,我们可以定义后向消息 ,它表示从时间 的状态-动作对 开始,未来一直保持最优的概率。

这些后向消息可以通过类似于HMM中的后向算法递归计算:

其中 。递归的起点是 。

类似地,可以定义只关于状态的后向消息:。

与经典RL价值的联系

现在,我们建立推断框架与经典RL价值函数的关键联系。定义:

  • V*(s_t) = log β_t(s_t)
  • Q*(s_t, a_t) = log β_t(s_t, a_t)

将这些定义代入上述递归关系,对于确定性动态环境,我们可以得到熟悉的贝尔曼最优方程:Q*(s_t, a_t) = r(s_t, a_t) + V*(s_{t+1}),而 和 之间的关系由 log-sum-exp 操作给出:V*(s_t) = log ∑_a exp(Q*(s_t, a_t))。这可以看作 max 操作的*滑版本。

然而,在随机性动态环境中,直接推导会得到一个“乐观”的转移模型:Q*(s_t, a_t) = r(s_t, a_t) + log E_{s_{t+1}~p} [exp(V*(s_{t+1}))]。这里对 取指数后再求期望,会倾向于选择那些有很小概率到达极高价值状态的“高风险”动作,这可能不是我们期望的行为。

最终,最优策略可以通过后验推断得到:。这表示策略正比于 exp(Q*(s_t, a_t) - V*(s_t)),即 exp(优势函数)。这提供了一个比纯粹贪心策略更*滑、更具探索性的策略。


变分推断视角

上一节我们展示了如何通过精确推断在图模型中求解策略。本节中,我们从变分推断的视角来重新审视这个问题,这将帮助我们处理随机动态环境中的“乐观”问题,并导出可优化的目标函数。

问题:匹配轨迹分布

我们的目标仍然是让智能体策略产生的轨迹分布 尽可能接*最优轨迹的后验分布 。在随机动态下,我们需要确保在匹配过程中,环境的真实动态 保持不变,只有策略 是可优化的。

因此,我们定义由策略 诱导的轨迹分布为:,其中 是我们要学习的策略。

证据下界

我们希望通过最大化观测到最优性(即整个轨迹最优)的对数证据 来学习策略。直接优化是困难的,因此我们引入变分分布 来*似真实后验 ,并构建证据下界

将轨迹分布代入并化简,ELBO可以展开为:

其中 表示由策略 采样的轨迹上的期望。

最终目标函数

经过化简和*似(忽略常数项),我们得到最终要最大化的目标函数 :

这个目标函数具有清晰的解释:

  • 第一项:标准的强化学习目标,即期望累积奖励。
  • 第二项:策略 的熵的期望。它鼓励策略保持随机性,从而促进探索。

这个目标被称为最大熵强化学习目标。优化这个目标,我们得到的策略不仅追求高奖励,还希望尽可能保持随机(高熵)。

求解最优策略

通过固定环境动态 ,并优化上述最大熵目标函数,我们可以推导出最优策略的形式。结果表明,最优策略 恰好就是我们之前从精确推断中得到的策略形式:。

更重要的是,在这种情况下,对应的 和 函数满足的贝尔曼方程不再是乐观的。对于随机动态,新的贝尔曼方程为:

Q*(s_t, a_t) = r(s_t, a_t) + γ E_{s_{t+1}~p}[V*(s_{t+1})]
V*(s_t) = log ∑_a exp(Q*(s_t, a_t)) (假设动作先验均匀)

这里, 的更新中使用了标准的期望 E,而不是 log E exp,从而避免了过度乐观的风险寻求行为。


总结

本节课我们一起学习了强化学习与概率推断之间的深刻联系。

  1. 我们首先回顾了强化学习的基本概念,包括马尔可夫决策过程、价值函数、贝尔曼方程以及最优控制的目标。
  2. 接着,我们通过引入“最优性”观测变量,构建了一个特殊的概率图模型(一个隐马尔可夫模型),从而将“寻找最优策略”的问题形式化为“计算给定最优观测下动作的后验分布”的推断问题。
  3. 我们展示了如何通过后向消息传递算法在该模型中进行推断,并建立了推断结果(后向消息)与经典RL价值函数之间的对数关系。
  4. 最后,我们从变分推断的视角出发,通过最大化一个证据下界,导出了最大熵强化学习的目标函数。这个目标不仅最大化累积奖励,还最大化策略的熵。优化该目标得到的最优策略,与推断得到的结果一致,并且在随机动态环境下避免了经典推断方法可能产生的过度乐观问题。

这种将控制视为推断的框架,为理解和发展强化学习算法提供了统一而强大的视角。在下一讲中,我们将基于此框架,推导出具体的强化学习算法,如软Q学习和软策略梯度方法。

021:高斯过程 🧮

在本节课中,我们将要学习一种称为高斯过程的高级技术。这是一种用于对函数分布进行建模的非参数贝叶斯方法。我们将从基础概念开始,逐步理解其原理、如何执行推断与学习,并探讨其在实际应用中的优势。


概述:从数据中学习函数

在之前的课程中,我们讨论了模型、结构和学习等基础内容。现在,我们将深入探讨图模型中用于特定目的的一些更高级技术。今天,我们将介绍一种可以应用于函数、模型和集合等高级实体的技术。

我们首先看一个例子:预测航空公司乘客数量的年度曲线。目标是能够根据历史数据推断未来的趋势。这里展示了两种可能的推断方式,一种可能忽略了长期趋势,而另一种则捕捉到了它。这个例子引出了从数据中学习函数的核心问题。

学习函数主要有两种方法:

  1. 直接拟合方法:不关心数据生成过程,直接拟合一个函数。例如,引入一个线性函数 f(x) = w^T x,或使用基函数 f(x) = w^T φ(x),然后通过最小化误差(如*方误差)来估计参数 w
  2. 概率方法:对数据如何生成以及误差如何表现做出更明确的假设。例如,假设观测值 y 由函数 f(x) 加上一个服从高斯分布的误差项 ε 生成:y = f(x) + ε, ε ~ N(0, σ^2)。这允许我们写出给定输入 x 时输出 y 的条件概率,并利用最大似然估计来学习参数。

概率方法的优势在于可以纳入误差度量,并为预测提供不确定性表示(如误差条)。然而,这两种方法都可能面临过拟合的风险,即模型过于复杂,过度适应训练数据中的特殊模式。

一种常见的缓解过拟合的技术是正则化,即在目标函数中增加一个惩罚模型复杂度的项,例如在损失函数中加入权重 w 的范数 ||w||^2,并通过超参数 λ 权衡拟合优度与复杂度。但如何定义复杂度以及如何选择 λ 通常是启发式的。


贝叶斯框架:一种更原则性的方法

贝叶斯方法不将模型学习视为点估计问题,而是利用贝叶斯规则写出模型的后验分布。给定数据的似然模型 P(D|θ) 和模型参数的先验分布 P(θ),我们可以得到参数的后验分布:
P(θ|D) ∝ P(D|θ) P(θ)

在之前的高斯噪声模型例子中,后验分布同时依赖于先验和数据。学习到这个后验分布后,我们可以用一种新的方式进行预测。对于一个新数据点 x*,我们不是使用单一的模型参数 w 进行预测,而是对所有权重 w 的可能值进行加权*均,权重即为其后验概率:
P(y*|x*, D) = ∫ P(y*|x*, w) P(w|D) dw

这本质上是在用后验概率加权*均无限多个模型,从而显著减轻过拟合风险。我们通常更关心函数的分布,而非特定参数的分布。本节课将探讨如何更灵活地对这种函数分布进行建模。


参数化与非参数化方法

在深入细节之前,我们先区分两种建模方法:

  • 参数化方法:模型有固定数量的参数(例如,固定数量的高斯混合成分)。模型大小是预先确定的。
  • 非参数化方法:模型参数的数量不固定,可以随着样本量增长,甚至可以是无限的(例如,核密度估计器,它使用以每个数据点为中心的小核函数之和来估计密度)。

今天讨论的高斯过程是一种贝叶斯非参数模型,它结合了两种方法的优点:

  • 它是非参数的,因为它在先验中允许无限多个参数(即一个函数分布)。
  • 当应用于有限数据集时,只有有限数量的参数会被“激活”和使用,其余无限多的参数则通过贝叶斯规则被积分掉(边缘化)。
  • 它也有参数化成分,即参数先验分布本身的参数(称为超参数),如果有足够的数据,这些超参数也可以被学习。


高斯过程定义与核心概念

让我们从一个简单例子开始理解高斯过程。考虑一个简单的线性模型:f(x) = a0 + a1*x。假设两个参数 a0a1 都服从标准正态分布。这样,我们就得到了一个由不同斜率和截距的直线组成的函数族。

如何描述这个函数分布?我们可以计算其均值(此处为0)和协方差。对于任意两个输入点 x_ax_b,函数值 f(x_a)f(x_b) 的协方差可以推导为 1 + x_a * x_b。由于参数是高斯分布,输出 f(x) 也是一个高斯随机变量,任意一组函数值的集合都服从联合高斯分布。

这引出了高斯过程的定义:如果对于输入的任何有限集合 {x1, ..., xn},对应的函数值 {f(x1), ..., f(xn)} 都服从一个联合高斯分布,且该分布由一个均值函数 m(x) 和一个协方差函数(核函数) k(x, x‘) 参数化,那么函数 f 就服从一个高斯过程,记作:
f ~ GP(m(x), k(x, x‘))

关键在于,我们可以通过设计均值函数和协方差函数来注入模型的灵活性。一种构造性方法是像线性基函数模型那样,对权重施加高斯先验,然后推导出 f 是一个高斯过程。更常用且灵活的方法是隐式地直接假设 f 服从一个高斯过程,并指定其均值函数(通常设为0)和协方差核函数 k(x_i, x_j),而无需显式指定函数 f 的具体形式。这类似于支持向量机中的核技巧,允许我们在甚至不知道具体特征映射的情况下,定义在高维(甚至无限维)空间中的相似性。


高斯过程的图模型表示与推断

高斯过程的图模型可以粗略地表示如下:输入 X 通过一个函数 f 产生输出 Y。这里存在无限多个可能的函数 f,它们构成了一个高斯场。在实际计算中,这些函数 f 被视为随机变量,并会在后验推断中被积分掉。因此,一旦积分掉 f,根据图模型中的消去原理,每个输出 y 都会依赖于数据集中的所有其他数据点。这是非参数贝叶斯方法的一个标志性特征:数据样本之间是相互依赖的,预测每个新数据点都需要用到所有其他数据点。

协方差核函数 k(x, x‘) 是关键。一个常见的例子是径向基函数(RBF)核
k(x_i, x_j) = α^2 * exp(-||x_i - x_j||^2 / (2l^2))
它表达了“相*的输入点,其函数值更相关”的直觉。超参数 l(长度尺度)控制影响的衰减速度,α(幅度)控制响应的强度。RBF核是一个通用逼*器,理论上可以逼*任何函数。


从先验到后验:结合观测数据

在没有数据时,我们有一个高斯过程先验 GP(0, k(x, x‘))。从中抽取的样本函数看起来是*滑但不确定的。

现在假设我们观测到 n 个数据点 (X, Y),并假设 y = f(x) + ε,其中 ε 是高斯噪声。我们的目标是在给定所有观测数据 X 的情况下,推断新输入 x* 对应的函数值 f* 或输出 y*

根据贝叶斯预测规则,我们需要计算后验预测分布:
P(f*|x*, X, Y) = ∫ P(f*|x*, f) P(f|X, Y) df
其中 P(f|X, Y) 是函数的后验分布。

利用多元高斯分布的条件分布公式,我们可以直接计算出这个后验分布。具体来说,已知训练数据 f 和测试点 f* 的联合先验分布,我们可以推导出给定训练数据后 f* 的条件分布。其均值和协方差都有闭式解,但涉及对 n×n 的核矩阵 K(X, X) 求逆,计算复杂度为 O(n^3),这是高斯过程的主要计算瓶颈。

后验高斯过程与先验相比发生了显著变化:在观测数据点处,不确定性降为0;在数据点附*,不确定性也大大降低;而远离数据点的区域则保持较高的不确定性。均值函数也会被“拉向”观测数据。如果增大核函数的长度尺度 l,数据点的影响范围会变广,导致不确定性区域缩小。


学习超参数与核函数选择

我们如何学习核函数中的超参数 θ(如RBF核中的 lα)?方法是边缘化掉所有函数 f,得到仅依赖于数据 X 和超参数 θ 的边际似然函数:
log P(Y|X, θ) = -1/2 Y^T (K + σ^2 I)^{-1} Y - 1/2 log |K + σ^2 I| - n/2 log(2π)
这个对数边际似然函数清晰地分成了两部分:模型拟合度项和模型复杂度惩罚项(体现为对数行列式)。通过最大化这个边际似然(或最小化其负值),我们可以学习超参数 θ。学习到的是定义函数分布的超参数,而不是函数本身的参数,这有助于减少过拟合。在推断时,我们固定这些学到的超参数和数据 X,然后使用前述公式对新点 x* 进行预测。

除了RBF核,还有许多其他核函数可供选择,例如:

  • 马顿核(Matérn kernel):提供不同*滑度的函数。
  • 谱混合核(Spectral Mixture kernel):特别强大,能够同时捕捉数据中的长期趋势和短期周期性模式,在时间序列预测等任务中表现优异。


高斯过程与深度学习的结合

高斯过程可以视为一个强大的转换器,它本身提供了对函数的分布建模和不确定性估计。我们可以将其与深度学习结合:

  1. 深度核学习(Deep Kernel Learning):在深度神经网络的最后一层之后接入一个高斯过程层。神经网络将原始输入 x 转换为高级特征 h(x),然后将 h(x) 作为高斯过程的输入。这样,高斯过程的无限维特性与深度网络的表征学习能力相结合,通常能提升性能。
  2. 序列建模(如GP-LSTM):在循环神经网络(如LSTM)用于序列预测时,通常使用固定长度的滑动窗口。而高斯过程可以建模整个历史序列对当前预测的影响,同时提供预测不确定性。将LSTM的隐藏状态输入高斯过程,可以同时获得序列建模能力和不确定性估计,在自动驾驶(如车道线预测、前车轨迹预测)等任务中显示出优势。


可扩展性挑战与*似方法

高斯过程的主要计算瓶颈在于学习和推断中需要对 n×n 的核矩阵进行求逆和行列式计算,复杂度为 O(n^3)。对于大规模数据,这难以承受。主要有三类*似方法:

  1. 基于随机特征的方法:通过随机投影将数据映射到低维空间,*似核函数,从而处理低维矩阵。
  2. 诱导点方法(Inducing Point Methods):这是最主流的方法。它不直接使用全部 n 个数据点计算大矩阵,而是选择一组数量较少(如 m 个,m << n)的“诱导点”。通过计算数据点与诱导点之间、以及诱导点自身之间的协方差,来*似完整的协方差矩阵。这可以将复杂度从 O(n^3) 降低到 O(n m^2)。诱导点的位置可以是均匀网格,也可以作为可学习的参数。
  3. 利用矩阵结构:如果协方差矩阵具有特殊的结构(如托普利茨、块对角等),可以利用快速算法。

此外,也有工作利用GPU并行化技术来加速精确的高斯过程计算。


总结与工具

本节课我们一起学习了高斯过程这一核心的非参数贝叶斯模型。它允许我们对*滑函数的分布进行建模,并通过富有表现力的协方差核函数来刻画各种复杂的函数关系。高斯过程提供了原则性的不确定性量化和避免过拟合的机制。其主要挑战在于处理大规模矩阵计算,而诱导点等方法提供了有效的*似解决方案。

现在已有一些优秀的软件包可以方便地使用高斯过程,例如基于PyTorch的GPyTorch和基于TensorFlow的GPflow,它们都提供了友好的编程接口。

在接下来的课程中,我们将探讨另一种有趣的、用于对集合进行建模的随机过程——确定点过程。

022:行列式点过程

在本节课中,我们将要学习一种用于建模集合形式数据的分布,即行列式点过程。这是一种定义在集合上的概率分布,它天然地倾向于选择多样化的子集。我们将介绍其基本概念、采样方法、寻找分布众数、参数学习,并扩展到条件DPP和K-DPP。


概述

在之前的课程中,我们学习了定义在向量上的分布。上一讲我们学习了定义在函数上的高斯过程。本节课我们将讨论一种定义在新对象类型——集合——上的分布,即行列式点过程。

DPP是一种定义在子集上的概率分布,它天然地倾向于选择多样化的子集。给定一个包含K个项目的全集,每个项目有其特征表示,DPP可以为我们提供一个选择多样化子集的概率框架。


子集选择问题

子集选择是机器学习中广泛存在的问题。其设定是:给定一组关键项目,我们希望从中选择一个子集。

以下是该问题的一些应用实例:

  • 抽取式文档摘要:给定一个包含多个句子的文档,目标是选择一个句子子集来概括该文档。
  • 特征选择:给定一组特征,目标是选择一个特征子集以加速计算或简化模型分析。
  • 产品推荐:给定一组产品,目标是选择一个产品子集推荐给用户。

在进行子集选择时,我们通常希望追求多样性,即希望所选项目彼此之间尽可能不相似。

在上述应用中,我们确实有实现多样性的需求:

  • 在文档摘要中,我们希望选择能代表文档且不冗余的句子。
  • 在特征选择中,我们希望所选特征不冗余。
  • 在产品推荐中,我们希望向用户推荐多样化的产品,而非同一类别的产品。

本节课我们将重点介绍行列式点过程,它有两个作用:一是为子集选择定义了一个优雅的概率模型;二是DPP天然地倾向于多样性。


行列式点过程基础

DPP是一种定义在子集上的分布,它倾向于多样化的子集。

给定一个包含K个项目的全集 Y = {1, 2, ..., K},其中项目 i 的特征表示为 a_i。我们首先计算一个 K x K 的格拉姆矩阵 L,其中 L_{ij} 是项目 i 和项目 j 特征向量的内积,用于衡量两个项目之间的相关性或相似性。

对于一个子集 YY ⊆ Y),DPP定义其概率为:
P(Y) = det(L_Y) / det(L + I)
其中,L_Y 是矩阵 L 中由子集 Y 索引的行和列构成的子矩阵,det 表示行列式,I 是单位矩阵。

示例:假设全集有四个项目 {1, 2, 3, 4},我们计算得到格拉姆矩阵 L。现在考虑子集 Y = {2, 3}。其概率的分子是子矩阵 [[L_22, L_23], [L_32, L_33]] 的行列式,分母是矩阵 (L + I) 的行列式。


为何DPP倾向多样性?

从几何角度可以直观理解DPP为何倾向多样性。子矩阵 L_Y 的行列式值,等于由子集 Y 中项目对应的特征向量所张成的*行多面体的体积。

该体积取决于两点:

  1. 向量的模长:模长越大,体积越大。
  2. 向量的夹角:向量越不相似(夹角越大,内积越小),*行多面体的体积就越大。

由于概率与体积成正比,因此项目特征向量越不相似,其对应子集的概率就越大。所以DPP具有倾向于多样化子集的归纳偏置。


配分函数与证明

在概率图模型中,配分函数确保概率归一化为1。对于DPP,其配分函数 Z 为:
Z = det(L + I)
这是一个闭式解,计算高效(多项式时间),而非指数时间。

证明概要:证明基于一个定理:对于任意子集 A ⊆ Y,有 ∑_{Y: A ⊆ Y ⊆ Y} det(L_Y) = det(L + I_{Ā}),其中 I_{Ā} 是一个对角矩阵,当索引属于 A 的补集 时对角元为1,否则为0。通过数学归纳法证明该定理后,令 A 为空集,即可得到配分函数 Z = det(L + I)


DPP的扩展

上一节我们介绍了基础DPP,本节我们来看看它的几种扩展形式。

核化DPP:在原始定义中,格拉姆矩阵的元素是内积。我们可以将其替换为核函数 K(a_i, a_j),从而得到核化DPP。定义形式不变,只是 L 变为核矩阵。

深度DPP:我们可以使用深度神经网络将项目特征 a_i 映射到非线性隐空间,然后在该空间计算内积来构建 L 矩阵。这相当于使用了一个由神经网络参数化的深度核。


从DPP中采样

给定DPP分布后,我们需要能够从中抽取样本(即子集)。采样算法分为两部分:

  1. 第一阶段:对矩阵 L 进行特征分解,得到特征值 {λ_n} 和特征向量 {v_n}。对于每个特征索引 n,以概率 λ_n / (λ_n + 1) 将其纳入一个中间集合 J
  2. 第二阶段:初始化最终子集 Y 为空。当 J 非空时:
    • 根据概率 P(i) = (1/|J|) ∑_{v∈V_J} (e_i^T v)^2 从全集中选择一个项目 i 加入 Y。其中 V_JJ 中索引对应的特征向量组成的矩阵,e_i 是标准基向量。
    • V_J 投影到与 e_i 正交的子空间,并更新 V_J 为该子空间的一组标准正交基。
    • J 中移除对应的索引。
    • 重复直到 J 为空。

该算法能确保采样结果服从DPP分布。其促进多样性的直观原因在于:每当选择一个项目后,算法会在与已选项目正交的子空间中继续选择,这鼓励了后续项目与已选项目的差异性。


寻找DPP的众数

除了采样,另一个重要任务是寻找分布的众数,即概率最大的子集。例如,在文档摘要中,我们希望找到概率最高的句子子集作为摘要。

寻找众数等价于最大化 log det(L_Y)。精确求解是NP难的。一种*似方法是使用连续松弛:

  1. 将离散的 0/1 选择变量 y_i 松弛为 [0, 1] 区间内的连续变量。
  2. 优化连续目标函数:F(y) = log det(diag(y) L diag(y) + I - diag(y)),其中 diag(y) 是以 y 为对角元的对角矩阵。
  3. 得到最优解 y* 后,进行舍入:若 y_i* > 0.5 则选择项目 i,否则不选。

学习DPP的参数

在DPP中,L 矩阵可能包含需要学习的参数,例如核函数的超参数或深度神经网络的权重。

假设我们拥有训练数据,每个样本包含一个全集和其中被选中的子集(真实标注)。例如,在摘要任务中,每个文档的所有句子及其人工标注的摘要句子。

我们可以通过最大似然估计来学习参数:
max_θ ∑_{n=1}^N log P_θ(Y_n | Y_n)
其中 θ 是模型参数。我们可以使用梯度下降等优化方法最大化该对数似然函数。


条件行列式点过程

到目前为止,我们讨论的DPP选择子集仅依赖于全集中项目之间的关系。但在许多应用中,选择还依赖于项目与某些外部信息的关系。

例如,在个性化产品推荐中,我们有一个用户 x 和一组产品。我们不仅希望推荐多样化的产品,还希望产品与用户的兴趣高度相关。

这时可以使用条件DPP。关键在于定义一个条件核函数,它在计算两个项目 a_ia_j 的相似度时,同时考虑它们与条件变量 x 的相关性。例如:
L_{ij}^x = s(a_i, a_j) * g(a_i, x) * g(a_j, x)
其中 s 衡量项目间相似性,g 衡量项目与用户 x 的相关性。

基于此条件核矩阵,可以定义条件概率 P(Y | x),其形式与基础DPP相同。

案例研究:深度条件DPP用于多标签分类
在多标签分类中,给定一张图像 x,我们需要为其分配一个标签子集 S。我们可以构建一个深度条件DPP:

  1. 使用神经网络获取图像嵌入和标签词嵌入。
  2. 用一个网络计算标签与图像的相关性得分 g
  3. 用另一个网络计算两个标签之间的相似性得分 s
  4. 条件核定义为 L_{ij}^x = s(a_i, a_j) * g(a_i, x) * g(a_j, x)
  5. 基于此定义 P(S | x),并使用带标注(图像,标签集)的数据进行最大似然训练。

融入先验知识:我们可以通过调整核矩阵来融入“必须链接”(鼓励共现)和“不能链接”(抑制共现)的先验知识。根据几何解释,若要抑制两个标签共现,就增加它们在核矩阵中的相似性值(从而降低其共现概率);若要鼓励共现,则降低它们的相似性值。


K-DPP:固定大小的子集

基础DPP定义的子集大小是可变的。但在很多应用中,我们需要选择固定大小 K 的子集。

K-DPP 的定义很直接:将概率质量只分配给那些恰好包含 K 个项目的子集。其概率为:
P(Y) = det(L_Y) / ∑_{Y‘ ⊆ Y, |Y’| = K} det(L_{Y‘})
然而,直接计算分母的求和是不可行的,因为组合数量巨大。

从K-DPP中采样:采样算法与基础DPP类似,主要区别在于第一阶段选择中间集合 J 的规则不同。它涉及一个基于特征值的量 E_k(λ1, ..., λN),其定义与所有 K 元子集的特征值乘积之和有关。具体算法和证明可参考相关教程。


连续K-DPP

之前讨论的DPP定义在离散项目集合上。当“项目”本身是连续向量时(例如,主题模型中的每个主题向量),我们需要连续K-DPP

假设我们有 K 个连续向量 {a_1, ..., a_K}。连续K-DPP定义在这些向量上的概率密度为:
p(A) = (1/Z) * det(L_A)
其中 L_A 是由这 K 个向量通过核函数计算的 K x K 矩阵。配分函数 Z 涉及该核函数对应算子的所有特征值,理论存在但通常无法显式计算。

应用:连续K-DPP可作为先验来鼓励学习到的表示具有多样性。例如,在主题模型(LDA)中,我们可以将 det(L_A) 作为正则化项加入目标函数(频率学派),或将其作为 K 个主题向量上的先验分布(贝叶斯学派),以鼓励主题的多样性。


DPP的局限与相关改进

使用连续K-DPP作为先验存在一些局限:

  1. 不利于变分推断:由于概率密度中包含行列式,在变分推断中计算关于该先验的期望较为困难。
  2. 无法直接应用于非参数模型:在非参数贝叶斯模型中,潜在变量的数量可能是无限的,而DPP需要计算有限大小矩阵的行列式。

一些研究工作(如互角过程)试图解决这些局限,设计出更适合变分推断且能扩展到非参数设置的多样性促进先验。


总结

本节课我们一起学习了行列式点过程。我们从子集选择问题引入,介绍了DPP如何作为一种定义在集合上且倾向于多样性的概率分布。我们探讨了其几何直观、配分函数、采样算法、寻找众数的方法以及参数学习。接着,我们扩展到了条件DPP,使其能够结合外部信息进行选择,并介绍了固定子集大小的K-DPP。最后,我们简要讨论了连续K-DPP及其应用,以及DPP的一些局限性和改进方向。DPP为需要在不确定性下进行多样化选择的诸多机器学习任务提供了一个强大的建模工具。

023:狄利克雷过程 🎲

在本节课中,我们将学习一种强大的非参数贝叶斯工具——狄利克雷过程。它是一种定义在分布之上的分布,能够让我们在建模时无需预先指定参数的数量(例如聚类数量),从而构建出更加灵活的模型。

上一节我们介绍了定义在集合上的行列式点过程。本节中,我们将探讨如何定义在分布之上的分布。

动机:聚类问题

考虑一个经典的聚类问题。数据点分布在二维空间中,我们希望将其分组。

通常的算法包括K均值或使用EM算法的高斯混合模型。然而,一个常见的问题是:如何设置正确的聚类数量K?对于高维数据或数据流,预先确定K值非常困难。

常见的启发式方法包括使用惩罚函数(如BIC)或交叉验证来评估不同K值的效果,但这些方法需要尝试多个K值,计算成本高昂。

参数化混合模型

让我们使用老朋友——高斯混合模型来建模。其似然函数如下,其中我们预设了K个分量:

\[p(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x | \mu_k, \Sigma_k) \]

这是一个参数化模型,假设参数数量有限。我们可以采用贝叶斯方法,为参数定义先验分布:

  • \(\pi\):每个聚类的权重,服从狄利克雷分布。
  • \(\theta_k = (\mu_k, \Sigma_k)\):每个高斯分量的均值和协方差,服从高斯分布和逆Wishart分布。

这种共轭先验的设计是为了简化计算。但问题依然存在:我们仍需预先指定K。

狄利克雷分布

狄利克雷分布是定义在单纯形上的分布,其概率密度函数为:

\[\text{Dir}(\pi | \alpha) = \frac{1}{B(\alpha)} \prod_{k=1}^{K} \pi_k^{\alpha_k - 1} \]

其中,\(\alpha\) 是超参数向量,\(\pi\) 是一个随机向量,其分量和为1。\(\alpha\) 的值影响分布的形态,可以控制权重是均匀分布还是集中在某些分量上。

狄利克雷分布是多项分布的共轭先验。这意味着,当观测到来自多项分布的数据后,参数 \(\pi\) 的后验分布仍然是狄利克雷分布,其超参数更新为 \(\alpha + \text{计数}\)

从分布到分布的分布

狄利克雷分布定义了混合模型权重参数 \(\pi\) 的分布。而混合模型本身就是一个分布。因此,狄利克雷分布实际上定义了一个“分布的分布”

当我们从狄利克雷分布中采样一个权重向量 \(\pi\),并用它来参数化一个高斯混合模型时,我们就得到了一个具体的混合分布。狄利克雷先验则定义了所有可能混合分布的分布。

迈向无限:狄利克雷过程

为了摆脱对固定聚类数K的依赖,我们需要一个能定义无限维权重向量的先验。狄利克雷过程就是狄利克雷分布在无限维情况下的推广。

狄利克雷过程由两个参数定义:

  1. 集中参数 \(\alpha\):控制新类簇产生的倾向。
  2. 基分布 \(H\):一个连续分布(如高斯分布),定义了每个“原子”(可视为类簇中心)可能的位置。

关键区别:基分布 \(H\) 是连续的,从中采样重复值的概率为零。而狄利克雷过程 \(DP(\alpha, H)\)离散的,它生成的是一个带有权重的原子集合,因此采样到重复原子的概率不为零。这使得数据点能够共享相同的类簇。

狄利克雷过程有多种等价的构造或理解方式,以下是三种常见的隐喻:

1. 折棍构造法

想象一根长度为1的棍子。

  1. 从Beta分布 \(Beta(1, \alpha)\) 采样一个比例 \(v_1\)
  2. 折断棍子,第一段的长度 \(\pi_1 = v_1\) 就是第一个原子的权重。从基分布 \(H\) 采样得到该原子的位置 \(\theta_1\)
  3. 对剩下的棍子(长度 \(1-\pi_1\))重复步骤1和2,得到 \((\pi_2, \theta_2), (\pi_3, \theta_3), ...\)
    这个过程产生一个无限长的、权重之和为1的序列 \(\{(\pi_k, \theta_k)\}_{k=1}^{\infty}\),它服从狄利克雷过程。

2. 中国餐馆过程

想象一个有无穷多张桌子的中国餐馆。

  1. 第一位顾客进入,随机选择一张桌子坐下。
  2. \(n+1\) 位顾客进入时:
    • 他以概率 \(\frac{n_k}{n + \alpha}\) 选择已有 \(n_k\) 位顾客的桌子 \(k\)
    • 他以概率 \(\frac{\alpha}{n + \alpha}\) 选择一张全新的空桌子。
      这个过程定义了顾客到桌子的分配,其结果与顾客进入的顺序无关(称为可交换性),且对应的分配分布正是一个狄利克雷过程。

3. 波利亚坛子过程

想象一个坛子,开始时里面只有一个黑色的“创新球”。

  1. 从坛中均匀抽取一个球。
  2. 如果抽到的是彩球,则放回该彩球,并额外放入一个同颜色的彩球。
  3. 如果抽到的是黑球,则从基分布 \(H\) 中采样一个新颜色,制作一个该颜色的彩球放入坛中,同时将黑球也放回。
    重复此过程,坛中彩球颜色的分布收敛于一个狄利克雷过程。

预测分布与聚类应用

在实际的聚类任务中,我们更关心给定已有数据后,新数据点的预测分布。通过将狄利克雷过程先验积分掉(即边缘化),我们可以得到直接的条件概率:

对于第 \(n+1\) 个数据点 \(x_{n+1}\),给定前 \(n\) 个数据点及其所属类簇(共 \(K\) 个类簇,第 \(k\) 个类簇有 \(n_k\) 个点):

  • 它以概率 \(\frac{n_k}{n + \alpha}\) 属于现有的第 \(k\) 个类簇。
  • 它以概率 \(\frac{\alpha}{n + \alpha}\) 属于一个全新的类簇(其参数从基分布 \(H\) 中采样)。

这个公式完美体现了“富者愈富”的聚集效应,同时保留了开辟新类簇的可能性。我们无需预设K,模型能根据数据自动调整类簇数量。

扩展:层次狄利克雷过程

基本的狄利克雷过程有时在共享全局结构方面不够灵活。例如,在构建无限主题模型时,我们希望不同文档能共享同一个潜在的主题池。

层次狄利克雷过程通过引入另一层狄利克雷过程来解决这个问题:

  • 全局层:一个狄利克雷过程 \(DP(\gamma, H)\) 生成一个全局的、离散的“主题”原子库。
  • 局部层:每个文档 \(j\) 有自己的狄利克雷过程 \(DP(\alpha, G_0)\),但其基分布 \(G_0\) 正是全局的狄利克雷过程 \(DP(\gamma, H)\)

由于全局DP是离散的,不同文档的局部DP会从中抽取原子,从而自然地共享相同的主题。这对应着“中国餐馆特许经营”的隐喻,使得不同“餐馆”(文档)可以共享“菜品”(主题)。

总结

本节课中我们一起学习了狄利克雷过程这一核心的非参数贝叶斯模型。

  • 动机:为了解决参数化模型(如混合模型)中需要预先设定参数数量(如聚类数K)的问题。
  • 核心:狄利克雷过程是一种定义在分布之上的分布,它是一个离散的随机测度,能够产生无限多个带权重的原子。
  • 关键性质:具有“富者愈富”的聚集效应,同时允许创新(产生新原子)。
  • 等价表示:我们学习了折棍构造法、中国餐馆过程和波利亚坛子过程这三种理解方式。
  • 应用:可直接用于无限混合模型聚类,其预测分布给出了数据点归属的简洁公式。
  • 扩展:层次狄利克雷过程通过引入层次结构,允许不同组的数据共享同一个底层原子库,广泛应用于如无限主题模型等场景。

狄利克雷过程为我们提供了一种强大而优雅的框架,用于构建灵活的、数据驱动的模型,是概率图形模型工具箱中的重要组成部分。

024:印度自助餐过程 🍛

在本节课中,我们将学习一种新的非参数贝叶斯模型——印度自助餐过程。这是一种用于定义特征分布的方法,允许数据点共享多个潜在特征,克服了狄利克雷过程混合模型中每个数据点只能属于一个簇的限制。

上一节我们介绍了狄利克雷过程及其在无限混合模型中的应用。本节中,我们来看看如何将“每个数据点属于一个簇”的模型,扩展到“每个数据点可以拥有多个特征”的模型。

从有限混合模型到特征共享模型

狄利克雷过程混合模型的一个主要限制是,每个数据点只能被分配到一个簇。这意味着特征无法在不同数据点之间共享。例如,一张包含狗、汽车和天空的图片无法被同时归类到多个类别;一个社交网络用户可能同时属于学术界、创业圈和家庭等多个群体。

为了支持这种特征共享,我们需要一种新的潜在变量模型。一个经典且规范的例子是因子分析模型。

因子分析模型可以表示为:
X = A * W + ε
其中,X 是观测数据,A 是潜在特征矩阵(每一行是一个特征),W 是数据点特定的权重矩阵,ε 是噪声。

这个模型是有限的,我们预设了特征数量 K。但就像在狄利克雷过程中我们避免预设簇的数量一样,这里我们也希望避免预设特征的数量。目标是定义一个分布在无限维的权重矩阵 W 上。

贝塔-伯努利过程:有限特征的先验

我们首先考虑有限特征的情况。为了得到一个稀疏的二元特征指示矩阵 Z,我们引入贝塔-伯努利过程先验

以下是该过程的生成步骤:

  1. 对于每个潜在特征 k = 1, ..., K,从一个贝塔分布中采样一个概率 π_k
    π_k ~ Beta(α/K, 1)
  2. 对于每个数据点 i 和每个特征 k,根据 π_k 采样一个二元指示变量 z_ik
    z_ik ~ Bernoulli(π_k)

这样生成的 Z 矩阵是稀疏的。通过对所有 π_k 积分,我们可以得到 Z 的边缘分布,该分布关于行和列是可交换的。

印度自助餐过程:无限特征的先验 🍽️

现在,我们通过让特征数量 K 趋于无穷,来得到无限特征的先验。这个过程有一个非常直观的餐饮比喻,称为印度自助餐过程

想象一个拥有无限多道菜的印度自助餐厅。顾客们按顺序取餐:

  • 第一位顾客:他尝试一定数量的菜肴。这个数量服从参数为 α 的泊松分布:Poisson(α)
  • n 位顾客 (n > 1):
    1. 对于每一道已经被前 n-1 位顾客尝试过 m_k 次的菜肴,他以概率 m_k / n 选取这道菜。
    2. 此外,他还想尝试一些新菜。他尝试新菜的数量服从参数为 α / n 的泊松分布:Poisson(α / n)

这个过程会生成一个无限的、稀疏的二元矩阵 Z,其中行代表顾客,列代表菜肴(特征),1 表示选取。可以证明,这个 IBP 生成矩阵的分布,正是前面贝塔-伯努利过程在 K→∞ 时的极限。IBP 是“积分掉”了特征被选概率 π 后的预测分布,类似于中国餐馆过程之于狄利克雷过程。

IBP 具有一些重要性质:

  • “富者愈富”:被更多人选取的特征(菜肴)更可能被新顾客选取。
  • 稀疏性:每行非零项的数量服从 Poisson(α) 分布。
  • 特征数量:整个矩阵使用的特征总数(非空列数)也服从一个泊松分布。

将 IBP 用于实际建模

仅仅有特征指示矩阵 Z 还不够,我们需要将其与数据的生成过程联系起来。一个简单的模型是线性高斯模型

X_i = A * z_i + ε_i,其中 ε_i ~ N(0, σ^2 I)

这里 z_i 是二元向量,A 的每一行(每个特征)从一个高斯分布中采样。这个模型是“全有或全无”的,特征权重只能是 0 或 1。

更灵活的模型是引入一个独立的权重矩阵 V,然后定义 W = Z ⊙ V(逐元素乘积)。这样,特征的使用就包含了连续的权重。完整的生成过程为:

  1. Z ~ IBP(α) (生成二元特征指示)
  2. V_ik ~ N(0, σ_v^2) (生成权重)
  3. A_k ~ N(0, Σ_A) (生成特征向量)
  4. X_i = A * (z_i ⊙ v_i) + ε_i (生成观测数据)

应用示例:疾病诊断

一个经典应用是患者症状诊断。目标是发现潜在的疾病(特征),这些疾病会导致一系列症状。

  • Z 矩阵:患者-疾病关联矩阵(未知)。
  • Y 矩阵:疾病-症状关联矩阵(疾病 k 导致症状 d 的概率)。
  • 观测:患者 i 是否表现出症状 d

患者 i 表现出症状 d 的概率,取决于他患有的所有疾病(由 z_i 指示)以及这些疾病导致该症状的概率(由 Y 矩阵的一列表示)。通过贝叶斯推理,可以从观测到的症状反推患者可能患有的疾病 (Z) 及疾病的症状谱 (Y)。

IBP 的推断与理论背景

对于 IBP 的推断,可以借鉴狄利克雷过程推断中的多种方法,如基于可交换性的吉布斯采样、使用折棍过程的直接采样等。核心是利用 IBP 的预测分布形式:P(z_i | Z_{-i}, X),其中需要结合数据的似然函数。

在理论层面,IBP 对应于一个底层的基础分布——贝塔过程。正如 CRP 对应 DP,IBP 对应 BP。

  • 贝塔过程 是一个在 (0, 1) 区间上生成“原子”的随机测度,每个原子有一个质量 π_k。从这个测度中,我们可以独立地以概率 π_k 采样得到二元指示 z_ik
  • 共轭性:贝塔过程是先验。观测数据(Z 矩阵)的似然可以视为二项分布。贝塔分布与二项分布共轭,因此后验也是一个贝塔过程,其参数根据观测计数进行了更新。

IBP 的扩展

基本的 IBP 只有一个参数 α。研究人员提出了扩展以增加灵活性:

  • 双参数 IBP:引入第二个参数 β。顾客选取已有菜肴 k 的概率变为 m_k / (β + n - 1),尝试新菜的数量服从 Poisson(αβ / (β + n - 1))。当 β=1 时,退化为原始 IBP。β 参数可以抑制“富者愈富”效应,鼓励使用更多样化的特征。
  • 无限伽马-泊松过程:将特征的使用次数从二元扩展为非负整数。底层使用伽马过程代替贝塔过程,生成的特征使用计数服从泊松分布。这提供了对特征使用强度的更精细控制。


本节课中我们一起学习了印度自助餐过程。它是一种强大的非参数贝叶斯方法,用于对无限、稀疏的特征矩阵进行先验建模,允许数据点共享多个潜在特征。我们从其直观的餐饮比喻出发,探讨了其与贝塔过程的联系、在实际模型中的应用以及一些重要的扩展。IBP 是构建更灵活概率图模型的重要基石,在图像分析、社交网络和医疗诊断等领域都有广泛应用。

025:图模型的谱学习 🧮

在本节课中,我们将学习一种用于学习图模型的新方法——谱学习。这种方法绕过了传统的期望最大化算法,通过直接处理观测变量的统计量来学习模型,具有理论性质好、计算速度快且无局部最优解等优点。

概述

到目前为止,我们已经学习了许多潜变量模型,例如隐马尔可夫模型、潜在树模型和主题模型。学习这些模型通常使用期望最大化算法,但该算法存在收敛慢、易陷入局部最优等问题。谱学习提供了一种替代方案,它利用线性代数工具,通过观测变量的低秩矩阵分解来学习模型,无需显式估计潜变量。

潜变量模型与预测目标

首先,我们思考一个问题:为什么需要潜变量模型?在许多应用中,例如预测未来观测值,潜变量本身可能并非最终目标,而只是实现准确预测的工具。如果我们只关心预测,那么是否必须通过期望最大化算法来学习潜变量参数呢?

在非参数贝叶斯方法中,我们通过积分掉生成模型中的隐藏分布,直接对新标签进行预测。这种思想可以应用于任何潜变量模型。例如,在隐马尔可夫模型中,如果我们将所有潜变量积分掉,会发生什么?

积分掉潜变量后,所有观测变量之间将变得相互依赖,模型的拓扑结构会变成一个“全连接”的团。虽然对于简单的分类任务可行,但对于更复杂的任务,使用团来建模会非常低效,因为需要巨大的联合概率表。数学上,这是因为对潜变量求和后,联合概率无法再被分解。

图的谱视角:矩阵秩与潜变量

那么,一个团和一个结构化的图模型(如隐马尔可夫模型)在代数或计算上的根本区别是什么?这可以通过矩阵的秩来理解。

考虑一个简单的图模型:三个观测变量 X1, X2, X3 连接到一个潜变量 H。假设观测变量有 M 个状态,潜变量有 K 个状态。

  • 如果 K = 1,潜变量对观测变量没有影响,三个观测变量相互独立。对应的联合概率矩阵 P(X1, X2, X3) 的秩为1。
  • 如果 K = M^3,潜变量可以编码所有可能的观测组合,观测变量完全依赖,形成一个团。对应的联合概率矩阵是满秩的(秩为 M^3)。
  • 如果 K 介于 1M^3 之间,联合概率矩阵的秩为 K。这对应了一个具有 K 个状态的潜变量模型,它捕捉了观测变量之间中等强度的依赖关系。

核心概念:潜变量的基数 K 直接决定了观测变量联合概率矩阵的秩。低秩矩阵意味着存在一个潜变量结构。因此,我们可以不显式引入潜变量,而是直接使用一个低秩的观测变量联合概率矩阵,这等价于容纳了一个潜变量的存在。这就是图模型的谱视角,它利用线性代数中的秩、特征值、奇异值分解等工具来揭示模型结构。

可观测因子分解

谱学习的核心技巧是“可观测因子分解”。它允许我们将一个大的联合概率矩阵分解为仅涉及少量观测变量的较小矩阵的乘积,从而在学习和预测时完全避开潜变量。

以下是如何对一个四变量序列 X1, X2, X3, X4 进行因子分解的示例。通过巧妙地选择“枢纽”(例如 X2),我们可以得到如下分解:

公式
P(X1, X2, X3, X4) ≈ P(X1, X2, X3) * [P(X2, X3)]^{-1} * P(X2, X3, X4)

这个分解非常神奇,因为等式右边所有的矩阵都只涉及观测变量(P(X1,X2,X3), P(X2,X3), P(X2,X3,X4)),不再需要潜变量 H。在训练时,我们只需从数据中收集这些较小矩阵的统计量(计数)。在测试时,对于任何观测序列,我们只需查找并乘上相应的矩阵块即可计算其概率,这只是一系列张量乘法。

这种分解可以递归地应用于更长的序列,最终将大型联合概率表表示为多个易于管理的、规模较小的观测矩阵的乘积。

应用示例与优势

这种技术可以应用于许多模型。例如,在无监督句法分析中,传统方法需要标注好的句法树来训练概率上下文无关文法。而潜变量模型(潜在变量概率上下文无关文法)只需句子和词性标签,但需用期望最大化算法学习,计算复杂。

使用谱方法,我们可以为句子推导出类似的可观测因子分解,用一系列基于观测词和词性的矩阵乘积来表示整个句子的概率。训练时直接估计这些矩阵,测试时进行矩阵乘法查询,无需迭代学习潜变量。

谱学习方法具有显著优势:

  • 速度快:非迭代算法,复杂度远低于期望最大化算法。
  • 无局部最优:目标函数是凸的。
  • 理论保证:具有一致性等良好理论性质。
  • 灵活:可通过技巧处理连续变量和长程依赖。

挑战与扩展

当然,谱学习方法也面临一些挑战:

  1. 因子分解的设计:为新的模型图结构找到正确的矩阵因子分解需要技巧和线性代数洞察力。
  2. 矩阵求逆问题:分解中常涉及矩阵求逆(如 [P(X2, X3)]^{-1})。如果该矩阵是低秩或奇异的,则求逆不可行或数值不稳定。
  3. 处理高基数潜变量:当潜变量基数 K 大于观测变量基数 M 时(例如需要建模长程依赖),观测矩阵的秩可能不足。

对于后两个挑战,有以下扩展技术:

  • 特征化:不使用简单的指示向量,而是为观测变量设计丰富的特征向量 φ。这样,矩阵 P 被替换为特征协方差矩阵 E[φ_left * φ_right^T],其特征空间维度可以远高于 M,从而匹配更高的潜变量基数 K
  • 核嵌入:将特征化推向极致,使用再生核希尔伯特空间技术。通过核函数,我们可以隐式地在高维甚至无限维特征空间中工作,从而无缝地处理连续随机变量,并避免显式设计特征。

总结

本节课我们一起学习了图模型的谱学习方法。作为传统期望最大化算法的一种替代,谱学习通过线性代数工具直接对观测变量的统计量进行操作。其核心在于建立联合概率矩阵的低秩性与潜变量模型之间的对应关系,并利用可观测因子分解绕过对潜变量的显式估计。

这种方法在速度、避免局部最优和理论性质上具有优势,但其应用依赖于为特定模型找到合适的矩阵分解形式,并需处理矩阵求逆等数值问题。通过特征化和核方法,谱学习可以进一步扩展到处理复杂依赖和连续数据。尽管在当前深度学习盛行的时代,谱学习受到的关注有所减少,但它仍是一个强大且具有启发性的工具框架,为图模型的学习提供了独特的视角。

026:大规模算法和系统 🚀

在本节课中,我们将要学习如何处理大规模数据和模型。我们将探讨可扩展的算法,以及支持这些算法的软件系统及其设计原则。这些知识将帮助机器学习研究者和实践者将他们的应用扩展到当今所需的大数据和大模型规模。


概述

我们生活在一个数据爆炸的时代,互联网和物联网设备产生了海量数据。同时,机器学习模型的规模也在持续增长,参数数量常常达到数十亿甚至万亿级别。这带来了巨大的计算和存储挑战。为了应对这些挑战,我们需要设计可扩展的并行和分布式机器学习算法与系统。


大规模数据与模型的挑战 📊

首先,我们来看看当前面临的挑战。最大的网站每天产生海量数据,分析这些数据所需的计算资源远超学生项目的规模。同时,现代机器学习模型的参数数量常常超过百亿。一个参数通常是一个浮点数(4字节),因此一个百亿参数的模型大小约为40GB。这通常超出了单台机器的内存容量。

此外,还存在可扩展性挑战。当我们进行并行或分布式编程时,通常期望使用N台机器能使任务快N倍。然而,由于通信开销的存在,我们往往无法达到理想的线性加速。我们的目标是尽可能接*线性加速。


机器学习程序的统一视图 🔄

为了应对大数据、大模型和可扩展性挑战,我们需要一些预备知识。我们将从数学角度,以高层次视角来看待机器学习模型和算法。

机器学习程序主要分为两大类:

  1. 概率程序:例如主题模型和各种贝叶斯图模型,通常通过马尔可夫链蒙特卡洛方法或变分优化/推断方法求解。
  2. 优化程序:例如经典的回归、分类应用,以及深度学习架构(如卷积神经网络、循环神经网络、Transformer),通常被表述为一个优化问题。

这两类程序之间的界限是模糊的。大多数现代概率程序都包含了复杂的优化函数元素,而任何优化程序都可以通过在某些参数或函数变量上设置先验,轻松地转换为概率程序。

为了以统一的方式思考概率程序和优化程序,我们将它们视为一个主方程的一部分,即迭代收敛的机器学习算法视图。这意味着算法通过迭代逼*一个解,并且有理论保证它会收敛到某个固定点或最优解。

在这个视图中,我们用 θ 表示所有模型参数,用上标 t 表示迭代索引。核心更新方程是:
θ^(t+1) = θ^(t) + ΔF(θ^(t), D)
其中 ΔF 是基于数据 D 的参数更新函数。

机器学习程序的一个关键特性是误差容忍自愈能力。与传统计算机科学程序不同,机器学习算法在迭代过程中即使引入了一些噪声或错误,通常也能自我纠正,因为它们始终朝着局部最优解的方向收敛。这个特性是许多可扩展机器学习技术的关键基础。


并行化策略:数据并行与模型并行 ⚙️

有两种通用的策略可以并行化机器学习程序:数据并行模型并行

  • 数据并行:将数据分割成多个子集,分配给不同的计算设备(如CPU、GPU或机器)。每个设备基于自己分配到的数据子集计算参数更新,然后以某种方式聚合这些更新。
  • 模型并行:将完整的模型参数分割成多个部分,分配给不同的计算设备。每个设备负责计算分配给它的那部分参数的更新。

选择哪种策略通常很直观,但具体实现时需要考虑很多细节。


优化算法及其并行化

随机梯度下降

许多优化问题可以写成最小化一个期望的形式。在经典的梯度下降中,我们计算整个数据集的损失函数梯度,然后更新参数。

随机梯度下降 对此进行了修改:我们不是在整个数据集上求和,而是随机选取一个小批量样本来计算梯度的经验期望,并用它来更新参数。

使用小批量的好处是:

  1. 降低梯度估计的方差,从而可能加快收敛速度。
  2. 将多个样本的计算打包成向量操作,在现代CPU/GPU硬件上效率更高,带来吞吐量加速

并行随机梯度下降

最早的并行SGD实现是一种数据并行方案:将数据分割给K个工作节点,每个节点在自己的数据子集上独立运行SGD直到收敛,最后将所有节点的参数取*均。这种方法只在开始时和结束时进行通信。

问题:不同工作节点可能收敛到基于其数据子集的不同局部最优解。简单地*均这些解并不能保证*均值本身是一个最优解。

改进一:利用稀疏性的Hogwild!算法

许多问题具有稀疏结构,即目标函数可以分解为多个子目标,每个子目标只涉及一小部分参数。这在自然稀疏的数据(如用户画像的高维one-hot编码)中很常见。

Hogwild!算法 的思路是:每个并行工作节点随机采样一小部分参数,然后只对其中的一个参数执行梯度下降。由于数据稀疏且并行节点不多,不同节点采样的参数发生冲突的概率很低。因此,无需复杂的同步机制(如变量锁)。

局限性:在真正的分布式设置(多台机器通过网络通信)中,网络延迟比机器内内存访问慢几个数量级。理论分析表明,延迟会增加算法收敛时间的上界,并导致参数估计的方差增大,使结果更不稳定。

改进二:使用参数服务器和有界异步并行

另一种不依赖于目标函数稀疏性的策略是使用参数服务器(或键值存储)。你可以将其视为一个中心化的内存库,所有工作节点都可以与之通信。它负责确保所有工作节点对参数有一致的视图,并整合所有更新消息。

参数服务器可以使用几种同步方案:

  • 整体同步并行:所有工作节点同步进行迭代(如Hadoop/Spark风格)。
  • 完全异步并行:工作节点无需等待,随时读写参数。
  • 有界异步并行:这是前两者的折中。它设定一个停滞界限(例如3次迭代),规定最快和最慢的工作节点之间的迭代次数不能超过这个界限。最快的节点会被强制等待,直到最慢的节点赶上来。

这种方案结合了整体同步并行的安全性和完全异步并行的效率,通常能获得更好的性能,同时避免算法发散或收敛失控的风险。


坐标下降法

坐标下降法 天然适合模型并行实现,因为它将参数空间划分为不同的子集进行优化。其优点是不需要指定学习率,因为每个坐标的优化问题通常可以解析求解。然而,如果数据样本量非常大,每次迭代的时间会很长。

在坐标下降中,我们不是对所有参数求梯度,而是通过将目标函数对单个坐标(或坐标块)的次梯度设为零,来解析地求解该坐标的最优值,然后按顺序(如轮询)更新所有坐标或坐标块。

并行坐标下降法

  • Shotgun算法:每个并行工作节点随机选择一组参数进行更新,然后迭代直到收敛。这类似于坐标下降版的Hogwild!。

    • 保证:当特征接*独立时,该算法能很好地扩展。可扩展性受限于一个与数据矩阵谱半径相关的公式。如果特征完全相关,则无法获得任何并行加速。
    • 原因:当特征相关时,在每个坐标轴上的更新步长会变得很大,容易越过最优点,导致收敛不稳定。
  • 分块坐标下降法:改进在于不是随机选择坐标,而是对数据矩阵进行预分区。将参数划分为多个块,每个工作节点负责一个块内的坐标优化。这保证了不同工作节点处理的参数不会重叠。

    • 关键:分区算法应尽量将不相关的参数分到同一个块,以减少块间相关性。
    • 缺点:预处理数据(如计算大规模协方差矩阵)的成本可能非常高昂,对于超大数据集不实用。
  • 动态调度的坐标下降法:系统(如STRADS)动态地、实时地决定将哪些参数分配给哪个工作节点。它避免了计算整个协方差矩阵的立方复杂度,只需检查少量参数之间的相关性。此外,它还可以实现基于优先级的更新,优先更新对目标函数下降贡献最大的参数,从而获得更陡峭的收敛曲线。


高级优化技术概览

除了SGD和坐标下降,还有更高级的优化算法,如包含动量*滑*端更新的算法,它们能显著提高收敛速度。将这些算法并行化的挑战在于,需要将单机实现的步骤分解为多机环境中可并行和不可并行的部分。

*端梯度法为例,它适用于包含不可微正则化项(如L1惩罚项)的问题。其直观理解是梯度下降的扩展:先对可微部分F进行梯度步,然后对不可微的正则化部分G应用一个*端算子进行“投影”。

在并行化时,工作节点负责计算梯度,服务器负责聚合梯度并执行*端算子和动量更新。这种方法的优劣取决于参数规模,因为*端操作可能计算成本较高。


马尔可夫链蒙特卡洛算法的并行化

MCMC是另一大类机器学习算法,常用于概率图模型的推断。

传统并行MCMC方法

  • 独立运行多条链:在不同工作节点上独立运行多个MCMC链,最后对样本取*均。如果链的收敛速度慢或未收敛,各链的样本分布可能不重叠,导致*均结果不佳。
  • 序贯重要性采样:将复杂分布分解为一系列更简单的分布进行采样。但序列越长,样本的方差和不稳定性越大。

现代并行MCMC方法

  • 辅助变量法:通过引入新的辅助变量来重写模型,将复杂的采样过程分解为多个更简单的步骤。虽然模型变得更复杂,但每个步骤更容易采样,从而可以用统计效率换取计算效率,实现并行化。
  • 易并行MCMC:构造一系列特殊的子后验分布,可以在不同机器上独立并行采样。最后通过非参数估计方法(如核密度估计)将这些子后验的样本组合起来,以逼*全后验分布。这种方法比简单*均子后验样本效果更好。
  • 并行吉布斯采样:对于像主题模型这样的潜变量模型,折叠吉布斯采样是一种高效的方法。它通过积分掉一些变量,减少了需要采样的变量数量,从而降低了方差。
    • 并行化挑战:直接并行化会导致工作节点读取过时的参数值(陈旧性问题),可能影响收敛甚至导致发散。
    • 解决方案
      1. 异步通信:减少陈旧性,但可能引入不一致性。
      2. 智能分区:将文档-主题矩阵和主题-词矩阵进行分区,确保不同工作节点处理的参数子集不重叠(类似于Hogwild!的思想)。这可以通过图划分或非重叠矩阵分块技术实现。后者(如LightLDA采用的方法)能保证在采样过程中参数不会冲突,从而实现安全高效的并行化。

分布式机器学习系统 🖥️

设计算法是一方面,将其部署在真实的分布式系统上又是另一回事。真实的机器并不完美,我们需要了解并围绕这些系统特性进行设计。

系统面临的现实挑战

  1. 网络速度慢:网络通信(微秒/毫秒级)比CPU/GPU内存访问(纳秒级)慢几个数量级。
  2. 机器性能不均:由于操作系统后台任务、资源共享(如云虚拟机)等原因,相同的机器很少表现出完全相同的性能。

这些因素会极大地影响并行机器学习实现的效果:

  • 最慢工作节点的诅咒:在整体同步并行中,整个程序的速度会被最慢的节点拖累。
  • 带宽限制:传输大型模型(如数十亿参数)的更新会消耗大量网络带宽。
  • 内存限制:数据和模型分区必须适应单机的内存或本地存储容量。
  • 调度影响:任务调度方式会影响收敛速度和通信量。

数据并行与模型并行的系统设计

  • 数据并行:当数据是独立同分布时效果较好。挑战在于现有方案要么安全但慢(整体同步并行),要么快但有风险(完全异步并行)。有界异步并行(SSP)是一个很好的折中,它通过限制最大陈旧性,在保持效率的同时提供了安全保证,并且具有自*衡特性,有助于慢节点追赶。
  • 模型并行:不能简单地将参数分割。必须精心设计调度方案,以尽可能恢复串行执行的性能。关键挑战包括:
    • 结构依赖性:参数之间的相关性(如Lasso回归中特征列的内积)会影响并行化。
    • 非均匀收敛:不同参数以不同速度收敛,长尾参数决定了总体收敛时间。
  • 解决方案
    • 结构感知的并行化:系统动态地、自适应地选择参数进行更新,并基于优先级(如参数变化幅度)进行调度。
    • 分块调度:使用非重叠矩阵分块等技术对参数进行分区,确保不同工作节点处理的块不重叠。这样,不同节点的快慢不会相互干扰。
    • 结合方案:将分块调度、优先级调度和有界异步并行结合起来,可以创建一个高效、*衡且能克服诸多系统挑战的机器学习系统。

理论基础与收敛性分析 📐

了解这些分布式机器学习系统在什么条件下收敛,以及收敛速度如何受系统因素影响,是非常重要的。

收敛性保证的类型

  1. 期望界:最弱的保证,表明参数期望值接*最优值。
  2. 概率高置信界:更强的保证,表明参数以高概率接*最优值。
  3. 方差界:衡量收敛的稳定性,方差越低,收敛越稳定。

有界异步并行的收敛直觉

有界异步并行之所以能收敛,关键直觉在于它*似于串行执行。由于设定了停滞界限,在任何时刻,由并行执行可能引入的“错误窗口”大小是有限的(与停滞界限和节点数相关)。随着迭代次数增加,这个有限错误窗口的影响相对于已完成的总工作量变得越来越小。这是一种部分但有界的串行性损失。而完全异步并行则无法保证这个窗口的大小,因此在存在慢节点时可能发散。

理论分析给出了具体的收敛界,其中包含了模型性质(如Lipschitz常数)和系统性质(如并行节点数、*均停滞时间、停滞时间方差)。这些公式清晰地展示了系统和算法参数之间的相互作用。

类似的理论分析也可以扩展到模型并行、基于优先级的调度和分块调度等策略,证明它们在合理条件下是收敛的,并且能接*理想模型并行的性能。


总结 🎯

本节课我们一起学习了大规模机器学习算法与系统的核心内容。我们首先了解了处理大数据和大模型所面临的挑战,并建立了迭代收敛的机器学习算法统一视图。

我们深入探讨了两种主要的并行化策略:

  • 数据并行:重点学习了随机梯度下降及其并行化方案,从朴素*均到利用稀疏性的Hogwild!,再到基于参数服务器和有界异步并行的稳健方案。
  • 模型并行:重点学习了坐标下降法及其并行化,从随机选择的Shotgun算法到需要预分区的分块坐标下降,再到更实用的动态优先级调度系统。

接着,我们探讨了另一大类算法——马尔可夫链蒙特卡洛方法的并行化,涵盖了从传统方法到现代辅助变量法、易并行MCMC和并行吉布斯采样(如LightLDA)等技术。

然后,我们将视角转向真实的分布式系统,认识到网络延迟和机器性能不均等现实约束如何影响算法设计。我们讨论了数据并行和模型并行在系统层面上的挑战与解决方案,特别强调了有界异步并行、智能调度和分块技术的重要性。

最后,我们简要介绍了支撑这些系统设计的理论基础,了解了收敛性分析的不同类型,以及有界异步并行等工作机制背后的理论直觉。

通过本课程,希望你能够掌握设计可扩展机器学习算法与系统的关键概念和直觉,为应对现实世界中的大规模机器学习挑战做好准备。

027:元学习入门与元强化学习 🧠

在本节课中,我们将要学习元学习的基本概念、核心方法及其在强化学习中的应用。元学习,即“学会学习”,旨在让模型能够快速适应新任务,这对于处理动态、非*稳或数据稀缺的现实世界问题至关重要。

第一部分:元学习导论

上一节我们介绍了课程背景,本节中我们来看看元学习的正式定义和动机。

什么是元学习?

在标准机器学习中,我们通常从一个数据集中学习一个单一的模型。然而,在许多现实场景中,任务本身是动态变化的,或者我们只有少量数据来学习新任务。元学习通过“学习如何学习”来解决这个问题,其核心思想是学习一个能够快速适应新任务的算法或“适应规则”。

更形式化地说,标准学习的目标是学习一个函数 f,以最小化在某个任务数据分布上的期望损失。而在元学习中,我们考虑一个任务分布 p(T),每个任务 T_i 本身又是一个数据分布 p_i(x, y)。我们的目标是学习一个适应规则 G,它能够根据新任务的少量描述(例如,几个样本)生成一个适用于该任务的函数 f_i

元学习的优化目标可以表述为一个双层优化问题:

min_θ E_{T_i ~ p(T)} [ L_{test}( f_i = G(θ, D_i^{train}) ) ]

其中,内层优化是适应过程(例如,在训练数据 D_i^{train} 上微调),外层优化是寻找最优的元参数 θ,使得在所有任务上的测试损失 L_test 最小。

为何需要元学习?

标准机器学习在静态、定义明确的任务上取得了巨大成功,例如ImageNet图像分类或围棋游戏。然而,在复杂动态的世界中(如自动驾驶、个性化推荐系统、交互式机器人),环境和任务本身可能不断变化,或者每个用户/任务只有极少量的数据。元学习为解决这类问题提供了一个框架,旨在让智能体能够持续学习和适应。

小样本分类:一个经典示例

小样本分类是理解元学习的经典测试*台。在这个设置中,每个任务(例如,一个分类数据集)只有极少的标记样本(如每个类别1或5个样本),称为“支持集”。模型需要利用这些少量样本快速学习,并对新的查询集样本做出准确预测。元学习的目标是学习一个模型,使其在大量此类任务上*均表现良好。

以下是元学习的一些实际应用场景:

  • 推荐系统冷启动:为新用户提供个性化推荐,但只有该用户的少量历史数据。
  • 低资源机器翻译:在*行语料稀缺的语言对之间进行翻译。
  • 小样本视频到视频翻译:根据一个短片段,将一个人的面部动作迁移到目标图像(如蒙娜丽莎)上。
  • 模仿学习:让机器人通过观看单次演示就能学会新技能。

第二部分:基于梯度的元学习方法

上一节我们定义了元学习问题,本节中我们来看看第一类主流方法:基于梯度的元学习,其代表是模型无关元学习。

MAML:模型无关元学习

MAML的核心思想非常简单:学习一个良好的模型参数初始化点 θ,使得对于任何新任务,从这个初始化点出发,只需经过少量梯度更新步骤,就能达到对该任务较好的性能。

具体算法如下:

  1. 元训练:从任务分布中采样一批任务。
  2. 内层循环(适应):对于每个任务 T_i,用其支持集数据计算损失,并对初始化参数 θ 执行一步(或多步)梯度下降,得到任务特定参数 φ_i
    φ_i = θ - α * ∇_θ L_{T_i}^{train}(f_θ)
  3. 外层循环(元更新):使用每个任务对应的查询集数据,计算任务特定参数 φ_i 的损失。然后,通过梯度下降更新元参数 θ,目标是最小化所有任务上查询集损失的*均值:
    θ ← θ - β * ∇_θ Σ_i L_{T_i}^{test}(f_{φ_i})
    由于 φ_iθ 的函数,此更新涉及二阶梯度计算。

直觉:MAML寻找的初始化点 θ,是一个能够通过梯度更新快速抵达各个任务最优解附*的“枢纽”。

MAML的概率视角

MAML可以自然地解释为一个层次贝叶斯模型:

  • 外层:元参数 θ 作为所有任务共享的先验。
  • 内层:对于每个任务 T_i,其特定参数 φ_i 是从以 θ 为条件的分布中生成的。在MAML中,这个条件分布被具体化为一个梯度步骤。
  • 预测:数据由任务特定参数 φ_i 生成的模型产生。

因此,元学习(学习 θ)对应于学习一个先验,而适应(计算 φ_i)对应于在该先验下进行后验推断。

性能与讨论

MAML在Omniglot和MiniImageNet等小样本分类基准上取得了显著提升,相比简单的预训练-微调基线有巨大优势。然而,后续研究(如ANIL论文)发现,在许多基准任务上,模型性能的提升主要来自于在元训练阶段学到的通用特征表示,而内层循环的梯度适应对最终性能的贡献可能比预期要小。这表明表示学习在元学习中可能扮演着至关重要的角色。

第三部分:基于度量/原型的元学习方法

上一节我们介绍了基于梯度的方法,本节中我们来看看另一类直观且强大的方法:基于度量或原型的方法。

原型网络

原型网络的核心思想是:为每个类别学习一个原型向量(prototype),分类时只需计算查询样本与各个原型之间的距离。

算法步骤如下:

  1. 嵌入:使用一个嵌入函数(如神经网络)将每个支持集样本映射到一个嵌入空间。
  2. 计算原型:对每个类别,计算其所有支持集样本嵌入的均值,作为该类别的原型向量 c_k
    c_k = (1/|S_k|) Σ_{x_i ∈ S_k} f_φ(x_i)
  3. 分类:对于一个查询样本 x,计算其嵌入与每个原型之间的负欧氏距离(或其它距离),然后通过softmax产生分类分布:
    p(y=k | x) = exp(-d(f_φ(x), c_k)) / Σ_{k'} exp(-d(f_φ(x), c_k'))

元训练:通过优化嵌入函数 f_φ 的参数 φ,使得在所有元训练任务上,查询集的分类损失最小。

为何有效?

原型网络非常简单,但它通常能取得与MAML相媲美甚至更好的性能。这再次强调了学习一个良好的嵌入空间对于快速适应的重要性。在这个空间中,同类样本聚集,异类样本分离,因此即使只有少量样本,也能通过最*邻或原型比较进行可靠分类。

与高斯过程的关系

元学习(学习函数分布)的思想与高斯过程有深刻的联系。高斯过程通过核函数定义函数空间上的先验,给定观测数据后,可以推断出后验预测分布。类似地,元学习旨在从数据中学习一个“先验”(或适应规则),使其能够快速推断出新任务对应的函数。一些方法(如条件神经过程)显式地借鉴了这种思想,用神经网络替代核函数,以更灵活地建模复杂函数分布。

第四部分:元强化学习

上一节我们探讨了监督学习中的元学习,本节中我们将其扩展到序列决策问题,即元强化学习。

元强化学习问题设定

在元强化学习中,任务分布 p(T) 对应于环境分布。每个环境 T_i 可能在动力学模型、奖励函数或二者上有所不同。目标是学习一个元策略策略更新规则,使得智能体在面对新环境时,仅需少量交互轨迹就能快速调整其策略,获得高回报。

基于MAML的元强化学习

将MAML直接应用于RL是直观的:

  1. 用元参数 θ 初始化策略。
  2. 内层适应:在新环境 T_i 中,用当前策略收集轨迹,计算策略梯度,更新得到任务特定策略参数 φ_i
  3. 外层元更新:用适应后的策略 φ_i 在环境中收集新轨迹,计算回报,并以此损失通过梯度下降更新元参数 θ

这保持了MAML的“通过梯度更新进行适应”的核心思想,但样本效率可能较低,因为需要在线收集两轮轨迹(适应前和适应后)。

基于隐变量推断的元强化学习:PEARL

PEARL是一种更高效的非策略元强化学习方法。其关键思想是显式地学习一个任务推断网络,将智能体与环境交互的历史(上下文)编码为一个隐任务表征 z

主要组件:

  1. 任务推断网络 q_Φ(z | c):将上下文 c(如过去的(state, action, reward)序列)编码为隐变量 z,*似任务的后验分布。
  2. 策略 π_θ(a | s, z) 和 Q函数 Q_θ(s, a, z):策略和Q函数都以外在的隐任务表征 z 为条件。
  3. 非策略训练:数据被存储于经验回放池中。训练过程交替进行:
    • 优化策略和Q函数,以最大化依赖于 z 的RL目标(如SAC的目标)。
    • 优化任务推断网络,以最大化证据下界,其重构项与Q函数的贝尔曼误差相关联。

优势:PEARL实现了非策略学习,可以重复利用所有收集到的经验,样本效率远高于基于MAML的在线方法。它明确地将“任务识别”(通过 z)与“策略学习”分离开来。

处理非*稳环境与持续适应

现实世界常常是非*稳的,任务会随时间连续变化(例如,对手在不断学习)。我们可以将这种连续的任务序列建模为图模型,其中任务 T_t、策略参数 φ_t、轨迹 τ_t 随时间相互依赖。

在这种情况下,元学习的目标变为学习一个持续适应规则,使得策略能够从一个任务快速适应到下一个相关的任务。这可以通过修改MAML类算法的目标来实现,使其不仅适应当前任务,还要为下一个可能到来的任务做好准备。这种方法在竞争性多智能体环境(如机器人足球)中显示出优势,智能体需要适应能力不断进化的对手。

总结与要点 🎯

本节课中我们一起学习了元学习的核心思想与方法。

  • 元学习框架:通过双层优化,学习一个可快速适应新任务的“学习算法”。
  • 两类核心方法
    • 基于梯度的方法(如MAML):学习良好的参数初始化。
    • 基于度量/原型的方法(如原型网络):学习良好的特征嵌入空间。
    • 研究表明,学习强大的共享表示往往是性能提升的关键。
  • 元强化学习:将元学习应用于RL,让智能体快速适应新环境。
    • 在策略方法:可基于MAML,但样本效率低。
    • 非策略方法(如PEARL):结合任务推断与RL,样本效率高,性能出色。
  • 持续元学习:将任务视为时间相关的序列,学习在非*稳环境中持续适应的能力。
  • 概率视角:元学习可以统一理解为层次贝叶斯推断,这为扩展和设计新算法提供了强大的框架。

元学习是一个快速发展的领域,它为构建能够持续学习、适应复杂动态世界的智能系统迈出了重要一步。

028:可信机器学习 🛡️

在本节课中,我们将学习可信机器学习这一重要且前沿的研究主题。我们将探讨现代机器学习模型面临的新挑战,理解模型准确性与鲁棒性之间的权衡,并深入分析两个关键领域:跨域鲁棒性(领域自适应)和对抗鲁棒性。课程最后将对所学内容进行总结。


概述

大家好,我是Hao Han。在本次课程中,我们将简要探讨可信机器学习。作为本学期的最后一讲,我们将了解为什么可信机器学习是当今最重要的研究课题之一,并回顾一些相关的实证观察。我们还将涉及准确性与鲁棒性之间的权衡问题。

随后,我们将深入探讨两个与可信性相关但历史上被分开研究的主题:跨域鲁棒模型(通常称为领域自适应)和对抗鲁棒模型。我们会介绍一些看起来非常神奇的研究结果。


现代机器学习的新挑战

首先,让我们思考一个问题:如果我说我们可以从你的基因组中预测你是否使用筷子,你会怎么想?

虽然出于显而易见的原因,这个研究课题并不被推荐,但如果有人真的去调查数据,他们很可能会发现一个名为HLA-A1的基因与是否使用筷子的行为高度相关。然而,这种基因与使用筷子行为之间的关联,仅仅是因为该基因在东亚血统的人群中出现频率更高。

类似地,在另一项讨论中,人们表明,如果我们不能正确处理数据的本质,我们也可能识别出一些与英语技能相关的基因。这听起来同样不正确。

这些问题也可以归入可信机器学习的范畴。我们需要确保从统计模型中学到的东西与现实世界场景良好对齐,而不是仅仅因为数据本质而存在的虚假信号。

可信机器学习的问题甚至可以追溯到更早。这里我只列出了我非常熟悉的参考文献。正如你所见,即使是我熟悉的参考文献,也已经是20年前的了。因此,虽然可信机器学习是当今的热门话题,但它已经被研究了数十年。

我还想评论一下这种差异:为什么可信机器学习如今如此受重视?它是一个已经存在了数十年的主题。以前,它是在“发表偏倚”和“误用”等术语下讨论的,即使用简单的统计工具来识别与人类某些特征(如疾病)相关的基因。大约二三十年前,当社区意识到这些简单模型实际上可以通过识别候选基因来加速生物学研究时,我们进入了这个领域。很快,人们发现这些模型的一个局限性是它们可能会识别出虚假信号。在我看来,正是这些方法的现实世界需求,驱使我们研究这些模型的可信度。

但是,在那个时候,虽然我们也有关于机器学习的可信性研究,但机器学习仍然主要处理数百个带有提取特征的样本。因此,如果你想在现实世界场景中应用这些机器学习模型来真正改善人们的生活,仍然相当困难。

然而,现在深度学习将我们带入了一个非常不同的时代。几乎任何看过一些教程的人都可以开始构建深度学习模型,用大量数据训练它,并使用该模型进行预测。这些预测在不同的应用场景中正在改变我们的世界。因此,在我看来,这些模型的现实世界需求再次驱使我们研究它们的可信度。这就是为什么可信性是当今最有趣的研究课题之一的原因。

现在,让我们深入探讨这个时代的问题。深度学习在准确性方面取得了非常令人印象深刻的实证结果,但我们也看到了一些挑战。

最突出的模型可信度例子可能就是下面这个。我相信这个图非常流行,以至于每个相关主题的介绍都可能需要使用它作为例子。但以防你不清楚背后的故事,这个图基本上说明:对于一个训练有素、能给出相当高准确率的神经网络(例如,它以大约60%的置信度预测这张图片为熊猫),如果我们向图像添加一些人眼几乎无法察觉的噪声,我们就可以显著地改变模型的预测。现在,对于人眼看起来几乎相同的图像,模型预测它是别的东西。

这是另一个例子。这个例子相对较新。它基本上讲述了一个故事:如果我们结合图像的两个元素,比如生成一个具有大象纹理和猫形状的图像,神经网络很可能偏向于根据图像的纹理进行预测,而人类则主要根据形状来判断图像。

这里还有我们最*观察到的一项实证结果。首先,我们在CIFAR-10数据集上训练一个ResNet网络,然后取一张图像,将其输入模型,并生成置信度分布(这是来自测试集的)。然后,我们将该图像映射到其频域(通过傅里叶变换)。我们选择一个半径,将频域切割成高频部分和低频部分。然后,用这两个频率分量,我们重建那些图像。正如我们所见,从低频分量重建的图像在人眼看来仍然与原始图像相似,而从高频重建的图像基本上是噪声。

如果我们将这两张图像放回模型,会发生以下情况:模型将低频图像预测为与原始标签不同的东西,但模型仍然将高频重建图像预测为与原始标签相同。如果你有兴趣看看高频重建图像中有什么,这里有一个红色版本的高频重建图像。我们可以看到它基本上是噪声,但模型仍然能够识别它。

所以,基本上,这个故事是:模型看待数据的方式与我们不同。这不仅仅是10,000张CIFAR-10测试图像中的一张,我们识别出了其中的几百张。因此,虽然这种情况不会发生在所有测试图像上,但我认为几百张是一个相当大的数字,应该引起警惕。

现在,我们已经看到了这些实证观察。另一个问题是:为什么会出现这些实证观察?

我们认为,现代机器学习的核心问题之一是模型与人类看待数据的方式不一致。让我们考虑机器学习的场景:我们使用一些带有标签的数据来训练模型。在数据中,我们有一些我们称之为“语义”的信号,以及剩余的那些我们称之为“表面”的信号。语义信号描述了人类或自然界如何理解标签、如何定义标签。这是我们希望模型学习的信号。

然而,在有限的数据收集中,很可能存在语义信号和表面信号之间特定于分布的关联。这种关联导致表面信号和标签之间存在一些相关性。然后,当我们用一些数据训练模型时,模型基本上被要求优化损失函数,以利用任何它可以利用的信号来减少训练误差。模型并不真正区分这两种信号,导致它会利用任何它能利用的东西,而它从表面信号源获取的任何信号都会导致我们稍后将看到的鲁棒性问题。

因此,我们认为这是核心问题。这张图将作为我们今天讲座的一个非常基础的图示。

到目前为止有任何问题吗?


准确性与鲁棒性的权衡

有了那张图,让我们看看如何理解准确性和鲁棒性之间的权衡。首先,任何关于准确性和鲁棒性之间权衡的讨论都取决于鲁棒性的定义。但大致上,我们可以从这张图来理解:模型将利用任何它可以利用的信号来减少训练误差。因此,直观上,我们所能理解的报告准确性,来自于模型获取的两种信号。

然而,鲁棒性能(虽然此刻尚未定义)很可能主要依赖于这种语义信号。例如,在大多数讨论鲁棒性的文献中,基本上谈论的是在数据发生微小变化时,模型的预测不会改变。而“微小”变化通常是指扰动后的数据仍然能被人类识别,这意味着如果模型与人类的识别良好对齐,通常就被认为是鲁棒的。

那么,如果鲁棒性依赖于这个信号源,就留给我们这个信号源作为权衡点。例如,在定义范围内,捕获表面信号通常比捕获鲁棒信号容易得多。因此,如果我们想达到最先进的准确率,一个直接的方法就是尽可能多地利用这些信号。这导致了一种情况:如果我们想获得高准确性,我们可能必须捕获大量这些信号。然后,这导致模型自然就不那么鲁棒。

如果你对正式的讨论感兴趣,我这里引用了一些。它们通常是在一些鲁棒性定义下,将我们刚刚讨论的故事形式化。

现在我们说准确性和鲁棒性之间存在权衡。那么,当我们已经拥有准确性时,为什么还必须重视鲁棒性呢?

这里我想通过学术界和工业界之间的差异来说服你。当前学术界在机器学习方面擅长的是:我们通常在一个充满某个任务数据的世界中,当我们尝试进行一些实验时,我们通常收集数据并将其分成训练集和测试集,然后在训练数据集上构建模型,并在测试集上测试,如果效果良好,那么我们基本上可以得出结论:我们有一个表现良好的模型。

然而,现实世界需要的是:在这个世界中,我们收集一个数据集,在上面训练一个模型,证明它在这里效果良好,我们还需要证明它在任何其他地方对于相同的任务都效果良好,这样我们才能安全地将其部署到现实世界。


解决方案的高层抽象概念

现在,为了结束概述部分,让我们讨论一个关于解决方案的非常高层抽象的概念。

再次强调,由于模型获取表面信号是今天我们要处理的核心问题,那么核心解决方案应该由此启发。既然主要问题是模型获取了表面信号,那么主要解决方案就是我们需要切断这一点。

作为一个非常高层的解决方案,我们需要在非常高的层次上总结机器学习。机器学习基本上都是关于泛化的。如果你回忆一下机器学习的介绍,一个假设的期望风险通常由该假设的经验风险以及假设空间复杂度和样本数量的某个函数来界定。

通常,为了控制泛化,一方面我们需要控制经验风险,另一方面是关于假设空间复杂度和我们使用的样本数量。

正如我们稍后将在这些讨论的两个独立分支中看到的那样,跨域鲁棒性完全是关于新的假设空间,或者换句话说,完全是关于新的归纳偏置,或者你可以利用什么样的正则化。

而在对抗鲁棒性领域,虽然有各种各样的解决方案,但当今主导的、效果非常好的解决方案,通常是关于增加样本数量。在今天的讲座中,我们只会讨论遵循这一趋势的解决方案,但它们无论如何都是最好的。

这就是概述部分。我有任何问题吗?如果你们有任何反馈想提的话。


跨域鲁棒性:领域自适应与泛化

现在,让我们深入第一个主题:模型的跨域鲁棒性,我们将讨论领域自适应、领域泛化等。

首先,我们来谈谈领域自适应。它通常用这句话来介绍:它研究模型在一个分布或领域上训练,但在另一个分布或领域上测试的问题。通常,这另一个分布或领域的特点是“相似但不同”。大部分工作是关于实证研究的,所以我们并没有真正定义这个“相似但不同”,但我希望它应该能直观地理解。

在领域自适应的范畴内,我们主要有两个不同的类别:有监督领域自适应和无监督领域自适应。

有监督领域自适应研究的问题是:测试分布中的带标签样本在训练期间也可用。例如,如果我们想构建一个狗与猫的分类器,我们有这些照片,我们尝试将模型适应到这些草图结果,并尝试评估这个模型是否真正理解了狗和猫的概念。有监督领域自适应通常遵循这样的设置:我们有这些狗和猫的照片集合,我们也有一些这些狗和猫草图的小集合。

然后,很自然地会有一个后续:无监督领域自适应。在无监督领域自适中,只有测试分布中的无标签样本在训练期间可用。我认为当我们谈论领域自适应时,这更常是我们谈论的场景。所以,如今大多数领域自适应工作都在谈论无监督领域自适应,尤其是在计算机视觉领域。

既然我们现在看到问题出现在一些新的机制中,即存在分布差异,那么这些模型的泛化行为可能已经改变。首先,由于我们现在有两个分布,例如,非常直观地,我们可以看到在前一张幻灯片的例子中,如果我们想构建一个关于股票与现金的分类器,并希望泛化到草图。相当直观的是,如果模型真的学到了概念,它就能做得很好,对吧?从某种意义上说,照片和草图之间的分布仍然彼此接*。

但这可能并不总是正确的。例如,如果我们想在地球上的狗和猫上构建一个模型,然后尝试泛化到某个外星世界,那里也许所有的动物都有六条腿呢?

首先,我们需要有一个好的度量来衡量两个分布之间的差异。这里我们介绍这种H散度。它是给定一个假设类下两个分布的度量,它依赖于我们需要首先介绍的这个项I_H。它是那些对于领域是特征函数的假设集合,这意味着对于任何样本,如果它来自感兴趣的领域,假设返回1。

然后,H散度在数学上定义如下:它是这个假设类中,在这些特征函数下样本最大差异的假设。这可能会引起一些困惑。但我们可以直观地理解:H散度是假设空间内的假设所能识别的最大差异。或者为了帮助理解这个术语,假设我们的假设类限制性很强,所有假设都返回某个常数给定数据,那么这个散度将是0,因为它们总是返回相同的东西。所以,对于一个非常有限的假设,我们无法真正区分这两个分布。

如果假设表达能力很强,那么它应该能很好地描述这两个分布。那么这个散度项可能很大。但即使假设空间很大,如果这两个分布是相同的,那么结果仍然是一个小项。

因此,综合上述讨论的场景,我们可以说这个散度既是假设空间的属性,也是源分布和目标分布的属性。

这里是关于这两个分布的描述,然后他们还表明,它可以从有限样本中估计,并带有相应的界。其中,这是这两个分布正确样本的散度,它界定了带有一些集中项的散度。

然后,这个来自有限样本的散度可以用一个领域分类器来估计。我希望这对我们大多数人来说看起来很熟悉。虽然这项工作是在2010年提出的,但由于GAN的流行,这类事情现在对我们来说应该相当熟悉了。它基本上是说:为了估计两个分布的经验散度,我们可以简单地构建一个分类器,并让分类器对来自两个领域的样本进行分类。

然后,有了这些结果,再加上一些更技术性的术语,我们可以得到这个非常流行的领域自适应泛化界。

它来自2010年的这篇论文,基本上说:这里的等式表明,目标分布的期望风险受限于源分布的期望风险,加上这两个分布的散度项,以及这个λ。其中,λ表示在源分布和目标分布上最优假设的误差。

我们需要注意,这也是期望风险,所以不同于我们看到的大多数泛化界。然而,用经验风险加上另一个集中项来重写这个应该相当简单。

那么,基本上,这个项告诉我们,如果我们想在目标领域上获得较小的误差,我们需要做什么。这里的散度项告诉我们,我们需要一个足够小的假设空间,使得模型无法区分源分布和目标分布。然后这两项告诉我们,我们需要一个足够大的假设空间,以便我们能够找到一个能给我们带来小误差的假设。

有了这个背景,让我们看看今天要讨论的第一个方法,它叫做领域对抗神经网络。它可能是深度学习时代最流行的领域自适应方法之一。

为了更好地理解,我们首先把这个等式放在这里。它完全是关于我们需要找到无法区分这两个分布,同时又有小误差的假设。这个想法建立在这样一个事实上:我们需要训练一个在源分布上误差小,同时无法区分源分布和目标分布的分类器。然后,在那时,他们引入了这个叫做领域对抗神经网络的想法。

它基本上是一个标准的神经网络结构,带有这个绿色的和蓝色的部分,以及一个新的组件:这个领域分类器。我们将这些蓝色的部分视为特征提取器或一些用于学习嵌入的组件。然后,这个领域分类器建立在这些特征或证据之上,用于分类这些图像是来自源分布还是目标分布。同时,这个类别标签,这些实际的预测器或实际的分类器,用于基于这些嵌入进行预测。

那时,他们引入了这个梯度反转层。但现在,由于博弈论的普及,我们可以将其理解为一个博弈。基本上,领域分类器被优化以尽可能好地对领域信息进行分类,而这个分类器被优化以尽可能好地进行预测,而这个特征提取器被优化以尽可能多地帮助这个分类器,同时尽可能多地欺骗这个领域分类器。因此,作为这种方法的结果,在这些中间层学到的表示将非常具有标签分类的代表性,并且对于领域分类器来说信息量非常少。

到目前为止有任何问题吗?你们还在听吗?还是我讲得太快或太慢了?

为什么我们希望模型无法区分这两个分布?这是来自我们幻灯片上论文中界的直接结果。目标分布上的泛化误差受限于模型区分这两个分布的能力。我认为好的一点是,这是来自数学结果。另一方面,我们也可以尝试直观地理解。例如,如果我们真的能学习一个好的分类器,比如在狗与猫的例子中,真正学到狗和猫概念的模型应该能够应用于多个分布,比如照片、草图或其他任何图像质量。如果模型真正理解了猫与狗的概念,那么模型应该对环境分布不敏感。所以,我希望这个直观的回答有所帮助。

这个界也适用于有监督领域自适应吗?我相信是的,因为有监督领域自适应可能是无监督领域自适应的子集。你只需要忽略标签,你仍然可以得到这个界,但可能通过有监督领域自适应,你可以得到一个更紧的界。

实际上,我希望我们在这里能有一些问题。例如,正如我们在上一张幻灯片中看到的,这个界实际上依赖于在源分布和目标分布上都有小误差。现在,尽管这个方法可能是这个领域最流行的方法,但人们认为这给出了一些误导性的信息。例如,在这篇论文中,他们认为环境表示和小的源误差(这是领域对抗神经网络所促进的两个要素)并不足以构成一个好的领域自适应方法。例如,他们展示了一个例子,其中有两个不同的领域。在这个例子中,我们可以看到存在一个最优分类器,它可以区分这两个标签。但如果我们追求环境不变性,我们会说,一旦模型无法区分这两个领域,我们就无法找到一个简单且好的分类边界。

再次遵循原始界,它应该是在源分布和目标分布上都有小的风险,但优化目标分布上的风险可能太难了。在这项工作中,他们认为标记函数也很重要。所以这个界应该包括这一项。为了直观地理解,假设现在用我们的狗与猫分类器,我们尝试将其适应到所有动物都有六条腿的外星世界。如果我们不想区分它们,那么基本上我们需要做的就是忽略这些动物的腿。那么模型也应该表现良好。但是,外星人可能不把他们的狗叫狗或猫叫猫,他们可能完全反过来,那么我们的分类边界将面临非常显著的失败。这就是这项工作的直观解释。

尽管领域对抗神经网络在性能方面存在争议,但它被认为是深度学习时代最流行的领域自适应方法之一,并且它启发了大量的后续工作。这些工作中的大多数都遵循DANN(领域对抗神经网络)的非常高层概念,本质上是设计一个归纳偏置,以学习源分布和目标分布之间的环境不变表示。

所以,基本上,如果我们想设计一个新的、强大的领域自适应神经网络,我们需要考虑的第一个问题就是:我们如何强制表示是环境不变的?

实际上,我想把这个问题抛给课堂。有没有人能尝试给出一些有助于强制表示环境不变性的度量方法?我想我们应该已经见过不少方法了。例如,至少我们可以说,我们可以在这些表示的顶部使用一个对抗分类器,然后,非常直观地,我们可以设计一些距离度量并尝试最小化距离。

首先,可能有一个巨大的差距。在非常早期的阶段,有大量方法试图最小化这种距离度量来强制环境不变性。然后人们尝试设计这些对抗分类器来引导环境不变性。还有一些其他趋势,例如,他们构建模型来重建来自源分布和目标分布的图像,并希望成功的重建能够导致良好的环境不变学习。

所以,基本上,在我看来,领域自适应主要是关于学习环境不变表示。因此,对于我们有多少种引入环境不变性的方法,我们可能就有多少种领域自适应方法。所以这里我只介绍了其中的三种,但对于理解大多数现有工作来说应该足够了。

除此之外,我还想讨论一个相当新的方法,正如你所见,它来自2020年。与之前的趋势不同,它并没有真正显著利用归纳偏置,而是试图利用样本或换句话说,试图在其他无标签样本的帮助下进行领域自适应。他们引入了这个想法,称为领域自适应的自训练,其中自训练是半监督学习中的一个概念。

首先,使用一些带标签的样本,我们可以训练一个分类器。然后,使用该分类器,我们可以用分类器来预测那些无标签样本。然后,结合这些无标签样本,我们可以更新一个新模型。

他们证明,通过这种数据(我们有从20世纪初到20世纪末的照片,其中人类的实际外观可能变化很大),如果我们想在这个非常早期的阶段构建一个分类器,并直接将其应用或适应到后期阶段,我们可能会得到一些非常不理想的结果。

他们的方法是逐步使用自训练,利用这些中间分布来更新模型。例如,这个图来自他们的论文。它描述了这种渐进式自训练机制如何帮助。例如,我们有这些用绿点和红点标记的样本。如果我们的最终分布在这里,直接适应它们可能会导致一些非常糟糕的结果。但是,我们可以假设靠*原始分布的分布,在某种意义上与原始分布相似。因此,我们可以基本上逐步执行这种自训练。正如你所见,更新过程更符合直觉。

这主要是一篇理论论文,自训练不是他们发明的,但他们提供了一些很好的理解。同时,他们也提供了一些实用的见解来总结:模型必须有某种激励来更新自己。对于这种激励,他们认为正则化是必要的,还有这个称为“标签锐化”的项也是必要的。标签锐化意味着,虽然模型做出了概率性预测,例如,这个图可能是一个很好的说明:浅蓝色表示模型认为这个点是蓝色,但置信度不那么高。如果你有这个,模型可能实际上不会更新自己。所以你必须把它变成固定的0和1。

这就结束了领域自适应部分。

那么,我们有一个问题:用领域自适应训练的模型对于一般的现实世界部署来说足够好吗?答案可能是否定的,否则我就不会把这个词放在这里了。但具体为什么?我希望这也能足够直观:因为在训练期间可能还有其他未被考虑为目标分布的分布。这不是我们想要的。为了解决这个问题,我们引入了这个领域,称为领域泛化。它基本上讨论的是:我们可以用来自不同领域的样本训练一个模型,然后用一个新的分布进行测试。因此,良好的测试准确率可能表明模型真正学到了概念,并且可以应用于任何其他足够接*的分布。

这里是一个想法的图示。现在我们有了不同的集合,比如瓶子、卡通、绘画。然后我们训练模型并将其应用于草图。

顺便说一下,最*有一篇论文获得了一定的知名度,叫做“不变风险最小化”,它本质上讨论了这个已经存在15年的领域泛化思想。

在过去的15年里,或者主要是在深度学习时代,这里有一些关于深度学习时代领域泛化方法的亮点。既然我们现在没有任何关于目标分布的信息,我们需要利用我们所拥有的一切,即领域标识。然后核心假设是:能够在不同训练分布上相似且足够好地泛化的模型,很可能也能很好地泛化到任意目标分布。

对于方法开发部分,首先是再次强制某种跨不同分布的环境不变性。对于我们见过的任何领域自适应方法,我们都可以借鉴并应用到这里。然后,我这里列举了一些相当独特的方法,这些方法不能应用于领域自适应领域。

第一个是我们可以为每个领域构建一些分类器示例。另一个,我认为是一个相当聪明的想法,我们可以应用元学习。例如,在训练阶段,我们可以迭代地将那些训练领域分成虚拟训练集和虚拟测试集,然后在此基础上构建分类器。

这里是关于领域泛化的简要介绍,主要是关于不变性。所以,我希望只要你真正理解了环境不变性有助于泛化这一事实(至少直观上),那么将来当你看到类似的论文,或者将来你需要开发自己的方法来发表论文时,你应该很容易跟上这个领域的大部分内容。

那么,让我们再次问这个问题:用领域泛化训练的模型对于一般的现实世界部署来说足够好吗?同样,既然我把它放在这里,你可能预期答案是否定的。那么为什么不是呢?

我们认为,领域的划分在现实世界中可能并不总是可用的。例如,在机器学习入门课程中,我们可能都问过并回答过这个问题:当我们看到一个聚类结果,当我们看到一个聚类方法或一个数据集合,并且被要求做一些聚类工作时,第一个问题就是我们期望有多少个聚类。

我认为这是一个很好的现实世界例子,说明了理解现实世界中领域划分的困难。当我们有一个数据集合时,我们几乎不了解这些数据来自多少个分布,更不用说回答哪个样本来自哪个分布的问题了。

现在,这个新问题研究的是:我们用一个可能来自不同领域的样本集合训练模型,但我们并不真正知道,然后用一个全新的分布进行测试。这里的区别在于,在训练中,我们没有这些样本的明确划分。我们认为这可能是一个足够真实的问题。

那么,如何解决它呢?现在我们没有任何可以借用的额外信息。这导致了我们今天讨论过的核心问题。本质上,它是关于我们如何控制模型捕获表面信号的能力。因此,它导致我们需要找到一个捕获较少表面信号的假设空间。

由于这个场景实际上是我在这里倡导的,我计划介绍我之前的两项结果作为案例研究或示例,以展示当我们控制这一点时,如何在跨域泛化方面获得更好的性能。但可能我只有时间介绍其中一个。所以让我们跳过其中一个。

第一个是关于我们如何构建归纳偏置,以确保模型不学习数据的纹理。第二个是关于我们构建了一些归纳偏置和正则化,以确保模型学习数据的全局表示。

我们想说,挑战在于神经网络可以通过一些局部信号进行预测,而这些信号并不总是与数据集的标注良好对齐。例如,如果我们想构建一个海龟与蟾蜍的分类器,我们首先通过简单的谷歌搜索收集这些图像,那么这些就是谷歌返回的结果。正如我们所见,所有海龟的背景都是蓝色的,而蟾蜍的背景很可能是绿色的。当我们构建分类器时,分类器很可能具有非常高的性能,并且应该很容易构建,因为它需要做的就是查看背景,找到蓝色。

但是,尽管它可以有很高的准确率,这并不是我们想要的,对吧?我们希望模型真正理解概念。为此,我们引入了这些逐块的正则化。我们从一个简单的神经网络开始,一个卷积神经网络,其中第一个卷积层有C个通道,然后它有M x N个块,每个块汇总图像的一个局部块。我们希望确保它们不会汇总那些相当……的表示。

为此,对于每个有C个通道的块,我们认为这些来自C个通道的表示是C个特征。然后我们构建一个简单的C x L分类器,其中L是最终的标签数量(在我们的例子中,L是2,代表海龟与蟾蜍)。然后我们构建这个分类器来利用这些特征并进行预测。由于我们有M x N个块,最终输出将是M x N个预测。然后,借鉴对抗训练或博弈论的思想,我们可以推动这些表示进行预测,因此顶层被迫学习模型的一些全局概念。

同时,为了帮助评估这种跨域泛化,我们引入了迄今为止可能最大的领域自适应数据集。我们引入了一个新的ImageNet测试数据集副本,其中包含50,000张图像,每个ImageNet类别有500张图像。然后,如果模型真正理解了数据的语义概念,那么它应该能很好地理解概念,并且应该能直接很好地泛化到这些草图。

这里有一些例子,第三个是我最喜欢的。正如我们所见,通过正则化,我们的模型能够理解这是一只狗,而原始模型认为这是一个拖把。这只狗的皮毛在某种程度上确实看起来像拖把。

同时请记住,这是100类分类,所以所有这些竞争都相当激烈。

这就是我们对跨域鲁棒性的讨论。我有任何问题吗?如果没有,我们开始对抗鲁棒性部分,我猜这可能更符合你们的预期。


对抗鲁棒性

现在,让我们开始关于对抗鲁棒性的新旅程。

首先,我们需要回答一个问题:什么是对抗样本?我们可以用这个非常流行的例子非常简要地回顾一下。对抗样本基本上是添加到原始样本上的、经过精心设计的模式。然后,这些新样本在人眼看来与原始样本相同,但模型预测的结果与原始样本显著不同。

这听起来确实很神奇,但可能不够严谨,所以让我们严谨地定义它。

对于一个样本X和模型θ,对抗样本X'是一个优化问题的结果,我们希望优化这个新样本与原始样本之间的距离,同时确保这个新样本的预测与原始样本不同。

我希望这听起来不再那么神奇了,因为它应该是一个定义良好的数学问题。但是,它对人眼看起来有多神奇,取决于这个距离度量的选择。例如,在大多数流行的例子中,这个D是一个L_p范数距离,人眼很难区分差异。但如果我们考虑这个D为某种旋转对抗样本,它可能不那么流行,不那么神奇。

同样,为了使这更严谨,这是一个通用公式。但在实践中,我们还需要添加另一个约束:我们需要确保这个新生成的样本是一个有效的样本。例如,在图像领域,这些新样本的像素值必须在0到255之间(或0到1之间,取决于你的输入格式)。它必须是一张图像。

现在,我们回答了“什么是对抗样本”的问题,那么下一个问题是“为什么存在对抗样本”?既然我们已经讨论到这里,我希望这是预料之中的。对抗样本是模型捕获表面信号这一事实的直接结果。我们花了一些时间才认识到这一点,但现在这应该非常直接了。

为什么对抗鲁棒性如此受欢迎?我认为,首先,我们需要承认一个事实:它看起来很神奇。另一个原因是我们在这节课中反复强调的:人类与模型之间的一致性可能在机器学习模型的现实世界部署中扮演重要角色。

由于其受欢迎程度,人们投入了大量努力来防御模型免受这些对抗样本的攻击。但不幸的是,甚至有更多的努力被投入到生成新的对抗样本上。

所以,这里我收集了一组攻击与防御方法,这些方法至今仍然相关。我们有很多方法,但由于时间限制,我只介绍两种攻击方法和两种防御方法。

第一种是快速梯度符号方法。它可能是最早的方法之一,我认为由于它的简单性,它今天仍然相关。在给出实际的数学定义之前,我想介绍一下对这个方法的直观理解。直观上,我认为这个方法基本上是训练的反向。在训练期间,对于每个epoch,我们的目标是根据梯度更新参数以减少损失。而FGSM是反向的:根据梯度的符号更新数据以增加损失。

将其形式化,它看起来像这样。基本上,这个新样本将是原始样本的一个扰动,取决于步长和相对于样本的梯度的符号。当然,为了使其有效,我们需要一个约束来确保它仍然是一个有效的数据点。

这个流行的例子实际上是由FGSM生成的。正如你所见,差异对人眼来说几乎无法察觉。

另一种非常流行的方法是PGD,它代表投影梯度下降攻击。一个小趣闻:它实际上以前以BIM(基本迭代方法)的名字被发明,也是一种对抗攻击方法,但在这篇神奇的论文中变得非常流行。可能是因为他们证明了PGD是最强大的攻击方法之一。

算法也非常简单,它基本上是用较小的步长多次执行FGSM。为了提供更多细节,算法是:我们从L_p范数球内的随机扰动开始。例如,这里我们考虑L_infinity范数,这是原始样本。然后我们从随机扰动开始,例如这里。然后我们直观地为每一步执行FGSM。我们计算梯度,梯度的符号,然后稍微更新新样本。我们重复多次迭代。每当这些例子超出这个球时,我们只需将其投影回这个函数。

尽管它很简单,但它可能是最强大的攻击方法。如今,如果我们谈论L_p范数距离的话。

有了这些攻击方法,我们想介绍两种防御方法的亮点。第一种来自我们的实验室。它利用了最坏情况样本。如果你还记得概述幻灯片,领域自适应工作通常利用假设空间,而这些对抗防御方法通常利用样本。最成功的方法通常利用样本。

既然我们需要利用最坏情况样本,我们首先需要识别它。有了对抗攻击方法的集合,这应该相当简单。然后,这种防御方法本质上是关于正则化:我们需要正则化原始样本和新扰动样本之间嵌入的距离。在这篇论文中,实际实现是软掩码上的KL散度正则化。但由于我们已经讨论过几种正则化,应该很容易理解,还有其他不同形式的相同方法。

例如,如果你正则化逻辑值的L2距离,那么你就会得到另一种称为对抗逻辑配对的方法,这也是一种流行的方法。

这里是这种方法有效性的简要说明。这些点是实际样本,这些方块是围绕这些样本的L_p范数球,对抗样本被允许存在。这是普通训练。正如我们所见,我们并没有真正控制决策边界。这是用TRADES思想训练的结果。我认为应该非常直观,我们期望边界包围这个对抗样本。

这种方法进入了NIPS 2018竞赛,并在2000多份提交中获得了第一名,超过第二名超过11%。所以,这只是对性能的简要总结。

那个方法已经相当不错了,这里还有一个更流行的:对抗训练作为防御。它也来自这篇神奇的论文。用一句话总结这个想法,本质上是关于在训练期间用生成的对抗样本来增强训练数据。所以它确实像听起来那么简单,但它非常强大。当它与PGD(最强大的攻击方法)结合时,它可能是最流行的防御方法。

它也具有非常令人印象深刻的实证性能,而且相当简单。我们很快就会看到它令人印象深刻的实证性能。至于简单性部分,我没有把它放在这组幻灯片中,但我们并不满足于它的简单性,社区正试图让它更容易。例如,比PGD更快地生成这些对抗样本的方法将非常相关。如果你有兴趣,可能可以在课后查阅一些论文。

现在,让我们回过头来看看实证性能。这里来自这篇论文。他们谈到,当我们用对抗训练和PGD训练一个模型时,对抗样本不再那么神奇了。所以模型在此时相当鲁棒。例如,如果我们得到一个用对抗训练和PGD训练的模型,用这三个样本完成,我们对这三个样本执行目标攻击。我认为这些攻击在图像足够好以欺骗原始模型时不会终止,而是试图最大化可能性。

这里我们可以看到,它实际上可以显示出至少比之前的例子更好地与人类对齐的模式。另一个非常有趣的点,我认为,是模型可以自动识别图像的哪一部分可能变成另一个标签。例如,他们发现,将这条鱼或类似的东西的这部分变成一只狗可能更有意义。对于不同的标签,他们可能选择扰动不同的部分。

同样,在那张图中,他们展示了用PGD进行对抗训练可以在多个不同的任务中工作得相当好。例如,同一个模型可能能够完成生成、修复、超分辨率等任务。从这张图得出的对抗结果非常好。但我认为在他们的论文中,他们也承认,如果你随机挑选一张图像,它们看起来并不那么好,但也相当不错。而且,由于这是关于一旦模型能与人类合理地对齐,那么模型就能自动执行多个任务的想法,我认为结果仍然足够显著。但另一方面,这些结果可能不如专门为其中一项任务训练的单一模型那样好。

这就是对抗训练与PGD想法的威力。然后,随着对抗训练与PGD令人印象深刻的性能,防御方法的发展似乎告一段落。

不,它很简单,但可能不够简单,正如我们之前所见。另一个更重要的原因是,可能还有其他尚未发明的攻击方法,可以穿透防御模型。

那么,这是否意味着这个研究领域是无穷无尽的?幸运的是,社区现在转向了可证明的鲁棒模型。基本上,现在如果你想发明一种防御方法,真正证明我们的模型对某些攻击是鲁棒的,社区可能不会像以前那样重视这种方法。所以现在,如果你想推广你自己的防御方法,你可能必须证明它在数学上不会被对抗攻击约束内的任何方法穿透。

为了展示一点可证明防御方法的例子,这里我只包含了一个例子,叫做通过随机*滑获得可证明的鲁棒性。我选择它主要是因为它简单直观,并且作为一种可证明的防御方法,它可能涉及最少的数学。

这个想法很简单。它基本上是说,对于一个模型F(x),我们生成另一个模型,其输出是当x被一系列噪声扰动时,x的多数预测。可能这张图是一个很好的说明:对于预测为蓝色的x,我们希望通过扰动并采样x周围的所有扰动样本来生成这个树,然后这个树的最终预测将是这个预测的投票结果。

我认为这个想法不是他们发明的,但他们是第一个证明这种方法可以提供可证明的鲁棒性的人。这意味着,在他们的方法中,在L2范数距离内,模型不会被任何其他现有的L2距离攻击方法穿透。

有了这个,就结束了对对抗鲁棒性的讨论,虽然有点仓促,但我希望没问题。

展望未来,我认为再次强调,这一切都关于这张图:我们需要控制模型获取什么。一旦模型真正获取了语义信息,我们就可以放心地说模型足够鲁棒了。


总结

大致到了总结这节课的时间了。我们在这里讨论了机器学习的新挑战,我们更多地讨论了跨域鲁棒模型,因为它有超过20年的历史。对于一个只有大约五六年历史的新主题——对抗鲁棒模型,我们花了相对较短的时间讨论它。

我们有任何一般性问题吗?如果没有,那么也许我可以结束这节课了。另外,由于这是本学期的最后一节课,我谨代表PGM教学团队,感谢大家这学期与我们在一起。我希望你们在学习这些新技术的过程中度过了一段非常美好的时光。我希望我们做得还算不错。同时,感谢大家在我们犯了一些错误时的理解。也感谢John在Zoom技术问题上的支持。总之,祝大家好运。祝你们作业顺利,项目顺利。总的来说,祝你们学业顺利。如果你对可信机器学习感兴趣,并想参与研究或类似的事情,欢迎随时联系我。另外,也许保持健康,待在家里,让我们一起对抗COVID-19。

大概就是这样。另外,如果你们需要,我想Piazza上的信息已经有了。作业四和项目的截止日期,包括报告和最终演示的提交,都是5月6日。我想大概是那个时候。请务必在Piazza上再次确认。

最终项目的提交将包括一份报告和一个10分钟的预录视频。请确保你的团队成员*均分配时间,并确保在演示过程中你的脸出现在视频中。

我还有其他的问题吗?如果没有,那就到此结束,谢谢大家。

posted @ 2026-03-26 01:39  绝不原创的飞龙  阅读(6)  评论(0)    收藏  举报