马里兰大学-CMSC828W-深度学习基础笔记-全-

马里兰大学 CMSC828W 深度学习基础笔记(全)

001:课程介绍与回顾基础模型 🎯

在本节课中,我们将学习马里兰大学“深度学习基础”课程的整体结构、学习要求以及项目安排。课程将从回顾基础的深度学习模型和优化问题开始,为后续的高级主题打下基础。

大家好,我是这门“深度学习基础”课程的讲师,Joel Fazi。很高兴能担任本课程的讲师。希望你们度过了一个愉快的夏天,也希望你们和家人在当前复杂的情况下一切安好。

现在开始上课。今天,我将首先简要介绍课程的结构以及我们将要涵盖的主题,然后我们将深入本次讲座的技术部分,理解基础的深度学习模型和优化问题。

首先,这是一门高级深度学习课程。因此,在学习本课程之前,你需要具备一些基础的机器学习和深度学习背景。如果你没有这样的背景,我建议你先学习一些机器学习和深度学习的入门课程,也许明年再来学习深度学习的高级课程。

我们将要涵盖的主题非常先进和现代,包括:

  • 深度学习优化
  • 深度学习泛化
  • 神经正切核
  • 彩票假说
  • 深度学习鲁棒性(对抗攻击与防御)

上一节我们介绍了课程的整体方向,本节中我们来看看如何应对数据分布的变化。我们将研究放宽独立同分布假设,涉及领域自适应和域外泛化。

我们会花几节课的时间在深度生成模型上,包括:

  • 变分自编码器
  • 生成对抗网络
  • 基于流的模型

以及它们的极小极大优化问题。我们将有一节课专门讨论自监督深度学习,还有几节课讨论深度强化学习。

我们还将有一节课讨论注意力机制、Transformer和长短期记忆网络。

此外,课程还将涵盖:

  • 视觉深度学习
  • 可解释深度学习
  • 公平性
  • 图神经网络
  • 元学习
  • 联邦学习
  • 隐私分析

正如你所见,这是一个非常长的主题列表。这些主题非常重要且现代。但为了能够涵盖这些主题,我绝对需要你们的帮助。你们需要在每次课前阅读我们发布的论文。我无法更加强调这一点:在来上课之前阅读这些论文非常重要。其中一些论文技术性很强,为了能够消化这些论文,你应该在课前提前几天开始阅读。不要等到课前最后一小时,因为那样可能很难理解和消化这些论文中的概念和技术。

另一件事是,这些论文和主题是一个暂定列表。我们可能会在过程中增加或删除一些主题。这是本课程的第一个草案,我们将根据实际情况进行调整。

关于提问,我不希望这门课变成独角戏。尽管我们是在虚拟环境中上课,但你们中的大多数人可能都上过我的其他课程。我喜欢在讲座中收到问题并进行一些对话。你们有两个选择:一是使用Zoom中的“举手”按钮,二是直接在聊天框中发布你的问题。我会在课堂上阅读你们的问题并尝试回答。

到目前为止有任何问题吗?

好的。现在让我们看看课程信息。

如前所述,我是本课程的讲师。我们还有三位出色的助教:Aya、Neha和Muk。他们将在课程的不同部分帮助我和你们。课程主题基本上就是我们之前看到的那些。

讲座将在线上进行。我会录制这些讲座,并在每节课后发布。但我强烈鼓励你们所有人参加这些虚拟讲座,因为正如我提到的,我喜欢在讲座中进行大量的问答式对话。

关于答疑时间,我的答疑时间将从下周开始,安排在周二讲座之后。助教的答疑时间将很快公布。

关于背景要求,如前所述,这是一门高级课程。因此,你需要在线性代数、概率论和优化方面有扎实的背景。同时,你还需要具备一些机器学习和深度学习的基础背景。否则,你将很难跟上后续的一些讲座。显然,你还需要具备一些Python编程背景。

本课程将以项目为导向。我们将在这门课中举办一个小型会议。具体运作方式是:学生将组成小组,类似于其他一些机器学习会议,我们将采用双盲提交和评审流程。

以下是项目流程的关键步骤:

  • 每个学生也将担任评审员。你将以双盲格式评审三份提交。
  • 所有流程都必须是双盲格式,否则将受到严厉处罚。
  • 每份提交最多可有四名学生。我们鼓励你们组成团队并与其他学生合作。我理解这有点困难,尤其是在虚拟环境中,但我们有Piazza论坛,你可以在那里发布你的问题或项目想法,看看是否有其他学生有兴趣加入你的团队。

需要强调的一点是,所有截止日期都是最终的,我们不会延长。因为截止日期是环环相扣的,如果我们延长其中一个,将很难调整其他所有截止日期。

以下是我们的重要日期:

  • 十月初,你需要组建团队并选定项目主题。一周内,我们会给你反馈(通过或不通过)。
  • 十一月的第一周是摘要提交截止日期。你将提交摘要,并在一周内提交符合ICML格式的完整论文。
  • 评审期将在此之后立即开始。你将被分配到三篇论文(以小组为单位)进行评审。
  • 之后,我们将有一个反驳期。我们会将评审意见透露给论文作者,让他们对评审员提出的意见撰写回复。
  • 之后,评审员之间将有几天时间进行讨论。最后,领域主席(即我的助教和我本人)将最终确定每篇论文的分数,并评估评审员的表现。

我们将有另一部分讲座描述“课堂记录”。我们已经分享了谷歌表格供你们报名记录讲座。我将在每次讲座后分享这些记录笔记。因此,除了讲座视频,你们还将获得一些讲座的记录笔记。

关于考试,我们只有一次考试,这实际上是必修的,因为这是一门资格课程。我们将有一次期末考试,是开卷考试,日期是12月3日。

关于评分,课堂记录占10%,期末考试占25%,论文分数占40%,评审分数占25%。正如你所见,课程以项目为导向,你65%的分数将基本上来自项目以及你为其他论文所做的评审。

好了,课程介绍就到这里。如果你们有任何问题,我认为现在是个好时机,可以举手或在聊天框中提问。

好的,我看到你们中有些人的答疑时间有冲突。这是一门很大的课,很难找到一个对所有人都合适的时间。但我会尝试在某些周调整我的答疑时间,希望大概率上你们所有人都能参加我的一些答疑时间。

还有一个问题:项目通常期望的团队规模是多少?最多四人,但我们有……(此处内容不完整)

本节课中我们一起学习了“深度学习基础”课程的总体介绍、学习要求、项目流程和评分标准。课程将从回顾基础模型开始,逐步深入到优化、泛化、生成模型等现代高级主题,并要求学生通过参与项目实践和学术评审来巩固知识。

002:优化问题与过参数化的作用 🧠

在本节课中,我们将探讨深度学习中的优化问题,并聚焦于一个核心概念:过参数化。我们将了解为什么在非凸优化问题中,梯度下降等方法依然能有效工作,以及过参数化在其中扮演的关键角色。

上一讲我们介绍了经验风险最小化问题。本节中,我们来看看在非凸的神经网络优化中,实践观察到了哪些有趣的现象。


优化问题的挑战

我们从一个标准的经验风险最小化问题开始:

公式
min_w (1/N) * Σ_{i=1 to N} loss( f_w(x_i), y_i )

其中:

  • x_i 是 D 维输入。
  • y_i 是标签(例如,在 C 类分类问题中,y_i 是 C 维向量)。
  • f_w 是我们的模型(如神经网络),由参数 w 参数化。
  • loss 是损失函数。

对于神经网络,f_w 是一个非线性函数,因此整个优化目标通常是一个非凸问题。

在凸优化中,损失函数形状“友好”,梯度下降可以保证收敛到全局最优解 w*。然而,在非凸情况下,损失函数可能非常复杂,存在不良的局部极小值鞍点(其海森矩阵同时具有正负特征值)。理论上,这些点会阻碍优化算法找到好的解。

但有趣的是,在实践中,梯度下降随机梯度下降 在优化深度学习问题时通常表现得相当好,能够收敛到不错的解。这就引出了核心问题:为什么?


一个关键的实践观察 🧐

一个关键的实践观察是:在大多数成功的深度学习实现中,训练误差可以变得非常小,几乎为零

这意味着我们的模型 f_w 能够几乎完美地拟合训练集中的每一个 (x, y) 对。这种现象被称为插值

为什么能够实现插值?主要原因在于,我们使用的深度模型通常拥有大量参数,这使得模型在拟合训练数据关系时具有极大的灵活性。


过参数化机制

更具体地说,当模型的参数数量 m 大于训练样本数量 n 时,我们通常能够实现(近似)零训练误差。这种情形被称为过参数化

公式
m > n

其中:

  • m:模型参数的数量。
  • n:训练样本的数量(注意:对于多分类问题,每个样本 y_i 有 C 个分量,要精确插值需要满足 m > n * C,但核心思想是参数多于需要拟合的“约束”)。

以下是关于过参数化的几点说明:

  • 直觉:想象你有 10 个样本(10 个方程),但你的模型有 100 个可调参数(100 个自由度)。你通常有足够的灵活性来精确满足这 10 个方程。
  • 关于过拟合的疑问:一个很自然的问题是:参数远多于样本,难道不会导致巨大的过拟合吗?根据经典的偏差-方差权衡理论,这确实可能是个问题。然而,现代深度学习的实践和理论研究表明,在过参数化机制下,模型不仅能够完美拟合训练数据,有时还能保持良好的泛化能力。我们将在后续关于泛化的课程中深入探讨这个看似矛盾的现象。

过参数化如何帮助优化?🔧

上一节我们提到了非凸优化的困难,本节我们来看看过参数化如何缓解这些困难。

过参数化通过改变损失函数的景观来帮助优化。在过参数化机制下:

  1. 局部极小值可能变少或“更优”:由于模型容量极大,许多参数配置都能实现零训练误差。这意味着全局最小值(零损失点)的集合可能非常大,而非孤立的点。优化算法更容易“落入”这个广阔的零损失区域,而不是被困在某个糟糕的局部极小点。
  2. 鞍点问题可能被减轻:在高维过参数化空间中,严格的鞍点(所有方向都平坦的点)可能变得罕见。梯度下降的噪声(特别是SGD中的随机性)有助于逃离那些不稳定的鞍点区域。
  3. 优化路径更顺畅:有理论工作表明,对于过参数化的神经网络,在训练初期,其行为可能近似于一个线性模型,这使得优化景观更加可预测和易于处理。

简单来说,过参数化将优化问题从一个充满“陷阱”(坏局部极小值)的复杂地形,转变为一个目标(零训练误差)更容易达到的广阔盆地。


总结

本节课中,我们一起学习了深度学习优化中的核心现象——过参数化

  • 我们回顾了非凸优化带来的挑战,如局部极小值和鞍点。
  • 我们观察到一个关键事实:成功的深度学习模型通常能实现近乎零的训练误差,即达到插值
  • 这通常发生在过参数化机制下,即模型参数数量 m 大于训练样本数量 n
  • 过参数化通过扩大最优解的集合、改变损失函数景观,从而帮助梯度下降等算法更有效地进行优化,部分解释了为什么这些简单算法在深度学习中行之有效。

过参数化是连接优化与泛化的重要桥梁。在下一讲中,我们将继续探讨过参数化模型的泛化能力,即为什么一个能完美记住训练数据的模型,依然能在未见过的数据上表现良好。

003:过参数化的作用

在本节课中,我们将学习过参数化在深度学习中的核心作用。我们将从回顾上一讲的内容开始,深入探讨当训练误差为零时的情况,并引入一个关键的数学条件——Polyak-Lojasiewicz条件,来分析梯度下降在非凸优化中的收敛性。

回顾:插值区域与过参数化

上一讲我们考虑了训练误差非常小的情况。在许多实际的深度学习实现中,训练误差几乎为零。当训练误差为零时,我们基本上处于插值区域

这意味着,对于训练集 {(X_i, Y_i)}_{i=1}^n,我们希望学习一个带参数 w 的函数 f,使得该函数应用于所有输入 X_i 时,都能精确地输出对应的标签 Y_i

我们可以稍微简化一下符号,将这个方程组写成 F(w) = y 的形式,其中 x 是隐含的。wm 维的参数向量,y 假设位于 n 维空间。当我们说系统是过参数化的,意味着参数数量 m 大于样本数量 n。在多标签分类或回归问题中,这个 n 等于样本数乘以类别数,即我们希望插值的方程总数。

我们看到,插值问题的解可能不是唯一的。例如,在三维空间中,满足第一个方程 F(w) = y1 的参数 w 构成一个流形,满足第二个方程 F(w) = y2 的参数构成另一个流形,它们的交集就是所有最优解 w* 构成的流形。这些解不是孤立的,这是过参数化与欠参数化区域的一个区别。

为了找到这些解,我们定义一个损失函数。通常我们使用二次损失,因为它更容易分析,但所涵盖的许多论点也可以应用于其他损失函数。我们使用梯度下降(或其随机版本)来最小化这个损失函数。我们的目标是理解为什么梯度下降在这个区域能够找到一个好的解 w*,使其能够精确地插值输入输出关系。这就是上一讲和今天讲座的核心思想。

理解收敛的关键:PL条件

为了理解这一点,我们必须认识到这个损失函数可能是非凸的。如果它是凸的,我们就没有任何问题。但这个损失函数是非凸的,我们甚至证明了它在局部区域内,其Hessian矩阵的特征值也可能有正有负,因此即使在局部也不是凸的。

为了证明收敛性,我们讨论了一个非常重要的条件:Polyak-Lojasiewicz条件

如果一个损失函数(或任何函数)满足PL条件,那么对于所考虑区域内所有的 w,其梯度大小的平方大于或等于一个常数 μ 乘以损失函数的值。用公式表示如下:

||∇L(w)||² ≥ μ * L(w)

如果我的损失函数满足这个不等式,我们就说该损失函数满足 μ-PL 条件。在上一讲的结尾,我陈述了一个定理:当损失函数满足PL条件时,在一定的假设下,梯度下降能够收敛。

PL条件的直观理解

今天,我首先将给出一些关于PL条件的直观解释。这个条件要求梯度大小的平方大于等于损失值乘以一个常数。这背后的逻辑是什么?为什么我们需要这个条件来保证梯度下降的收敛性?

实际上,尽管这个条件初看起来有些奇怪,但它是一个非常直观且简单的条件,能够直接导致梯度下降在非凸情况下的收敛。

以下是我们的基本假设:

  1. PL条件:损失函数在包含梯度下降轨迹的一个球体内满足 μ-PL 条件。
  2. β-平滑性:损失函数是 β-平滑的。这意味着其Hessian矩阵的特征值被某个常数 β 所界定。Hessian矩阵不必是半正定的,我们只需要曲率值有界。
  3. 学习率:学习率 α 必须足够小。显然,学习率不能太大,即使在凸优化中,过大的学习率也无法保证收敛。我们假设学习率 α ≤ 1/β

在凸优化的梯度下降收敛性证明中,我们同样对Hessian矩阵的特征值有约束,并假设学习率足够小。这里额外的假设是,我们用满足 μ-PL 条件替代了凸性假设。

接下来,我们将分析梯度下降的动态过程,其更新规则为:

w_{t+1} = w_t - α * ∇L(w_t)

总结

本节课中,我们一起学习了过参数化在深度学习优化中的核心作用。我们从零训练误差的插值区域出发,认识到过参数化会导致解不唯一。为了分析梯度下降在这种非凸情况下的收敛性,我们引入了关键的Polyak-Lojasiewicz条件。该条件与函数的平滑性及适当的学习率相结合,为梯度下降找到良好解提供了理论保证。下一节,我们将深入探讨PL条件的证明及其具体应用。

004:梯度下降的隐式偏置

在本节课中,我们将要学习梯度下降和随机梯度下降的隐式偏置。首先,让我们快速回顾一下前两节关于深度学习优化的内容。

回顾与问题引入

上一节我们介绍了在插值区域(即训练误差非常小)的优化问题。我们最终得到了一个非线性方程组:F(W) = y。这里 W 是 M 维参数,y 是 N 维输出,我们处于过参数化状态,即参数数量 M 大于样本数量 N。

我们考虑了不同的损失函数,其中最常用的是二次损失函数。我们的目标是通过梯度下降来最小化这个二次损失。我们证明了,在过参数化状态下,尽管优化问题是非凸的,但在某些条件下,我们仍然可以为这个非线性方程组找到一个最优解,或者说一个最小化损失的最优解。

例如,如果一个模型有三个参数,但只有两个二维空间的样本,那么满足第一个方程 F(W, x1) = y1 的解构成一个流形,满足第二个方程 F(W, x2) = y2 的解构成另一个流形。这两个流形的交集就是所有最优解 W* 构成的流形。

可以看到,在过参数化状态下,我们通常没有唯一解,而是有无穷多个 W* 可以完美拟合训练集中的 X-Y 关系。

这就引出了一个关键问题:关于泛化能力的问题。理论上,当模型参数远多于样本时,即使训练误差很小,也可能导致糟糕的泛化能力,即在测试集上误差很大。然而在实践中,对于许多复杂数据集上的过参数化深度模型,这种情况并不常见。

原因之一可能就是梯度下降或随机梯度下降的“隐式偏置”。尽管我们在目标函数中没有添加任何显式的正则化项(例如 L2 正则化)来限制参数空间以帮助泛化,但梯度下降的动态过程可能会在所有可能的解中找到一个“好”的解——一个具有良好泛化特性的解。这个解本身可能就带有某种隐式的偏置。这就是今天讲座的核心思想,也是我们过渡到后续讨论深度模型泛化性质讲座的良好桥梁。

一个简单的研究案例

为了深入理解这个问题,我们将聚焦于一篇2018年的论文及其后续研究。这篇论文的出发点非常简单,有助于我们建立关于此问题的直觉。

论文考虑了一个简单的设置:二元分类问题。

我们假设数据是线性可分的,并且最初不涉及神经网络,仅使用线性模型。此外,我们假设模型没有偏置项 b,即 b = 0

用图像表示,我们有一些线性可分的二元分类数据。任何满足 W*^T x = 0 的直线(或超平面)都能正确分类所有样本。但这样的直线有无穷多条。

那么,我们应该选择哪一条直线作为分类器呢?例如,是选择这条,还是那条?

答案是:选择最大间隔平面。这就是支持向量机(SVM)的解。

为什么我们要在所有可能的平面中选择最大间隔平面呢?因为它具有更好的泛化能力、对扰动的稳定性、防止过拟合以及更高的置信度等优良性质。特别是,当测试样本与训练样本接近但不完全相同时,最大间隔分类器能提供更好的泛化性能。

本节课中,我们一起学习了梯度下降隐式偏置的基本概念,并通过一个简单的线性可分二元分类案例,引出了最大间隔解的重要性。在接下来的章节中,我们将继续探讨梯度下降如何隐式地趋向于这类具有良好泛化性质的解。

005:深度学习泛化

在本节课中,我们将要学习深度学习中的泛化问题。我们将首先概述一些经典的机器学习泛化理论结果,然后探讨这些结果中哪些适用于深度学习,哪些不适用。

问题设定

我们首先来设定问题。假设我们有一个训练集 S,包含 n 个样本。每个样本 Z_i 由特征 X_i 和标签 Y_i 组成,记作 Z_i = (X_i, Y_i)

这些样本来自于一个未知的联合分布 P_{XY}。我们无法获知这个分布的具体形式,只能观察到从该分布中抽取的有限样本。

我们的目标是从一个假设类(函数类)H 中,找到一个函数 h,使其能够根据 X 预测 Y。为了衡量函数 h 在训练集上的表现,我们定义一个经验损失函数 L_S(h)

L_S(h) = (1/n) * Σ_{i=1}^{n} l(h(X_i), Y_i)

其中 l 是损失函数(例如均方误差或交叉熵)。L_S(h) 也被称为经验风险。

由于我们无法直接计算在真实分布上的损失,我们通常的做法是最小化经验损失。我们选择在训练集上表现最好的函数 h_S^*

h_S^* = arg min_{h ∈ H} L_S(h)

然而,我们真正关心的是函数在未知数据(测试集)上的表现,即总体损失 L_D(h)

L_D(h) = E_{(X,Y) ~ P_{XY}} [l(h(X), Y)]

如果我们知道真实分布 P_{XY},我们就能直接找到最小化总体损失的理想函数 h_D^*

h_D^* = arg min_{h ∈ H} L_D(h)

我们的最终目标是,通过最小化经验损失找到的函数 h_S^*,其总体损失 L_D(h_S^*) 也能接近最优值 L_D(h_D^*)。这就是泛化问题的核心。

直观理解

为了更直观地理解,我们可以想象一个一维的假设类 H

总体损失 L_D(h) 是一个确定的函数(一旦分布给定),其最小值点对应着 h_D^*

而经验损失 L_S(h) 则依赖于随机抽取的训练集 S。每次抽取不同的训练集,我们都会得到一条略有不同的经验损失曲线。其最小值点对应着 h_S^*

学习理论的目标是确保,对于大多数训练集 S,由它找到的 h_S^* 在总体分布上也有良好的性能。换句话说,我们希望经验损失曲线和总体损失曲线在最优解附近足够接近。

衡量泛化性能

为了量化一个学习算法(如通过经验风险最小化找到的 h_S^*)的泛化能力,我们可以关注以下两个关键量:

  1. 估计误差:这衡量了我们找到的解 h_S^* 与理论最优解 h_D^* 之间的差距。
    L_D(h_S^*) - L_D(h_D^*)

  2. 泛化差距:这衡量了我们的解在训练集上的表现与在总体分布上表现的差距。
    L_D(h_S^*) - L_S(h_S^*)

如果泛化差距很小,则说明模型没有过拟合,其在训练集上的性能可以很好地代表其在未知数据上的性能。

在接下来的章节中,我们将探讨经典理论如何界定这些差距,并分析这些理论在深度神经网络这一高度复杂的假设类中面临的挑战。


本节课中,我们一起学习了深度学习泛化问题的基本设定。我们定义了经验损失 L_S(h) 和总体损失 L_D(h),并明确了学习的目标是使经验风险最小化得到的解 h_S^* 具有较小的泛化差距。我们还介绍了估计误差和泛化差距这两个核心概念,为后续深入探讨泛化理论奠定了基础。

006:深度学习泛化能力(第二部分)

在本节课中,我们将继续探讨深度学习中的泛化问题。我们将回顾一项重要研究的关键发现,并分析这些发现对我们理解神经网络泛化能力的意义。

回顾:随机标签实验

上一节我们开始讨论《理解深度学习需要重新思考泛化》这篇论文。这是一篇非常出色的论文,建议大家都去阅读。

现在,我们来简要回顾一下论文中涉及的核心结果。他们进行了一系列随机化测试。假设我们有一个训练集 {X_i, Y_i},包含 n 个训练样本。他们的做法是随机打乱标签(或在其他实验中部分打乱标签)。我们主要关注完全随机的情况,即标签被完全随机化。

在这种情况下,模型将表现出非常差的泛化能力。在二分类任务中,测试误差会接近50%,因为 Xy 之间不存在任何结构性的关系。然而,令人惊讶的是,训练误差会变得非常小。这表明神经网络拥有足够的容量和复杂度,能够完全拟合随机标签。这基本上意味着,尽管此时泛化差距(训练误差与测试误差之差)高达50%,但我们之前讨论过的一些复杂度度量,例如 Rademacher复杂度VC维,并不足以解释深度学习中的泛化行为。

我强调“不足以”,是因为这些复杂度度量仍然非常有用,但在训练深度模型时,可能还有其他因素在起作用。例如,可能存在一些隐式正则化或其他因素,共同促成了我们在深度学习中经常观察到的良好泛化表现。

优化难度与泛化

接下来,我们看看论文中另一个有趣的观察。

你可能会认为,如果使用随机标签,神经网络的优化过程会遇到困难,难以收敛到一个好的解。也许我们可以利用随机梯度下降(SGD)的收敛速度或轨迹特性来解释神经网络的泛化行为。

然而,他们观察到的现象是:事实上,在收敛速度方面,使用随机标签训练神经网络的优化过程并没有困难太多。平均而言,它可能只比使用真实标签训练慢两到三倍,但并非显著更慢。

让我总结一下这个观察:神经网络的优化过程在训练随机标签时,并没有变得困难太多。这至少就收敛速度而言是成立的。

因此,我们不能仅仅通过观察神经网络的训练优化行为(例如收敛速度)来解释其泛化能力。这个指标本身也是不充分的。

显式正则化的作用

以上结果表明,我们既不能仅依赖于假设类本身的复杂度度量(如Rademacher复杂度或VC维),也不能仅依赖于训练优化行为来解释泛化。

论文还探讨了显式正则化的作用。到目前为止,我们训练神经网络使用的是经验风险最小化(ERM),没有加入正则化。但在实践中,人们会使用各种正则化方法。

以下是几种常见的显式正则化技术:

  • 数据增强:例如,对训练图像进行随机裁剪、调整光照等,这相当于增加了训练数据的多样性。
  • L2正则化/权重衰减:对模型参数施加L2范数惩罚。
  • Dropout:在训练过程中随机丢弃部分神经元或连接。

论文尝试了这些显式正则化方法。显然,他们观察到添加这些正则化有助于提升泛化能力,因为它限制了搜索空间,从而缩小了训练损失和测试损失之间的差距。

但关键点在于:即使没有这些显式正则化,模型仍然表现出相当好的泛化能力

总结一下:显式正则化有助于提升泛化,但并非必要。即使没有它们,模型也已经具备了不错的泛化能力。

隐式正则化的猜想

现在你可能会想,即使没有显式正则化,当我们使用随机梯度下降(SGD)来解决经验风险最小化(ERM)问题时,SGD本身可能会给优化过程添加一些隐式正则化,也许这就是我们获得良好泛化的原因。

因此,一个合理的猜想是:SGD可能引入了某种隐式正则化

我们在两节课前研究过线性模型的情况。对于线性模型,我们证明了使用逻辑损失函数的SGD会收敛到最大间隔解,这本质上相当于对参数施加了L2正则化,从而带来了良好的泛化。

然而,对于更一般的神经网络模型,SGD会引入何种隐式正则化仍不明确。显然,对于更通用的神经网络,它并不会收敛到最大间隔解。我们将在后续关于鲁棒性的课程中讨论这个问题。

总结

本节课我们一起学习了深度学习泛化研究的进一步发现。我们回顾了随机标签实验,它表明传统的复杂度度量不足以完全解释泛化;我们发现优化过程对随机标签并不特别困难,因此优化行为本身也不是充分的解释;我们还看到显式正则化虽有助于泛化但非必需。最后,我们探讨了SGD可能引入隐式正则化这一重要猜想,作为理解神经网络强大泛化能力的一个潜在方向。这些观察共同推动我们超越经典理论,去探寻深度学习泛化背后的新原理。

007:神经正切核

在本节课中,我们将学习神经正切核。首先,我们将简要概述机器学习中的核方法与核技巧。然后,我们将具体讨论神经正切核,以及它们的成功与不足之处。

从线性回归开始

让我们从最熟悉的线性回归方法开始。线性回归中的一切都相对简单。

我们有一个包含 n 个数据点的数据集,每个数据点由特征 X_i 和标签 y_i 组成。为简化起见,假设标签是实数,特征 X_i 位于 d 维空间中。

我们考虑一个线性模型,用函数 f_w(x) 表示,其中 w 代表模型参数,x 是输入。为简化,我们忽略偏置项,你可以将其作为特征之一并入 x 中。

这是一个简单的线性模型:

f_w(x) = w^T x

我们通常使用的损失函数是二次损失函数:

L(w) = (1/2) * Σ (y_i - f_w(x_i))^2

目标是找到最小化此损失的模型参数 w。这是一个无约束的凸优化问题,我们知道如何求解。我们使用梯度下降法来解决这个优化问题。

在迭代 t 时,权重更新规则如下:

w_{t+1} = w_t - η * ∇L(w_t)

其中 η 是学习率。损失函数的梯度为:

∇L(w_t) = Σ (y_i - f_{w_t}(x_i)) * ∇_w f_{w_t}(x_i)

对于线性模型 f_w(x) = w^T x,其关于 w 的梯度就是 x。因此,梯度项 ∇_w f_{w_t}(x_i) 等于 x_i

这里有趣的一点是,这个梯度项是静态的,它不依赖于当前的权重 w_t,因为 x_i 是固定的训练样本。对于足够小的学习率,我们已经证明过,梯度下降会收敛到这个优化问题的全局最优解。

引入核方法

现在,我想在模型中引入一些非线性。我们不再直接使用原始的 d 维特征 x_i,而是考虑它们的变换 φ(x_i),变换后的空间维度 D 可能远大于原始的 d

例如,假设原始特征 x 是三维的:[x1, x2, x3]。我们可以使用二阶多项式进行特征变换,得到新的特征向量:[x1, x2, x3, x1*x2, x1*x3, x2*x3, x1^2, x2^2, x3^2]。这样,我们就通过非线性函数扩展了特征空间。

这里符号有点滥用,x1 表示 x 的第一个特征,不要与第一个样本 X_1 混淆。

我们可以将这个变换应用到模型中。模型形式仍然是:

f_w(x) = w^T φ(x)

问题:这个模型在参数 w 上是线性的吗?是的。因为 φ(x) 是固定的变换,不随优化过程改变,所以模型关于 w 是线性的。

问题:这个模型在输入 x 上是线性的吗?不是。由于 φ(x) 是非线性变换,所以模型关于 x 是非线性的。

这有点像结合了两个世界的优点:我们在优化的参数空间 w 上保持了线性(从而优化问题是凸的),同时在输入 x 的映射中引入了非线性。

此时的优化问题变为:

L(w) = (1/2) * Σ (y_i - w^T φ(x_i))^2

这仍然是一个凸优化问题。使用足够小的学习率,梯度下降仍将收敛到全局最优解。

核方法的挑战

既然这结合了线性的易优化性和非线性的表达能力,为什么我们不广泛使用这种方法,而是转向深度模型呢?

以下是核方法面临的主要挑战:

  • 固定的特征变换 φ:我们如何知道应该使用哪种非线性变换来处理我们的数据?φ 是预先设定且固定的,缺乏从数据中学习合适表示的能力。
  • 计算与维度灾难:变换后的特征空间维度 D 可能非常高(例如,高阶多项式)。这会导致两个问题:一是存储和计算 w(一个 D 维向量)的成本很高;二是在高维空间中计算内积 φ(x_i)^T φ(x_j) 可能非常低效。

固定的变换并不总是令人满意,因为它无法适应数据的具体结构。

核技巧

为了解决高维内积计算效率低下的问题,我们引入了核技巧

核心思想是:对于许多特征变换 φ,我们不需要显式地计算变换后的高维向量 φ(x)φ(z),然后再做内积。相反,我们可以直接通过一个在原空间定义的、更高效的核函数 K(x, z) 来计算它们在高维空间的内积。

K(x, z) = φ(x)^T φ(z)

例如,对于上面提到的二阶多项式变换,存在一个对应的核函数(多项式核),可以直接计算 (x^T z + c)^2 来等价于在高维空间做内积,从而避免了显式构造高维特征。

这使得我们能够在极高维(甚至是无限维)的特征空间中工作,而计算成本仅与原始输入维度相关。

从核方法到神经正切核

上一节我们回顾了经典的核方法。现在,我们来看看它与深度学习的联系,即神经正切核

NTK 的核心思想是:在特定条件下(例如无限宽的神经网络、使用梯度下降训练),深度神经网络的训练动态可以近似由一个确定的核函数来描述,这个核函数就是 NTK。

具体来说,考虑一个参数为 θ 的神经网络 f(x; θ)。在训练初期,当网络宽度足够大时,参数 θ 的变化很小。此时,网络输出 f(x; θ) 的变化可以近似为其关于初始参数 θ_0 的一阶泰勒展开:

f(x; θ) ≈ f(x; θ_0) + ∇_θ f(x; θ_0)^T (θ - θ_0)

在这个近似下,网络的行为类似于一个线性模型(在参数变化上)。那么,这个“线性模型”对应的核函数就是 NTK,定义为:

Θ(x, z) = ∇_θ f(x; θ_0)^T ∇_θ f(z; θ_0)

在训练过程中,使用梯度下降更新参数时,网络输出的演化方程可以由这个 NTK 核函数主导。

NTK 的成功与局限

神经正切核理论取得了一些显著的成功:

  • 理论解释:它为理解超参数化(非常宽)神经网络的优化和泛化行为提供了一个清晰的理论框架。它解释了为什么随机梯度下降可以找到全局最小值(在无限宽极限下,优化景观是凸的)。
  • 连接经典:它在现代深度学习和经典核方法之间建立了桥梁。
  • 预测性能:对于足够宽的神经网络,NTK 可以相当准确地预测网络在训练过程中的行为。

然而,NTK 也有其局限性:

  • 有限宽度的现实:实际使用的神经网络宽度是有限的,NTK 的严格理论结果在无限宽极限下成立,对有限宽网络的近似程度可能不足。
  • 特征学习:在 NTK 机制中,特征表示 ∇_θ f(x; θ_0) 在训练开始时是固定的(由随机初始化决定),网络主要学习这些特征的线性组合。这与实践中深度网络能够进行深刻的特征学习的能力不同,在特征学习中,网络内部表示会随着训练发生重大变化。
  • 实践性能差距:由 NTK 定义的核机器,其性能通常无法与经过端到端训练、能够进行特征学习的深度网络相媲美,尤其是在复杂的视觉或语言任务上。

总结

本节课我们一起学习了神经正切核。我们从基础的线性回归和核方法出发,理解了核技巧如何高效处理高维非线性特征。然后,我们探讨了神经正切核的核心思想:在无限宽神经网络极限下,其梯度下降训练动态可由一个确定的核函数(NTK)描述。NTK 成功地将深度学习与核方法联系起来,为理解网络优化提供了理论工具,但它也存在着对有限宽度网络近似不足、无法完全解释深度网络特征学习能力等局限。理解 NTK 有助于我们更全面地认识深度学习模型的工作原理及其与经典机器学习理论的联系。

008:定义与动机

在本节课中,我们将学习深度学习模型的一个关键特性:对抗鲁棒性。我们将探讨什么是对抗样本,为什么模型会对其敏感,以及如何形式化地定义这个问题。


概述

在标准的经验风险最小化框架中,我们通过最小化训练集上的平均损失来学习模型参数。模型的目标是在未见过的测试数据上也能表现良好。例如,在ImageNet数据集上,现代模型的分类错误率已降至2-3%,接近甚至优于人类的5%错误率。

然而,高测试精度并不足以保证模型在实际应用中是可靠的。模型还需要具备鲁棒性,即应对数据中自然变化或恶意干扰的能力。本节课我们将聚焦于一种特定的鲁棒性——对抗鲁棒性。

对抗样本:一个直观例子

假设我们有一个在ImageNet上表现良好的分类器。它能够正确地将一张猫的图片分类为“猫”。

但是,如果我们对这张图片添加一个非常微小、人眼难以察觉的扰动 δ,得到一张新图片 x' = x + δ。对于人类而言,x' 看起来仍然是一只猫。

然而,这个精心设计的扰动 δ 可能导致我们的模型对 x' 做出完全错误的预测,例如将其分类为“狗”。

这个微小的扰动向量 δ 被称为对抗扰动,而生成的样本 x' 则被称为原始样本 x对抗样本

形式化定义与问题

上一节我们介绍了对抗样本的直观概念,本节中我们来看看如何形式化地定义这个问题。

首先,回顾标准监督学习设定。我们有一个包含 n 个样本的数据集,每个样本由特征 x_i 和标签 y_i 组成,其中 x_i ∈ ℝ^d。我们考虑一个 C 类的分类问题。

在标准经验风险最小化中,我们求解以下优化问题:

公式:
min_θ (1/n) Σ_{i=1}^n L(f_θ(x_i), y_i)

其中:

  • θ 是模型参数。
  • f_θ 是参数化的模型。
  • L 是损失函数。

模型的目标是最小化训练集上的平均损失,并期望在来自相同分布的测试集上也能获得良好的性能(即高精度)。

然而,对抗鲁棒性关注的是模型在受到有界扰动时的性能。我们不仅希望模型对原始样本 x 预测正确,还希望它在一个围绕 x 的局部区域内保持预测一致。

以下是核心的问题设定:

  1. 干净样本:一个被模型正确分类的输入 x(例如,标签为“猫”的图片)。
  2. 扰动约束:我们允许一个攻击者向 x 添加一个扰动 δ。但这个扰动必须很小,通常被限制在一个范数球内,例如 ||δ||_p ≤ εε 是一个很小的常数,确保扰动对人眼是“不可感知的”。
  3. 对抗样本:在扰动约束下生成的样本 x' = x + δ
  4. 攻击目标:攻击者的目标是找到一个 δ,使得模型对 x' 的预测出错(例如,预测为“狗”)。
  5. 防御目标:我们的目标是训练一个模型,使得对于所有满足 ||δ||_p ≤ ε 的扰动,模型对 x + δ 的预测都与对 x 的预测相同(即保持为“猫”)。

关于“人类难以察觉”的定义,通常通过限制扰动的 L_p 范数(如 L_∞L_2)来实现,这为扰动幅度提供了一个可量化的、与人类视觉感知大致相关的上限。

为何对抗鲁棒性至关重要

高测试精度表明模型捕捉到了数据中的主要统计规律。但对对抗样本的脆弱性揭示了模型决策边界的一个深刻问题:它们虽然在高维空间中划出了复杂的分离曲面,但这些边界在输入空间的许多方向上可能非常接近数据点,且不平滑。

这意味着:

  • 安全风险:在安全关键应用(如自动驾驶、医疗诊断)中,对抗样本可能被恶意利用,导致严重后果。
  • 理解模型:研究对抗鲁棒性帮助我们更深入地理解神经网络究竟学到了什么,以及它们的决策依据是否与人类相似。
  • 迈向可靠AI:构建能够抵抗微小扰动的模型,是迈向更稳定、更可信赖的人工智能系统的重要一步。

总结

本节课中我们一起学习了对抗鲁棒性的基本概念。我们从标准经验风险最小化框架出发,指出了高测试精度并非模型可靠性的唯一指标。通过猫图片的例子,我们直观地理解了什么是微小、人眼难察的对抗扰动以及它如何导致模型预测失败。最后,我们形式化地定义了对抗攻击与防御的问题设定,并讨论了研究对抗鲁棒性对于构建安全、可靠深度学习系统的重要意义。在接下来的课程中,我们将深入探讨生成对抗样本的具体方法以及提高模型对抗鲁棒性的防御策略。

009:攻击、防御与梯度混淆

在本节课中,我们将继续学习对抗性鲁棒性。我们将回顾上一讲的内容,包括对抗性攻击的公式化定义和防御方法,并深入探讨一种名为“梯度混淆”的现象,它可能导致防御措施产生虚假的安全感。

对抗性鲁棒性回顾

上一节我们介绍了对抗性鲁棒性的基本概念。本节中,我们来看看攻击与防御问题的具体形式化定义。

攻击问题

攻击的目标是构造一个对抗样本 x',使得模型 f_θ(x') 在给定真实标签下的分类损失最大化,同时要求 x' 位于原始样本 x 的一个特定威胁模型范围内。

公式max_{x'} L(f_θ(x'), y_true),约束条件为 ||x' - x||_p ≤ ρ

其中,||·||_p 表示 Lp 范数(如 L2、L∞)。我们通常使用基于梯度的方法(如梯度下降)来近似求解这个最大化问题。

防御方法:对抗训练

一种有效的防御方法是对抗训练。与最小化经验风险(ERM)不同,对抗训练最小化的是每个训练样本在其最坏扰动下的平均损失。

公式min_θ E_{(x,y)} [ max_{x'∈S(x)} L(f_θ(x'), y) ]

其中,S(x) 表示在威胁模型约束下 x 的邻域。我们通过交替执行随机梯度下降(SGD)来优化模型参数 θ,并使用投影梯度下降(PGD)来近似求解内部的最大化问题。对抗训练的优点在于它能针对任何定义的威胁模型进行鲁棒化。

启发式防御与梯度混淆

除了对抗训练,文献中还提出了许多启发式或经验性的防御方法。以下是这类方法的一些常见思路:

  • 在输入进入网络前添加编码或离散化步骤。
  • 随机改变网络结构。
  • 为网络引入随机性。

例如,在 ICLR 2018 会议上,就有六七篇论文提出了此类防御,并在 MNIST 或 CIFAR 数据集上针对 L2 或 L∞ 威胁模型报告了良好的鲁棒性结果。

然而,后续由 Athalye 等人在 ICML 2018 发表的一篇重要论文指出,大多数这类经验性防御都属于“梯度混淆”或“梯度掩蔽”的范畴

梯度混淆的本质

这些防御并非真正增强了模型的鲁棒性,而是使得攻击者更难可靠地计算损失函数的梯度。由于大多数攻击算法(如 PGD、FGSM)都依赖于梯度计算,梯度不可靠会导致攻击在这些防御上失败,从而产生高鲁棒精度的假象。

核心观点:梯度混淆会提供一种虚假的安全感。你以为模型通过量化、编码或随机化变得鲁棒了,但实际上,攻击者一旦了解了防御机制,就可以设计出针对性的攻击来绕过它。

梯度混淆的来源

根据该论文,梯度混淆可能来自多个方面:

  1. 使用不可微算子进行预处理:在输入进入网络前,进行非可微的操作(如某些编码)。
  2. 梯度数值不稳定:防御导致梯度计算在数值上不稳定或具有爆炸性。
  3. 随机性导致梯度方向不一致:网络中的随机性使得在不同评估点上计算的梯度方向差异很大。

自适应攻击

这类依赖梯度混淆的防御可以被自适应攻击轻易破解。自适应攻击是指,攻击者在知晓防御机制具体细节后,为其量身定制的攻击方法。例如,攻击者可能会使用可微的近似来替代防御中的不可微操作,或者通过多次采样来平滑随机性,从而获得有效的梯度估计。

总结

本节课我们一起学习了对抗性鲁棒性中的关键议题。我们回顾了对抗攻击的形式化定义和对抗训练这一核心防御方法。更重要的是,我们深入探讨了“梯度混淆”现象,了解到许多启发式防御通过增加梯度计算的难度来“欺骗”基于梯度的攻击,但这并不能提供真正的安全性,反而可能产生虚假的安全感,并且容易被自适应攻击所破解。这一认识对于设计和评估可靠的对抗性防御至关重要。

010:可证明与可泛化的对抗防御 🛡️

在本节课中,我们将学习对抗性防御的两个重要方向:可证明的防御可泛化的防御。我们将首先回顾对抗性攻击与防御的基本概念,然后深入探讨如何构建能够提供理论保证的防御方法,以及如何使防御能力能够泛化到未见过的攻击类型上。

攻击与防御回顾

上一节我们介绍了对抗性攻击的基本概念。本节中,我们来简要回顾一下攻击与防御的核心思想。

对抗性攻击

对抗性样本是指如 X‘ 这样的样本,人类会将其与原始样本 X 归为同一类,但机器学习模型却会对它们做出不同的预测。

对抗性鲁棒性的一个关键挑战在于,我们缺乏对人类感知的良好数学描述。这甚至在对抗性样本的定义中也是一个重要问题。

在对抗性攻击中,我们通过一个优化问题来绕过这个挑战。攻击的目标是在一个特定的威胁模型约束下,最大化分类损失,从而生成误导分类器的对抗样本。通过施加这个约束,我们试图确保人类会将 XX‘ 视为同一类。

这个优化问题通常是非凸的,我们常使用投影梯度下降或其变体来解决。因此,一个攻击由攻击算法和攻击优化问题中使用的威胁模型共同定义。

以下是常见的威胁模型类型:

  • LP 威胁模型: 最常见的是 L1、L2 和 L∞ 范数。它要求扰动 X‘ - X 的 LP 范数小于某个阈值 ρ
    • 公式: ||X‘ - X||_p ≤ ρ
  • 非 LP 威胁模型: 仅保证对 LP 攻击的鲁棒性是不充分的,因为存在许多非 LP 攻击可以突破针对 LP 模型的防御。
    • 稀疏攻击: 攻击者只能改变图像中至多 ρ 个像素。
    • Wasserstein 攻击: 扰动通过 Wasserstein 距离来衡量,它将图像视为分布。即使像素有微小平移或旋转(这会导致很大的 LP 距离),Wasserstein 距离也可能很小。
    • 函数式对抗攻击: 扰动被定义为输入特征的函数。例如,图像中所有红色像素会以相似的方式改变,所有灰色像素也会以相似的方式改变,这引入了全局约束。

在实践中,结合不同类型的攻击(如空间攻击、重着色攻击和加性攻击)可以构成非常强大的攻击,即使面对像对抗训练这样的防御手段。

对抗性防御

现在,让我们简要回顾一下防御方法。

一种非常流行的防御方法是对抗训练。在标准的经验风险最小化中,目标是选择最小化平均训练损失的模型参数。而在对抗训练中,我们最小化的不是训练样本上的平均损失,而是训练样本的最坏情况扰动上的平均损失。

对抗训练的一个优点是,你可以为内部的最大化问题插入不同的威胁模型。我们通常使用交替随机梯度下降来求解外部的最小化问题,并使用投影梯度下降来求解内部的最大化(即攻击)问题。

然而,对抗训练与用于解决内部最大化的特定攻击算法和威胁模型是耦合的。

除了对抗训练,还有许多其他启发式防御方法。但研究表明,当攻击者采用自适应攻击时,即使攻击者“友好地”使用与防御相同的威胁模型,只是改变攻击算法,几乎所有这些经验性防御都可能被攻破。这通常源于梯度掩码或梯度混淆。

更重要的是,攻击者本质上并不“友好”。他们完全可以使用不同的、防御未考虑到的威胁模型来发起攻击。这就引出了防御的泛化性问题:我们需要理解防御方法对未预见攻击的抵抗能力。

可证明的防御

上一节我们回顾了现有防御方法的局限性。本节中,我们来看看如何构建具有理论保证的、可证明的防御。

可证明防御的核心思想是,对于给定的输入和威胁模型,我们能够严格证明模型不会在该威胁模型定义的扰动范围内被欺骗。这提供了确定性的安全保证。

实现可证明防御的一种常见思路是通过设计模型结构或训练过程,使得我们可以高效地计算出模型在扰动球内的最坏情况行为。例如,对于某些特定结构的网络(如带有特定激活函数的网络),我们可以使用区间界传播线性松弛等技术,来计算出网络输出在输入扰动下的变化范围。

如果这个变化范围足够小,以至于不会跨越决策边界,那么我们就证明了模型对该输入和扰动是鲁棒的。

以下是构建可证明防御的关键步骤:

  1. 定义威胁模型: 明确要防御的扰动类型和范围(例如,L∞ 球,ε=8/255)。
  2. 设计可验证的模型: 使用特殊的网络结构、激活函数或训练方法,使得模型在最坏情况下的行为可以被形式化地分析和计算。
  3. 进行可证明的训练: 在训练过程中,不仅最小化标准损失,还最小化经过验证的最坏情况损失上界。这鼓励模型在可证明的范围内保持稳定。
  4. 在测试时提供证明: 对于测试样本,运行验证算法来计算鲁棒性证明。如果验证通过,则输出“鲁棒”的预测及其证明;否则,输出“无法验证”或放弃预测。

可证明防御的优势在于其提供的确定性保证。但其挑战在于,目前的验证方法通常计算成本较高,并且为了可验证性,可能需要对模型能力做出妥协,导致在干净样本上的标准准确率有所下降。

可泛化的防御

上一节我们探讨了为特定威胁模型提供保证的可证明防御。本节中,我们来看看如何使防御能力能够泛化到更广泛、甚至未预见到的攻击类型上。

可泛化防御的目标是训练出的模型不仅对训练时使用的特定攻击类型鲁棒,而且对未知的、不同范数的、甚至非LP的威胁模型也表现出一定的鲁棒性。这更接近现实世界中部署模型的需求。

实现泛化的一种思路是进行多威胁模型对抗训练。即在训练时,不仅仅针对一种LP范数(如L∞)进行优化,而是同时或交替地针对多种威胁模型(如L1、L2、L∞,甚至稀疏攻击、空间变换等)生成对抗样本并进行训练。

另一种思路是设计威胁模型不可知的防御。例如,通过数据增强引入多种类型的自然扰动(如颜色抖动、旋转、裁剪),或者使用自监督学习来学习对多种变换不变的表示,从而隐式地提升模型的泛化鲁棒性。

此外,可证明防御本身也可能带来泛化好处。因为可证明的方法通常强制模型学习更平滑、更稳定的决策边界,这种平滑性可能对抵御其他类型的扰动也有帮助,尽管这种泛化是经验性的而非有证明的。

然而,实现真正的、强大的泛化鲁棒性仍然是一个开放的研究难题。目前的方法通常需要在鲁棒性、泛化性和标准准确率之间进行权衡。

总结

本节课中,我们一起学习了对抗性防御的两个前沿方向。

我们首先回顾了对抗性攻击与防御的基本概念,指出了经验性防御在面对自适应攻击或新威胁模型时的脆弱性。接着,我们深入探讨了可证明的防御,这类方法能为特定威胁模型提供确定性的鲁棒性保证,但其计算成本和模型设计存在限制。最后,我们讨论了可泛化的防御,其目标是使模型对多种未预见攻击具备抵抗力,这通常通过多威胁模型训练或学习更通用的稳健特征来实现。

构建既高效可证明又能广泛泛化的防御体系,是当前对抗性机器学习领域持续追求的目标。

011:数据投毒攻击与防御 🧪

在本节课中,我们将要学习一种不同于测试时攻击的模型安全威胁:数据投毒攻击。我们将探讨攻击者如何通过污染训练数据来影响模型,并了解一些基础的防御思路。

概述

上一节我们介绍了测试时的对抗性攻击,攻击者在模型部署后对输入样本进行扰动以误导模型。本节中我们来看看另一种攻击面:训练时攻击,也称为数据投毒攻击。

深度模型通常需要大量数据进行训练。在实践中,我们可能无法完全信任所有训练样本的来源。因此,攻击者有机会污染部分训练数据,使得训练出的模型在特定测试样本上表现出预期的错误行为。

数据投毒的目标是什么?

理解攻击目标是关键。与测试时攻击(目标是让特定样本被误分类)不同,数据投毒的目标可能更为多样。

以下是几种可能的数据投毒攻击目标:

  1. 降低整体测试准确率:通过污染训练数据,使模型在整体测试集上的性能下降。然而,这通常可以通过在干净的验证集上监控性能来轻易发现和缓解,因此并非最令人担忧的情况。
  2. 导致有针对性的误分类:这是更值得关注的目标。攻击者希望模型在训练后,对某些特定的、干净的测试样本做出错误的预测,而模型在其他样本上的整体性能保持正常。这使得攻击更隐蔽、更具针对性。

攻击场景与分类

数据投毒攻击可以根据攻击者的知识和能力进行大致分类。

以下是两种主要的攻击场景:

  • 白盒攻击:攻击者完全了解训练数据集、模型架构和训练算法。他们可以精确计算如何修改数据以达到目标。
  • 黑盒攻击:攻击者不了解训练过程的内部细节,只能通过向训练集提交样本并观察最终模型的行为来进行攻击。这更贴近许多现实场景。

一个简单的投毒攻击思想

一种直观的攻击思路是直接针对训练过程进行破坏。

攻击者可以尝试修改训练数据,以最大化训练损失。理论上,这会使模型难以从数据中学习有效的模式。其目标函数可以抽象表示为:
最大化 ∑ L(fθ(x_i), y_i)
其中 L 是损失函数, 是模型,(x_i, y_i) 是(可能被污染的)训练样本。

然而,现代优化器(如SGD)对此类随机噪声或恶意扰动具有一定的鲁棒性。单纯增加损失可能不足以实现精准的定向攻击,因此需要更精巧的方法。

总结

本节课中我们一起学习了数据投毒攻击的基本概念。我们了解到,攻击者可以通过污染训练数据来在模型内部植入后门或导致特定故障,这种威胁因其隐蔽性而备受关注。与测试时攻击不同,数据投毒发生在模型诞生之初。下一节,我们将深入探讨几种具体的投毒攻击算法及其防御策略。

012:变分自编码器 (VAE) 入门

在本节课中,我们将开始学习深度生成模型。我们将从变分自编码器开始,并介绍其几种变体,如 Beta-VAE、层次化 VAE 和 VQ-VAE。

概述

生成模型的目标是学习一个函数,使其能够根据给定的训练数据集生成逼真但全新的合成样本。这不仅仅是生成新数据,其核心在于学习数据集的底层概率分布。一旦掌握了这个分布,我们就能解决许多其他机器学习问题,例如图像去噪、修复、风格迁移等。因此,深度生成模型是一个基础且重要的研究方向。

生成模型的基本思想

为了生成类似数据集的样本,我们需要一个概率模型来描述数据是如何产生的。一个常用且有效的思路是采用两步生成过程。

第一步:生成隐变量

首先,我们从一个已知且易于采样的分布(例如标准高斯分布)中生成一些隐变量样本。假设我们的训练数据有 N 个样本,我们以独立同分布的方式生成 N 个隐变量样本:z_1, z_2, ..., z_n。这些隐变量通常位于一个比原始数据维度更低的潜在空间中,因为自然数据(如图像)通常位于一个低维流形上。

我们假设这些隐变量服从标准正态分布:
z_i ~ N(0, I)

第二步:从隐变量生成数据

接下来,我们需要一个函数(生成器或解码器)将隐变量映射回数据空间。我们使用一个参数为 θ 的函数 G_θ 来建模这个映射。具体来说,我们假设在给定隐变量 z_i 的条件下,数据 x_i 服从一个以 G_θ(z_i) 为均值的高斯分布。

条件分布建模为:
p_θ(x_i | z_i) = N(G_θ(z_i), σ^2 I)

这里的 G_θ 就是我们的生成器,它将低维的隐变量 z 映射到高维的数据空间 xσ^2 是预设的方差参数,通常为了简化可以设为常数。

因此,整个生成过程是:先从标准正态分布采样得到隐变量 z,然后通过生成器 G_θ 得到均值,最后从以该均值为中心的高斯分布中采样得到数据 x

我们的目标是学习到一组好的参数 θ,使得通过这个过程生成的样本 x 尽可能逼真,即与训练数据分布一致。

总结

本节课我们一起学习了深度生成模型的基本目标及其重要性。我们重点介绍了一种基于隐变量的两步生成模型框架:首先从简单分布(如高斯分布)中采样隐变量,然后通过一个参数化的生成器网络将隐变量转换为数据样本。这个框架是变分自编码器等模型的核心思想。在接下来的课程中,我们将深入探讨如何训练这样的模型。

013:生成对抗网络 (GANs) 📊

在本节课中,我们将要学习另一种生成模型——生成对抗网络。我们将探讨其核心思想、工作原理、应用场景以及它与之前学习的变分自编码器的区别。

概述

上一节我们介绍了基于最大似然估计的生成模型及其面临的挑战。本节中,我们来看看另一种无需显式概率模型的生成方法:生成对抗网络。它的目标同样是学习一个函数,以便从有限的实际数据点中,生成无限多的、逼真但虚假的数据点。

GANs 的核心思想与应用

生成对抗网络由 Ian Goodfellow 等人在 2014 年提出。其核心思想是通过一个生成器和一个判别器的对抗博弈来学习数据分布。

以下是 GANs 的一些主要应用场景:

  • 生成逼真样本:例如,在 CelebA 人脸数据集上训练后,模型可以生成不在训练集中的、逼真的人脸图像。
  • 域适应与域迁移:例如,将夏季风景图像转换为冬季风格,或将斑马图像转换为马的图像。理解底层数据分布对于解决这类问题至关重要。
  • 图像修复:如果已知数据的生成流形,可以将有缺失的图像投影回该流形,从而进行修复或去噪。
  • 文本生成:在自然语言处理中,可用于“完形填空”等任务,根据学习到的生成模型来填充空白。尽管处理的是离散变量,但优化的本质是相似的。

GANs 的工作原理

让我们深入理解 GANs 是如何工作的。其基本框架包含两个关键组件:

  1. 生成器 (G):输入是一个从简单分布(如高斯分布)中采样的随机噪声向量 z。生成器是一个函数 G(z; θ_g),目标是将其映射为逼真的假数据 y_hat
  2. 判别器 (D):输入是数据(可以是真实数据或生成器产生的假数据)。判别器是一个函数 D(x; θ_d),目标是判断输入数据是来自真实分布还是生成器分布。

整个训练过程是一个极小极大博弈。生成器试图生成足以“欺骗”判别器的假数据,而判别器则努力区分真假。这可以形式化为以下优化问题:

min_G max_D V(D, G) = E_{x~p_data(x)}[log D(x)] + E_{z~p_z(z)}[log(1 - D(G(z)))]

其中,p_data 是真实数据分布,p_z 是噪声先验分布。

需要明确的是,判别器并非“对抗性攻击”中的对手,而是为生成器提供有价值的反馈,指导其生成更逼真的样本。通常,生成器和判别器都由深度神经网络参数化,以利用其强大的表达能力。

与显式模型的对比

现在,我们来回答之前提到的问题:为什么不直接最小化真实数据与生成数据之间的均方误差(MSE)来训练生成器?

关键在于,对于图像等高维复杂数据,简单的逐像素 MSE 损失通常会导致生成模糊、缺乏细节的图像。这是因为 MSE 本质上是在鼓励生成所有可能真实图像的平均,而这个平均图像往往是模糊的。相反,GANs 的对抗性损失迫使生成器学习数据分布的整体结构和细节,以生成在判别器看来与真实数据无法区分的样本,从而通常能产生更清晰、更逼真的结果。

此外,与变分自编码器不同,标准的 GAN 框架没有为数据提供显式的概率模型 p(x)。然而,在今天的课程后续部分,我们将讨论如何在 GAN 的框架内利用一些隐式的概率模型来计算样本的似然等统计量。

总结

本节课中我们一起学习了生成对抗网络的基本原理。我们了解到 GAN 通过生成器和判别器的对抗性训练,能够学习复杂的数据分布并生成高质量的样本。我们探讨了它的多种应用,并理解了其对抗性训练机制相比传统基于重建误差的方法的优势。下一节,我们将继续深入,探讨 GAN 训练中的挑战、变体及其与概率模型的联系。

014:极小极大优化

在本节课中,我们将要学习极小极大优化问题。我们已经看到这类问题出现在多种应用和表述中,例如对抗学习中的对抗训练,以及上节课中训练生成对抗网络等生成模型。此外,在多智能体强化学习等许多其他问题中,极小极大优化也至关重要。

本节课将首先介绍该领域的基础和经典结果,然后讨论一些非常新的研究成果。部分内容将引用我的好友Constantinos Daskalakis的讲义和论文,他从计算复杂度的角度提供了非常有趣的理论观点。

问题定义

我们考虑的问题形式如下:在变量 x 属于集合 𝒳 上进行最小化,同时在变量 y 上进行最大化。目标函数的形式为 F(x, y)

这被称为零和博弈。之所以称为“零和”,是因为可以视为两个玩家在竞争:玩家 y 试图最大化 F,而玩家 x 试图最大化 -F,因此他们的收益总和为零。通常,xy 可以存在于高维空间中。本节课的一个基本假设是函数 F 是平滑且连续可微的。

目标:全局解

极小极大优化的目标是找到一个全局解,有时也称为全局鞍点或全局均衡点。记作 (x*, y*)

这个全局解需要满足什么性质呢?对于 y 玩家(最大化玩家),当 x 固定为 x* 时,y* 应是目标函数 F(x*, y) 关于 y 的极大值点。这意味着最大化玩家没有动机将 y* 更改为其他值。

同理,对于 x 玩家(最小化玩家),当 y 固定为 y* 时,x* 应是目标函数 F(x, y*) 关于 x 的极小值点。这意味着最小化玩家也没有动机改变 x*

将这两个条件合并,可以用一个公式表示:对于所有可行的 (x, y) 对,都有:
F(x*, y) ≤ F(x*, y*) ≤ F(x, y*)

如何求解?

那么,我们如何计算这个全局解 (x*, y*) 呢?在实践中,例如在GANs或对抗鲁棒性训练中,我们已经见过一些求解器。

一个常见的方法是使用一阶优化方法。一种流行的一阶方法是交替梯度下降上升法,或者其简化版本——同步梯度下降上升法

在同步梯度下降上升法中,我们同时更新 xy。更新规则如下:

  • x 的更新(最小化):x_{t+1} = x_t - η ∇_x F(x_t, y_t)
  • y 的更新(最大化):y_{t+1} = y_t + η ∇_y F(x_t, y_t)

其中 η 是学习率。之所以称为“同步”,是因为两个梯度都在同一时间点 t 计算。

总结

本节课我们一起学习了极小极大优化问题。我们首先定义了问题的数学形式,即最小化玩家和最大化玩家在零和博弈框架下的目标。接着,我们明确了寻找全局鞍点解的目标及其需要满足的条件。最后,我们介绍了实践中常用的一阶求解方法——同步梯度下降上升法的基本更新步骤。理解这些基础概念是分析更复杂优化行为和算法收敛性的前提。

015:极小极大优化

在本节课中,我们将要学习非凸凹的极小极大优化问题。首先,让我们快速回顾一下上一讲的内容。

我们开始讨论非凸凹的极小极大优化,并首先设定了目标。我们的目标是找到一些局部极小极大解,其定义如下。

我们定义局部极小极大解。假设存在点 x*y*,我们的优化问题是关于 x 求极小、关于 y 求极大。我们有一个平滑且可微的目标函数。在局部极小极大的定义中,我们有:

F(x*, y*) <= F(x, y*) 对于所有 x 成立。

如果我们考虑全局极小极大,这个不等式应对所有 x 成立。但在局部极小极大中,我们希望这个不等式至少在 x*y* 的某个局部邻域内成立。类似地,我们也有不等式的另一侧。

如果对于 x*y* 的某个局部邻域内的所有 xy,上述条件都成立,我们则称其为局部极小极大解。

接着,我们讨论了动力学的稳定性。我们讨论了渐近稳定性。当我们从点 x*y* 附近开始时,动力学不会将我们推离,因此我们保持在该点附近。如果它实际上收敛到 x*y*,我们称其为局部渐近稳定。

稳定性的另一个定义是线性稳定性。如果我们仅使用“稳定性”一词,通常指的就是线性稳定性。在线性稳定性中,例如,观察梯度下降-上升的动力学,我们得到以下动态:

θ_{t+1} = θ_t + η * g(θ_t)

这里,θ(x, y) 的向量。梯度向量 g(θ)[-∇_x F(x, y), ∇_y F(x, y)]。注意,对于 x 我们有一个负号,因为我们在最小化 x;对于 y 我们有一个正号,因为我们在最大化 y

我们讨论了该动态的雅可比矩阵,它是 F 关于 θ 的梯度。雅可比矩阵可以简单地写为:

J = I + η * H

其中,I 是单位矩阵,H 是海森矩阵。海森矩阵 H 的形式如下:

H = [ -∇²_xx F,  -∇²_xy F ]
    [  ∇²_yx F,   ∇²_yy F ]

在线性稳定性中,我们希望雅可比矩阵的谱半径小于或等于1。需要注意的是,这里的海森矩阵 H 不是对称矩阵,因此雅可比矩阵 J 也不是对称矩阵,其特征值将同时具有实部和虚部。但我们关心的是特征值的模长。如果最大特征值的模长小于或等于1,我们称其为线性稳定。

我们有一个引理:如果动力学是线性稳定的,即谱半径严格小于1(ρ(J) < 1),那么它也意味着渐近稳定性。因此,这是我们关心的主要条件之一:我们希望雅可比矩阵的谱半径严格小于1。

接下来,让我们再引入一个定义:强局部极小极大解。

在强局部极小极大解中,我们希望 x* 是一个局部极小值点。这意味着关于 x 的海森矩阵 ∇²_xx F 在局部应该是半正定的。在强局部极小极大解中,我们希望它是正定的,即其特征值严格大于0,有下界。类似地,对于 y,我们在最大化,因此希望函数在局部是凹的,关于 y 的海森矩阵 ∇²_yy F 应该是半负定的。在强局部极小极大解中,我们希望它的最大特征值严格小于0,有上界。我们将会看到为什么需要这个定义。

为了更好地理解这一点,为了拥有渐近稳定性或线性稳定性,我们希望雅可比矩阵的谱半径严格小于1。我们知道雅可比矩阵是单位矩阵加上步长 η 乘以海森矩阵 H。因此,让我们更深入地了解一下海森矩阵。

对于同时梯度下降-上升,海森矩阵 H 具有以下形式:

H = [ -H_xx,  -H_xy ]
    [  H_yx,   H_yy ]

其中,H_xx = ∇²_xx FH_yy = ∇²_yy FH_xy = ∇²_xy FH_yx = ∇²_yx F

本节课中,我们一起学习了局部极小极大解和强局部极小极大解的定义,并探讨了通过分析同时梯度下降-上升动力学的雅可比矩阵谱半径来判断稳定性的方法。理解这些概念是分析复杂优化问题收敛性的基础。

016:基于流的生成模型

在本节课中,我们将要学习另一类深度生成模型,即基于流的生成模型。我们将从基本概念出发,解释其工作原理、核心公式,并讨论其优势与挑战。

概述

与之前一样,我们有一个包含 N 个样本的数据集,例如 N 张图像。每个样本 x 位于一个 d 维空间中。基于流的模型是一种概率模型,它从一个简单的潜在分布(如高斯分布)开始,通过一个可逆且可微的变换函数,将其映射到复杂的数据分布(如图像分布)。本节课我们将详细探讨这一过程。

模型定义

上一节我们回顾了生成模型的基本目标。本节中,我们来看看基于流模型的具体定义。

我们从一个潜在变量 z 开始,它通常服从一个简单的先验分布,例如标准正态分布:
z ~ p_z(z) = N(0, I)

这里的关键是,z 的维度与数据 x 的维度相同,这与变分自编码器(VAE)不同。

接下来,我们使用一个由参数 θ 参数化的可逆函数 g_θ,将 z 映射到数据空间 x
x = g_θ(z)

由于函数 g_θ 是双射的(一一对应且满射),因此它是可逆的。这意味着对于每个 z,有唯一对应的 x;反之,对于每个 x,也有唯一对应的 z。因此,我们可以在潜在空间和数据空间之间建立双向映射。

  • 生成/采样过程:从 z 空间到 x 空间,使用函数 g_θ
  • 推断过程:从 x 空间到 z 空间,使用 g_θ 的逆函数。为简便起见,我们记逆函数为 f_θ,即 f_θ = g_θ^{-1},因此 z = f_θ(x)

我们假设函数 f_θg_θ 都是可微分的,这是为了后续使用基于梯度的优化方法进行训练。

这个模型定义了一个关于 x 的概率分布,我们称之为 p_θ(x)。由于 z 是随机变量,且 g_θ 是一个(可能是复杂的)神经网络,p_θ(x) 可以表示非常复杂的数据分布,如图像分布。

核心挑战与变量变换公式

这个模型听起来很理想,但它面临一个核心瓶颈:我们如何精确地计算或评估由变换 g_θ 定义的数据分布 p_θ(x) 呢?

上一节我们定义了模型,本节中我们来看看计算数据似然的核心数学工具。

答案在于变量变换公式。我们先从一维情况来直观理解。

假设我们有一个一维的潜在变量 z 和一维的数据 x,且 x = g(z)z 有一个已知的概率密度函数 p_z(z)。考虑 z 空间中的一个微小区间 [z, z+dz]z 落在这个区间内的概率近似为 p_z(z) * dz

由于 g 是可逆的,这个区间会被映射到 x 空间中的一个对应区间 [x, x+dx]。概率质量在变换过程中必须守恒,因此有:
p_z(z) * dz = p_x(x) * dx

由此,我们可以解出数据空间中的密度 p_x(x)
p_x(x) = p_z(z) * |dz/dx|

其中 |dz/dx| 是变换 z = f(x)(即 g 的逆)的导数的绝对值,它衡量了变换对局部“体积”的拉伸或压缩程度。

在高维空间中,原理类似,但导数被替换为雅可比矩阵的行列式。变换公式变为:
p_x(x) = p_z(f_θ(x)) * |det( J_f_θ(x) )|

其中:

  • f_θ(x) 是将 x 映射回 z 的逆变换函数。
  • J_f_θ(x) 是函数 f_θx 处的雅可比矩阵(即其所有一阶偏导数构成的矩阵)。
  • det(·) 表示行列式。行列式的绝对值 |det(J)| 衡量了变换 f_θ 在点 x 处对无穷小体积元的缩放因子。

这个公式是流模型的核心。它允许我们精确地计算任何数据点 x 在模型下的似然值 p_θ(x),前提是我们可以高效地计算逆变换 f_θ 及其雅可比矩阵的行列式。

模型训练目标

有了计算似然的能力,我们就可以定义训练目标。模型的目标是最大化训练数据在该模型分布下的对数似然。

给定数据集 {x_1, x_2, ..., x_N},我们希望最大化:
max_θ (1/N) Σ_{i=1}^{N} log p_θ(x_i)

将变量变换公式代入,我们的目标函数变为:
max_θ (1/N) Σ_{i=1}^{N} [ log p_z(f_θ(x_i)) + log |det( J_f_θ(x_i) )| ]

以下是训练流程的关键步骤:

  1. 前向传播(计算损失):对于每个数据点 x_i,使用逆变换 f_θ 计算其对应的潜在变量 z_i = f_θ(x_i)
  2. 计算似然
    • 计算先验分布的对数似然 log p_z(z_i)(例如,高斯分布的对数概率密度)。
    • 计算雅可比矩阵行列式的对数 log |det(J_f_θ(x_i))|
  3. 构建损失:损失函数是负对数似然的平均值:L(θ) = - (1/N) Σ [ log p_z(f_θ(x_i)) + log |det( J_f_θ(x_i) )| ]
  4. 反向传播与优化:通过梯度下降法(如SGD、Adam)最小化损失函数 L(θ),更新模型参数 θ

设计流模型的关键考量

为了使得这个框架可行,我们设计的变换函数 f_θ(及其逆 g_θ)必须满足以下两个关键性质:

  1. 可逆性:函数必须可逆,才能进行双向的生成和推断。
  2. 高效行列式计算:计算雅可比矩阵的行列式必须高效,因为这在训练和评估中需要为每个数据点执行。对于 d 维数据,普通行列式计算复杂度为 O(d^3),这对于高维数据是不可行的。

因此,流模型的研究核心在于设计特殊的神经网络结构,使其既是可逆的,又能让雅可比行列式易于计算。常见的结构包括耦合层、自回归流等,它们通过设计使得雅可比矩阵是三角阵或分块三角阵,从而将其行列式计算简化为对角元素乘积的 O(d) 复杂度操作。

总结

本节课中,我们一起学习了基于流的生成模型。

  • 其核心思想是通过一个可逆、可微的变换,将一个简单的先验分布(如高斯分布)映射到复杂的数据分布。
  • 模型的关键在于变量变换公式p_x(x) = p_z(f_θ(x)) * |det( J_f_θ(x) )|,它允许我们精确计算数据似然。
  • 训练通过最大似然估计进行,直接优化数据的对数似然。
  • 构建实用流模型的主要挑战和设计重点是创造可逆且雅可比行列式易于计算的神经网络架构。

基于流的模型具有能精确计算似然、隐变量与数据一一对应便于推断等理论优势,但其模型设计通常比GAN或VAE更为复杂,且变换的可逆性要求有时会限制模型的表达能力。

017:领域适应

概述

在本节课中,我们将要学习领域适应问题。我们将探讨当训练数据(源域)和测试数据(目标域)来自不同分布时,如何让模型在目标域上依然表现良好。

回顾标准学习问题

首先,让我们回顾一下之前已经学习过的标准问题设置。

到目前为止,我们研究的学习问题是:给定一个训练集。假设我们有 M 个样本,即训练特征 X_train 和对应的标签 Y_train。这些样本可能来自一个联合分布 Q(X, Y),我们称之为训练分布。

学习过程是找到一个函数 f,将 X 映射到 Y。我们通过定义一个损失函数,并最小化在训练集上的平均误差来实现这一点。

具体来说,我们通过最小化以下目标来选取模型参数 θ
θ* = argmin_θ (1/M) Σ L(f_θ(X_i_train), Y_i_train)

但这并非最终目标。在泛化性讲座中我们了解到,最终目标是将在训练集上学到的函数 f_θ* 应用到测试集上时,也能获得良好的性能。

假设我们有一个测试集 X_testY_test,包含 M‘ 个样本。标准假设是:测试样本与训练样本来自相同的分布。例如,在ImageNet数据集中,我们划分一部分图像用于训练,另一部分用于测试和验证。

我们在测试集上计算测试误差,即评估在训练过程中未使用过的测试样本上的性能:
Test Error = (1/M') Σ L(f_θ*(X_i_test), Y_i_test)

我们之前关于优化和泛化性的讨论,其核心目标就是学习一个函数,使得这个测试误差尽可能小。我们了解到,如果有足够的样本,训练误差和测试误差之间的泛化差距会很小。即使在过参数化模型中,尽管参数数量可能多于样本数量,训练和测试误差的差异也可能很小。

问题:标准设置是否现实?

那么,问题来了:这种标准设置是否现实?

答案通常是:。原因在于,我们假设训练和测试数据来自相同分布,但在实践中,这个假设往往不成立。

在实践中,训练数据的分布可能与测试数据的分布不同。为了考虑更一般的情况,我们将用于训练的数据集称为源域,将最终用于测试的数据集称为目标域

源域样本的分布记为 Q(X, Y),目标域样本的分布记为 P(X, Y)。这两个分布可能是不同的。

领域差异的实例

接下来,我们来看一些具体的例子,说明源域和目标域可能如何不同。

  • 合成数据 vs. 真实数据:你的源域 Q(X, Y) 可能代表一些合成样本。在许多应用中,合成数据更容易生成。你希望在这些合成样本上训练模型。但最终,你希望将模型部署到真实世界的应用中,而真实样本可能存在自然变化(如光照、纹理等),这些是合成样本中没有的。
  • 特定背景 vs. 自然背景:你的源域样本可能具有特定背景(例如纯白背景)。你训练模型时,背景可能不应该影响分类,因为主要物体仍在图像中。但当你将模型应用于真实场景时,需要在具有各种不同自然背景的样本上评估性能。

基于这些例子(你还可以想出无数其他例子),理解我们何时可以在一个特定样本分布上训练模型,并将其部署到来自另一个分布的样本上,就成为一个非常重要的问题。

这里需要强调一点:当我们说这些分布不同时,并不意味着它们毫无关系。

它们之间存在某种关联。例如,合成数据和真实数据描绘的是同一类物体;白背景图像和自然背景图像包含的是相同的目标类别。领域适应的核心就是利用这种关联性,将源域的知识迁移到目标域。

总结

本节课中,我们一起学习了领域适应问题的基本概念。我们首先回顾了标准机器学习中训练与测试数据同分布的假设,然后指出了这一假设在实践中常常不成立,从而引出了源域与目标域分布不同的现实挑战。我们通过实例说明了领域差异的常见形式,并强调了尽管分布不同,但源域和目标域之间通常存在内在关联,这正是领域适应研究的基础。在接下来的章节中,我们将深入探讨解决这一问题的具体方法。

018:领域自适应

在本节课中,我们将继续探讨领域自适应问题。我们将首先回顾上一讲的核心概念,然后深入分析实现领域自适应的关键假设,并介绍一个量化目标域误差的理论框架。

概述

上一讲我们介绍了领域自适应问题的基本设定。我们有一个源域和一个目标域。源域数据有标签,目标域数据无标签。我们的目标是利用有标签的源域数据和无标签的目标域数据,学习一个分类函数,使其在目标域上表现良好。

具体来说,我们有以下设定:

  • 源域分布:Q(X, Y)
  • 源域观测样本:M_s 个,形式为 (X_i^s, Y_i^s)
  • 目标域分布:P(X, Y)
  • 目标域观测样本:M_t 个,形式为 (X_i^t)(无标签)
  • 目标:从假设空间 H 中学习一个函数 h,最小化其在目标域上的期望误差。

领域自适应的关键假设

为了实现上述目标,我们需要一些假设。以下是三个核心假设:

  1. 协变量偏移:源域和目标域的条件分布相同,即 Q(Y|X) = P(Y|X)。这意味着给定特征 X,标签 Y 的分布在两个域中是一致的。
  2. 联合误差小:存在一个假设 h,使其在源域和目标域上的误差都很小。如果不存在这样的假设,问题将非常困难。
  3. 域间分布关系:源域和目标域的边缘分布 Q(X)P(X) 需要通过某种度量关联起来。我们使用 H-散度 来刻画这种关系。

H-散度详解

H-散度衡量了两个分布(此处是 Q(X)P(X))在假设空间 H 下的差异。其定义如下:

d_H(Q, P) = 2 * sup_{h in H} | Pr_{x~Q}[h(x)=1] - Pr_{x~P}[h(x)=1] |

直观理解是:寻找一个分类器 h,它能最大程度地区分来自源域和目标域的样本。h(x)=1 的概率在源域和目标域下的差值,经过上确界和两倍缩放后,即为 H-散度。

一个重要的结论是,H-散度可以通过训练一个二分类器来近似估计。该分类器的任务是区分样本来自源域还是目标域。具体关系为:

d_H(Q, P) ≈ 2 * (1 - 分类器准确率)

对称差假设空间

为了陈述核心定理,我们需要引入 对称差假设空间 的概念。

对于给定的假设空间 H,其对称差假设空间 H Δ H 定义如下:

H Δ H = { g | g(x) = h(x) ⊕ h'(x), 其中 h, h' ∈ H }

其中 表示异或运算。简单来说,H Δ H 包含了 H 中任意两个假设函数所有预测不一致的区域。

以下是一个直观示例:
假设 h 将右侧区域预测为1,h' 将上方区域预测为1。那么函数 g = h ⊕ h'hh' 预测不一致的区域(即图中高亮区域)输出1,在预测一致的区域输出0。所有这样的函数 g 构成的集合就是 H Δ H

核心理论:目标误差上界

基于以上定义,我们可以给出目标域误差的上界。这个定理将我们在训练时可以计算的量(源域误差、H-散度)与最终关心的目标域误差联系起来。

定理:对于任意假设 h ∈ H,其目标域误差 ε_T(h) 满足以下不等式:

ε_T(h) ≤ ε_S(h) + d_{HΔH}(Q, P) + λ

其中:

  • ε_S(h) 是假设 h源域上的误差。
  • d_{HΔH}(Q, P) 是源域和目标域边缘分布在对称差假设空间 H Δ H 下的 H-散度。
  • λ 是一个常数,表示在 H 中,源域和目标域上同时表现最优的假设所对应的联合误差的最小值,即 λ = min_{h' ∈ H} [ε_S(h') + ε_T(h')]

定理含义解读

这个定理为我们提供了设计领域自适应算法的清晰指导:

  1. 最小化源域误差:我们需要确保学到的假设 h 在源域上表现良好。这通过标准的有监督学习在源域数据上实现。
  2. 最小化域间差异:我们需要让学到的模型能够对齐源域和目标域的特征分布,从而减小 d_{HΔH}(Q, P)。这正是利用无标签目标域数据的关键所在。实践中,这通常通过对抗训练、域混淆损失等技术来实现。
  3. 假设空间的能力:常数 λ 代表了问题本身的难度。如果存在一个假设能同时在源域和目标域上取得低误差,那么领域自适应就是可行的。这呼应了我们之前的第二个核心假设。

总结

本节课我们一起学习了领域自适应的理论基础。我们首先回顾了问题的设定,然后明确了成功进行领域自适应所需的三个关键假设:协变量偏移、小的联合误差以及通过 H-散度度量的域间关联。

接着,我们引入了对称差假设空间 H Δ H 的概念。最后,我们介绍并解读了核心定理,该定理给出了目标域误差的上界,由源域误差、域间分布差异和一个与假设空间能力相关的常数项组成。这个理论框架为理解和设计实际的领域自适应算法(如基于对抗训练的方法)奠定了坚实的基础。

019:领域泛化

在本节课中,我们将学习一个与领域自适应相关的问题——领域泛化,有时也被称为分布外泛化。我们将探讨其问题设定、核心假设以及它与领域自适应的区别。

问题设定 🎯

上一节课我们介绍了领域自适应问题。在训练中,我们拥有来自源域的带标签样本,以及来自目标域的无标签样本。目标是找到一个假设函数,使其在目标域上表现良好。

本节中,我们来看看领域泛化。在领域泛化的训练设置中,我们将拥有来自多个不同领域或环境的带标签样本。

假设我们有 E 个训练领域。每个领域 e 由一个分布 P^e 表示。我们从每个领域 e 中接收一定数量(例如 n_e)的带标签样本 (X_i^e, Y_i^e)

以下是训练数据的构成:

  • 我们拥有来自多个不同领域(环境)的带标签数据。
  • 每个领域的数据分布可能各不相同。

目标与挑战 🧠

我们的目标是:利用这些来自不同领域的带标签样本训练一个单一模型,然后将该模型应用到一个全新的、在训练中从未见过的领域或环境,并希望它在该新领域上也能有良好的性能。

因此,目标是找到一个属于我们假设类别的函数 h,使其在未见领域上表现良好。假设新领域为第 K+1 个领域,其分布为 P^{K+1}。在测试时,我们根据此分布观察样本,并用训练好的假设函数 h 进行评估,所得的错误率即为在新环境下的风险。我们希望选择的假设 h 能够最小化这个未见环境中的风险。

一个自然的问题是:这些环境之间需要存在何种关联,这个目标才可能实现?如果新领域与训练领域完全不同,那么我们凭什么能期望在训练领域上学到的函数在新领域上有效?

核心假设:不变特征 🔑

是的,这些领域和环境之间必须相互关联。我们假设存在一些潜在的、跨领域不变的特征,我们的函数可以利用这些特征来在不同环境中执行相同的任务。

换句话说,尽管不同领域的数据分布(P^e(X, Y))可能变化,但存在一个关于 X 的子集或表示,其与标签 Y 的关系在所有领域(包括未见领域)中是稳定不变的。学习到这种不变关系是领域泛化的关键。

为了更具体地说明,考虑一个图像分类的例子:假设任务是识别动物。训练领域可能包括:卡通动物图片(领域1)、野外摄影动物图片(领域2)、素描动物图片(领域3)。每个领域的图像风格(域特异性特征)差异很大。但“动物”这个概念所对应的某些关键形状、结构特征(不变特征)在所有领域中都是一致的。模型的目标是忽略风格变化,聚焦于这些不变特征进行识别。这样,当遇到一个全新的领域(例如,油画动物图片)时,模型才有可能正确分类。

与领域自适应的对比 ⚖️

回顾一下,领域自适应与领域泛化既有联系也有区别:

  • 领域自适应:在训练时,我们可以接触到目标域的无标签数据。利用这些数据,我们可以尝试对齐源域和目标域的特征分布。
  • 领域泛化:在训练时,我们完全接触不到目标域(即测试域)的任何数据。我们只有多个源域的数据,目标是从中归纳出不变性,以泛化到未知的测试域。

领域泛化因此是一个更具挑战性的问题,因为它要求在训练阶段就对未知的分布偏移做好准备。

方法概述 🛠️

领域泛化的方法通常围绕如何从多个训练领域中学习不变表示或不变预测器。主要思路包括:

以下是几种常见的学习范式:

  1. 领域对抗训练:鼓励模型学习一种表示,使得分类器无法区分该表示来自哪个训练领域,从而迫使表示是领域不变的。
  2. 领域风险最小化:优化模型在所有训练领域上的最差性能(即最小化最大风险),以提高鲁棒性。
  3. 不变因果关系学习:假设数据由因果机制生成,试图找到与标签有稳定因果关系的特征。
  4. 元学习:将每个训练领域视为一个任务,通过元学习的方式训练模型,使其能快速适应新领域。

这些方法的核心数学目标可以抽象为寻找一个函数 h(或表示 Φ 和分类器 w),使得其在所有环境 e ∈ {1,...,K} 上满足某种不变性条件,例如:

  • 条件分布不变P^e(Y | Φ(X)) 对于所有 e 近似相同。
  • 风险不变R^e(h) 对于所有 e 尽可能小且接近。

总结 📚

本节课中,我们一起学习了领域泛化的基本概念。我们首先定义了问题设定:利用来自多个不同领域的带标签数据训练模型,并使其能泛化到全新的、未见过的领域。我们讨论了该问题成立的核心假设——即存在跨领域共享的不变特征。接着,我们对比了领域泛化与领域自适应的关键区别:前者在训练时完全未知目标域。最后,我们简要概述了解决领域泛化问题的几种主流思路,其核心都是如何从多领域数据中有效地学习和利用不变性。理解领域泛化对于构建在现实世界复杂、动态变化环境中依然稳健的机器学习系统至关重要。

020:自监督学习

在本节课中,我们将要学习自监督学习。这是一种从无标签数据中学习数据有效表示(或称嵌入)的方法,这些表示随后可以用于提升下游任务(如图像分类)的性能。

概述

首先,让我们简要回顾一下本课程中已介绍过的监督学习和无监督学习框架。

在监督学习中,我们拥有一个带标签的数据集。假设我们有 M 个样本,表示为 (x_i, y_i),其中 i 从 1 到 M。我们的目标是学习一个函数,在测试时,给定一个新的输入 x,能够预测出其对应的标签 y

在无监督学习中,我们没有标签 y,只有数据 x。任务的定义更具灵活性,例如生成建模,其目标是从与训练样本相同的底层分布中生成逼真的合成样本。我们已学习过处理此类问题的不同方法,如生成对抗网络、变分自编码器和基于流的模型。

自监督学习的目标

今天的目标与监督学习和无监督学习都略有不同。我们的核心目标是:从无标签数据中学习数据的强大表示

给定无标签数据 x(这与无监督学习设置类似),我们希望找到一个好的表示 f(x)。那么,什么是“好”的表示呢?一个好的表示应该能够让我们更高效地解决一些下游任务。

例如,在图像分类问题中,我们不直接使用原始像素 x 作为分类器的输入,而是希望使用其表示 f(x)。如果表示足够好,那么即使在学习表示时没有使用标签,来自不同类别的样本在表示空间中也可能自然地聚集在一起,从而变得线性可分。这样,我们只需在表示 f(x) 之上训练一个简单的线性分类器,就能高效地完成分类任务。

因此,一个具体的评估方法是:使用 f(x) 这些表示,结合少量标签,来解决分类问题。例如,我们可以在 f(x) 上使用线性分类器,并观察其性能。之所以强调线性分类器,是因为在原始高维、非线性的数据 x 上,线性分类器通常效果不佳。但如果表示 f(x) 足够好,线性分类器就可能取得很好的效果。

这里的关键点是:在学习这些表示 f(x) 时,我们并不知道下游的具体任务(例如具体的分类标签)。当然,表示学习的目标和下游任务在语义上应该相关(例如,用图像数据学习表示,然后用于图像分类),但学习表示的过程本身是完全无监督的。

这就引出了自监督学习框架的核心问题:表示学习与下游任务之间需要存在何种关系,才能确保整个框架成功? 换句话说,对于特定的下游任务,什么样的表示 f(x) 才是合适的?

自监督学习框架

我们可以将这个框架分为两个步骤:

第一步:表示学习
在此步骤中,我们从大量无标签样本中学习数据的良好表示 f(x)。无标签样本通常比有标签样本更容易获取,因此我们拥有丰富的数据来完成此任务。

第二步:下游任务评估
在此步骤中,我们使用第一步学到的表示 f(x),并结合(可能少量的)标签,来解决具体的下游任务(如分类问题),以此评估所学表示的质量。

整个流程如下图所示,它概括了从无标签数据学习表示,再到利用表示解决有标签任务的完整过程。

总结

本节课我们一起学习了自监督学习的基本概念。我们了解到,自监督学习旨在从无标签数据中学习数据的有效表示 f(x)。一个好的表示能够使下游任务(如使用线性分类器进行分类)的解决变得更加高效。整个框架分为表示学习和下游任务评估两个阶段,其成功关键在于所学表示必须与下游任务在语义上相关联。通过这种方法,我们可以利用大量易得的无标签数据来为资源有限的有监督任务提供强大的特征基础。

021:自监督学习(续)与对比学习理论 🔍

在本节课中,我们将继续探讨自监督学习,重点聚焦于对比学习的理论层面。首先,让我们简要回顾上一讲的内容。

上一节我们介绍了一种前沿的自监督学习方法——SimCLR。其框架是:从一张原始图像 X 出发,通过数据增强得到该图像的两个相关视图 X_i_tildeX_j_tilde。接着,我们学习一个编码器(嵌入函数)F,将这两个视图映射为嵌入向量 h_ih_j。论文中还提出了一个非线性投影头 G(通常是一个单隐藏层的MLP),将 h 映射为 z。损失函数基于来自同一图像的两个视图之间的相似性来定义,与其他对比损失函数类似,但存在一些细微差别。

实践观察与洞见 🧐

在论文中,作者提出了一些能提升最终性能的有趣实践观察。

以下是三个关键观察结果:

  1. 数据增强的组合至关重要:在自监督学习中,组合使用多种数据增强方法(如色彩抖动、随机裁剪、高斯噪声)比仅使用单一方法能带来更好的性能。这通过在线性分类器评估嵌入质量时得到验证。
  2. 更大的批次规模和更长的训练时间有益:在监督学习中,批次规模通常不会太大。但在自监督学习中,由于我们需要从批次中随机选取负样本,更大的批次规模有助于降低误将同类样本选为负样本(即“碰撞”)的概率,从而提升性能。实验也观察到更长的训练时间同样有帮助。
  3. 使用非线性投影头有助于优化:这是一个比较神秘的发现。先前的方法通常在嵌入向量 h 上直接计算相似度或损失。SimCLR则增加了一个非线性投影头 G 来得到 z,并在 z 上计算对比损失,但在推理时却丢弃 G 而使用 h 作为最终嵌入。实验表明,这样得到的 h 质量更高。一种可能的解释是:h 可能保留了一些对下游分类任务有用但可能存在伪相关(如物体颜色、方向与标签的偶然关联)的信息。而训练 G 的过程可能让 z 摒弃了这些伪相关,使得任务更具挑战性,从而让 h 学习到更稳健、对下游任务更有效的特征。

接下来,我们看看他们取得的一些实证结果。

实证结果 📊

他们在线性分类器上评估了所学嵌入的质量,结果令人印象深刻。具体来说,他们观察了在ImageNet数据集上,仅在线性分类器上使用这些嵌入时达到的Top-1准确率。


本节课中,我们一起回顾了SimCLR的框架,分析了其在数据增强、训练策略和模型结构方面的关键实践观察,并预览了其出色的实证性能。下一节,我们将深入对比学习的理论核心,探讨其为何有效。

022:元学习

在本节课中,我们将要学习元学习。我们将从动机开始,然后深入探讨元学习的技术公式以及当前元学习方法的现状。

在许多应用中,我们并没有大型的训练数据集。我们已经讨论过监督学习、无监督学习(如GANs、VAEs)以及自监督学习(无需标签数据)。但在某些情况下,我们甚至连有标签的数据集也很少。这正是我们将要探讨的场景:训练样本数量很少的情况。

有趣的是,对于人类而言,即使只有很少的样本,我们也能在一些基本的学习任务上表现得相当好,例如图像分类。人类如何能够用极少的例子就适应新任务?而当前主流的监督模型则需要大量的训练样本。这将是我们要讨论的核心问题。

动机:人类的小样本学习能力

在许多应用中,我们并没有大型的训练数据集。但有趣的是,人类能够快速适应并即时学习。为什么会这样?为什么人类能够用很少的训练例子就适应新任务?

为了让大家更好地理解,让我们看一个具体的例子来热身。

假设我有两种类型的涂鸦。第一种是我在早上画的,经过一夜好眠,喝了咖啡,心情愉快,我画的形状是这样的(平滑的曲线)。第二种是在漫长工作后的晚上画的,我画的形状是这样的(尖锐的边角)。

第一列是我的早上涂鸦,第二列是我的晚上涂鸦,这就是我的训练集。现在,在测试时,我给你一个例子,让你判断这个例子是早上画的还是晚上画的。

训练集中每个类别只有三个例子,总共两个标签。在测试时,我给你一个例子,让你判断它更可能来自哪个时间。大家怎么看?

几乎所有人都正确地预测了测试样本的标签是“晚上涂鸦”。看这个学习任务:一个二元分类问题,每个类别只有三个例子。人类几乎都能用这么少的例子在测试时做出正确预测。

为什么会这样?为什么人类非常擅长用极少的例子完成这个任务?你的想法是什么?

是的,我们无法用一个只有每类三个例子的深度监督模型,并期望它在测试时表现良好。关键在于上下文学习。大家观察的是纹理:早上涂鸦的曲线更平滑,而晚上涂鸦的曲线更尖锐、有棱角。这正是你们用来判断的特征。

本质上,我们拥有大量关于涂鸦的先验知识或信息。我们利用这些先验知识,结合手头这少量的例子,来做出良好的测试预测。这里的关键在于利用先验知识或信息来执行新任务。我们并非从零开始,而是大脑中已经存储了关于图像、形状等的大量先验信息。当我们看到这个特定任务的例子时,可以立即运用那些先验知识,或许稍作调整以适应这个具体任务(例如,关注曲线的平滑度或尖锐度),然后利用调整后的信息来处理新任务。

这基本上就是元学习的核心目标。

那么,基本问题就是:如何实现?

023:循环神经网络 (RNNs)

在本节课中,我们将要学习循环神经网络。这是一种专门为处理可变长度序列数据(如句子、时间序列)而设计的神经网络架构。我们将了解其基本结构、工作原理以及一个简单的训练示例。


概述:从固定输入到序列输入

上一节我们介绍了处理固定尺寸输入输出的前馈网络和卷积网络。这种架构适用于图像分类等任务。

但在许多场景中,输入尺寸是变化的。例如,在自然语言处理中,句子的长度各不相同;在时间序列预测中,输入是历史数据点序列。这些任务无法用之前的架构直接处理。

因此,人们开始思考如何处理这种可变长度的输入,循环神经网络应运而生。


什么是循环神经网络?

循环神经网络是一种具有隐藏状态的架构。它接收一个输入,产生一个输出,并且其隐藏状态具有循环性:每个时间步的隐藏状态值都依赖于前一个时间步的隐藏状态值。

如果我们将其在时间上展开,它会呈现如下结构:

当前隐藏状态 H_t 是前一个隐藏状态 H_{t-1} 和当前输入 X_t 的函数。


RNN 单元的内部结构

如果我们深入观察单个RNN单元的内部结构,它看起来是这样的:

其中,F_w 本质上是一个权重矩阵。具体计算过程如下:

  1. 将前一个隐藏状态 H_{t-1} 乘以一个权重矩阵 W_hh
  2. 将当前输入 X_t 乘以另一个权重矩阵 W_xh
  3. 将上述两个结果相加。
  4. 将总和通过一个非线性激活函数(如 tanh)进行处理,得到新的隐藏状态 H_t

用公式可以表示为:
H_t = tanh(W_hh * H_{t-1} + W_xh * X_t)

使用 tanh 函数是为了给网络引入非线性,其输出范围在 -1 到 1 之间,有助于信息的平滑传递。

需要特别注意的是,所有权重在所有时间步的RNN单元之间是共享的。这意味着 W_hhW_xh 在整个序列处理过程中保持不变。

如果我们想基于最终的隐藏状态做出预测,可以将其乘以另一个权重矩阵 W_hy 来得到输出 Y_t
Y_t = W_hy * H_t


一个简单的语言模型示例

让我们通过一个极简的语言模型来理解RNN的工作流程。假设我们的词汇表只有五个词:[I, am, very, not, hungry]

我们的训练序列是:"I am very"

以下是处理步骤:

  1. 词表示:首先,我们将每个词转换为词嵌入向量。由于词汇表很小,我们可以使用独热编码。例如,“I”表示为 [1, 0, 0, 0, 0],“am”表示为 [0, 1, 0, 0, 0],以此类推。
  2. 初始化:处理第一个词“I”之前,我们将隐藏状态 H_0 初始化为一个零向量。
  3. 前向传播
    • 输入“I”(X_1)和 H_0,计算得到 H_1
    • 输入“am”(X_2)和 H_1,计算得到 H_2
    • 输入“very”(X_3)和 H_2,计算得到 H_3
  4. 预测:将最终的隐藏状态 H_3 乘以权重矩阵 W_hy,得到一个输出向量。经过Softmax等处理后,模型应预测出下一个最可能的词,例如“hungry”或“not”。理想情况下,模型应学会输出“hungry”,以构成“I am very hungry”这个合理的句子。

如何训练RNN?

训练RNN的过程与其他神经网络类似,但有其特殊性,称为随时间反向传播

以下是训练步骤:

  1. 前向传播:将整个输入序列(如“I am very”)依次输入RNN,得到最终的输出预测。
  2. 计算损失:将预测结果与真实目标(如下一个词“hungry”)进行比较,计算损失值。损失函数取决于任务类型,例如分类任务常用交叉熵损失,回归任务常用均方误差。
  3. 反向传播:计算损失函数关于所有权重(W_hh, W_xh, W_hy)的梯度。由于RNN在时间上展开,梯度需要沿着时间步从最后一步反向传播回第一步,因此这个过程被称为随时间反向传播
  4. 更新权重:使用计算出的梯度(例如通过梯度下降法)来更新网络中的所有权重。

总结

本节课中,我们一起学习了循环神经网络的基础知识。我们了解到:

  • RNN是为处理序列数据而设计的,其核心是循环的隐藏状态,能够记忆之前的信息。
  • 单个RNN单元通过共享的权重矩阵和激活函数(如 tanh)来更新隐藏状态。
  • 我们通过一个简单的语言模型示例,直观地理解了RNN如何逐步处理输入序列并做出预测。
  • RNN的训练使用随时间反向传播算法,通过沿时间轴反向传播误差来更新网络参数。

RNN为处理语言、时间序列等序列问题提供了强大的基础框架。

024:模型可解释性方法

概述

在本节课中,我们将探讨深度学习中的一个重要主题:模型可解释性。我们将了解为什么理解模型决策的原因至关重要,并介绍几种主流的特征级可解释性方法,特别是基于梯度的显著性图方法。


今天,我们很高兴再次邀请到Aya Ismail来讲解深度学习中的可解释性。Aya是马里兰大学的博士生,也是该领域的专家。我们非常高兴能请她来为我们介绍这个问题以及该主题的最新进展。现在,有请Aya。

谢谢Samil。今天我们将讨论深度学习的可解释性。

我们通常有一个输入,一个黑盒模型,然后得到一个输出。模型可解释性指的是,我希望理解模型为何做出某个特定的预测。

我们为什么需要关心可解释性?为什么不能仅仅信任模型并使用它做出的决策,而不去理解其背后的原因?主要原因是,在现实世界的应用中,仅仅有高准确率是不够的。让我们看一些需要可解释性的例子。

例如,如果一个模型在工业中被使用,我们需要识别它是否存在不良行为。我们基本上需要确保它基于正确的原因做出正确的决策。比如,曾有一个AI被用于判断一个人是否应获得保释。使用后人们发现,它根据肤色做出保释决定。具体来说,如果某人是黑人,他很可能无法获得保释。因此,我们需要确保模型做出正确的决策,并且是基于正确的原因。

另一种情况是,如果我们想提升模型性能。如果我们知道模型为何做出某个预测,我们就可以直接尝试修复它,从而获得性能更好的模型。

我们可能需要可解释性的另一个原因是科学发现。神经网络架构会接收所有输入,并尝试理解我们人类自身可能都不知道的模式和潜在分布。在某些情况下,我们确实想知道这些。例如,如果一个神经网络被用于分类人类大脑活动,我们会想知道大脑的哪些区域负责哪些功能。这在许多科学应用中会非常有用。

最后,有时应用场景过于关键,不能仅仅说“我们做出了这个预测,就这样了”。例如,在医疗应用中,你必须向用户解释为何做出这个诊断,而不能只是说因为我们有一个黑盒模型,它就是这么说的。

现在,我希望我已经说服你们,模型可解释性确实非常重要。接下来,让我们深入了解一下可解释性方法。

首先,我们可以有内置的模型可解释性。这是什么意思?我们有一个模型,我们训练它来解释自己。当它接收到一个输入时,它能够提供为何为该输入做出某个决策的解释。

另一种可解释性选项是特征级可解释性。这基本上是指,我们有一组特征,我们想知道每个特征对最终预测的贡献。

还有基于实例的解释。如果我们有一个测试样本,模型对它做出了预测,我们想知道是哪些训练样本导致了那个预测。

最后,有全局决策规则。我们想理解模型做出某个预测的全局性原因,即对模型本身的高层次理解。

在本讲座中,我们将主要关注特征级可解释性。

再次强调,对于特征级可解释性,我们将其定义为:如果我们有一个训练好的模型和一个可解释性方法,该方法会为每个特征分配一个重要度分数,该分数与该特征对给定预测的重要性相关。

这通过显著性图来展示,它基本上是一个特征分数图。

显著性图有不同的类型,主要有两种。一种是基于扰动的显著性图。这基本上意味着,我取我的输入,将其通过我的模型,得到一个输出。然后我扰动其中一个特征,将新的输入传递给模型,得到另一个输出。基本上,该特征的贡献就是模型输出的变化。有不同的方法可以做到这一点。例如,有“留一法”,即完全移除某个特征,观察模型如何受影响;有特征振荡法,即稍微扰动特征,观察其对模型的影响;还有其他方法。

另一类显著性方法是基于梯度的显著性方法,这类方法更为流行。

基于梯度的方法有很多,这里列出的并非全部方法。每次学术会议都会有更多新方法出现。让我们稍微详细地看看基于梯度的方法。我们首先有的是输入梯度,这是我们可以得到的最简单的东西。我们有一个输入,将其通过模型,然后得到每个类别的概率。我们取概率最高的类别,然后计算该类别输出相对于给定输入的偏导数。

这个偏导数向我们展示了,我们需要最少改变哪些特征,才能最大程度地改变那个特定类别的输出。我们最终得到一个显著性图,它基本上会突出显示对该模型重要的特征。那么,偏导数意味着什么?为什么它有意义?它实际上是如何做到这一点的?如果我们把它画出来,基本上它的意思是,导数是特征输入的微小变化。如果这是输入,那么导数基本上是一个非常非常微小的变化。这就是为什么它代表了当我们改变输入时输出的变化。

这是人们在基于梯度的方法中最基本的方法。但它有一些局限性。一个主要的局限是,它对微小的扰动非常敏感。例如,如果我们只是将输入在任一方向上移动一点点,我们会得到一个非常不同的梯度。

另一个问题是,我们可能会有饱和的输出,导致产生反直觉的梯度。如果我们看这个例子,我们有 y = x1 + x2(如果 x1 + x2 < 1),否则 y = 1。假设 x1x2 都等于1,我们想计算梯度,然后我们得到的梯度是0。这意味着什么?它意味着两个特征都不重要吗?这真的不直观,也无助于我们理解发生了什么。

我们还可能有梯度不连续的问题。例如,这里 y = max(0, x - 10)。然后当你绘制梯度时,它基本上是一个阶跃函数,先是0,然后是1。这有两个问题:一是突然的跳跃,二是梯度完全没有显示关于 x 值如何变化的信息。

那么,我们如何解决这些问题呢?人们开始说,好吧,你不能仅仅依赖...

总结

本节课中,我们一起学习了深度学习模型可解释性的重要性及其应用场景。我们了解到,仅凭高准确率不足以在关键领域(如司法、医疗)信任模型。我们介绍了特征级可解释性的核心概念,即通过为每个特征分配重要度分数来理解其对预测的贡献。我们重点探讨了基于梯度的显著性图方法,特别是输入梯度法,并分析了其直观意义(通过微小输入变化观察输出变化)及其存在的局限性,如对微小扰动敏感、输出饱和导致梯度消失以及梯度不连续等问题。这些局限性为后续更高级的可解释性方法的发展提供了动机。

025:强化学习入门

在本节课中,我们将要学习强化学习的基本概念。强化学习是机器学习的一个重要分支,其核心目标是解决序列决策问题。与之前讨论过的分类或回归问题不同,在强化学习中,当前的决策会影响未来的决策和状态。本节课我们将介绍强化学习的基本框架、核心要素以及其数学表示。

序列决策问题

上一节我们回顾了监督学习、无监督学习等范式。本节中我们来看看强化学习所关注的序列决策问题

序列决策问题的核心特征是:当前的决策会影响未来的决策或行动。这意味着决策不是孤立的,而是相互关联的序列。

以下是序列决策问题的一些典型例子:

  • 游戏:如国际象棋,你走一步棋会改变棋盘状态,从而影响你及对手后续的走法。
  • 机器人学:机器人的每一个移动或操作都会改变其环境状态,进而影响其后续的行动规划。
  • 自动驾驶:车辆的每一个驾驶决策(如加速、转向)都会改变其与周围环境的关系,影响后续的决策。
  • 金融:投资决策会影响未来的资产状态和后续的投资选择。
  • 生活决策:例如选择学习某门课程,可能会影响你未来的知识储备和职业选择。

强化学习基本框架

为了形式化地描述序列决策问题,我们引入一个由智能体环境交互构成的基本框架。

在这个框架中:

  1. 智能体在时间 t 处于某个状态 s_t
  2. 智能体根据状态选择一个动作 a_t
  3. 环境接收这个动作,并转移到下一个状态 s_{t+1}
  4. 智能体进入新状态,并可能获得一个奖励 r_t
  5. 这个过程不断重复,形成一个序列:s_0, a_0, r_0, s_1, a_1, r_1, ...

核心概念定义

接下来,我们更精确地定义框架中的各个核心组件。

状态空间

状态 S 是对系统当前情况的充分描述。所有可能状态的集合称为状态空间,用 S 表示。

状态可以是:

  • 离散变量:例如棋盘上棋子的位置。
  • 连续变量:例如车辆的速度、位置。
  • 离散与连续变量的混合。

在本课程中,我们假设智能体能够完全观测到当前状态 s_t。在更复杂的情况下(如部分可观测马尔可夫决策过程,POMDP),智能体只能看到与状态相关的观测值,而非状态本身。

动作空间

动作 A 是智能体在给定状态下可以执行的操作。所有可能动作的集合称为动作空间,用 A 表示。

动作同样可以是:

  • 离散变量:例如“向左转”、“向右转”这类二元或有限选择。
  • 连续变量:例如将方向盘转动一个特定的角度,或将油门踩到某个程度。

环境动态

环境决定了智能体执行动作后,系统如何转移到下一个状态。我们通常用转移概率来刻画环境动态。

对于离散状态和动作空间,环境动态可以用一个转移概率矩阵 P 来描述:

P(s' | s, a) = Pr(S_{t+1} = s' | S_t = s, A_t = a)

这个公式表示:在状态 s 下执行动作 a 后,环境转移到状态 s' 的概率。

对于连续空间,则使用概率密度函数来描述。

总结

本节课中我们一起学习了强化学习的基础。我们首先明确了强化学习致力于解决序列决策问题,其特点是当前决策影响未来。接着,我们介绍了强化学习的核心交互框架:智能体、环境和状态-动作-奖励序列。最后,我们精确定义了三个基本要素:状态空间(系统描述)、动作空间(可用操作)和环境动态(由转移概率刻画)。理解这些概念是学习后续更高级的强化学习算法(如价值函数、策略优化)的重要基础。

026:强化学习(续)

在本节课中,我们将继续探讨强化学习的核心内容。我们将首先回顾马尔可夫决策过程的基本概念,然后深入讨论价值迭代算法,并最终介绍深度强化学习的初步思想。

回顾:马尔可夫决策过程与价值函数

上一节我们介绍了马尔可夫决策过程的基本框架。它包含有限的状态空间、有限的动作空间、遵循马尔可夫链的转移概率,以及一个策略函数 π。

我们定义了价值函数 V^π(s),它表示从状态 s 开始,并遵循策略 π 所能获得的期望总奖励。同时,我们也定义了动作价值函数 Q^π(s, a),它表示从状态 s 开始,首先执行动作 a,然后遵循策略 π 所能获得的期望总奖励。

一个核心问题是:如何评估给定策略 π 的价值函数?我们得到了一个递归公式,称为贝尔曼方程:

V^π(s) = R(s) + γ * Σ_{s'} P(s' | s, π(s)) * V^π(s')

其中,γ 是折扣因子(0 < γ < 1),R(s) 是即时奖励,P 是转移概率。

我们可以将所有状态的这个方程写成矩阵形式:

V^π = R + γ * P_π * V^π

这里,V^π 和 R 是向量,P_π 是转移概率矩阵。通过求解这个线性方程组,我们可以得到 V^π = (I - γ * P_π)^{-1} * R。由于 P_π 是随机矩阵,其最大特征值为1,而 γ < 1,保证了矩阵 (I - γ * P_π) 是可逆的。

然而,直接求逆矩阵计算量可能很大。因此,我们引入了价值迭代这种迭代方法。

价值迭代:一个收缩映射

我们定义了一个贝尔曼算子 L_π,它作用于任意价值向量 V:

L_π(V) = R + γ * P_π * V

那么,策略 π 的价值函数 V^π 就是这个算子的不动点,即 V^π = L_π(V^π)。

关键性质在于,L_π 是一个收缩映射。这意味着对于任意两个价值向量 V1 和 V2,应用该算子后,它们之间的距离会缩小。

以下是证明思路:
考虑 L_π(V1) 和 L_π(V2) 的差:
L_π(V1) - L_π(V2) = γ * P_π * (V1 - V2)

取范数并应用不等式:
|| L_π(V1) - L_π(V2) || ≤ γ * || P_π || * || V1 - V2 ||

由于 P_π 是随机矩阵,其谱范数(最大奇异值)为 1。因此:
|| L_π(V1) - L_π(V2) || ≤ γ * || V1 - V2 ||

因为 γ < 1,所以这是一个严格的收缩。

这个性质的直观理解是:无论我们从哪个初始价值向量 V0 开始,反复应用贝尔曼算子 L_π,生成的序列 {V, L_π(V), L_π(L_π(V)), ...} 都会收敛到唯一的不动点 V^π。这为我们提供了一种计算价值函数的有效迭代算法。

从策略评估到策略优化

到目前为止,我们讨论的是如何评估一个给定的策略 π。但强化学习的最终目标是找到一个最优策略 π*,以最大化期望总奖励。

最优策略对应的价值函数称为最优价值函数 V*,它满足贝尔曼最优方程:

V(s) = max_a [ R(s, a) + γ * Σ_{s'} P(s' | s, a) * V(s') ]

类似地,我们可以定义最优动作价值函数 Q*,并且可以设计类似价值迭代的算法(如Q-learning)来寻找最优策略。这些算法通常交替进行策略评估(计算当前策略的价值)和策略改进(根据价值函数更新策略以获取更高奖励)。

深度强化学习简介

传统的强化学习方法在状态空间或动作空间很大时会遇到困难,因为价值函数或策略函数难以用表格表示。这就是深度强化学习的用武之地。

深度强化学习的核心思想是使用深度神经网络作为函数近似器,来近似表示:

  • 价值函数 V(s) 或 Q(s, a)
  • 策略函数 π(a | s)

以下是两种主要范式:

1. 基于价值的深度强化学习(如 DQN)
使用深度神经网络来近似最优动作价值函数 Q*(s, a; θ),其中 θ 是网络参数。网络输入是状态 s,输出是每个可能动作 a 的 Q 值。然后通过选择 Q 值最大的动作来制定策略。

2. 基于策略的深度强化学习(如策略梯度方法)
使用深度神经网络直接参数化策略 π(a | s; θ)。网络输入状态 s,输出动作的概率分布(对于离散动作)或动作的参数(对于连续动作)。通过优化网络参数 θ 来直接最大化期望奖励。

许多现代算法(如 Actor-Critic)结合了这两种思路,同时学习价值函数(Critic)和策略(Actor),以达到更稳定、更高效的学习效果。

总结

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

  1. 策略评估:通过贝尔曼方程和收缩映射的性质,我们可以使用价值迭代等算法有效地计算给定策略的价值函数。
  2. 策略优化:强化学习的核心目标是找到最优策略,这引出了贝尔曼最优方程。
  3. 深度强化学习:为了解决高维问题,我们引入深度神经网络作为函数近似器,分别用于近似价值函数(价值基方法)或直接参数化策略(策略基方法),这为处理复杂的现实世界任务(如游戏、机器人控制)提供了强大的工具。

从理解MDP的基础,到掌握价值迭代的原理,再到窥见深度强化学习的广阔天地,我们正在构建解决序列决策问题的坚实知识框架。

027:策略梯度方法

概述

在本节课中,我们将学习如何使用梯度下降方法来解决强化学习问题。我们将探讨如何参数化策略函数,并计算期望奖励关于策略参数的梯度,从而通过优化策略来最大化累积奖励。


上一节我们介绍了使用神经网络参数化Q函数或价值函数的方法。本节中,我们来看看如何直接对策略本身进行参数化和优化。

核心问题在于,我们能否使用梯度下降来优化策略,以最大化期望奖励。这要求策略函数必须是可微的。

参数化策略

为了应用梯度下降,我们需要一个可微的策略函数。一个自然的选择是使用深度神经网络来参数化策略。

策略函数 π_θ 是一个以参数 θ 定义的神经网络,它将状态 s_t 映射到动作 a_t。其过程可以描述为:

a_t = π_θ(s_t)

在时间步 t,智能体处于状态 s_t,策略网络输出动作 a_t。随后,环境根据其转移概率将智能体带到新状态 s_{t+1},如此循环。我们考虑一个有限时间范围 T 的问题,因此暂时无需考虑折扣因子。

需要注意的是,在部分可观测环境中,策略函数的输入是观测值而非完全的状态。本节课我们主要讨论完全可观测的情况。

轨迹概率

给定一个特定的轨迹 τ(即状态和动作的序列),我们关心在特定策略 π_θ 和环境模型下,观察到该轨迹的概率 P_θ(τ)

该概率由初始状态分布、策略给出的动作选择概率以及环境的动态(转移概率)共同决定。其计算公式为:

P_θ(τ) = p(s_1) * ∏_{t=1}^{T} π_θ(a_t | s_t) * p(s_{t+1} | s_t, a_t)

其中,p(s_1) 是初始状态分布,π_θ(a_t | s_t) 是策略在状态 s_t 下选择动作 a_t 的概率,p(s_{t+1} | s_t, a_t) 是环境的转移概率。

目标函数

我们的目标是最大化从初始状态开始的期望总奖励 J(θ)。期望总奖励是所有可能轨迹的奖励按其发生概率的加权和。

目标函数 J(θ) 定义为:

J(θ) = E_{τ ~ P_θ(τ)} [R(τ)] = ∑_{τ} P_θ(τ) * R(τ)

其中,R(τ) 是轨迹 τ 的总奖励。

策略梯度定理

为了使用梯度上升最大化 J(θ),我们需要计算其关于参数 θ 的梯度。直接计算涉及对概率分布的求和,计算困难。

策略梯度定理提供了一个优雅的解决方案,它将梯度表达为期望形式,便于通过采样来估计。梯度公式为:

∇_θ J(θ) = E_{τ ~ P_θ(τ)} [ (∑_{t=1}^{T} ∇_θ log π_θ(a_t | s_t)) * R(τ) ]

这个公式表明,我们可以通过从当前策略下采样的轨迹来估计梯度。梯度的方向是增加高奖励轨迹对应动作的概率,减少低奖励轨迹对应动作的概率。

方差缩减技术

基于上述公式的原始策略梯度估计器通常具有高方差,导致训练不稳定。以下是两种常用的方差缩减技术:

引入基线:
从奖励 R(τ) 中减去一个基线 b(通常是与状态相关的价值函数估计),可以在不引入偏差的情况下减少方差。梯度公式变为:

∇_θ J(θ) = E_{τ ~ P_θ(τ)} [ (∑_{t=1}^{T} ∇_θ log π_θ(a_t | s_t)) * (R(τ) - b) ]

使用时间差分误差:
更进一步,我们可以用每个时间步的优势函数 A(s_t, a_t)(即动作价值函数 Q(s_t, a_t) 减去状态价值函数 V(s_t))来替代整个轨迹的累积奖励。这能提供更精细、方差更低的更新信号。公式变为:

∇_θ J(θ) = E_{τ ~ P_θ(τ)} [ ∑_{t=1}^{T} ∇_θ log π_θ(a_t | s_t) * A(s_t, a_t) ]

总结

本节课我们一起学习了策略梯度方法的核心思想。我们了解到,通过使用神经网络参数化策略,并利用策略梯度定理,可以直接对策略进行优化以最大化期望奖励。我们还探讨了通过引入基线和优势函数来减少梯度估计方差的技术。这种方法构成了现代深度强化学习算法(如A3C、PPO等)的基础。


029:Misha Belkin 关于深度学习的演讲

在本节课中,我们将学习 Misha Belkin 教授关于深度学习现象的演讲内容,特别是“插值”概念如何帮助我们理解这些现象。我们将探讨深度学习理论面临的挑战,以及如何通过分解复杂问题来获得新的见解。

概述

深度学习在过去十年取得了巨大成功,但其成功背后是极其复杂的结构和海量参数,这使得其原理难以理解。本次演讲将回顾一些引人注目的现象,并重点阐述“插值”如何从理论和实践层面为理解这些现象提供线索。

经典方法与理论危机

上一节我们概述了深度学习理解上的困境,本节中我们来看看传统的机器学习理论方法及其面临的危机。

在机器学习中,我们通常拥有数据 (X_i, Y_i)。例如,X_i 是 R^D 空间中的数据点(如图像),Y_i 是对应的标签(如猫为-1,狗为1)。目标是根据这些数据构建一个从输入空间到输出(如{-1, 1})的函数,该函数能很好地泛化到新数据。

传统的统计学习理论对此有一套解释框架。然而,深度学习的实践似乎打破了这些经典规则。

深度学习的两个核心问题

以下是两个长期困扰研究者的核心问题:

  1. 泛化问题:为何参数极多、结构复杂的神经网络能在未见数据上表现良好,而不会严重过拟合?
  2. 优化问题:为何非凸的目标函数能够被有效优化?

目前,我们对第二个问题的理解已较为深入。本次演讲将主要聚焦于第一个问题——泛化,虽然已有一些理解,但远未完善。

插值的作用:像棱镜一样分解问题

上一节我们提出了核心问题,本节中我们来看看“插值”如何充当理解这些问题的“棱镜”。

棱镜的作用是将复杂的白光分解为不同频率的单色光,使其易于分析。类似地,在机器学习中,“插值”能够将复杂的现象分解为更简单、可单独分析的组成部分。

其基本思想是:通过分离复杂现象为更简单的组件,从而允许进行分析。

总结

本节课中,我们一起学习了 Misha Belkin 教授对深度学习理论现状的分析。我们回顾了深度学习成功背后理论解释的缺失,指出了泛化与优化两大核心挑战,并引入了“插值”作为分解和理解复杂深度学习现象的关键工具。这为我们后续深入探讨具体的泛化现象奠定了理论基础。

030:如何构建模型?🤖

在本节课中,我们将跟随纽约大学教授安德鲁·威尔逊的视角,探讨如何构建机器学习模型。我们将审视关于神经网络的常见误解,并从概率建模的角度理解深度学习的本质。课程将论证,神经网络并非如通常描述的那般神秘或独特,其成功很大程度上源于其灵活性与合理的归纳偏置的结合。


我是安德鲁·威尔逊,纽约大学教授。

我的研究领域是贝叶斯机器学习和概率建模。虽然我的工作涉及广泛的项目,包括将对称性融入神经网络、受物理学启发的深度学习等非贝叶斯方法,但贯穿我工作的核心是渴望理解一种规范化的模型构建方法,旨在创建能够无需人工干预进行学习和决策的智能体。这可以说是机器学习的核心目标,但真正致力于理解神经网络并利用这种理解来构建实用新方法的研究相对较少,而这正是最令我兴奋的工作方向。

从这个角度看,我认为现代深度学习中许多被视为神秘的现象实际上是相当可理解的。

同时,我认为我们声称神经网络独特且与众不同的许多方面,与其他模型类别相比,可能并没有那么不同。

如果我要做个调查,问你们神经网络与其他模型有什么非常不同之处,我猜你们可能会说什么。让我们看看聊天框里的答案。

现场观众的回答是:特征提取、参数。

当人们撰写关于神经网络的理论论文时,他们常常声称:这些模型能够泛化是疯狂的。为什么他们认为这很疯狂?

过参数化。常见的故事是:我们的模型参数比数据点还多,因此它们可以表示许多能达到很低训练损失的解,其中许多并不能提供良好的泛化能力。然后另一种说法是:如果我们使用像随机梯度下降(SGD)这样的随机优化方法,我们会收敛到那些解中的一个子集,而这个子集确实能很好地泛化。

因此,我们被SGD的隐式偏置所拯救。我认为这种逻辑链条中的每一个主张都存在缺陷。

首先,神经网络是否因为过参数化而显得不同寻常?我认为不是。有许多模型拥有大量参数。高斯过程就是一个例子,其标准协方差函数对应着无限数量的参数,实际上比任何有限神经网络都更灵活。然而,当数据点很少时,它们相对于其他模型能提供最佳的泛化性能。这似乎直接反驳了人们关于过参数化的所有主张。

其次,还有一个主张是:如果一个模型是过参数化的,我们预期它能提供许多能很好拟合数据的解,即存在某种灵活性。虽然神经网络在实践中相对灵活,但过参数化并不直接意味着灵活性。将参数数量简单地视为模型灵活性的某种代理是一个巨大的错误。例如,我们可以轻易地构造一个平凡的例子,只是把所有参数加在一起,而灵活性没有任何增加。因此,参数数量与模型类别的灵活性之间是一种非常间接的关系。

再次,经常提出的下一个主张是:因为模型是灵活的,所以会出现某种问题,比如我们有很多参数,因此(尽管这并不必然成立)具有灵活性。一旦我们接受了灵活性,哦,如果它灵活,我们可能会严重过拟合。但我们为什么会预期这种情况发生呢?我刚举了一个高斯过程的例子,它比任何神经网络都灵活,不仅不会过拟合,事实上在小数据情况下似乎比其他模型更好。因此,显然泛化不仅仅关乎灵活性,它是一个多维度的概念,也与所谓的归纳偏置有关。从概率的角度看,归纳偏置对应于我们可能偏好于哪些类型的解,而不是我们能表示哪些解。

然后,这个逻辑链条的最后一部分是:好吧,我们有了这个据称非常灵活的模型,它可以表示那些能很好拟合数据但无法泛化的解,但我们被SGD的隐式偏置拯救了。这里有几个问题:其一,如果我们相信这是真的,甚至无需做任何实验,那么我们的主张基本上是,我们只需要灵活性和随机优化,就能拥有一种能有效解决现实世界中所有问题的通用学习系统。当然,当你这样表述时,这是一个荒谬的主张。构建灵活模型的方法有很多,我不认为任何严肃的机器学习研究者会相信,只要我们简单地对这些模型使用SGD,它们就能突然解决所有有趣的问题。所以这看起来就是错误的。

我反对的第二点是,我们从实验中就知道它是错的。例如,有实验使用全批量梯度下降训练神经网络,Tom团队有一篇有趣的论文表明,泛化能力实际上并没有因全批量训练而受到显著损害。我们可能有很多理由想要使用随机优化,例如计算上非常方便等,但这并不是神经网络通常比替代方案泛化得更好的根本原因。

因此,我认为存在很多错误的传统观念。另一个经常出现的事情是:我们应该惊讶于我们可以在带有随机标签的数据集上训练神经网络,并且它们可以完美地拟合那些数据集,但它们仍然能在其他实际存在结构的问题上泛化。A)我不认为我们应该感到惊讶,我可以很快解释原因;B)这也并非神经网络独有。我们可以在其他模型类别中完美复现这种行为。在本次讲座指定阅读的一篇论文中,我们实际上展示了你可以用高斯过程完美复现那些结果,而且不仅仅是高斯过程,你也可以用其他模型类别做到。我们理解为什么会这样,部分原因是灵活性才是关键。你可以拥有拟合任何数据集的灵活性,但只要你具有倾向于某些类型解的归纳偏置(先验),那么你仍然应该能够在许多合理问题上泛化。

另一个被认为神经网络非常独特的现象是双下降,即随着模型中参数数量或模型容量的增加,泛化能力首先开始改善,然后开始变差(对应过拟合),接着又开始再次变好。这被认为是深度学习领域非常令人惊讶的现象。其实不然,我们知道甚至可以用线性模型重现这种行为。因此,我认为很少有现象是神秘的或神经网络独有的。也许有一些事情,比如我认为用于训练神经网络的目标函数的几何特性在某种程度上是不寻常且有趣的,具有诸如模式连通性这样的结构,即你可以从一个SGD训练的解走到另一个解,而沿途的训练损失几乎不增加。沿着这些路径遍历的各种模型往往能在测试数据上提供相当丰富的不同函数集合,这可以用于提升性能等。我认为这在某种程度上是神经网络独有的。

显然,神经网络有一些不同之处,这就是为什么我们将它们用于许多问题。但我想说,它们并不像通常呈现的那样与其他模型类别不同,它们实际上也没有那么神秘。我认为深度学习的很多方面可以从概率的角度来理解,这将是本次讲座的部分目的。让我们从零开始在白板上逐步建立这个视角。


假设我们有这些数据点,我们正在考虑三种可能拟合数据的函数:一个线性函数、一个三次多项式和一个一万次多项式。假设我们只考虑这三种可能的选择,我们必须使用其中之一。如果你想拟合这些数据点并对1961年做出预测,你会选择哪一个?请在聊天框中输入1、2或3,或者现场观众也可以投票。选择选项1的请举手。


选项1:线性函数


选项2:三次多项式


选项3:一万次多项式

好的,大多数人,我想,选择了选项二。好的,选项三呢?现场观众中有人选择三吗?在镜头里看不到。好吧,那些是做了课前阅读的人,我猜。

在这次讲座中,我将论证实际上我们会选择三。事实上,我们会因为选项三的灵活性水平而感到不满足,因为我们相信现实世界是复杂的,我们需要复杂的模型来捕捉这种结构。只要我们有一种合理的方法来学习这些模型,我们就应该能够越来越接近真实情况,做出越来越好的预测。

因此,我会说我更喜欢选项三,因为它比选项一或二更灵活,但它也还不够灵活。


现实世界是复杂的


我们需要灵活的模型


模型应能捕捉复杂结构


关键在于如何学习


归纳偏置引导学习方向


灵活性 + 合理偏置 = 良好泛化


神经网络提供了这种组合


但并非其独有特性


理解原理才能更好地构建模型


本节课中,我们一起学习了安德鲁·威尔逊教授关于如何构建模型的见解。我们审视并挑战了关于神经网络的几个常见误解,例如过参数化必然导致过拟合、SGD的隐式偏置是泛化的唯一原因等。核心观点是:神经网络的强大并非源于其神秘特性,而是源于高灵活性合理的归纳偏置的有效结合。这种结合并非神经网络独有,高斯过程等模型也具备。理解这一点,有助于我们从概率建模的坚实基础上,更理性、更有效地设计和构建机器学习模型。

031:被动与主动多任务表示学习

在本节课中,我们将学习表示学习的理论与实践。首先,我们将探讨表示学习的理论基础,理解其在何种条件下能有效提升下游任务的性能。随后,我们将关注一个现实挑战:如何在资源有限的情况下,通过主动选择最相关的预训练数据来高效地进行表示学习。

表示学习简介

上一节我们介绍了深度神经网络在不同领域的成功应用。本节中,我们来看看表示学习这一特定用途。

表示学习旨在学习数据的良好表示。在本次讨论中,“表示”特指神经网络的倒数第二层。具体过程是:输入数据(如图像)经过多层网络映射,在倒数第二层输出一个向量,该向量即为输入数据的表示。

从输入层到倒数第二层的映射网络,可称为特征提取器,它是一个将输入映射为向量的函数。倒数第二层的输出即是表示。

通常,我们需要在非常大的数据集上训练这个神经网络以学习良好的表示。早期可能仅在图像数据上训练,如今则使用更庞大的数据集。总之,需要海量数据来为图像学习一个好的特征提取器。

表示学习的应用

上一节我们了解了如何学习表示,本节中我们来看看如何应用这些表示。

表示学习的用途在于,其学到的表示对其他任务也很有用。例如,你可以在ImageNet数据集上训练一个表示,而这个表示对于许多其他任务(如下游任务)同样有效。对于一个新的下游任务,你可以固定之前学到的特征提取器(即表示),仅重新训练最后的线性层(或支持向量机)。这就是利用已学表示进行下游任务的方式。

以下是一个更具体的例子。

假设我们使用ResNet架构训练一个表示函数,并在ImageNet数据集上进行训练。我们的目标下游任务是一个少样本学习任务,例如CIFAR-FS数据集。该任务包含20个类别,但每个类别只有1到5个示例样本。由于每个类别的样本极少,这是一个极具挑战性的少样本学习任务。

如果不使用表示学习,仅使用SVM或手工特征等方法,准确率可能只有5%到10%。对于一个20类的分类问题,随机猜测的准确率是5%。数据量有限是性能不佳的主要原因。

然而,如果使用表示学习,首先在ImageNet上预训练ResNet,然后固定其特征提取器,仅在下游任务的少量数据上重新训练最后一个线性层,性能可以直接从约50%提升到80%以上。

由此可见,与不使用表示学习相比,这是一个巨大的性能提升。这展示了表示学习在实践中的强大作用。虽然表示学习有多种变体,但其核心方法论是通用的,也广泛应用于自然语言处理(如将RNN的隐藏状态作为句子表示)和图神经网络(学习节点的表示以用于下游任务如节点分类)等领域。

表示学习的理论动机

上一节我们看到了表示学习的实践效果,本节中我们将从理论角度探讨其有效性。

本次讲座的第一部分,我们将建立表示学习的理论基础。我们将研究在何种条件下,表示学习确实能提升下游任务的性能。我们将探讨必要和充分条件,并从数学角度理解表示学习为何有效。

大规模表示学习的趋势与挑战

为了引出讲座的第二部分,让我们再次审视当前表示学习的发展趋势。

如今,表示学习模型变得越来越大。从2018年到2022年,模型规模增长了数个数量级。同时,用于预训练的数据量也大幅增加。例如,在语言应用中,我们使用高达3500亿单词来训练一个表示。主要原因在于,用于预训练的数据获取成本相对较低(如维基百科或网络文章),因此数据量可以非常庞大。

在机器学习中,通常应尽可能使用更多数据。大型科技公司正是利用数十亿数据训练大模型,并取得了显著的性能提升。

然而,另一方面,大多数研究人员并不在大型科技公司工作。特别是对于小型实验室或组织,他们没有资源来训练如此庞大的模型。以著名的GPT-3模型为例,它拥有1750亿参数,使用了海量数据,需要在上万个GPU上进行训练,估计总成本高达千万美元。通常,我们没有如此巨额的资源来训练单个模型。

在实践中,许多场景下资源是有限的。假设你有一个特定任务(如生物信息学或交通预测),你只有有限的计算资源(如GPU)、资金和工程师。你虽然可能想利用所有现有数据(如所有城市的交通数据),但没有足够资源像训练GPT-3那样训练一个巨大的表示学习模型。那么,我们该如何应对?

主动数据选择:应对资源限制

讲座的第二部分,我们将讨论我们近期开发的一种方法:主动选择最相关的预训练数据。

其动机如下:通常,训练大模型所需的资源与使用的预训练数据量成正比。数据越多,需要的GPU和时间就越多。因此,如果我们能减少预训练所需的数据量,就能降低资源需求。

另一个动机是近期的发现:并非数据越多越好,数据质量同样至关重要。精心选择对预训练最重要的数据,已经可以大幅提升性能。

因此,在讲座的第二部分,我们将讨论我们近期提出的方法:利用主动学习来选择最相关的预训练数据。通过减少预训练所需的数据量,从而降低资源消耗。这与经典的主动学习不同,经典主动学习通常针对单一监督学习任务选择数据点;而我们的方法是在多任务表示学习框架下,为特定的目标下游任务,主动选择最相关的源任务(我们将解释“任务”的含义)。这是一个相对较新的研究领域,虽然主动学习在监督学习中已被广泛研究,但针对表示学习的主动学习仍处于探索阶段,存在许多值得研究的方向。

课程总结

本节课中我们一起学习了表示学习的核心概念与应用。我们首先通过实例了解了表示学习如何通过预训练提升下游任务性能,并探讨了其背后的理论动机。接着,我们审视了当前大规模表示学习面临的资源挑战,并介绍了一种通过主动选择相关数据来高效进行表示学习的新思路。这为在有限资源下利用表示学习提供了可行的方向。

032:Balaji Lakshminarayanan 关于可靠性的演讲

在本节课中,我们将学习深度学习中的不确定性量化与分布外鲁棒性。我们将探讨为何需要良好的不确定性估计,以及模型在面对与训练数据分布不同的测试数据时面临的挑战。

概述

感谢邀请,很高兴来到这里。今天我将讨论我们最近在可扩展概率深度学习方面的工作,特别是PLX。我将尝试不仅展示最终的研究成果,还会介绍其背后的动机、发展历程以及相关假设,希望能对听众有所帮助。这项工作是与谷歌内部以及牛津大学等机构的优秀合作者共同完成的。

相关链接和一篇更偏向入门介绍的博客文章可供查阅。

动机:为何关注此问题?

我们希望在深度学习中能够量化不确定性。这些幻灯片来自我们几年前的欧洲教程,更多细节可查阅。我将简要介绍一些背景。

我们关注不确定性的原因是,良好的不确定性估计可以帮助我们理解何时可以真正信任模型的预测。

  • 对于分类问题,不确定性可能意味着不仅输出最可能的标签,还输出一个相关的置信度分数。
  • 对于回归问题,它可能意味着不仅输出一个均值,还输出一个均值及方差。

在概率深度学习中,核心目标是返回预测的分布,而非点预测。良好的不确定性对于了解何时可以信任模型的预测非常有用,并且在许多下游任务中变得至关重要。

分布外鲁棒性

您可能也听说过所谓的分布外鲁棒性。许多机器学习研究都假设测试数据与训练数据来自相同的独立同分布。然而,在现实世界的许多挑战性应用中,这个假设经常被打破。

现在,人们对所谓的OOD设置非常感兴趣。简而言之,OOD可以理解为“非IID”,即测试数据与训练数据不同。显然,我们需要对研究的具体情况做出一些特定假设。

以下是一些数据分布发生偏移的例子,我们也在研究中对其进行分类。我认为这是机器学习的重大挑战之一,原因在于:只有一种方式是IID,但OOD的方式却有无数种。要真正解决鲁棒性问题,我们需要模型能够应对各种不同的情况,这是一个更具挑战性的问题。

以下是数据偏移的一些例子:

  • 协变量偏移:我们假设条件概率 P(Y|X) 保持不变,但输入 X 的边缘分布 P(X) 在训练和测试之间发生了变化。
  • 开放集识别:我们假设在测试时可能出现训练时未见过的新类别的输入。这在科学应用中经常发生。例如,在基因组序列识别中,人们不断发现新的类别。如果你基于历史数据训练分类器并试图在现实世界中应用,你不仅需要准确的模型,还需要OOD检测能力,才能使机器学习在这些新应用中成功应用。
  • 子群体偏移:数据子群体的频率发生变化等。

这是一个不完整的列表,我鼓励您深入了解相关文献,还有其他类型的偏移,如标签偏移等。正如您将看到的,这些挑战本身就足够艰巨。

深度学习在IID与OOD下的表现

深度学习在IID设置下表现非常出色,但在OOD设置下,模型的表现仍不尽如人意。

一个典型的例子是Dan Hendrycks和Tom Dietterich提出的ImageNet-C基准测试。他们基本上表明,即使在ImageNet干净测试集上表现非常好的模型,在面对即使是轻微的自然图像损坏时,模型也开始失效。我非常喜欢这个数据集,因为它可以让你“控制”OOD的程度。你可以测量模型在干净集上的性能,然后随着测试集与训练集的距离逐渐增加,你可以看到模型是如何失效的。

我同时讨论OOD和不确定性的原因是,不确定性的重要性在分布外情况下变得尤为突出。随着数据逐渐偏离训练分布,模型不可避免地会犯更多错误。但重要的是,模型需要知道它们不知道什么,这样它们至少可以通过其不确定性发出信号,表明它们何时可能出错。我们只能期望在训练数据附近信任模型,随着数据越来越远,对模型预测的信任度应该降低。这是一种理想的行为。

我们使用这个基准测试来检验模型在此问题上的校准程度如何。

模型校准与分布偏移

这张图来自我们2019年的基准测试论文。X轴显示了偏移强度。典型的测试集没有损坏,这是通常的测试集,你可以看到模型准确率在这里。随着你逐渐增加偏移强度,模型准确率开始下降。但你可能想知道,如果模型准确率在下降,模型本身是否知道这一点?模型的置信度是否反映了准确率下降的事实?

我们提出了这个问题,以评估模型不确定性作为分布偏移函数的性能。当时,我们对所有流行方法进行了大规模基准测试。我们特别关注了所谓的预期校准误差

对于不熟悉校准误差的听众,可以将其视为一种“元准确率”。它衡量的是置信度(即模型预测的正确概率,例如当模型说80%置信度时,意味着它认为自己有80%的可能性正确)与准确率(实际观测到的正确频率,通过测量真实标签得到)之间的一致性。

校准直观上可以理解为模型自身对其正确性的估计与其实际正确性之间的一致性。理想情况下,我们希望这两者高度一致,这被称为校准良好的模型。衡量这一点的一种方法是计算预期校准误差,它本质上是在分箱概率后测量这两者之间的差异。

我们在这篇论文中发现的一个令人惊讶的事情是,模型校准也随着分布偏移而显著变差。这是一个问题,因为模型正在犯更多错误,但它们并不知道自己在犯更多错误。因此,从业者很难知道当模型给出80%的概率时,是否应该信任它。对于安全部署来说,这是一个大问题。这就是我们所说的“神经网络不知道它们不知道什么”,这是我们想要解决的问题。

理想情况下,我们希望这条线尽可能平坦,这样如果估计是校准良好的,我们就可以利用不确定性来决定何时信任模型。

开放集识别问题

我还想强调另一个问题,即我简要提及的开放集识别。在开放集中,根本问题是模型可能会在远离数据的地方产生高置信度预测。即使你训练一个在MNIST上的分类器,然后给它看完全不同的语义类别的图片(例如时尚MNIST),它仍然会给出非常高的置信度预测。这是开放集识别问题的核心。

你可以构造像这样的简单二维示例(如半月形示例),通过可视化来理解这个问题。

总结

本节课中,我们一起学习了深度学习中的不确定性量化及其重要性,探讨了分布外鲁棒性所面临的挑战。我们了解到,当前模型在IID数据上表现良好,但在面对OOD数据时,其准确率和校准度都会下降,导致模型“不知道它们不知道什么”。这在实际应用,特别是安全关键型应用中是一个严重问题。解决这一问题,需要开发能够提供良好校准的不确定性估计,并在分布偏移时保持鲁棒性的方法。

033:Daniel Roy 和 Mufan Li 关于“神经协方差 SDE”的演讲

感谢介绍,也感谢邀请我们。

我们将讨论关于神经协方差 SDE 的这项工作。

这是最近被 NeurIPS 接受的工作。这是我们为不断增长的无限深度和宽度网络文献做出的第二项贡献。

当我说“我们”时,实际上是指即将发言的 Mufan Li。

他在 Miha Nika 的专家指导下领导了这个项目。

Miha Nika 是我们在圭尔夫大学的同事,他与 Boris Hanin 一起,

完成了关于无限深度和宽度极限的一些最早的工作。

现在开始。我看到我的幻灯片可以正常翻页。在深度学习中存在许多未解释的现象,我将列出两个。当然,我可以列出六张幻灯片,但那也无法涵盖所有未解之谜。早期困扰人们的两个现象是:基于梯度的方法如何找到良好的局部最小值?因为目标函数是非凸的。

一些人会指向惰性学习和 NTK 理论,认为我们现在理解了这一点。但那些理论是在特定设置下成立的。

对于任意网络,我们还没有一个完整的理论。

另一个问题是深度学习的统计现象。目前尚不清楚为什么过参数化的模型能够泛化到测试数据。

这些通过 SGD 等过程训练的模型可以插值数据,意味着它们达到零训练误差。尽管这些模型具有巨大的容量,足以记忆噪声,但它们仍然能够泛化。这其中必有原因。当然,最近有一些进展,例如在这些 NTK 极限中,可以依赖线性预测器的经典理论。

但这并不能真正解释问题。因此,在过去几年里,良性插值的理论开始被勾勒出来,这很令人兴奋。然而,理解深度学习面临的挑战之一是,深度学习的数学相当难以处理。

我们没有一个像线性回归那样简单、可依赖的分析模型来解释深度学习。线性回归之所以成为大家最初发展插值等理论的模型,是有充分理由的。

我们将采取的方法是识别并分析一个无限极限。我们将看似矛盾地研究一个无限大的神经网络。这个无限极限将简化有限对象的某些方面,并使我们得到一些更易于处理的结果。同时,只有当极限对象仍然是有限规模网络的良好模型时,这项研究才有意义。这条路径已被广泛探索,著名的无限宽度极限就是这种方法的一个例子。

无限宽度极限已知已久。我的一位多伦多同事在 1995 年就观察到,单隐藏层神经网络的无限宽度极限会产生高斯过程。最近,这一理论已被显著扩展到更复杂的架构。

随后,基于这一发展,人们用所谓的神经正切核描述了在这个无限宽度极限下训练的工作方式。神经正切核通常是一个随机对象,但在无限宽度极限下,它几乎必然成为一个非随机对象。这很有趣。神经正切核的描述部分可以由共轭核来刻画,而共轭核是在初始化时的高斯过程极限中定义的。这两个理论相互影响,初始化理论的发展后来成为训练理论的一部分。

无限宽度极限带来了可处理性,人们随后将其转化为该极限下的泛化理论、插值理论等许多令人兴奋的内容。尽管取得了这些令人兴奋的进展,但仍存在几个已知问题。首先,从某些无限宽度极限得到的核,其能力确实较弱。例如,学习多项式等函数的样本复杂度不如真实的神经网络。

一些研究者观察到,在 NTK 极限下,模型不进行特征学习。即使是初始化时的高斯过程,也不是典型形状的有限神经网络的良好近似。我们在这篇论文中提供了一个非常简单的统计量,如果你比较高斯过程理论的预测和真实网络的情况,会发现差异很大。

无限宽度极限的这些问题是,它虽然是一个非常简单的模型,允许你进行所有分析,但你分析的并不是正确的对象。这促使我们寻找替代的极限机制。

一种改变是调整缩放方式。这会产生所谓的平均场和特征学习极限,最近已有研究,并可能有助于预测超参数调整的效果。

我们今天讨论的工作是关于保持相同的缩放方式,但让深度和宽度都趋于无限。这个领域已有一些研究。

如果深度在某种意义上远小于宽度,但两者都趋于无穷,那么你会得到 Yada、Roberts 和 Hanin 等人一直在研究的极限。Hanin 和我本人在这个子集上也有贡献。

我们今天要讨论的工作采用相同的缩放方式,没有对最后一层做特殊处理。我们将研究无限深度和宽度,但要求深度和宽度成比例,即存在一个固定的纵横比。

你可以想象,我的神经网络有一个特定的形状和纵横比,网络根据这个纵横比变得更宽、更深。我们研究的就是这个极限。

这个特定的极限首先由 Hanin 和 Nika 引入。他们在这个模型中已经有一些结果。现在,如果我们看单个输出的边际分布或其范数的分布,它是对数正态分布,这与高斯过程的结果不同。但这与实践相符,你在普通规模的神经网络中也能发现这种分布。

在无限宽度极限中,神经正切核在整个训练过程中是固定的。但如果你在训练过程中观察或测量普通网络中的神经正切核,会发现它在演化。你可以证明这一点。这意味着 NTK 极限的一个本质特征并不匹配。

相比之下,在无限深度和宽度极限中,你可以证明(这是 Hanin 和 Nika 的结果),神经正切核在演化,它在时间零(初始化)就已经有导数。因此,除了在定性特征上正确外,至少在初始化时,你还能看到一些显著的对齐。这里展示的是输出平方的对数分布,这是一个相对简单的统计量,表示单个输入通过深度网络初始化后的情况。

直方图是实际数据,来自一个真实网络。左边偏离很远的曲线是 NTK 或高斯过程的预测。还有一条曲线与直方图完全重合,那就是无限深度和宽度极限的预测。这些图是 Mufan Li 主导的工作成果,也是我们研究这个模型的一部分,它似乎与普通网络在初始化时的行为一致。

研究无限深度和宽度极限存在一些挑战。目前已有一些...

034:Jonathan Frankle关于更快的神经网络训练的讲座

在本节课中,我们将探讨深度学习训练成本不断上升的问题,并分析当前应对策略的局限性。主讲人Jonathan Frankle将分享其研究思路,即通过改变深度学习背后的数学原理,而非仅仅加速现有计算,来从根本上解决成本问题。

概述

感谢邀请。首先确认大家能听清我的声音。请随时打断我,如果我没注意到,请大声喊叫、举手或挥手示意。我将展示的是正在进行中的科研工作,欢迎大家持怀疑或不同意见。内容会较为宏观,但我希望最终能激发大家产生新的研究想法,并对训练过程中真正重要的因素有新的思考。

课程大纲

以下是本次讲座的五个主要部分。由于时间有限,且欢迎大家随时提问,我们将尽可能多地涉及。

  1. 动机与成果:探讨问题的背景以及我们取得的初步成果。
  2. 科学视角:分析为何这是一个值得研究的科学问题。
  3. 科学与工程的界限:区分我所讲述的内容是科学发现还是工程项目。
  4. 商业与创业视角:如果大家感兴趣,可以讨论相关的商业和创业考量。
  5. 招聘信息:根据规定,我需要告知大家Mosaic公司正在招聘研究和工程方向的实习生及全职员工。我的邮箱是Jonathan@mosaicemel.com,欢迎联系。

1. 动机:训练成本危机

让我们从一个图表开始,这个图表如今出现在许多机器学习讲座中。它来自一篇名为《机器学习的三个时代》的论文。

该图表以对数坐标轴展示了历年重要论文发表时,训练达到当时最先进水平的神经网络所需的计算成本(以浮点运算次数计)。作者得出的结论是:训练最先进神经网络的成本正以每年约400%的速度增长

为了理解这个数字的严重性,我们可以对比一下摩尔定律。摩尔定律在其巅峰时期,大约每18个月带来200%的性能提升,折算下来每年约60%-160%。显然,深度学习训练成本的增速远远超过了摩尔定律曾经带来的红利,更不用说现在了。

一个常见的质疑是:有人真的关心训练成本吗?毕竟推理才是主要开销。然而,根据一份关于谷歌机器学习能耗的论文(该论文本身对谷歌的能耗持乐观态度),在其考察的三年中,约五分之三的能耗用于推理,五分之二用于训练。考虑到训练加速器通常比推理加速器单位成本更高,这个比例表明训练和推理的成本在谷歌可能大致相当。无论谷歌是否具有代表性,训练成本高昂已成为一个切实的问题。

2. 传统解决方案及其局限

在摩尔定律的“黄金时代”,硬件性能的提升与软件需求的增长基本同步,成本得以控制。我们希望在深度学习领域也能达到这种平衡,即训练成本的下降速度能抵消我们雄心壮志的增长速度。但现实是,我们需要每年降低400%的成本才能抵消当前趋势,这远未实现。

假设你获得风险投资,被要求去解决训练成本问题,你会怎么做?

方案一:构建专用芯片 🚀

许多人首先想到的是构建神经网络专用加速器。这确实是一个主流方向。

然而,根据我公司CEO(一位硬件架构专家)的估算,更好的加速器结合摩尔定律,大约只能解决所需400%降幅中的50%。以英伟达A100和H100为例,基于公开的FP16算力数据计算,其每美元性能的年增长率约为16%。即使我们乐观估计,加速器带来的年化收益也远低于50%。

方案二:优化计算操作与编译器 🛠️

下一个思路是优化在芯片上运行的操作。例如,斯坦福大学的研究者提出的Flash Attention,通过根据A100的缓存层次结构优化Transformer中注意力机制的计算方式,实现了巨大的速度提升。这本质上是编译器的工作:将高级神经网络操作高效地映射到底层处理器指令。

这类优化能带来显著收益,我们慷慨地假设其每年能贡献30% 的性能提升。但这存在上限,因为可优化的操作终归是有限的。

3. 核心问题:我们是否被“正确性”束缚?

以上两种传统方法存在一个有趣且奇怪的地方:它们都在尝试更快地运行完全相同的数学运算、完全相同的配方和完全相同的优化策略

这在某种程度上是有效的。但关键在于,深度学习并非一门精确科学。它不像归并排序那样存在一个“正确”的排序方法。深度学习背后的数学并无神圣不可侵犯之处。

在传统的计算机科学算法中,我们必须保证正确性,这是不可触碰的底线。

然而在深度学习中,不存在所谓的“正确性”。我们处理带有错误标签的数据,在高度非凸、我们对其一无所知的损失函数景观中,使用本质上经过美化的凸优化策略。我们依赖各种技巧和“黑魔法”,需要在合适的超参数空间、合适的时机,甚至以“正确”的方式看待网络,训练才能成功。稍有偏差,网络就可能发散或崩溃。

我们所做的一切都谈不上“正确”或“准确”。因此,我们不应该害怕去改变深度学习背后的数学原理。深度学习本质上是近似计算。在近似计算中,目标是在满足特定约束(例如达到某个质量水平)的前提下,找到接近最优的解决方案。

对于训练而言,这个约束就是:我需要一个达到特定质量水平(如准确率、困惑度等)的网络

总结

本节课我们一起探讨了深度学习训练成本急剧上升的挑战。我们分析了通过构建更好硬件(加速器)和优化现有计算流程(编译器)这两种传统解决方案,并指出它们因受限于“必须执行完全相同计算”的思维而存在天花板。最后,我们提出了一个根本性的思路:深度学习是近似计算,没有绝对的“正确性”,因此我们应该勇于探索和改变其底层的数学与算法,以更高效的方式达到所需的模型质量,这才是应对成本危机的关键科学方向。

035:特征学习与梯度下降

在本节课中,我们将探讨深度学习中的一个核心话题:特征学习。我们将分析为什么现有的理论(如神经正切核理论)在解释现代深度学习实践时存在局限性,并探索通过梯度下降进行特征学习的新视角。

为什么需要更坚实的理论基础?

上一节我们介绍了课程背景,本节中我们来看看为什么当前的理论基础需要加强。尽管已有许多优秀的理论模型,但它们仍难以充分解释许多当代实践。

以下是现有理论面临挑战的几个方面:

  • 架构选择:我们缺乏深刻的见解来解释为何某些架构(如全连接网络、卷积网络、Transformer网络)表现良好。
  • 归一化技术:对于批归一化、层归一化、实例归一化等众多技术,我们同样缺乏清晰的理论理解。
  • 表征学习实践:对于预训练、微调、知识蒸馏等近年来流行的、与表征学习相关的实践,理论洞察也相对匮乏。

更根本的问题是,现有理论甚至在简单的玩具设定中也面临困难。这通常是因为这些理论依赖于不切实际的高参数选择,例如:

  • 非常小的步长
  • 非常宽的网络
  • 非常大的初始化尺度

为了阐明这一点,考虑一个简单的例子:使用一个单隐藏层神经网络拟合三维空间中的一组数据点。

  • 如果使用理论导向的超参数,得到的拟合曲面可能不够理想。
  • 如果使用实践中常用的参数,则能得到更平滑、更优的曲面。

这表明,现有理论在实际应用场景中可能并不适用。神经网络的函数类非常丰富,训练方式和超参数选择对其行为至关重要。因此,本课程的第一部分将致力于建立一个在这方面更强大的理论。

过参数化与不“过拟合”的奥秘

上一节我们指出了现有理论的局限性,本节中我们来看看深度学习中的一个核心谜题:过参数化。在现代神经网络中,参数数量通常远多于训练数据,理论上应发生过拟合,但实践中却能获得非常好的拟合效果。

这个现象背后存在两个谜题:

  1. 优化之谜:为什么梯度下降能收敛到全局最优解?
  2. 泛化之谜:在存在无数全局最优解的情况下,模型为何能良好地泛化?

为了理解“过参数化”的含义,请看一个简单的实验:

  • 假设数据由一个具有3个隐藏节点的单隐藏层神经网络生成。
  • 如果你使用一个相同规模的模型进行训练,梯度下降可能会陷入局部最优
  • 如果你使用一个更大规模(过参数化)的模型,梯度下降则能收敛到全局最优

这就是第一个谜题:为什么使用实践中常见的小随机初始化时,梯度下降能收敛到全局最优?

然而,更引人深思的是第二个谜题:泛化。由于过参数化,训练损失存在许多全局最优解。根据初始化的不同,优化器会收敛到不同的全局最优解,而这些解对应的测试损失(泛化性能)也截然不同。

在实践中,仅通过改变初始化的尺度,就能到达具有不同泛化能力的全局最优解。例如,在一个数据由3节点网络生成的实验中,我们用一个更大的模型去拟合它,并改变初始化的标准差(x轴):

  • 训练误差:无论初始化尺度大小,总能达到全局最优(训练误差为0)。
  • 测试误差:行为差异巨大。使用小尺度初始化(左侧)时,测试误差很低;使用大尺度初始化(右侧)时,测试误差很高。

现有理论(如神经正切核理论)主要研究的是右侧的大初始化尺度区域。在这个区域,神经网络的行为类似于其初始点的线性近似,即表现得像一个核方法。虽然这能提供一定的泛化性能保证,但通常只是一个粗略的上界。

真正有趣且具有挑战性的问题是:如何建立从小随机初始化出发的梯度下降的泛化理论? 这正是我们试图回答的核心问题。

神经正切核(NTK)或“惰性”区域回顾

上一节我们提出了核心问题,本节中我们简要回顾一下神经正切核(NTK)理论,以明确其适用范围。当使用非线性模型(如神经网络)拟合数据时,梯度下降的更新公式涉及模型的输出关于参数的雅可比矩阵

NTK理论的基本思想是,在满足某些技术假设(如网络足够宽、初始化足够大)的条件下,沿着梯度下降的轨迹,网络的行为近似是线性的。具体来说,网络的性能可以近似用其在初始化点的线性展开来描述,公式如下:

f(θ_t) ≈ f(θ_0) + ∇f(θ_0)^T (θ_t - θ_0)

这意味着,尽管网络本质是非线性的,但在这种“惰性”或“线性”区域,其训练动态表现得就像在一个固定的非线性特征(由初始网络决定)之上进行线性学习。这就是NTK区域。

然而,NTK区域的问题在于,它对应的是大初始化尺度的情况。正如前面实验所示,在这个区域获得的泛化性能往往不是最优的。我们观察到的最佳泛化性能出现在小初始化尺度的区域,而现有理论对此缺乏解释。

总结

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

  1. 现有深度学习理论在解释架构选择、归一化、表征学习等当代实践时存在不足,甚至在简单玩具设定中也因依赖不实际的超参数而失效。
  2. 过参数化神经网络存在两大谜题:优化上能收敛至全局最优,以及泛化上能在众多全局最优解中获得良好性能。
  3. 神经正切核(NTK)理论解释了大初始化尺度下网络的线性化行为,但这通常对应次优的泛化结果。
  4. 当前的核心理论挑战是理解并建立从小随机初始化出发的梯度下降的优化与泛化理论,这直接关联到神经网络如何进行有效的特征学习

036:Constantinos Daskalakis 关于均衡计算的讲座 🧠

在本节课中,我们将探讨复杂性理论、博弈论与深度学习之间一些美妙的交汇点。我们将了解深度学习在优化范式上的根本转变,以及当学习问题涉及多个智能体(即多智能体世界)时,这一范式所面临的挑战。


深度学习的突破与优化范式的转变 📈

正如我们所知,机器学习近年来无疑取得了许多突破。

从优化的角度来看,我们处理与学习任务相关的估计问题的方式发生了根本性的变化。我们离开了凸优化的“舒适港”,越来越多地考虑我们估计问题的非凸公式化。

以下是几个例子:

  • 经典最小二乘回归:这是一个非常理想的估计场景,目标是找到通过数据点的最佳线性拟合。可以写出一个关于参数 θ 是凸的目标函数。
  • 指数族模型的最大似然估计:当数据来自指数族分布且没有隐变量时,负对数似然作为估计问题,其关于索引指数族分布的参数 θ 也是凸函数。

这两个都是很好的场景,其估计问题是漂亮的凸优化问题。

相比之下,当我们训练深度神经网络时,估计问题在很大程度上是一个非凸问题。实际上,处理非凸问题并非深度学习独有的新事物。例如,在上述例子中,如果考虑包含隐变量的模型,那么最大似然估计问题通常也会变得非凸。这时,我们必须使用期望最大化算法或变分推断等工具来启发式地处理出现的非凸性。

因此,从凸优化到非凸优化的转变并非全新,但在我们思考如何训练深度网络时,它变得非常重要和核心。


深度网络训练的关键特征与应对方法 ⚙️

当然,当问题是凸优化问题时,估计的目标是找到全局最优解。而对于非凸问题,全局最优解通常是不可及的,它是一个NP难问题,因此目标转变为寻找某个局部最优解。

深度网络训练的一些更“新”且重要的特征如下:

  • 参数向量 θ 的维度非常高。
  • 优化的函数是非凸的。
  • 对目标函数的访问非常原始(例如,通常只有一阶访问,可以查询梯度,但高阶查询成本更高)。
  • 通常,函数至少在大多数地方是Lipschitz连续且光滑的。

简而言之,处理这类问题时,我们没有太多选择。为了应对非凸性和高维变量,我们必须运行一个简单的方法,即某种形式的梯度下降

梯度下降不会找到全局最优解,但至少能保证不会停留在某些虚假的临界点,并且保证能找到局部最优解。经验发现,对于许多我们感兴趣的问题,局部最优解在实践中表现相当不错。虽然没有理论保证局部最优解一定表现良好,但在许多学习应用中,通过这种方法找到的局部最优解确实是有用的。


新兴的通用框架与“规模至上”的迷思 🏗️

人们对这一新范式感到非常兴奋,并形成了一个应对挑战性学习问题的通用框架:

  1. 编写一个非常复杂的模型(拥有数百万或数十亿参数)。
  2. 从外部收集大量数据。
  3. 获得超级计算机的访问权限。
  4. 运行梯度下降,尽可能地在数据上训练模型。

人们如此兴奋,以至于经常有人说:“规模就是一切”。参数越多,能访问的超级计算机越强大,就能构建越好的模型。

然而,我并不同意“规模就是一切”这种观点。我想讨论一系列应用场景,在这些场景中,规模并非一切,而且我们知道它并非一切。


多智能体世界中的挑战与灾难 🎲

许多新兴且有趣的深度学习应用都涉及多个智能体。例如:

  • 游戏场景:扑克、围棋、星际争霸。
  • 机器人交互。
  • 生成对抗网络和对抗攻击等应用。

这些应用并非天生就是多智能体的,但将其表述为多智能体问题,有助于我们达到那些原本可能无法达到的学习结果。

生成对抗网络为例,这是一个并非先验多智能体,但通过博弈公式化有助于达到期望学习结果的例子。在这种情况下,我们希望达到的学习目标是识别一个神经网络,该网络能够将输入(例如,无聊的多变量高斯随机样本)转换为有趣的随机样本(例如,逼真的人脸图像)。


总结 📝

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

  1. 深度学习如何从凸优化转向非凸优化范式。
  2. 深度网络训练的非凸、高维特性,以及梯度下降作为核心应对方法。
  3. 当前流行的“大规模模型+大数据+大算力”的通用学习框架及其局限性。
  4. 当学习问题进入多智能体领域时(如博弈、GANs),新的挑战随之出现,“规模至上”的观点在此并不适用,需要借助博弈论等工具进行更深入的分析和设计。

037:基于学习的程序合成

在本节课中,我们将学习基于学习的程序合成。我们将探讨如何让机器根据描述自动生成程序,并了解该领域面临的核心挑战,包括输入模糊性、程序容量和泛化能力。课程将涵盖从处理自然语言描述到利用执行反馈,再到提升模型组合泛化能力等多个方面的研究与应用。

什么是程序合成?

程序合成是指,我们无需亲自编写所有代码,而是希望机器能根据我们的描述自动生成程序。程序合成研究的长期目标是普及编程,让不具备编码技能的一般计算机用户也能受益于编程技术的进步,从而实现任务的自动化。

语言模型在代码生成中的突破

近年来,我们在用于代码的大型语言模型方面取得了巨大突破,尤其是在从自然语言生成代码方面。

例如,OpenAI的Codex模型拥有1750亿参数。它从GPT-3检查点初始化,并在文本上进行预训练,然后进一步在GitHub代码库上进行训练。通过这种大规模预训练和大规模模型,Codex能够在遵循自然语言指令方面取得令人印象深刻的性能。

另一个展示语言模型代码生成能力的近期成果是DeepMind的AlphaCode项目。该项目专注于解决竞争性编程问题。除了理解复杂的自然语言描述,模型还需要具备一定程度的推理能力,以构思出能高效解决问题的算法并准确实现代码。

程序描述的其他形式

自然语言只是描述预期程序功能的一种形式。另一种描述形式是输入输出示例。在这种情况下,生成的程序应在执行后将给定的输入转换为对应的输出。

在实际应用中,编程上下文并非总是顺序的。有时我们可能希望处理包含多种数据格式的半结构化上下文。例如,在SpecialCoder项目中,我们设计了一个模型来生成Google Sheets中的特殊公式,这些公式包含了表格上下文。该模型已集成到Google Sheets产品中,目前拥有数亿用户。

程序合成的核心挑战

在基于学习的程序合成研究中,我认为有两个核心挑战需要考虑:输入模糊性程序容量

  • 输入模糊性:指程序描述是否足够精确,能够明确指定程序的执行行为。
  • 程序容量:指可以合成的程序的长度和控制流结构的复杂性。

在本次讲座中,我将讨论几个应用,它们分别突出了这些挑战的不同方面。

  • 在基于文本的程序合成工作中,主要挑战是处理输入模糊性,因为用户编写的自然语言描述通常缺乏足够的细节。
  • 在基于示例的程序合成问题中,程序描述包含输入输出示例,因此更容易利用执行结果来扩展程序搜索。
  • 在竞争性编程问题中,程序描述同时包含自然语言和输入输出对,我们可以利用这些额外信息来减少程序描述的模糊性,并生成更复杂的代码。

用于学习的程序合成

基于学习的程序合成研究不仅关注编程和软件工程应用,另一个研究方向是用于学习的程序合成。我们将程序视为表示更广泛学习问题中推理过程的一种手段。

为什么在编程和软件工程应用之外,学习这些程序是有益的?主要目标是提升现有神经网络在执行符号推理和泛化任务方面的能力。

这里我将重点介绍一个称为组合泛化的挑战,并使用一个伪语言理解任务的例子来说明。

假设训练集中有一些指令,展示了伪单词与彩色圆圈之间的基本映射关系。除了这些基本定义,训练集还包括一些函数描述。例如,指令“lug Fab”被翻译为三个蓝色圆圈。由于我们已经知道“lu”映射到一个蓝色圆圈,一个假设是“Fab”意味着“三”。我们可以用另一条指令“fan”来确认这个假设。

在测试时,我们会得到一些新的测试指令,例如“stop5”。这些是训练集中已学习的基本元素和函数的新组合。对于我们人类来说,仅凭少量样本,我们就可以推断出“Fab”意味着三个黄色圆圈。

在这个组合泛化实验中,总共只有略多于10条的训练指令。一些测试指令比任何训练指令都要长。对于我们人类来说,仅凭少量演示,就非常擅长理解这种语法的组合。但标准的序列到序列模型在实现这种水平的泛化方面确实很困难。

因此,我在程序合成学习领域的研究旨在解决这些挑战,并强调泛化这第三个挑战。

本次讲座内容概览

在本次讲座中,我将重点介绍围绕这三个挑战维度展开的三方面工作。

  1. 第一部分:我将讨论SpecialCoder工作,展示如何设计基于学习的程序合成模型来处理用户编写描述中的模糊性,以及该模型如何应用于生产环境。
  2. 第二部分:我将讨论关于利用执行进行程序合成学习的工作。首先介绍“执行引导的程序合成”工作,展示了在程序描述包含输入输出样本的情况下,我们的模型如何利用中间执行结果来提高可合成程序的容量。接着,在AlphaCode项目中,我们进一步表明,通过大规模利用执行,可以使模型解决更具挑战性的竞争性编程问题。
  3. 第三部分:我将讨论关于通过程序学习实现组合泛化的工作。首先介绍“神经符号栈机”工作,展示了将符号模块整合到深度神经网络中,对于仅从少量样本和链式模型从头开始训练时实现这种水平的泛化至关重要。然后,我也会简要讨论我们最近的项目“动态最少到最多提示”,表明通过适当设计提示方案,我们也能解锁现有强大的预训练大型语言模型在理解如SQL等真实世界编程语言方面的组合泛化能力。

让我们从关于SpecialCoder的第一部分开始。我想先确认一下是否有问题。如果没有问题,我可以继续。如果有任何课堂问题,我也可以停下来回答。目前我没有看到针对当前演示的问题。


本节课中,我们一起学习了基于学习的程序合成的基本概念。我们了解了程序合成的目标,探讨了大型语言模型在代码生成方面的突破,并认识了程序描述的多种形式。我们重点分析了程序合成面临的两个核心挑战:输入模糊性程序容量,并引入了组合泛化作为第三个关键挑战。最后,我们概述了本次讲座将深入探讨的三个研究方向,为后续内容的学习奠定了基础。

038:学习机器人策略

在本节课中,我们将跟随Dorsa Sadigh的演讲,探讨如何利用机器学习,特别是从人类数据中学习,来构建更有效的机器人策略。我们将从实际问题出发,分析现有方法的局限性,并探索利用交互数据、次优演示等新范式来改进机器人策略学习。


引言:从实践视角看机器人策略学习

感谢Soha的邀请,我很高兴来到这里。今天我想讨论我们实验室在“学习机器人策略”领域的一些近期工作。需要说明的是,本次演讲将更侧重于实践层面。在你们的研讨课中,可能听过从理论到实践的各种讲座,而本次是从实践者的视角,探讨如何在机器人学、控制领域乃至更广泛的范围内应用机器学习。

我的实验室主要兴趣在于构建能与人类良好协作的交互式机器人策略。我们关注诸如辅助喂食(如何让机器人拾取食物并送入人口中)或其他类型的交互式机器人任务。相关研究工作主要分为两类:第一类是如何利用交互数据、人类数据来更好地学习策略(这也是本次演讲的主题);第二类是如何实现更无缝的人机交互,例如更好的共享自主权,以及如何让人类与机器人协作完成制作三明治等协调性任务。

接下来,我将深入本次演讲的细节。过程中如有任何问题,请随时提出。我不会一直关注聊天框,但欢迎大家随时发言。如果不需要讲完所有幻灯片,我们也可以随时停下来讨论。


辅助喂食:一个极具挑战的实际问题

大约两年前,我们开始研究辅助喂食问题,这是我最喜欢的机器人学问题之一。问题定义是:我希望机器人能够拿起叉子,拾取一块食物,并将其送入人的口中。这听起来很实际。

但这实际上是一个极其困难的机器人学问题。原因在于,不同类型的食物具有不同的几何形状和可变形特性,操纵可变形物体本身就非常困难,这是一个完整的研究方向。此外,在拾取食物后,将其送入人口中也是一个非常有趣的交互问题:如何确保食物能顺利送入?如何施加合适的力?如何考虑人的舒适度?

我们首先审视了该领域的最新技术。目前,辅助喂食的先进方法是遵循一个固定策略。这是一个基于模型的策略,机器人进行某种程度的视觉伺服控制:它会观察人脸的位置,计算一个固定的位姿,并尝试移动到那里,然后让人在那个位置咬取食物。

正如你所见,这种方式非常不舒适。我非常感谢这位用户,他坐在那里允许我们使用机器人进行喂食。总体来看,这种策略显然不是我们想要的理想策略。

事实证明,这种基于模型的策略并不完美。问题在于:为什么?我们能否做得更好?

一个想法是:近年来机器学习解决了许多研究问题,我们能否利用机器学习来解决这里的一些问题?


探索机器学习解决方案:从模仿学习到新数据源

如果目标是使用机器学习,我们有许多选择。例如,我们可以使用强化学习。但我不想在真人身上进行实时强化学习,因为我不想撞到人的鼻子并获得负奖励,这可不是好主意。同时,我也没有好的模拟器来生成大量数据并在模拟中运行强化学习,无论是胡萝卜还是人嘴都没有好的模拟器。因此,在这个场景下,模拟和强化学习似乎都很困难。

另一个我认为在机器人学领域更有前景、并且感觉范式正在向此方向转变的想法是:收集专家演示,并从这些演示中学习一个模仿学习策略。有证据表明,拥有大量数据的巨型Transformer模型在许多领域都很有用。

那么问题来了:我们能否在此应用相同的范式?我能否收集专家演示,并从中学习一个用于喂食的机器人策略?

如果我拥有大量数据,那将非常理想。但在这个领域,我并没有大量的机器人演示数据(我稍后会再谈这个概念)。这让我想到,也许我们应该利用其他数据源。如果想学习机器人策略,仅靠专家演示是很有局限的,也许我们应该关注其他数据源,例如游戏数据次优演示,并利用这些信息来思考如何学习机器人策略。这正是本次演讲要讨论的主题。

回到喂食问题,目前看来,基于模型的策略不够好,学习似乎也无法直接解决问题。那么,人们实际是如何使用机器人完成这个任务的呢?如果以上两种方法都行不通,也许我们可以遥操作机器人。如果无法使用学习或基于模型的策略,最简单的方法就是使用操纵杆遥操作机器人,让它跟随我的输入将食物送入人口中。这应该是最简单的方式,市面上许多辅助机器人也正是这样使用的。

这里有一段视频,展示了一个人使用操纵杆遥操作机械臂打开冰箱并移动里面的物品。

需要注意的是,即使是遥操作这种最简单的方式——用操纵杆控制机器人——完成这些简单的家庭任务仍然非常困难。例如,打开冰箱门就需要花费相当长的时间。

你可能会问:为什么?我完全在控制机器人,它没有任何智能行为。但仔细想想,这个机器人有六或七个自由度,而我们控制它的方式是末端执行器控制,即控制末端执行器的位姿。这意味着我要控制六个变量:末端执行器的X、Y、Z坐标(线性控制)以及偏航、俯仰等角度(角度控制)。观察视频中操作者的手,他不断切换操纵杆的侧面按钮,这实际上是在切换控制模式(从线性控制切换到角度控制)。正是这种模式切换耗费了大量时间,使得任务极具挑战性。

因此,在本次演讲中,我将首先讨论遥操作。既然遥操作也不能完美解决问题,我想探讨的是:如何利用学习构建更好的交互界面?如何学习更好的界面,让人们能够提供更低自由度的动作,甚至使用语言来遥操作机器人,从而使机器人能在环境中完成有趣的任务。

然后,我将稍微转换话题,回到学习完全自主策略的想法上。这不是共享自主权领域,而是真正的完全自主领域,我希望为各种任务学习机器人策略。在这里,我将探讨利用其他数据源,如游戏数据或次优演示。

最后,我将以辅助喂食面临的一些挑战作为结束,这些挑战更多是基于模型的,是当前学习算法尚未解决的。我们需要更仔细地思考食物拾取和转移这个具体问题。我会用一些视频和想法来结束演讲。

好的,让我们开始吧。

构建低维动作空间以改进遥操作

回到这张图,我们的核心想法如下:考虑一个状态和动作的序列。

这个状态-动作序列可以来自专家或护理人员(在本例中是Dylan,他曾是我们实验室的博士后,现在是弗吉尼亚理工学院的教授)。Dylan提供了这些专家数据。我们想要做的是:开发一个低维动作空间,供人们用于遥操作机器人,而不是使用那六或七个自由度。

思路是:收集专家数据,并尝试使用简单的条件变分自编码器来降低其维度,得到一个低维动作空间(在本例中,动作空间是Z)。你可以将Z想象成一个二维动作空间(两个自由度)。如果你有一个操纵杆,你可以在操纵杆上上下、左右推动。

我们通过训练一个以状态为条件的自编码器架构,来确保学习到的动作是合理的。

让我们退一步思考。如果想让机器人在状态空间中从一点移动到任意另一点,我们确实需要所有六个自由度,它们的存在是有原因的。

但这里的关键思想是:如果我将此过程限定在特定任务上,比如喂食、拾取一块食物。

那么实际上可能存在一个更低自由度的动作空间


总结

本节课中,我们一起探讨了学习机器人策略的实践挑战与可能路径。我们分析了现有基于模型策略和直接遥操作的局限性,并提出了利用机器学习(特别是模仿学习)和改进人机交互界面的方向。核心思路包括利用专家数据构建低维动作空间,以及探索游戏数据、次优演示等更丰富的数据源来训练策略。最后,我们认识到像辅助喂食这样的复杂任务,仍需结合更精细的模型来应对食物操纵等具体挑战。

039:去噪扩散模型

在本节课中,我们将学习去噪扩散模型的基本概念。这是一种新兴且强大的深度生成模型,近年来在图像生成等领域取得了令人瞩目的成果。我们将从基本原理开始,逐步了解其工作机制,并探讨其优势。

概述

去噪扩散模型,有时也简称为扩散模型,或被称为基于分数的生成模型。它们由两个核心过程组成:一个固定的前向扩散过程和一个需要学习的反向去噪过程。通过训练神经网络来学习复杂的反向过程,模型能够从简单的噪声开始,逐步生成高质量的数据样本,如图像。

深度生成学习概览

上一节我们介绍了课程背景,本节中我们来看看深度生成学习的整体图景。在深度生成学习中,我们的目标是利用从某个未知分布中抽取的一组样本(例如一组可爱的猫咪图片)来训练一个深度生成模型。如果训练成功,在测试时,我们可以使用这个模型来生成新的、与训练数据分布相似的新样本。

以下是几种主要的深度生成模型框架:

  • 生成对抗网络:在很长一段时间内,尤其是在图像生成和计算机视觉领域非常流行。
  • 变分自编码器:另一种重要的生成模型框架。
  • 自回归模型:通过顺序预测数据点来生成样本。
  • 标准化流:通过一系列可逆变换将简单分布映射到复杂分布。
  • 基于能量的模型:通过能量函数来定义数据分布。
  • 去噪扩散模型:这是当前该领域的新兴关键参与者,也是本节课的重点。

扩散模型的崛起

正如前面提到的,去噪扩散模型正在成为强大的生成模型。它们甚至在ImageNet等具有挑战性的数据集上超越了生成对抗网络的表现。这里展示了两项示例工作:左边来自OpenAI,右边来自Google。研究表明,通过在ImageNet等数据集上训练扩散模型,可以生成与数据集中类别对应的高质量、多样化的图像。

大约一年后,OpenAI和Google的团队进一步证明,类似的去噪扩散模型也可用于训练文本到图像的生成模型。如果你关注社交媒体,可能很难不注意到围绕这些模型的巨大热情。DALL-E 2和Imagen就是两个非常强大的模型示例,它们能够根据输入的文本生成与之对应的图像,其图像质量令人惊叹。

例如,Imagen可以生成一个场景:泰迪熊们正在为同事庆祝生日,而蛋糕看起来像披萨。对于许多在生成式学习领域工作了五、六年的研究者来说,能够构建出表现如此出色的生成模型曾是一个梦想。坦率地说,我认为毫不夸张地讲,每天研究这些模型都让我感觉像是在实现梦想,因为这是以往框架难以企及的。

去噪扩散模型简介

现在,让我们开始对去噪扩散模型进行一个非常简短的介绍。去噪扩散模型有两个名称:一个是去噪扩散模型,有时简称为扩散模型;它们也被称为基于分数的生成模型。这两者几乎相同。

它们包含两个过程:

  1. 前向过程:这是一个从数据(例如一张可爱的猫咪图片,这是我的猫,名叫花生)开始,逐步添加噪声的过程。我们一步一步地添加噪声,重复很多次,直到最终在右侧得到纯粹的白噪声。如果你对一张图像持续添加少量高斯噪声,最终会破坏图像的所有视觉内容,得到白噪声。这个前向过程通常是固定的,我们称之为前向扩散过程。
  2. 反向过程:这是一个从噪声开始,逐步去除噪声以重建图像的过程。这个过程从右向左进行,即从噪声开始,返回数据。这个过程可以被视为一个生成过程,因为它从噪声开始,学习一步一步地从右侧向左侧对输入图像进行去噪。因此,你可以将这个反向去噪过程看作生成过程。这实际上是参数化的部分,我们将尝试训练它,以便能够生成可爱猫咪的样本。

深入理解两个过程

让我们更深入地探讨这两个过程。我们假设这些过程定义在T个步骤上,这个大写的T通常非常大,例如1000步。

前向过程:我们使用马尔可夫过程来定义前向过程。这个过程定义了所有噪声实例的分布。从 x_0(原始数据)到 x_1,一直到 x_T。它使用条件概率的乘积来定义这些噪声实例的联合分布,每个条件概率定义在每个采样步骤上。给定 x_{t-1},我们定义下一个状态 x_t 的分布。这只是一个简单的马尔可夫过程。

每个条件分布也只是一个简单的正态分布。每个条件分布以前一步的样本(例如图像)作为输入,将其乘以一个标量 sqrt(1 - β_t)β_t 通常是一个非常小的正值,如0.001),这个标量略小于1,因此这个系数会使样本略微缩小。然后我们加上 β_t 项,它再次添加一点高斯噪声。所以在每一步,我们基本上只是取前一步的样本,将其稍微缩小一点,然后添加一点噪声。你可以将其视为扩散,它一步一步地扩散样本。

反向过程:反向过程也是一个马尔可夫过程,从 x_T 开始。我们假设我们知道 P(x_T) 的分布,例如它可以表示为标准正态分布。我们设计前向过程,使得我们知道任何数据点最终都会被映射到例如标准正态分布。因此,我们假设在最后 x_T 的分布是正态的。然后,我们再次定义一个从该处样本开始的马尔可夫过程,定义这些噪声步骤的联合分布。同样,我们需要推断给定当前输入噪声图像 x_t 时,其去噪版本 x_{t-1} 的分布。

这些模型做了一个非常简单的假设:它们也假设去噪模型是高斯分布。这里的高斯分布以当前步骤的 x_t 作为输入,并预测其噪声更少的版本。为此,我们需要均值和标准差(或方差)。方差部分很容易,我们通常可以将其设置为与前向过程中使用的方差 β_t 相同。然而,均值部分变得棘手,这实际上是我们需要训练模型的部分。这个均值实际上是一个可训练的神经网络,它以当前噪声图像作为输入,并预测其噪声更少版本的平均值。

总结

本节课中,我们一起学习了去噪扩散模型的基本原理。我们了解到,它通过一个固定的前向过程逐步破坏数据,再通过一个可学习的反向过程从噪声中重建数据,从而实现生成建模。这种模型在图像生成等任务上展现出了卓越的性能,是当前深度生成学习领域的一个重要发展方向。

040:Transformer模型

在本节课中,我们将学习Transformer模型。这是一种在现代人工智能和机器学习中极为重要的架构,尤其在自然语言处理领域。

我们将从一篇名为《Attention Is All You Need》的核心论文出发。这篇2017年发表的论文引用次数已超过10万次,这充分说明了Transformer模型的重要性。

我们不打算直接罗列Transformer的各个组件,而是尝试一起设计和构建一个Transformer模型。我们将思考为什么需要特定的处理流程和模块,以及我们有哪些设计选择。通过这个过程,希望能加深理解,甚至激发改进现有架构或创造新架构的想法。

问题定义与应用场景 🎯

我们将聚焦于一个自然语言处理应用:机器翻译。Transformer模型已被广泛应用于多种领域,事实上,在本节课或下节课,我们还会讨论将其应用于图像领域的视觉Transformer。

假设我们有一个西班牙语短语“Me encanta UMD”(我使用了谷歌翻译,不确定是否完全准确)。我们的目标是开发一个基于Transformer的方法,将其翻译成英语:“I love UMD”。

整体架构:编码器-解码器 📐

Transformer的整体架构是编码器-解码器结构。

输入是原始句子“Me encanta UMD”。输出是我们希望生成的翻译版本“I love UMD”。

首先,文本会经过模型的一部分,称为编码器

编码器的任务是为每个单词或标记编码信息。更具体地说,它需要基于整个短语的上下文,为每个单词生成一个向量表示。因此,对于三个单词的输入,编码器将输出三个向量,向量的长度是一个设计选择。

你可能熟悉词嵌入的概念,它可以将单词或标记映射为一个向量。如果直接进行词嵌入,我们会得到每个单词独立的向量表示。

但这里存在一个问题:我们希望每个标记的嵌入表示也包含上下文信息,而不是与上下文无关。因此,我们需要在这些路径之间建立某种依赖关系,让每个向量不仅包含自身的信息,也包含其他标记的信息。这就是编码器需要完成的工作。

编码器为每个标记生成了融合上下文信息的向量后,这些信息将被传递给解码器

解码器的任务是根据编码信息进行解码,在这个应用中就是进行翻译。解码过程通常从一个通用的起始标记开始,例如“”(句子开始)。

在第一步解码中,解码器以起始标记为输入,生成第一个输出单词“I”。在第二步解码中,解码器的输入不仅包括起始标记,还包括上一步生成的单词“I”,然后它生成下一个单词“love”。这个过程持续进行。

一个关键点是,在整个解码过程中,编码器是固定不变的。一旦原始短语的信息被编码完成,解码器就基于这个固定的编码信息,反复预测下一个单词。

解码过程会持续,直到生成一个特殊的结束句子标记,例如“”,此时翻译完成。

解码过程与自回归模型 🔄

如上所述,解码器的每一步都依赖于之前生成的所有标记。

正是由于这种特性,这类模型也被称为自回归模型

有一个常见问题:解码是依赖于所有之前生成的标记,还是仅依赖于前一个标记?答案是:依赖于所有之前生成的标记。

总结 📝

本节课我们一起学习了Transformer模型的高级原理。我们了解到Transformer采用编码器-解码器架构来解决如机器翻译等序列到序列的任务。编码器负责将输入序列编码为包含丰富上下文信息的向量表示,而解码器则以自回归的方式,根据编码信息和已生成的部分输出,逐步生成完整的目标序列。这种依赖于全部历史输出的特性,使得Transformer成为一种强大的自回归模型。在接下来的课程中,我们将深入探讨编码器和解码器内部的具体机制。

041:线性注意力

概述

在本节课中,我们将要学习一种名为“线性注意力”的技术。这项技术旨在解决传统注意力机制在处理大量输入时,计算和存储成本过高的问题。我们将从回顾标准注意力机制开始,逐步推导出线性注意力的核心思想。


标准注意力机制回顾

上一节我们介绍了Transformer模型中的自注意力机制。本节中,我们来看看其计算复杂度。

注意力矩阵 P 是一个 n × n 的矩阵,它存储了任意一对令牌之间的注意力概率。对于较大的 n,即使只是存储这个矩阵也可能非常昂贵。想象一下,如果你要处理10,000甚至30,000个令牌,仅仅计算这个矩阵就可能代价高昂。

我们通过计算查询向量和键向量的内积来生成这个矩阵。虽然单次内积计算在查询和键的维度上是线性的,但我们需要重复这个操作大约 次。因此,这部分计算可能非常昂贵。

核心问题是:我们如何使这个计算在 n 上是线性的?这就是“线性注意力”的核心思想,它允许我们扩展到更大的输入规模。


模型设定与符号说明

首先,让我们设定一些符号。假设我们有 n 个令牌,每个令牌用 d 维向量表示。在之前的例子中,d 是512,n 是3。这就是输入矩阵 X

Transformer可以被看作是一个映射,它将 nd 维的令牌,转换为 nt 维的令牌。这个映射由 L 个层定义:T₁, T₂, ..., Tₗ

在每一层 l,我们应用以下函数:

  1. 首先,将自注意力层应用于输入 X
  2. 然后,通过残差连接,将输出与输入相加。
  3. 接着,进行层归一化。
  4. 最后,通过一个前馈网络。

用公式总结如下:
Tₗ(X) = FFN(LayerNorm(X + Attention(X)))
其中,前馈网络 FFN 独立地应用于每一行。


注意力机制的数学形式

那么,注意力的具体形式是什么呢?我们首先生成三个矩阵:

  • 查询矩阵 Q:通过 X 乘以权重矩阵 W_q 得到。
  • 键矩阵 K:通过 X 乘以权重矩阵 W_k 得到。
  • 值矩阵 V:通过 X 乘以权重矩阵 W_v 得到。

这里,X 的维度是 ℝ^(n×d)。这些权重矩阵将向量从 d 维映射到 D 维(注意:在原始设计中,D 通常小于 d,例如64)。

使用这三个矩阵,我们形成注意力矩阵 P。这是一个 n × n 的矩阵,其公式基于查询和键的内积:
P = softmax( (Q K^T) / √D )
其中,除以 √D 是为了稳定训练。然后,注意力层的输出就是将该矩阵与值矩阵 V 相乘:
Output = P V
对于多头注意力,我们并行执行多次上述操作,然后将输出拼接并通过一个线性投影层。


重新审视注意力公式

然而,使用上述特定公式并没有根本性的原因。这只是一个很好的初始尝试。你想计算查询和键之间的相似度,可以进行内积,也许进行归一化,然后通过softmax函数。但相似度度量不一定非得是内积。

事实上,如果我们看输出的第 i 行(即第 i 个令牌生成的嵌入向量),我们可以将整个公式重写为一种更通用的形式。

以下是标准注意力输出第 i 行的计算公式:
output_i = Σⱼ ( similarity(q_i, k_j) * v_j ) / Σⱼ similarity(q_i, k_j)
在这个通用公式中,similarity 可以是一个通用的相似度函数,而不仅仅是特定的指数内积形式。

如果我们使用的相似度函数恰好是指数内积形式,即:
similarity(q, k) = exp( (q·k) / √D )
那么,这个通用公式(公式2)就等价于我们之前的标准注意力公式(公式1)。


线性注意力的核心思想

关键在于,如果我们能找到一个特征映射函数 φ,使得两个向量的内积可以表示为它们各自映射后向量的内积,即:
similarity(q, k) = φ(q)·φ(k)
那么,注意力输出的计算就可以被重新组织。

similarity(q_i, k_j) = φ(q_i)·φ(k_j) 代入通用公式(公式2),我们可以进行如下推导:
output_i = [ Σⱼ ( φ(q_i)·φ(k_j) ) * v_j ] / [ Σⱼ φ(q_i)·φ(k_j) ]
由于点积的线性性质,我们可以将 φ(q_i) 提到求和外面:
output_i = φ(q_i)·[ Σⱼ φ(k_j) ⊗ v_j ] / [ φ(q_i)·( Σⱼ φ(k_j) ) ]
这里, 表示外积。

观察这个新公式,我们发现:

  • Σⱼ φ(k_j) ⊗ v_j 是一个矩阵,可以预先为整个序列计算一次,其计算复杂度为 O(n)
  • Σⱼ φ(k_j) 是一个向量,也可以预先计算一次,复杂度为 O(n)
  • 对于每个查询 q_i,我们只需要计算 φ(q_i) 与这两个预计算结果的点积,复杂度为 O(1)

因此,计算所有 n 个输出令牌的总复杂度从 O(n²) 降低到了 O(n),这就是“线性”注意力的由来。


总结

本节课中,我们一起学习了线性注意力的原理。我们从标准注意力机制 O(n²) 的计算复杂度问题出发,通过将相似度函数重新表述为特征映射的内积形式,成功地将计算复杂度降低到了 O(n)。这种方法的核心在于找到一个合适的特征映射 φ,并利用矩阵运算的线性性质重组计算顺序,从而实现对长序列的高效处理。

042:视觉变换器

概述

在本节课中,我们将学习如何将原本为自然语言处理设计的Transformer模型应用于计算机视觉任务,即视觉变换器。我们将探讨其核心思想、面临的挑战以及具体的实现方法。


从NLP到视觉的挑战

上一节我们介绍了Transformer在NLP领域的成功应用。本节中我们来看看如何将其用于图像处理。

Transformer的编码器部分在翻译等NLP任务上表现优异。那么,我们能否将Transformer用于图像分类、分割、检测等视觉应用呢?

首先需要明确的是,Transformer最初并非为图像设计,其输入处理方式是为NLP任务量身定制的。因此,将Transformer应用于图像时,我们需要处理两个领域之间的关键差异。

核心差异分析

以下是NLP与视觉领域在应用Transformer时的主要差异:

  1. 输入性质:在NLP中,输入是离散的单词或子词单元。我们需要通过词嵌入(如Word2Vec)将其向量化。而在视觉中,图像的像素值是连续的实数。从这一点看,图像输入似乎更直接,因为每个像素本身就是一个具有实数值的“单元”,无需经过复杂的词向量化过程。
  2. 输入规模:这是主要挑战。在NLP中,一个句子的令牌数量是有限的。但如果将图像的每个像素视为一个令牌,其数量将极其庞大。例如,对于一个256x256分辨率的图像,你将拥有超过60,000个令牌。若处理1080x1920的高清图像,令牌数量将超过200万。这会导致巨大的计算开销。

视觉变换器的核心思想:图像分块

既然直接将每个像素作为令牌会导致计算困难,我们该如何解决这个问题?

核心思路是:不要以像素级分辨率看待图像,而是将像素分组处理。这类似于在NLP中处理子词或短语,而非单个字符。

实现方法:图像分块

如何对像素进行分组?最简单直接的方法是将图像切割成块

以下是实现步骤:

  1. 分块:将输入图像切割成固定大小的非重叠块。在原始论文中,作者选择的块大小是16x16像素,这也是论文标题“An Image is Worth 16x16 Words”的由来。
  2. 向量化:将每个图像块展平成一个向量。例如,一个16x16的RGB图像块展平后的向量长度为 16 * 16 * 3 = 768
  3. 线性投影(可选):由于展平后的向量可能维度较高,可以通过一个线性投影层来降低其维度。这与NLP中的词嵌入层作用类似,但这里处理的是连续值而非离散令牌。

通过这种方式,我们将一幅图像转换为一系列图像块向量的序列。这个序列就可以作为标准Transformer编码器的输入。每个图像块向量就相当于NLP中的一个“词向量”。


总结

本节课中我们一起学习了视觉变换器的基本原理。我们了解到,将Transformer应用于视觉任务的主要障碍在于图像的高分辨率会导致令牌数量爆炸。解决这一问题的核心创新是图像分块策略,即将图像切割成小块(如16x16像素),并将每个块视为一个令牌输入Transformer。这种方法成功地将Transformer的强大能力扩展到了计算机视觉领域。

043:分层视觉变换器

在本节课中,我们将探讨视觉变换器(Vision Transformers)面临的一个关键问题:分辨率限制。我们将分析这个问题产生的原因,并介绍一种解决方案——分层视觉变换器(Hierarchical Vision Transformers)的核心思想。

上一节我们讨论了视觉变换器缺乏归纳偏置和层级结构的问题。本节中,我们来看看第三个主要问题:模型性能受限于图像块(patch)的分辨率

在视觉变换器中,每个图像块被视为一个独立的元素进行处理。这类似于语言模型中,每个单词被当作一个独立单元。然而,在图像领域,这可能带来问题。

分辨率限制的问题

以下是高分辨率视觉任务中,使用大尺寸图像块(如16x16)可能遇到的问题:

  1. 图像分割困难:图像分割任务需要为每个像素分配一个分割值。如果输入是16x16的图像块,模型无法输出像素级的分割结果,因为信息在初始阶段就被聚合了。
  2. 小物体检测失败:如果一个图像块内包含多个小物体(如多个人或物体),模型无法检测出这些独立的个体,因为它只处理整个块的信息,而非块内的细节。
  3. 像素级理解缺失:对于需要在像素级别理解图像的任务,使用大尺寸图像块会丢失必要的细节信息。

问题的核心在于,一旦图像被分割成较大的块并转换为向量,块内部的精细信息就难以在后续处理中恢复。

解决方案的思路

那么,如何解决这个问题呢?一个直观的想法是:在模型的早期层使用更高分辨率的图像块(即更小的块尺寸)

例如,我们可以从4x4甚至1x1(单个像素)的块开始。这样,模型在初始阶段就能接触到更精细的图像信息。

然而,这立即带来了一个挑战:计算量剧增。如果一张1920x1080的图像被分割成1x1的块,将产生超过200万个令牌(tokens),这对Transformer的自注意力机制来说是巨大的计算负担。

因此,解决方案需要兼顾两点:

  1. 在早期层使用小尺寸图像块以保留细节。
  2. 在模型架构内部设法减少计算开销

分层视觉变换器的核心思想

分层视觉变换器采纳了上述思路。其核心策略是:在早期层使用高分辨率(小尺寸)的图像块,然后通过模型深层的某种设计,逐步降低分辨率并节省计算

这就像管理预算,我们需要审视计算开销的“订阅项”,在架构设计中只保留最重要的部分,以高效的方式处理高分辨率输入。

具体而言,该论文提出的方法是从4x4的图像块开始。

本节课中我们一起学习了视觉变换器在处理高分辨率任务时面临的分辨率限制问题。我们分析了该问题的成因,并引出了分层视觉变换器的基本思想:在模型早期使用小尺寸图像块以捕获细节,同时通过架构创新来管理随之增加的计算复杂度。下一节,我们将深入探讨这种分层结构的具体实现方式。

044:扩散模型

在本节课中,我们将要学习扩散模型。扩散模型是一种生成模型。我们已经讨论过变分自编码器、生成对抗网络和标准化流模型。扩散模型在问题设定上大致相似。

概述

我们的问题设定如下:给定一个训练集。从最简单的情况开始,稍后我们会讨论更复杂的、可以接受额外输入(而不仅仅是图像)的生成模型。训练集包含 N 张图像。

我们假设这些图像来自一个我们未知的底层分布,我们称这个分布为 Q_data(x)

我们的目标是学习一个生成模型 P_θ(x),使得 P_θ(x) 在分布上与底层数据分布相似。这个假设确保了我们生成的样本是逼真的。此外,我们还希望能够轻松地从 P_θ 中生成样本。

这与我们讨论变分自编码器、生成对抗网络和标准化流模型时的问题设定相同。在这些模型中,我们将 x 表述为一个函数,例如 x = f_θ(z),其中 z 是噪声或潜在变量。通常,我们根据高斯分布生成 z,然后将其通过我们的 f_θ 函数。在 GAN 中,这被称为生成器;在 VAE 中,被称为解码器;在标准化流中,被称为流函数。

扩散模型在目标上并无不同。我们同样希望学习一个从噪声到真实图像的函数 x = f_θ(z),使得输出的分布与真实图像的底层分布相匹配,尽管我们并不知道那个分布。设定和目标是一样的。

唯一的区别在于,扩散模型中使用的函数 f_θ 会比 GAN、VAE 或标准化流中的函数更复杂一些。

扩散模型的核心思想

扩散模型使用的生成函数 f_θ 不同。你将看到,这个函数涉及对图像进行添加去除噪声的操作。我们将考虑一系列递归地添加和去除噪声的函数,并展示这些函数如何能够生成逼真的样本。

但从高层次看,其问题设定与 GAN、VAE 和标准化流相同。事实上,我们构建这个函数的方式,与我们最初思考 VAE、GAN 和标准化流问题时的方式极为相似。

扩散过程详解

在扩散模型中,如前所述,我们使用的函数族涉及对图像进行添加和去除噪声。

其工作原理如下:在训练期间,你有一些原始的真实图像。我们称其中一个样本为 x_0,它是数据集中的一个样本。这个样本来自一个分布,如前所述,这个分布称为 Q_data。问题在于我们不知道这个底层分布,这正是我们在讨论生成模型时试图处理的核心问题。

在扩散过程中,我们将递归地向训练集中的样本添加噪声。这被称为前向过程。你将看到为什么这在生成过程中会变得有用。

我们递归地添加噪声。从你的原始图像 x_0 开始,添加一些噪声,得到一个带噪版本 x_1。然后,在这个带噪版本上添加更多噪声,得到一个噪声更重的版本 x_2。如此反复,直到你基本上破坏了原始样本中的所有信息。当你添加越来越多的噪声后,最终的图像基本上就是一张纯噪声图像,你无法从中看到原始内容。

让我们为每个部分命名。这里展示的是你训练集中的一个样本。我假设该样本来自你的分布,所以你的训练样本有一个分布,这些是无噪声的原始样本,我们称这个分布为 Q(x_0)

当我们添加噪声时,每一步,每个样本都会变成前一个时间步样本的更嘈杂版本。你实际上是在改变整个分布。在这一步,你将得到分布 Q(x_1)。因此,每个样本都变得稍微嘈杂一些。

总结

本节课中,我们一起学习了扩散模型的基本概念。我们了解到扩散模型是一种生成模型,其目标与变分自编码器、生成对抗网络和标准化流模型相同:学习一个生成模型来匹配未知的底层数据分布,并实现轻松采样。

扩散模型的独特之处在于其生成函数 f_θ 涉及递归的添加噪声(前向过程)和去除噪声(反向生成过程)操作。我们从高层次概述了前向过程如何逐步将原始清晰图像转化为纯噪声,为后续学习如何从噪声中重建图像奠定了基础。下一节我们将深入探讨反向生成过程的具体实现。

045:一种分数匹配视角

概述

在本节课中,我们将学习扩散模型的一种核心解释视角——分数匹配。我们将探讨什么是分数函数,以及如何利用它来从随机噪声生成数据。理解分数函数是理解扩散模型工作原理的关键。

什么是分数函数?

对于一个给定的数据点 x,我们可以针对某个特定的概率密度函数定义一个分数函数。

假设我们有一个概率密度函数 q(x)。我们首先计算这个密度的对数,这是一个数值。然后,我们计算这个对数函数关于 x 的梯度。

公式:
score(x) = ∇_x log q(x)

这个梯度是一个向量,其维度与 x 相同。这就是分数函数的定义。在扩散模型的上下文中,分数就是这样被定义的。

我们可以为不同的密度函数计算分数。例如,你可以为数据的真实分布计算分数,但这个真实分布通常是未知的。分数本质上定义了一个向量场:在高维空间的每一个点 x 上,分数函数都给出了一个向量。

分数函数的直观作用

显然,我们无法获得真实分布 q(x) 的分数。但让我们假设一下:假设我给了你对应于真实数据分布的分数函数 s*(x)

现在提出一个问题:如果你从某个点 x 出发,沿着分数方向移动一小步,会发生什么?

过程:
x' = x + δ * s*(x)

这里的 δ 是一个小的步长。由于分数是似然对数函数的梯度,这个操作就像是朝着提高似然值的方向走了一小步。因此,新的点 x' 相对于我们计算分数所用的那个分布(这里是真实分布),将具有更高的似然值。

这给了我们一个启发:如果我们拥有真实分布的分数函数 s*(x),也许我们可以从一个随机点(例如,从高斯分布中采样)开始,然后反复应用这个分数更新规则。

迭代过程:
x_{k+1} = x_k + δ * s*(x_k)

我们从一个高斯分布开始采样。对于采样的每一个点,我们根据分数函数进行更新,得到一个新的点。不断重复这个过程,我们实际上是在逐步改变点的分布。

一个关键问题

现在,一个关键问题是:如果我们从高斯分布的样本开始,并且使用真实分布的分数函数进行更新,经过足够多的小步长迭代后,最终得到的分布会收敛到真实分布吗?

上一节我们介绍了利用分数函数迭代更新样本点的想法。本节中,我们来看看这个过程是否能引导我们回到真实的数据分布。

这是一个核心问题。请思考:你认为最终分布会收敛到真实分布吗?

(根据课堂互动,后排的同学大多认为会收敛,而前排的同学则持怀疑态度或未表态。这是一个值得深入探讨的问题。)

总结

本节课中,我们一起学习了分数函数的核心概念。我们定义了分数是概率密度对数关于数据的梯度。我们探讨了如何利用(假设已知的)真实分数函数,通过迭代更新将随机噪声样本“推”向更高似然区域,从而可能逼近真实数据分布。最后,我们提出了一个关于该过程最终收敛性的开放性问题,为后续深入理解扩散模型的训练与采样机制奠定了基础。

046:AI与虚假信息在选举中的风险

概述

在本节课中,我们将探讨人工智能与虚假信息在选举期间可能带来的风险。我们将分析2024年选举面临的独特挑战,了解生成式AI工具如何被用于制造虚假内容,并讨论政策制定者、研究人员和技术专家为解决这些问题所提出的方案。


选举背景与AI挑战

2024年的竞选活动正成为近年来最具影响力的美国选举之一。不同候选人提出的愿景存在巨大差异,全世界的人们都在密切关注美国大选。

与此同时,旨在创造虚假内容、视频和音频的新型生成式AI工具已经出现。这对2024年而言是一个特殊的挑战,因为全球约有一半人口将在今年参与投票。美国、印度、印度尼西亚、墨西哥、巴基斯坦、欧盟及其他许多国家都将举行重要选举。

全球许多人都在担忧这些选举,担心它们可能最终基于虚假叙事而决定。所有这些发展都引发了关于我们自身2024年选举可能面临的风险,以及虚假信息在竞选活动中可能扮演角色的有趣问题。


专家观点:政策应对与监管

上一节我们介绍了选举面临的宏观挑战,本节中我们来看看政策层面的应对措施。

达雷尔·韦斯特与他的布鲁金斯学会同事合著了一本关于虚假信息的书,他们认为必须认真对待虚假信息,它确实对我们的选举构成了潜在威胁。书中分析了虚假信息背后的有组织网络,并概述了虚假信息的逐利本质。存在庞大的生态系统,它们发现传播虚假叙事非常有利可图。因此,他们提出了一系列建议,并指出要真正解决问题,必须同时考虑有组织网络以及人们传播此类信息的财务和政治动机。

以下是关于监管与立法的具体讨论:

联邦选举委员会专员肖娜·布朗萨德指出,当前应对虚假信息的一种方式是通过州立法。已有14个州在如何为内容添加免责声明或提高透明度方面进行了立法尝试。最近由两党参议员提出的一项立法,触及了通过免责声明努力来对抗并告知公众关于AI错误信息的核心方法。在处理言论,特别是政治言论时,免责声明涉及第一修正案权利的巨大争议,但法院已裁定,涉及披露时,免责声明仍然是可行的。因此,她对州和联邦层面正在推进的免责声明努力抱有最大希望。

关于联邦选举委员会可能出台的2024年AI使用指南,这是一个正在进行的规则制定过程。一个公共监督组织提交了一份请愿书,旨在通过现有关于欺诈性虚假陈述或招揽的法规来监管AI。该请愿书进入了公示阶段,委员会收到了非常多的公众意见,总计2400条,这表明每个人都对这个话题感兴趣。收到的意见来自双方,但绝大多数意见都支持推进某种形式的人工智能监管。


专家观点:技术风险与可信AI

上一节我们讨论了政策监管,本节中我们将从技术角度审视AI带来的具体风险。

马里兰大学的索希尔·费教授致力于开发可信AI。他认为,AI可能带来的最大风险之一是使用生成式AI模型制造错误信息和虚假信息。在过去几年中,用于文本、图像、视频和音频的生成式AI模型质量有了显著提升。它们不仅能生成逼真的样本,而且在许多情况下不会在内容上留下可见或不可见的签名,这使得我们日后难以对这些内容进行事实核查。

以下是生成式AI带来的三大风险扩展:

  1. 规模、速度和灵活性:这些生成模型可用于生成成千上万个样本,速度极快。它们可以针对特定选民群体生成内容,以最大化影响,从而进行选民操纵。
  2. 内容真实性难以甄别:模型生成的内容高度逼真,缺乏可靠的数字指纹,使得检测和溯源变得异常困难。
  3. AI检测工具本身的风险:用于对抗此问题的AI检测器本身可能带来风险。大量研究表明,针对文本、图像、视频和音频的AI检测器并不可靠,具有很高的误报率。这意味着,如果在选举前出现了关于候选人的真实图像或视频内容,这些真实证据若被检测器错误地标记为AI生成,则可能被用来伪造事实。这个风险在政策领域较少被研究和强调。

专家观点:政策评估与跨领域合作

北卡罗来纳大学的马特·佩罗特教授长期观察科技政策。在评估公共政策问题时,他最近受到奈特基金会新投资的启发,该基金会正在投资于“转化性工作”。他们正与乔治城大学合作在华盛顿特区建立一个中心,专注于学术界和公共政策制定者之间的转化工作。他认为,在思考如何应对AI和选举的挑战时,这种连接研究与实际政策的桥梁工作至关重要。


总结

本节课中,我们一起学习了人工智能与虚假信息在2024年全球选举周期中构成的复杂风险。我们了解到,生成式AI工具使得制造和传播逼真虚假内容变得前所未有的容易,这对民主进程构成了严重威胁。我们从政策层面探讨了通过立法和监管(如免责声明)进行应对的努力,也从技术层面分析了AI在制造虚假信息、操纵选民以及检测工具自身不可靠性等方面的具体风险。最后,我们认识到,解决这一问题需要政策制定者、技术专家和学术界之间的紧密合作与“转化性工作”。保护选举的公正性需要多管齐下,既要发展更可靠的技术解决方案,也要建立更健全的法律和政策框架。

047:潜在扩散模型与条件图像生成

在本节课中,我们将要学习潜在扩散模型的核心思想,了解它如何解决高分辨率图像生成的计算难题。随后,我们将探讨条件图像生成的概念,看看如何为生成过程添加额外的控制。

潜在扩散模型

上一节我们介绍了基础的扩散模型。本节中我们来看看如何将其应用于高分辨率图像生成。

图像通常具有高分辨率,例如1024x1024像素,这意味着超过一百万个像素。在生成过程中,无论是考虑DDPM还是训练阶段,都需要处理维度极高的向量(数百万个数字)。这带来了可扩展性问题,训练这些模型非常困难,快速生成高分辨率图像也颇具挑战。

这里的解决方案是使用一个编码器-解码器结构。核心思想是压缩输入到一个更小的维度空间(潜在空间),在那个空间中进行扩散过程,然后再解码回来。

以下是具体步骤:

  1. 编码:使用一个编码器将输入图像 x 映射到一个更小维度的潜在空间表示 z
  2. 潜在空间扩散:在潜在空间 z 中执行前向(加噪)和反向(去噪)扩散过程。
  3. 解码:使用一个解码器将去噪后的潜在表示 z 映射回图像空间,得到输出

这样,原本需要处理百万维向量的工作,被简化为处理维度低得多的潜在向量(例如从1024x1024压缩到32x32),计算效率得到极大提升。

编码器与解码器的选择

在原始论文中,编码器和解码器采用了一种与VQ-GAN非常相似的结构。需要强调的是,这个编码器-解码器是固定不变的,在扩散模型训练期间不进行优化。你可以使用任何现成的编码器-解码器。

以下简要说明VQ-GAN是如何被单独训练的(这是一个旁注,帮助你理解其原理):

  1. 输入 x 通过一个CNN编码器得到潜在表示。
  2. 对该潜在表示进行量化。每个量化的数字对应一个码本中的向量。
  3. 量化后的表示通过一个CNN解码器重建为图像

其训练损失函数结合了以下几项:

  • 重建损失:使用LPIPS距离而非简单的L2距离。LPIPS是一种基于预训练网络特征空间的感知距离,能更好地捕捉图像间的感知差异。
  • 对抗损失:引入一个基于Patch的判别器,确保生成图像局部块的真实性。这与我们在GAN课程中提到的确保数据分布一致性的思想类似。
  • 量化:通过码本实现,为潜在空间引入结构,使得微小变化不会显著改变潜在编码,这被认为能提升生成质量。

条件图像生成

到目前为止,我们讨论的生成模型是在广义上的:你有一些训练样本(例如猫或狗的照片),然后训练一个模型来生成类似的图像。

但在许多实际应用中,你可能希望拥有额外的控制。例如,根据文本描述生成图像,或者基于一张草图生成完整图片。这就是条件图像生成的目标:在给定某种条件 c(如文本、类别标签、另一张图像)的情况下,生成符合该条件的图像 x

其核心是将条件信息融入到生成过程中。对于扩散模型,这通常意味着在去噪过程的每一步,模型不仅接收带噪图像 z_t 和时间步 t,还接收条件 c,从而预测噪声或干净图像。公式可以表示为:

噪声预测网络:ε_θ(z_t, t, c)

数据预测网络:x_θ(z_t, t, c)

通过这种方式,生成过程被引导至与给定条件相符的数据分布区域。


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

  1. 潜在扩散模型:通过编码器-解码器将高维图像扩散过程转移到低维潜在空间,大幅提升了高分辨率图像生成的效率和可扩展性。
  2. VQ-GAN:一种常用的固定编码器-解码器架构,其训练结合了感知重建损失和对抗损失。
  3. 条件图像生成:扩展了生成模型的能力,使其能够根据额外的输入条件(如文本)生成可控的、符合特定要求的图像。

048:大型语言模型

概述

在本节课中,我们将要学习语言模型。语言模型是处理文本数据的模型,广泛应用于翻译、问答等任务。核心挑战在于如何将离散的单词或句子转换为数学模型可以处理的向量形式。我们将从经典的Word2Vec模型开始,探讨词嵌入的基本思想及其重要性。


从图像到文本:输入表示的挑战

在之前的课程中,我们讨论了图像模型。图像可以自然地表示为向量,这与模型的输入格式兼容。但在处理语言时,我们遇到了一个问题:单词本身并不是可以直接输入到数学模型中的数学对象。

为了应对这个问题,研究人员提出了词嵌入技术。接下来,我们将介绍一个具有里程碑意义的模型。


Word2Vec:从词到向量的映射

Word2Vec是2014年提出的一篇极具影响力的论文。在深入探讨更复杂的现代语言模型(如GPT)之前,了解其历史背景和基本原理非常重要。

顾名思义,Word2Vec是一个模型,它接收单词或标记作为输入,并生成向量或嵌入作为输出。

你可能会想:为什么需要训练这样一个模型?难道不能简单地为每个单词分配一个唯一的随机向量吗?例如,对于句子“Apple is great”,我可以为“Apple”、“is”、“great”分别映射一组随机数字。

然而,这样做忽略了单词之间的语义关系。我们期望词嵌入能具备一些关键属性。


理想词嵌入的属性

以下是词嵌入应具备的两个重要属性:

  1. 语义相似性:如果两个单词在语义上相似,那么它们的嵌入向量也应该相似。这使得数学模型更容易处理语义相近的单词。例如,“great”和“awesome”的向量应该接近。
  2. 关系可推理性:嵌入空间应能编码单词之间的关系。例如,假设我们有代表“Apple”的向量和代表“purple”的向量。将这两个向量相加(Apple + purple),我们期望得到的向量能接近代表“plum”的向量,这体现了“苹果”加上“紫色”得到“李子”的某种关系。

Word2Vec如何学习词嵌入

那么,如何学习具备上述属性的词嵌入呢?其核心思想是:通过上下文预测目标词来学习嵌入

我们通过一个例子来解释。再次考虑句子“Apple is great”。

  1. 首先,为词汇表中的每个单词(如“Apple”、“is”、“great”)随机初始化一个向量。
  2. 假设我们想预测“great”这个词。我们可以取目标词“great”的相邻词(如“Apple”和“is”)的嵌入向量,将它们相加(或取平均)。
  3. 得到一个上下文向量后,我们尝试让这个向量能够正确预测出目标词“great”。
  4. 通过反向传播算法,更新所有相关单词的嵌入向量,使预测更准确。

本质上,可以将Word2Vec看作一个简单的神经网络。它聚合相邻词的嵌入,形成一个向量,并试图通过优化(如softmax)使其能够正确预测目标词。这个方法有许多变体,例如窗口大小的选择。


总结

本节课我们一起学习了语言模型的基础。我们认识到将文本转换为数学表示的挑战,并介绍了Word2Vec这一经典解决方案。Word2Vec通过“用上下文预测词”的方式,学习到的词嵌入不仅捕获了单词的语义相似性(如“great”与“awesome”接近),还能编码单词之间的关系(如“Apple” + “purple” ≈ “plum”)。这为后续更复杂的大型语言模型奠定了重要的基础。

049:大语言模型微调方法

在本节课中,我们将探讨如何对大语言模型进行微调。由于这些模型参数量巨大,直接微调会面临存储和计算上的巨大挑战。因此,我们将介绍几种旨在降低微调成本的主流技术,特别是适配器方法和LoRA技术。

微调的挑战

上一节我们介绍了大语言模型的基本概念。本节中我们来看看对其进行微调时面临的实际问题。

大语言模型参数量非常庞大。例如,GPT-3拥有超过1750亿个参数,而像PaLM这样的模型参数更多。如今,人们甚至使用混合专家模型,规模更为巨大。这意味着,即使只是存储模型的权重,对单个GPU来说也极具挑战性,因为需要存储数千亿个数字。此外,为了针对特定应用调整模型,还需要在其基础上进行计算。因此,微调大模型存在存储和计算两方面的问题,需要大量的内存和算力。

为了解决这个问题,业界提出了多种方案,旨在为下游应用实现轻量化的存储和计算。我们将讨论文献中并非所有,但可能是实践中被广泛采用的最成功的几种解决方案。

适配器方法

以下是适配器方法的核心思想。

适配器的想法很简单。假设你有一个大型模型。在微调过程中,我们不改变模型的所有权重,而是专门设置一些特定的层,称为“适配器”。这些层可以在微调过程中被调整。模型的其余部分权重保持不变,与预训练模型相同。只有网络中的某些部分被允许适应特定的任务设置。这本质上就是适配器的思想。它的优势在于,可以根据适配层的数量,显著减少微调期间需要更新的参数量。

低秩自适应

一个特定的适配器家族被称为LoRA,即低秩自适应的缩写。适配器有不同的实现方式,这里我们介绍这个家族中最成功的实例。

为了提供背景,有一篇论文通过实证分析表明,如果你观察模型参数的分布,它们本质上是低秩的。最近还有一篇名为“扩散冗余”的论文指出,即使在经典的ResNet模型中,你也可以在倒数第二层随机采样特征,而模型性能依然保持良好。这表明模型权重中存在大量冗余,即使丢弃相当一部分,模型在基准测试上的性能也基本不受影响。

另一篇论文在此基础上提出了进一步的观点。他们认为,不仅模型参数本身具有较低的固有维度,而且在微调过程中,模型参数的变化量也具有较低的固有维度。这是他们基于观察得出的一个结论。

基于这一观察,他们提出了一个非常简单的想法。假设你的模型中有一组权重 W,你想在微调中更新这些权重。从初始权重 W₀ 开始,权重变为 W₀ + ΔW,其中 ΔW 是微调期间对权重所做的更改。

他们提出的方法不是直接学习 ΔW,而是将其分解为两个低秩矩阵的乘积:
ΔW = B × A

我们确保这些矩阵是低秩的。假设你的 ΔW 矩阵维度是 D × K(其中D和K可能是很大的数字)。我们将矩阵 B 的维度设为 D × r,矩阵 A 的维度设为 r × K。显然,它们的乘积会得到一个 D × K 的矩阵。但如果 r 远小于 DK 的最小值,那么需要存储和训练的参数总量(BA 的元素之和)将远小于直接学习完整的 D × KΔW 矩阵。在微调期间,我们只训练这两个小矩阵 BA,而保持原始的大型预训练权重 W₀ 冻结不变。最终的前向传播使用组合权重 W₀ + BA 进行。

本节课中我们一起学习了微调大语言模型所面临的挑战,并重点介绍了一种高效的解决方案——低秩自适应。通过将权重更新分解为低秩矩阵的乘积,LoRA等方法显著减少了需要训练的参数数量,降低了计算和存储需求,使得在有限资源下微调超大模型成为可能。

posted @ 2026-03-26 13:08  布客飞龙IV  阅读(11)  评论(0)    收藏  举报