斯坦福-CS229-M-机器学习-2024-笔记-全-
斯坦福 CS229/M 机器学习 2024 笔记(全)
机器学习 1:引言与线性代数回顾 📚


在本节课中,我们将学习机器学习课程的基本介绍,并回顾线性代数的核心概念,为后续的机器学习算法学习打下坚实的数学基础。
课程概述与目标 🎯
我是Anand Avati,是计算机科学专业的四年级博士生。我与Andrew Ng教授合作,主要研究机器学习及其在医疗健康等领域的应用。我们还有一个优秀的助教团队。
本课程有三个主要目标:
- 使大家成为机器学习的专家,这意味着不仅要会使用算法,更要理解算法内部的运作原理。
- 使大家能够构建机器学习应用,这意味着要理解在何种场景下使用何种算法,以及如何判断一个问题是否适合用机器学习解决。
- 使大家能够开始进行机器学习研究,这意味着让大家熟悉阅读机器学习研究论文时会遇到的大量术语和概念。
先修要求与课程守则 📝
机器学习是数学和计算机科学的结合。因此,你需要具备以下基础:
- 计算机科学基础:了解大O表示法等基本概念,并能熟练使用Python和NumPy编写非*凡的程序。
- 概率论基础:熟悉随机变量、分布、期望等概念。
- 线性代数与多元微积分:熟悉梯度、海森矩阵、特征值、特征向量等概念。
关于学术诚信守则:
- 强烈鼓励组建学习小组讨论问题,这对成功完成课程至关重要。
- 但作业和代码必须独立完成。讨论后,请放下所有讨论材料,独立从头开始撰写作业。
- 严禁参考往年作业的官方答案或其他学生上传的解决方案,这是严重违反学术诚信的行为。
课程结构与后勤 📅


课程结构如下:
- 共有三次作业,每次作业持续约两周,各占总成绩的20%。
- 有一次期末考试,将是开卷考试(需使用电脑),很可能为24小时制。
课程后勤信息:
- 课程网站:cs229.stanford.edu。包含教学大纲、日历和Piazza链接。
- Piazza论坛:所有课程公告、作业发布和考试安排都将在此发布,请务必注册并关注。
- GradeScope:所有作业提交和评分都在此*台进行。
如有问题,请按以下优先级处理:
- 课程内容或后勤问题:在Piazza上公开提问。
- 个人事务(如申请延期、提交OAE信):在Piazza上私信我。
- 其他仅需我知晓的事宜:直接发送邮件给我,主题请包含“CS229”。

什么是机器学习?🤖
“机器学习”一词由Arthur Samuel于1959年提出。他编写了一个跳棋程序,该程序通过自我对弈学习,在没有明确编程策略的情况下,其游戏水*最终超过了Samuel本人。这激发了人们对机器学习的广泛兴趣。
Tom Mitchell教授给出了一个更通用的定义:机器学习是研究能够通过经验自动改进的计算机算法的领域。这里的“经验”通常指过去的数据或示例。机器学习算法是一个通用模板,你向其输入过去的训练数据,算法通过分析数据、寻找模式,从而提高其在特定任务上的性能。
机器学习是人工智能的一个子领域。人工智能的目标是构建性能达到人类认知水*的程序,而机器学习是实现此类程序的一种方法,其核心在于利用数据。*年来,深度学习的进展极大地推动了机器学习乃至整个AI领域的发展。
机器学习应用实例 🌟
机器学习已在多个领域取得显著进展:
- 计算机视觉与图像识别:卷积神经网络等模型彻底改变了这一领域,也是自动驾驶中感知行人和交通标志的关键技术。
- 语音识别:使得Siri、Google Assistant等语音助手成为可能。
- 语言翻译:谷歌翻译等工具已使用深度学习,甚至出现了无需配对语料就能进行翻译的无监督学习模型。
- 强化学习:在游戏领域表现突出,例如DeepMind的模型能在雅达利游戏和围棋上达到超人类水*。
课程内容预览 📖
本季度我们将学习以下内容:
- 监督学习:训练数据是成对的(输入和输出)。根据输出类型,可分为回归问题(输出为连续值,如预测风速)和分类问题(输出为类别,如预测是否下雨)。
- 无监督学习:算法在没有明确监督(即没有标注输出)的情况下,从数据中寻找模式或结构,例如聚类或降维。
- 深度学习:也称为表示学习,让算法自动学习数据的有效表示,可应用于监督、无监督和强化学习场景。
- 学习理论:探讨机器学习为何有效的根本原理,如偏差-方差分解、泛化能力等。
- 强化学习:智能体通过与环境交互获得的奖励来学习策略。
以下是具体例子:
- 监督学习示例 - 图像分类:使用MNIST手写数字数据集,输入是像素,输出是0-9的数字类别。
- 无监督学习示例 - 鸡尾酒会问题:给定两个混合了两人声音的录音,算法能自动分离出两个独立的音源,无需任何监督。
- 强化学习示例 - 倒立摆控制:算法通过多次尝试,学习如何控制小车保持杆子*衡。

为什么需要线性代数?🔢
线性代数在机器学习中至关重要,主要用于:
- 表示数据:例如,在监督学习中,特征可以表示为设计矩阵,标签可以表示为向量。
- 概率表示:例如,用协方差矩阵表示多个随机变量之间的关系。
- 微积分与优化:梯度是向量,海森矩阵是对称矩阵,用于函数优化。
- 核方法:大量使用线性代数运算。
因此,熟练掌握矩阵和向量的操作(如乘法、求逆)非常重要。
线性代数核心概念回顾 📐
基本符号
- 向量:通常表示为列向量
v ∈ ℝ^d,是d维实空间中的一个点。 - 矩阵:表示为
A ∈ ℝ^(m×n),是由实数构成的m行n列网格。特殊矩阵包括单位矩阵I、对角矩阵和对称矩阵(A = A^T)。 - 迹:方阵对角线上元素的和。
向量运算
给定两个向量 x ∈ ℝ^d 和 y ∈ ℝ^d:
- 内积(点积):
x^T y = Σ x_i * y_i,结果是一个标量。要求两向量维度相同。 - 外积:
x y^T,结果是一个矩阵(秩为1的矩阵)。两向量维度可以不同。
多个秩为1的矩阵相加,可以得到更高秩的矩阵,但矩阵的秩不会超过其行数和列数中的较小值。
矩阵-向量乘法
给定矩阵 A ∈ ℝ^(m×n) 和向量 x ∈ ℝ^n,乘积 Ax ∈ ℝ^m。
有两种理解方式:
- 行视角:结果向量的每个元素是A的对应行与x的内积。
- 列视角:结果向量是A的各列向量以x中对应元素为系数的线性组合。
矩阵-矩阵乘法
给定矩阵 A ∈ ℝ^(m×k) 和 B ∈ ℝ^(k×n),乘积 C = AB ∈ ℝ^(m×n)。
有两种理解方式:
- 内积视角:C的第(i, j)个元素是A的第i行与B的第j列的内积。
- 外积视角:C是k个秩1矩阵的和,其中第i个秩1矩阵由A的第i列和B的第i行外积得到。
矩阵的几何解释与秩
我们可以将矩阵 A ∈ ℝ^(m×n) 视为一个函数,它将输入空间(ℝn)中的向量映射到输出空间(ℝm)中的向量。
- 满秩矩阵:在输入和输出空间之间存在一一映射(双射)。存在逆矩阵
A^{-1}可以将输出映射回输入。 - 秩亏缺矩阵:矩阵的秩
r小于其维度。此时存在:- 行空间:输入空间中的一个r维子空间(由矩阵的行张成),其中的向量与输出空间中的向量存在一一映射。
- 零空间:输入空间中与行空间正交的子空间,其中的任何向量被A映射为零向量。
- 列空间:输出空间中的一个r维子空间(由矩阵的列张成),是A所有可能输出的集合。
对于输入空间中的任意向量 x,它可以被唯一分解为行空间分量 x_r 和零空间分量 x_n 的和。矩阵乘法 Ax = A(x_r + x_n) = Ax_r。这意味着,矩阵A的作用相当于先将输入向量投影到行空间上,然后将该投影映射到输出空间的列空间中。
投影计算
如何计算一个向量 b 到由向量 v 张成的一维子空间上的投影?
投影矩阵为 P = (v v^T) / (v^T v)。将 b 乘以 P 即得到其投影:Proj(b) = P b。
更一般地,若要计算向量 b 到由矩阵 X 的列向量张成的子空间上的投影,投影矩阵为 P = X (X^T X)^{-1} X^T。这个公式在线性回归中会再次出现。
特征值与特征向量
对于方阵 A ∈ ℝ^(n×n),考虑它将单位球面(所有长度为1的向量)映射为何种形状。结果通常是一个椭球体。

- 特征向量:那些在变换后方向保持不变(或恰好反向)的向量。即满足
A v = λ v的非零向量v。 - 特征值:缩放因子
λ,表示特征向量在变换后长度变化的比例。- |λ| > 1 表示拉伸。
- 0 < |λ| < 1 表示收缩。
- λ < 0 表示方向反转。
- 几何意义:椭球体的主轴方向就是特征向量的方向,主轴的长度与对应特征值的绝对值相关。
- 与秩的关系:矩阵的秩等于其非零特征值的数量。如果一个特征值为0,意味着在该方向上的映射将空间“压扁”到了更低维度。

本节课中,我们一起学习了机器学习课程的目标、结构和基本概念,并深入回顾了线性代数中与机器学习密切相关的核心内容,包括向量/矩阵运算、矩阵的几何解释、秩、子空间、投影以及特征值/特征向量。理解这些概念对于后续学习各种机器学习算法至关重要。下一讲,我们将回顾矩阵微积分和概率论基础知识。
机器学习 2:矩阵微积分与概率论回顾 🧮🎲



在本节课中,我们将完成对线性代数的回顾,并学习矩阵微积分与概率论的核心概念。这些数学工具是理解后续机器学习算法的基础。
线性代数回顾(续) 🔄
上一节我们介绍了向量、矩阵、特征值与特征向量等概念。本节中,我们来看看矩阵的行列式、二次型以及两种重要的矩阵分解。
行列式的几何意义 📐
矩阵的行列式有一个直观的几何解释。考虑一个输入空间中的单位球体(例如三维空间中的球体)。当我们用矩阵 A 对这个球体进行线性变换时(即对球体上的每一个点应用矩阵乘法),球体会被变换成一个椭球体。
- 行列式的值等于输出椭球体的体积与输入球体的体积之比。
- 如果矩阵 A 不是满秩的(即秩亏),意味着至少有一个特征值为零。此时,变换会将三维球体“压扁”成一个二维椭圆盘,其体积为零。因此,行列式也为零,这解释了为何奇异矩阵(行列式为零)没有逆矩阵。
行列式的公式表示为:
det(A) = λ₁ * λ₂ * ... * λₙ
其中 λᵢ 是矩阵 A 的特征值。
矩阵的二次型与定性 🎯
给定一个对称方阵 A 和一个向量 x,表达式 xᵀAx 称为二次型。它用于定义矩阵的“定性”。
以下是基于二次型值的定义:
- 正定矩阵:对于所有非零向量 x,xᵀAx > 0。其所有特征值均大于零。
- 半正定矩阵:对于所有非零向量 x,xᵀAx ≥ 0。其所有特征值均大于或等于零。
- 负定矩阵:对于所有非零向量 x,xᵀAx < 0。其所有特征值均小于零。
- 不定矩阵:二次型的值可正可负。其特征值有正有负。
几何上,对于正定矩阵,任何输入向量 x 与其变换后的向量 Ax 之间的夹角始终小于90度(点积为正)。这在优化问题中非常重要,例如海森矩阵(二阶导数矩阵)的正定性意味着损失函数是凸的。
矩阵分解 🔧
将矩阵分解为更简单组成部分的乘积,有助于我们理解其作用。以下是两种核心分解:
1. 特征值分解
仅适用于方阵。将一个方阵 A 分解为:
A = UΛU⁻¹
其中:
- U 的列是 A 的特征向量(通常是正交的)。
- Λ 是一个对角矩阵,对角线上的元素是 A 的特征值。
其作用可以理解为三步:1) 用 U⁻¹ 旋转输入,使特征向量对齐坐标轴;2) 用 Λ 沿坐标轴进行缩放(缩放系数即特征值);3) 用 U 旋转回原空间。
2. 奇异值分解
适用于任意矩阵(包括非方阵)。将矩阵 A 分解为:
A = UΣVᵀ
其中:
- U 和 V 都是正交矩阵。
- Σ 是一个对角矩阵,对角线上的元素称为奇异值,总是非负实数。
其作用也可以理解为三步:1) 用 Vᵀ 旋转输入;2) 用 Σ 沿坐标轴进行缩放;3) 用 U 进行另一个旋转。
对于实对称方阵,其特征值分解与奇异值分解是相同的。
矩阵微积分 📈
在机器学习中,我们经常需要优化涉及多个变量的函数(如损失函数),这就需要用到多元微积分,特别是梯度。
函数类型与导数 📊
我们主要关心以下几类函数及其导数:
f: ℝᵈ → ℝ:向量输入,标量输出(如损失函数)。- 一阶导数:梯度 (∇ₓ f ∈ ℝᵈ),指向函数值上升最快的方向。
- 二阶导数:海森矩阵 (H ∈ ℝᵈˣᵈ),是一个对称矩阵,用于判断函数的凹凸性。
f: ℝᵈ → ℝᵖ:向量输入,向量输出(如神经网络层)。- 一阶导数:雅可比矩阵 (J ∈ ℝᵈˣᵖ)。
常用梯度公式 🧮
以下是一些在推导机器学习算法时频繁使用的梯度计算公式:
- 线性形式:若
f(x) = bᵀx,则∇ₓ f = b。 - 二次型:若
f(x) = xᵀAx且 A 对称,则∇ₓ f = 2Ax。 - 对数行列式:对于矩阵 A,
∇ₐ log |det(A)| = A⁻ᵀ。这个公式在处理高斯分布等模型时会非常有用。
计算梯度通常遵循定义:对每个输入变量求偏导数,然后组合成向量或矩阵。链式法则和乘积法则同样适用。
概率论基础 🎲

概率论为机器学习中的不确定性建模提供了框架。
基本概念 🧩
- 样本空间:所有可能随机结果的集合。
- 事件:样本空间的子集。概率是赋予事件的量,满足非负性、归一性和可加性。
- 条件概率:事件 A 在事件 B 发生下的概率,
P(A|B) = P(A∩B) / P(B)。 - 独立性:若
P(A∩B) = P(A)P(B),则事件 A 与 B 独立。

随机变量与分布 📉
- 随机变量:一个将样本空间中的结果映射到实数的函数。它本身不是变量,而是函数。
- 累积分布函数:
Fₓ(t) = P(X ≤ t)。描述了随机变量 X 取值小于等于 t 的概率。 - 概率质量函数:描述离散随机变量取每个特定值的概率。
- 概率密度函数:描述连续随机变量在某个值附*的可能性密度,是 CDF 的导数。





期望与蒙特卡洛估计 ⚖️
- 期望:随机变量函数的“*均值”。对于函数
g和随机变量X,其期望定义为:
E[g(X)] = ∫ g(x) fₓ(x) dx(连续)
E[g(X)] = Σ g(x) P(X=x)(离散)
其中fₓ(x)或P(X=x)是 X 的概率密度或质量函数。 - 蒙特卡洛估计:根据大数定律,我们可以通过采样来*似期望值:
E[g(X)] ≈ (1/n) Σᵢ g(x⁽ⁱ⁾)
其中x⁽ⁱ⁾是从 X 的分布中独立抽取的样本。当样本数n很大时,这个*似会非常准确。这是许多机器学习算法(如随机梯度下降、强化学习)的理论基础。


本节课中我们一起学习了线性代数中行列式与二次型的几何意义、特征值分解与奇异值分解,掌握了矩阵微积分中梯度的计算与理解,并回顾了概率论的核心概念,包括随机变量、分布以及重要的期望与蒙特卡洛估计方法。这些数学工具将贯穿我们整个机器学习课程的学习。
机器学习 3:概率与统计回顾 📊


在本节课中,我们将要学习概率论与统计学的基础概念,并理解它们在机器学习中的核心作用。我们将从概率的基本定义开始,逐步深入到随机变量、期望、方差、多元高斯分布以及最大似然估计。最后,我们会简要介绍统计学与机器学习的联系,并预览下一讲的核心内容——线性回归。
概率论基础回顾

上一节我们介绍了课程的整体安排。本节中,我们来回顾概率论的核心概念。

样本空间与事件
样本空间是所有可能随机实验结果的集合。事件是样本空间的子集。概率被分配给事件,而不是单个随机结果。

随机变量
随机变量是一个函数,它将样本空间中的结果映射到实数线上。这使得我们可以对随机性进行数学运算。例如,一个随机变量可以计算10次抛硬币中正面朝上的次数。
累积分布函数与概率密度函数
累积分布函数(CDF)定义为随机变量取值小于或等于某个阈值的概率。对于所有随机变量,无论是离散还是连续,CDF都存在。
- 离散随机变量:使用概率质量函数(PMF)描述,其高度表示取特定值的概率。
- 连续随机变量:使用概率密度函数(PDF)描述。重要:PDF在某点的高度不是该点的概率。连续随机变量取任何特定值的概率始终为0。概率仅定义在区间上,即PDF曲线下某区间的面积等于随机变量落在该区间的概率。
期望


期望是随机变量的*均取值。只有定义了随机变量后,期望的概念才有意义。对于函数 g(X),其期望定义为:

- 离散情况:
E[g(X)] = Σ_x g(x) * P(X=x) - 连续情况:
E[g(X)] = ∫_x g(x) * f_X(x) dx

其中 f_X(x) 是概率密度函数。我们可以通过蒙特卡洛方法(即采样取*均)来*似期望值。


方差、协方差与多元分布
上一节我们介绍了期望,本节中我们来看看如何衡量随机变量的离散程度以及多个变量之间的关系。
方差
方差衡量随机变量围绕其均值的分散程度。定义为:
Var(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2
协方差
协方差衡量两个随机变量之间的线性相关程度。定义为:
Cov(X, Y) = E[XY] - E[X]E[Y]
注意,Cov(X, X) = Var(X)。
多元高斯分布
多元高斯分布是机器学习中最常用的分布之一。对于一个 n 维随机向量 X,其概率密度函数为:
p(x; μ, Σ) = (1/((2π)^{n/2} |Σ|^{1/2})) * exp(-1/2 (x-μ)^T Σ^{-1} (x-μ))
其中:
μ是均值向量,决定分布的中心位置。Σ是协方差矩阵,是一个对称正定矩阵。它决定分布的形态(分散程度)和方向(变量间的相关性)。(x-μ)^T Σ^{-1} (x-μ)是一个二次型。- 前面的常数项是为了确保整个密度函数的积分为1。
协方差矩阵的对角线元素是各个变量的方差,非对角线元素是变量间的协方差。
条件概率、贝叶斯定理与独立性
理解了联合分布后,我们来看看变量间的条件关系。
联合分布与边缘分布
对于随机变量 X 和 Y,p(x, y) 是联合分布。通过对另一个变量积分(或求和),可以得到边缘分布:
p(x) = ∫_y p(x, y) dy


链式法则与贝叶斯定理


链式法则将联合分布分解为边缘分布和条件分布的乘积:
p(x, y) = p(x) * p(y|x) = p(y) * p(x|y)
由此可以直接推导出贝叶斯定理:
p(y|x) = (p(x|y) * p(y)) / p(x)
其中 p(x) = Σ_{y'} p(x|y') * p(y') (离散情况)。
贝叶斯定理是概率论中最重要的定理之一,在机器学习中无处不在。
独立性
如果两个随机变量独立,则联合分布等于边缘分布的乘积:
p(x, y) = p(x) * p(y)
这也意味着条件分布等于边缘分布:p(y|x) = p(y)。训练样本通常被假设为独立同分布(IID),这个假设简化了许多机器学习理论。
统计学与机器学习
上一节我们回顾了概率论,本节中我们来看看统计学如何与机器学习结合。
概率与统计是相辅相成的两个领域:
- 概率:在参数已知的情况下,对数据/观测值做出陈述(例如,计算概率)。
- 统计:在数据已知的情况下,对参数做出推断(例如,估计参数值、计算置信区间)。
机器学习利用统计工具(如最大似然估计)从训练数据中学习模型参数。然而,机器学习的目标与经典统计不同:
- 经典统计:关注对参数本身做出正确的推断。
- 机器学习:参数只是中间产物,最终目标是利用学到的模型对未来未见过的数据做出准确的预测。模型的好坏由预测性能决定。
最大似然估计
最大似然估计是连接数据和参数的核心统计方法。
似然函数
给定数据 X = {x^(1), ..., x^(m)} 和参数 θ,似然函数 L(θ; X) 在数值上等于概率密度函数 p(X; θ),但解释不同:
- 概率密度:将
θ视为固定,X视为变量。 - 似然函数:将
X(数据)视为固定,θ视为变量。
MLE 步骤
最大似然估计的目标是找到使似然函数最大化的参数值 θ_MLE:
θ_MLE = argmax_θ L(θ; X) = argmax_θ Π_{i=1}^m p(x^(i); θ)
由于对数函数是单调递增的,最大化似然函数等价于最大化对数似然函数,这通常更简单:
θ_MLE = argmax_θ Σ_{i=1}^m log p(x^(i); θ)
高斯分布的 MLE 示例
假设数据 {x^(i)} 独立同分布于多元高斯分布 N(μ, Σ)。其对数似然函数为:
l(μ, Σ) = Σ_{i=1}^m [ - (n/2)log(2π) - (1/2)log|Σ| - (1/2)(x^(i)-μ)^T Σ^{-1} (x^(i)-μ) ]
通过对 μ 和 Σ 分别求导并令导数为零,可以解得:
μ_MLE = (1/m) Σ_{i=1}^m x^(i)(样本均值)Σ_MLE = (1/m) Σ_{i=1}^m (x^(i) - μ_MLE)(x^(i) - μ_MLE)^T(样本协方差矩阵)
这个推导过程用到了之前线性代数复习中的矩阵求导知识。

总结与下节预告
本节课中我们一起学习了概率论与统计学的基础知识,包括随机变量、期望方差、重要的多元高斯分布以及核心的参数估计方法——最大似然估计。我们明确了统计学(通过数据推断参数)与机器学习(通过参数模型预测未来数据)的联系与区别。

在下一讲中,我们将正式进入第一个机器学习算法:线性回归。我们将看到如何将本节的概率框架应用于监督学习问题,即从给定的 (x, y) 数据对中学习一个从输入 x 预测输出 y 的函数 h_θ(x)。
机器学习 4:线性回归 📈


在本节课中,我们将要学习监督学习中的第一个核心算法:线性回归。我们将从基本概念、术语开始,逐步深入到其数学原理、优化方法以及多种不同的理解视角。
1. 监督学习概述与术语 📚
上一节我们回顾了课程所需的数学基础。本节中,我们来看看监督学习的基本框架。
监督学习的目标是学习一个从输入 x 到输出 y 的映射关系。我们通常处理两类问题:回归(输出 y 是连续值)和分类(输出 y 是离散值)。
为了建立统一的讨论基础,我们首先定义以下术语:
- 输入:记作
x,是一个D维向量。 - 输出/标签:记作
y,在回归中是实数,在分类中是离散值(如0或1)。 - 训练集:由
n个样本组成,第i个样本记作(x⁽ⁱ⁾, y⁽ⁱ⁾)。 - 假设函数:记作
h(x),是我们从数据中学到的模型,用于预测新的x对应的y。

监督学习的通用流程是:给定训练集,通过某种学习算法得到一个假设函数 h(x),然后用它来预测未见过的测试数据。
2. 线性回归模型 🧱
现在,我们聚焦于回归问题,并引入第一个具体的模型家族:线性假设。
我们限制假设函数 h(x) 必须是输入 x 的线性组合。具体形式如下:
公式:
h_θ(x) = θ₀ + θ₁x₁ + θ₂x₂ + ... + θ_D x_D
为了书写方便,我们引入一个额外的特征 x₀ = 1。这样,假设函数可以写成向量点积的形式:
公式:
h_θ(x) = θᵀx,其中 θ = [θ₀, θ₁, ..., θ_D]ᵀ,x = [1, x₁, ..., x_D]ᵀ
这里的 θ 称为参数或权重,线性回归的目标就是找到一组最优的 θ。
3. 成本函数与优化目标 🎯
如何衡量一个假设函数 h_θ(x) 的好坏?我们需要定义一个成本函数 J(θ)。
对于回归问题,最常用的成本函数是*方误差成本函数:
公式:
J(θ) = (1/2) * Σᵢ₌₁ⁿ (h_θ(x⁽ⁱ⁾) - y⁽ⁱ⁾)²
这个函数计算了模型在所有训练样本上预测值与真实值差距的*方和。乘以 1/2 是为了后续求导时形式更简洁。我们的目标就是找到能使 J(θ) 最小化的参数 θ̂:
公式:
θ̂ = arg min_θ J(θ)
4. 梯度下降算法 ⬇️
如何求解 min_θ J(θ)?我们介绍第一个优化算法:梯度下降。
梯度下降是一种迭代算法,它从参数的某个初始猜测(如全零向量)开始,反复朝使成本函数下降最快的方向(即负梯度方向)前进一小步。
算法步骤(向量形式):
- 初始化参数
θ(例如θ = 0)。 - 重复直到收敛:
θ := θ - α * ∇_θ J(θ)
其中 α 是一个正数,称为学习率,它控制着每一步的步长。∇_θ J(θ) 是成本函数 J 关于参数 θ 的梯度。
将线性回归的成本函数代入,可以得到具体的更新规则:
公式:
θ := θ - α * Σᵢ₌₁ⁿ (h_θ(x⁽ⁱ⁾) - y⁽ⁱ⁾) * x⁽ⁱ⁾
在实践中,我们通过检查参数变化量 ||θ_new - θ_old|| 或成本函数值变化量 |J(θ_new) - J(θ_old)| 是否小于某个阈值来判断是否收敛。
5. 随机梯度下降 🔄
标准梯度下降在每次更新时需要计算整个训练集(n 个样本)的梯度,当 n 很大时计算代价高昂。
随机梯度下降 是它的一个高效变体。在每次迭代中,SGD 随机均匀地抽取一个样本 (x⁽ⁱ⁾, y⁽ⁱ⁾),并仅基于这个样本计算梯度来更新参数:
公式:
θ := θ - α * (h_θ(x⁽ⁱ⁾) - y⁽ⁱ⁾) * x⁽ⁱ⁾
虽然每次更新的方向“嘈杂”且不稳定,但*均来看,SGD 最终也能在最优解附*震荡,且每次迭代的计算成本极低。小批量梯度下降 是折中方案,每次使用一小批(如64个)样本计算梯度。
6. 正规方程法 📐
对于线性回归,我们幸运地存在一个不需要迭代的精确解析解,称为正规方程。
首先,我们将所有训练样本的输入堆叠成 设计矩阵 X(n 行 D+1 列,包含 x₀=1),输出堆叠成向量 y。成本函数可以重写为:
公式:
J(θ) = (1/2)(Xθ - y)ᵀ(Xθ - y)
通过对 J(θ) 关于 θ 求导并令其为零,我们可以直接解出最优参数 θ̂:
公式(正规方程):
θ̂ = (XᵀX)⁻¹ Xᵀy
这个解要求矩阵 XᵀX 是可逆的。正规方程提供了线性回归的闭式解,而梯度下降则是一种更通用、可用于其他复杂模型的数值方法。
7. 概率解释 🎲
线性回归的*方误差最小化,可以从概率论的角度进行解释。
我们假设输出 y 与输入 x 的关系为:y = θᵀx + ε,其中 ε 是服从均值为0、方差为 σ² 的高斯分布的噪声项,即 ε ~ N(0, σ²)。
这意味着在给定 x 的条件下,y 也服从高斯分布:
公式:
y | x; θ ~ N(θᵀx, σ²)
基于这个概率模型,我们可以写出数据的似然函数,并计算其对数似然。最大化对数似然函数等价于最小化之前的*方误差成本函数 J(θ)。
结论:在误差服从高斯分布的假设下,线性回归的最小二乘估计等价于模型的最大似然估计。这为最小化*方误差提供了一个坚实的概率论基础。
8. 几何解释 📐
线性回归还有另一种优美的几何解释。
考虑方程 Xθ = y。设计矩阵 X 的列向量张成了一个 D+1 维的子空间(列空间)。向量 y 位于更高的 n 维空间中,并且很可能不在这个子空间内。
线性回归的目标是找到一个 θ,使得 Xθ 是这个子空间中最接* y 的点。根据线性代数知识,这个点正是 y 在列空间上的正交投影。
投影矩阵为 P = X(XᵀX)⁻¹Xᵀ,因此投影后的向量为 Xθ̂ = Py。这直接导出了我们之前的正规方程解。从几何上看,线性回归就是在寻找能使预测向量 Xθ 与真实标签向量 y 之间欧氏距离最短的参数 θ。
总结 ✨
本节课中我们一起学习了监督学习的基石——线性回归。
- 我们建立了监督学习的基本术语和框架。
- 定义了线性模型和*方误差成本函数。
- 介绍了梯度下降及其变体随机梯度下降这两种优化算法来最小化成本函数。
- 推导了线性回归的解析解——正规方程。
- 从概率视角(最大似然估计)和几何视角(向量投影)重新审视了线性回归,深化了对算法本质的理解。

线性回归虽然简单,但其蕴含的思想(定义模型、成本函数、通过优化求解)是贯穿整个机器学习课程的核心模式。下一节,我们将开始学习分类问题。
机器学习 5:感知机与逻辑回归 🧠


在本节课中,我们将学习两种经典的分类算法:感知机和逻辑回归。我们将从感知机这一历史性的简单算法开始,建立分类问题的基本直觉,然后深入探讨实践中广泛使用的逻辑回归模型。最后,我们会简要介绍牛顿法这一优化算法,并拓展一个关于函数分析的有趣视角。
课程回顾 📚
上一讲我们介绍了监督学习,并重点学习了线性回归。监督学习的目标是学习从输入 x 到输出 y 的映射。
我们首先学习了线性回归,其假设函数为 h_θ(x) = θᵀx,其中 θ 是参数向量。我们的目标是使预测值 Xθ 尽可能接*真实值 y。为此,我们定义了*方误差损失函数 J(θ) = ½||Xθ - y||²,并寻求最小化该损失。
我们看到了两种求解方法:
- 数值解:包括梯度下降和随机梯度下降。其核心更新规则为
θ := θ - α∇_θ J(θ)。 - 解析解(闭式解):通过矩阵求导得到正规方程
θ = (XᵀX)⁻¹Xᵀy。
我们还探讨了线性回归的两种解释:
- 概率解释:假设观测值
y由真实信号θᵀx加上高斯噪声ε ~ N(0, σ²)生成。在此假设下,最大化数据的似然函数等价于最小化*方误差损失。 - 投影解释:目标
y通常不在X的列空间内。线性回归的解θ对应于将y投影到X的列空间上得到的ŷ,然后求解Xθ = ŷ。
感知机算法 🤖
现在,我们将从回归问题转向分类问题。本节中,我们来看看一个简单而经典的分类算法——感知机。它主要因其历史意义和易于分析的特性而被研究,有助于我们建立分类算法的基本直觉。
在感知机算法中,我们有以下设定:
- 输入
x ∈ ℝᵈ - 输出(标签)
y ∈ {0, 1} - 假设函数为
h_θ(x) = g(θᵀx),其中g(z)是一个阶跃函数:def g(z): return 1 if z >= 0 else 0
感知机是一种流式算法,它一次处理一个样本,并即时更新模型参数。其训练算法如下:
- 初始化参数
θ为零向量。 - 对于每一个到来的样本
(x⁽ⁱ⁾, y⁽ⁱ⁾):- 计算预测值
h_θ(x⁽ⁱ⁾) = g(θᵀx⁽ⁱ⁾)。 - 按以下规则更新参数:
其中θ := θ + α (y⁽ⁱ⁾ - h_θ(x⁽ⁱ⁾)) x⁽ⁱ⁾α是学习率。
- 计算预测值
算法直观理解:
参数向量 θ 定义了一个决策超*面 θᵀx = 0,该*面垂直于 θ。θᵀx > 0 的点被预测为正类,反之则为负类。更新规则的核心思想是:如果当前样本被错误分类,就通过加上或减去该样本向量的一部分来调整 θ,使得 θ 与该样本向量的点积朝着正确的方向变化。
关键点:
- 感知机更新规则与线性回归的随机梯度下降更新规则在形式上相似,但假设函数
g(z)不同。 - 理论上,如果数据是线性可分的,感知机算法最终会找到一个能够完美分类所有样本的超*面。
- 在实践中,感知机已很少使用,但它的更新思想为理解更复杂的算法奠定了基础。
逻辑回归算法 📈
理解了感知机之后,我们来看一个在实践中极其重要且常用的算法——逻辑回归。可以说,逻辑回归是机器学习的“主力军”,通常是解决分类问题时首先尝试的算法。
逻辑回归的设定与感知机类似:
- 输入
x ∈ ℝᵈ - 输出
y ∈ {0, 1}(y=1称为正例,y=0称为负例)
其假设函数为 h_θ(x) = g(θᵀx),但这里的 g(z) 是逻辑函数(或Sigmoid函数):
g(z) = 1 / (1 + e^{-z})
这个函数的输出范围在 (0, 1) 之间,可以解释为概率。因此,逻辑回归本质上是一个概率模型:
P(y=1 | x; θ) = h_θ(x)P(y=0 | x; θ) = 1 - h_θ(x)
我们可以将这两个公式合并写成一个紧凑的形式:
P(y | x; θ) = (h_θ(x))^y * (1 - h_θ(x))^(1-y)
训练逻辑回归模型
与线性回归类似,我们采用最大似然估计来训练模型。假设有 m 个独立同分布的样本,其对数似然函数为:
ℓ(θ) = Σ_{i=1}^m [ y⁽ⁱ⁾ log(h_θ(x⁽ⁱ⁾)) + (1 - y⁽ⁱ⁾) log(1 - h_θ(x⁽ⁱ⁾)) ]
我们的目标是最大化 ℓ(θ),这等价于最小化负对数似然损失 J(θ) = -ℓ(θ)。
为了优化,我们需要计算梯度。经过推导(利用逻辑函数导数 g'(z) = g(z)(1 - g(z))),得到单个样本的梯度为:
∇_θ ℓ(θ) = (y - h_θ(x)) x
因此,参数更新规则(使用梯度上升)为:
θ := θ + α (y - h_θ(x)) x
与感知机的比较:
这个更新规则在形式上与感知机完全一样!唯一的区别在于 h_θ(x) 的定义:
- 感知机:
h_θ(x)是阶跃函数,输出非0即1。仅对错误分类的样本进行更新。 - 逻辑回归:
h_θ(x)是Sigmoid函数,输出连续概率。对每个样本都进行更新,更新幅度取决于预测概率与真实标签的差距 (y - h_θ(x))。因此,逻辑回归可以看作感知机的一个“软化”版本。
在实际训练中,我们可以使用批量梯度下降(对所有样本求和)或随机梯度下降(逐样本更新)。
牛顿法 ⚡
在逻辑回归的优化中,除了梯度下降,我们还有另一种高效的优化算法——牛顿法。本节中,我们来看看牛顿法如何工作,以及它与梯度下降的区别。
牛顿法本质上是一种求根算法。对于我们要最小化的损失函数 J(θ),其最小值点满足梯度为零,即 ∇J(θ) = 0。因此,我们可以将牛顿法应用于梯度函数 ∇J(θ),寻找其根。
算法直观(单变量情况):
- 从初始点
θ₀开始。 - 在当前点
θ_t,用∇J(θ)的线性*似(切线)来逼*该函数。 - 求解该线性*似等于零的点,作为下一个迭代点
θ_{t+1}。 - 重复步骤2-3直至收敛。
更新公式为:
θ_{t+1} = θ_t - (∇J(θ_t)) / (∇²J(θ_t))
其中 ∇²J(θ) 是二阶导数(海森矩阵在单变量情况下的形式)。
推广到多变量(向量)情况:
当 θ 是向量时,更新规则变为:
θ_{t+1} = θ_t - H⁻¹ ∇_θ J(θ_t)
其中 H 是损失函数 J(θ) 的海森矩阵(二阶偏导数矩阵)。
牛顿法与梯度下降的对比:
- 收敛速度:牛顿法通常收敛得更快(二次收敛),因为它利用了曲率信息(海森矩阵)。
- 计算成本:每次迭代,牛顿法需要计算并求逆海森矩阵,时间复杂度为
O(d³),其中d是参数维度。对于高维问题,这可能非常昂贵。梯度下降只需计算梯度,成本为O(d)。 - 适用性:牛顿法是一个求根算法,会收敛到最*的驻点(梯度为零的点),可能是极小值、极大值或鞍点。因此,它最常用于凸函数,其中驻点就是全局最优解。梯度下降总是朝着下降方向移动,但可能陷入局部极小值。
在实践中,对于逻辑回归这类问题,当特征维度不是极高时,牛顿法(或拟牛顿法,如L-BFGS)通常是更优的选择。
函数分析视角 🌌
最后,我们花一点时间,从一个更抽象的视角——函数分析——来理解机器学习中的模型。这个视角将帮助我们为后续学习核方法、高斯过程等主题做好准备。
核心思想是:函数可以看作是无限维空间中的向量。
有限维 vs 无限维:
- 有限维向量
v ∈ ℝᵈ:可以看作一个定义在有限索引集{1, 2, ..., d}上的函数,即v(i) = v_i。 - 函数
f: ℝ → ℝ:可以看作一个定义在连续域ℝ上的“向量”,它在每个输入点t上的函数值f(t)就是该“向量”在第t个(无限维)坐标轴上的分量。
基于这个类比,许多线性代数中的概念可以推广到函数空间:
- 内积:向量的点积
⟨u, v⟩ = Σ_i u_i v_i对应函数的内积⟨f, g⟩ = ∫ f(t)g(t) dt。 - 线性算子:矩阵
A作用于向量x得到y = Ax,对应线性算子(如微分、积分变换)作用于函数f得到新函数g。例如,微分算子D = d/dt就是一个线性算子。 - 特征向量/特征函数:矩阵满足
Av = λv,微分算子满足Df = λf。例如,f(t) = e^{kt}是微分算子的特征函数,因为Df = k e^{kt} = k f。 - 基变换:矩阵乘法
y_i = Σ_j A_{ij} x_j对应积分变换g(s) = ∫ K(s, t) f(t) dt。傅里叶变换和拉普拉斯变换都是这种积分变换的例子。
这个视角的意义:
将函数视为无限维空间中的点,允许我们运用许多线性代数的工具和直觉来思考和学习函数。这对于理解核方法(将数据隐式映射到高维特征空间)以及高斯过程(在函数空间上定义分布)等高级主题非常有帮助。

总结 🎯
本节课中我们一起学习了以下内容:
- 感知机:一个简单的线性分类算法,使用阶跃函数作为假设。其更新规则仅对误分类样本进行调整。它是理解分类更新机制的良好起点。
- 逻辑回归:一个极其重要的概率分类模型,使用Sigmoid函数将线性组合映射到
(0,1)区间,输出可解释为概率。其训练通过最大似然估计进行,更新规则与感知机形式相同但含义不同(基于概率误差进行连续调整)。 - 牛顿法:一种利用二阶导数(海森矩阵)信息的优化算法,收敛速度快,但每次迭代计算成本高,且通常要求目标函数是凸的以找到全局最优。
- 函数分析视角:建立了函数与无限维向量的类比,为我们提供了用线性代数工具思考复杂函数空间的新视角,为后续学习更高级的机器学习模型奠定了基础。

从简单的感知机到强大的逻辑回归,我们看到了分类算法如何从硬决策边界演变为概率输出,也了解了不同优化算法的权衡。这些概念构成了监督学习中分类任务的核心工具箱。
机器学习 6:指数族与广义线性模型 🧮


在本节课中,我们将要学习两个紧密相关的核心概念:指数族 和 广义线性模型。我们将看到,之前学过的线性回归和逻辑回归,实际上都是广义线性模型这个统一框架下的特例。通过理解这个框架,我们可以系统地构建适用于各种数据类型(如实值、计数、分类)的模型。
指数族分布 📊
上一节我们回顾了线性回归和逻辑回归的概率解释,本节中我们来看看一个能统一描述多种概率分布的数学形式——指数族。
指数族分布是一类可以用特定形式表示的概率分布。其概率密度函数(或概率质量函数)可以写成如下形式:
其中:
- $ y $ 是数据(例如模型的输出)。
- $ \eta $ 是分布的自然参数。
- $ T(y) $ 是充分统计量,在许多常见情况下 $ T(y) = y $。
- $ b(y) $ 是基测度,仅是 $ y $ 的函数。
- $ a(\eta) $ 是对数配分函数,仅是 $ \eta $ 的函数,确保概率归一化为1。
指数族的一个直观理解是:从一个基础的分布 $ b(y) $ 出发,通过引入参数 $ \eta $ 和指数函数进行“倾斜”,然后重新归一化,就得到了一个新的分布。
常见分布属于指数族
以下是两个关键例子,说明常见分布如何表示为指数族形式。
1. 伯努利分布
伯努利分布描述二元(0/1)变量,其概率质量函数为 $ p(y; \phi) = \phi^y (1-\phi)^{1-y} $。通过代数变换,我们可以将其重写为指数族形式:
通过模式匹配,我们可以得到:
- 自然参数 $ \eta = \log(\frac{\phi}{1-\phi}) $。
- 充分统计量 $ T(y) = y $。
- 对数配分函数 $ a(\eta) = \log(1 + e^{\eta}) $。
- 基测度 $ b(y) = 1 $。
- 均值参数 $ \phi $ 与自然参数的关系为 $ \phi = \frac{1}{1 + e^{-\eta}} $,这正是逻辑函数。
2. 高斯分布(方差固定为1)
一元高斯分布 $ p(y; \mu) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{1}{2}(y-\mu)^2) $ 也可以改写为指数族形式。通过展开*方项和整理,我们可以得到:
- 自然参数 $ \eta = \mu $。
- 充分统计量 $ T(y) = y $。
- 对数配分函数 $ a(\eta) = \frac{\eta^2}{2} $。
- 基测度 $ b(y) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{y^2}{2}) $。
指数族的优良性质
指数族分布具有一些非常好的数学性质,这些性质简化了后续的建模和计算:
- 对数似然的凹性:$ \log p(y; \eta) $ 关于 $ \eta $ 是凹函数,这意味着负对数似然是凸函数,便于优化。
- 矩的易计算性:分布的均值可以通过对数配分函数的一阶导数求得,方差可以通过二阶导数求得。\[\mathbb{E}[Y] = \frac{d}{d\eta} a(\eta) \]\[\text{Var}[Y] = \frac{d^2}{d\eta^2} a(\eta) \]这避免了复杂的积分运算。
广义线性模型 🧠
上一节我们介绍了指数族分布,本节中我们来看看如何将其与输入特征 $ x $ 联系起来,从而构建广义线性模型。
GLM通过以下三个核心假设/步骤构建:
- 响应变量假设:给定 $ x $ 和参数 $ \theta $,输出变量 $ y $ 服从某个以 $ \eta $ 为自然参数的指数族分布。即 $ y \mid x; \theta \sim \text{ExponentialFamily}(\eta) $。
- 预测目标假设:我们的模型目标是预测给定 $ x $ 时 $ y $ 的条件期望,即假设 $ h_\theta(x) = \mathbb{E}[y \mid x; \theta] $。
- 线性预测假设:自然参数 $ \eta $ 与输入特征 $ x $ 通过线性关系关联:$ \eta = \theta^T x $。
数据生成过程可以直观理解为:对于每个输入 $ x_i $,计算线性预测值 $ \eta_i = \theta^T x_i $,将其作为指数族分布的参数,然后从这个分布中采样得到观测值 $ y_i $。
连接函数与响应函数
在GLM框架中,有几个关键参数和函数:
- 模型参数 $ \theta $:这是我们通过训练学习的权重向量。
- 自然参数 $ \eta $:由 $ \eta = \theta^T x $ 计算得到,每个样本不同。
- 均值参数 $ \mu $:指数族分布的均值(如高斯分布的 $ \mu $,伯努利分布的 $ \phi $)。

连接 $ \eta $ 和 $ \mu $ 的函数至关重要:
- **规范响应函数 $ g \(**:将自然参数映射到均值参数,\) \mu = g(\eta) \(。这也是我们的假设函数:\) h_\theta(x) = g(\theta^T x) $。
- **规范链接函数 $ g^{-1} \(**:响应函数的逆,将均值参数映射回自然参数,\) \eta = g^{-1}(\mu) $。
GLM的统一视角
基于输出变量 $ y $ 的数据类型,我们可以选择相应的指数族分布,从而得到不同的模型:
以下是常见数据类型及其对应的GLM选择:
- 实值(整个实数轴):例如选择高斯分布,得到线性回归。此时响应函数 $ g(\eta) = \eta $。
- 二元值(0或1):例如选择伯努利分布,得到逻辑回归。此时响应函数 $ g(\eta) = 1/(1+e^{-\eta}) $。
- 计数值(非负整数):例如选择泊松分布,得到泊松回归。
- 多类离散值(K个类别):例如选择分类分布,得到Softmax回归(多类分类)。
- 正实值(如生存时间):例如选择指数分布或伽马分布,常用于生存分析。

使用GLM框架的主要好处是:
- 统一的更新规则:对于任何GLM,使用梯度上升法进行最大似然估计时,参数更新规则都具有相同的形式:\[\theta := \theta + \alpha \sum_{i=1}^m (y^{(i)} - h_\theta(x^{(i)})) x^{(i)} \]
- 系统化的建模流程:只需根据 $ y $ 的类型选择分布,推导出响应函数 $ g $,即可定义模型 $ h_\theta(x) = g(\theta^T x) $ 并使用上述更新规则进行训练。
Softmax回归简介 🍦
作为GLM的一个具体例子,我们简要介绍用于多类分类的Softmax回归。
当输出 $ y $ 有 $ K $ 个可能的类别时,我们为每个类别 $ k $ 设置一个参数向量 $ \theta_k $。对于输入 $ x $,我们计算 $ K $ 个“得分”:$ \eta_k = \theta_k^T x $。
为了将这些得分转化为属于各个类别的概率分布(满足非负且和为1),我们使用 Softmax函数:
Softmax函数对得分进行指数运算(确保为正),然后归一化。得分最高的类别将获得最大的预测概率。这可以看作是从伯努利分布(二类)到分类分布(多类)的自然推广。
总结 🎯
本节课中我们一起学习了:
- 指数族分布:一个统一表示多种概率分布的数学形式,具有优良的解析性质。
- 广义线性模型:一个强大的建模框架,通过三个假设将指数族分布与线性预测器结合。线性回归和逻辑回归都是其特例。
- GLM的工作流程:根据响应变量 $ y $ 的类型选择指数族分布,确定规范响应函数 $ g $,模型即为 $ h_\theta(x) = g(\theta^T x) $,并使用统一的梯度更新规则进行训练。
- Softmax回归:作为GLM应用于多类分类的例子,使用Softmax函数将多个线性预测得分转化为概率分布。

理解GLM框架为我们提供了一套系统化的工具,可以超越简单的回归和分类,去构建适用于各种数据类型的概率模型。
机器学习 7:生成学习算法、高斯判别分析、朴素贝叶斯与拉普拉斯*滑 📚


概述
在本节课中,我们将要学习生成学习算法。我们将从判别式算法与生成式算法的区别讲起,然后深入探讨两种经典的生成式模型:高斯判别分析 和 朴素贝叶斯。我们还将学习处理数据稀疏性问题的重要技巧——拉普拉斯*滑。
判别式算法回顾
上一节我们介绍了广义线性模型。在此之前,我们学习的线性回归、逻辑回归和广义线性模型都属于判别式算法。
判别式算法的核心是直接对条件概率 P(y|x) 进行建模。在监督学习中,我们关注的是从输入 x 到输出 y 的映射关系。
- 当
y|x服从正态分布时,我们得到线性回归。 - 当
y|x服从伯努利分布时,我们得到逻辑回归。 - 当
y|x属于指数族分布时,我们得到广义线性模型。
可以看到,线性回归和逻辑回归都是广义线性模型的特例。
生成式算法简介
本节中,我们将目光转向生成式算法。与判别式算法不同,生成式算法不直接建模 P(y|x),而是对联合概率分布 P(x, y) 进行建模。
我们可以利用概率链式法则将联合分布分解:
P(x, y) = P(x|y) * P(y)
其中:
P(y)被称为类先验,表示在观察任何特征之前,一个样本属于某个类别的总体概率。P(x|y)是给定类别后,特征x出现的概率。由于x通常是高维向量,建模P(x|y)本身就是一个复杂的问题。
在预测时,对于一个新样本 x_test,我们利用贝叶斯规则计算后验概率:
P(y|x) = P(x|y) * P(y) / P(x)
如果我们只想做出分类决策(例如,判断 y=0 还是 y=1),我们可以计算使后验概率最大的 y:
y_hat = argmax_y P(y|x) = argmax_y P(x|y) * P(y)
因为分母 P(x) 对于所有 y 是相同的常数,所以在比较时无需计算。
高斯判别分析
现在,我们来看第一种生成式算法:高斯判别分析。在这个模型中,我们假设特征 x 是连续值的。
模型定义与数据生成过程
GDA 将数据生成过程描述为一个分层步骤,这与我们对联合概率的分解方式一一对应:
- 首先,从参数为
φ的伯努利分布中采样类别标签y。y ~ Bernoulli(φ)
- 然后,根据
y的取值,从不同的多元高斯分布中采样特征x。- 如果
y=0,则x|y=0 ~ N(μ_0, Σ) - 如果
y=1,则x|y=1 ~ N(μ_1, Σ)
- 如果
注意:这里我们做了一个关键假设——两个类别的高斯分布共享同一个协方差矩阵 Σ,但拥有不同的均值向量 μ_0 和 μ_1。
对应的概率密度函数为:
P(y) = φ^y * (1-φ)^(1-y)(伯努利分布)P(x|y=0) = (1/((2π)^(d/2)|Σ|^(1/2))) * exp(-1/2 (x-μ_0)^T Σ^(-1) (x-μ_0))P(x|y=1) = (1/((2π)^(d/2)|Σ|^(1/2))) * exp(-1/2 (x-μ_1)^T Σ^(-1) (x-μ_1))
参数估计:最大似然
模型的参数是 θ = {φ, μ_0, μ_1, Σ}。给定训练数据 {(x_i, y_i)},我们通过最大化联合似然来估计参数。
生成式模型的似然函数使用联合概率:
L(θ) = ∏_i P(x_i, y_i)
将其分解并代入上述概率密度,然后对 log L(θ) 求导并令导数为零,我们可以得到参数的最大似然估计闭式解:
以下是参数的估计公式:
φ_hat = (1/n) * Σ_i 1{y_i = 1}(标签为1的样本比例)μ_0_hat = (Σ_i 1{y_i=0} * x_i) / (Σ_i 1{y_i=0})(标签为0的样本特征均值)μ_1_hat = (Σ_i 1{y_i=1} * x_i) / (Σ_i 1{y_i=1})(标签为1的样本特征均值)Σ_hat = (1/n) * Σ_i (x_i - μ_{y_i}) (x_i - μ_{y_i})^T(整体协方差矩阵,按类别中心化后计算)
GDA 与逻辑回归的联系
一个有趣且重要的结论是:在共享协方差矩阵的GDA假设下,其后验分布 P(y=1|x) 的形式恰好是一个逻辑函数。
P(y=1|x) = 1 / (1 + exp(-θ^T x))
其中参数 θ 是 {φ, μ_0, μ_1, Σ} 的函数。这意味着,任何共享协方差的GDA模型,其后验分类边界都是一个线性决策边界,与逻辑回归相同。
对比:GDA vs. 逻辑回归
- GDA 做出了更强的建模假设(数据来自高斯分布,且各类别协方差相同)。如果这个假设成立,GDA是更高效的,通常需要更少的数据就能达到较好的效果。
- 逻辑回归 的假设更弱,因此更稳健。即使数据不严格服从高斯分布,它通常也能工作得很好。在实践中,逻辑回归往往是首选的尝试算法。
朴素贝叶斯
接下来,我们看看当特征 x 是离散值时使用的生成式算法:朴素贝叶斯。它在文本分类(如垃圾邮件过滤)中应用广泛。
条件独立性假设
朴素贝叶斯的核心是条件独立性假设:在给定类别标签 y 的条件下,特征 x 的各个维度(例如,文本中的每个词)是相互独立的。
即:P(x_j | x_k, y) = P(x_j | y)
这是一个很强的假设(例如,“buy”和“lottery”这两个词在垃圾邮件中很可能同时出现),但能极大地简化模型,且在实践中往往效果不错。
伯努利事件模型
我们首先介绍伯努利事件模型。在这个模型中,我们将一篇文档(如邮件)表示为一个多热编码向量,其长度等于词汇表大小 d。
- 向量中每个位置对应词汇表中的一个词。
- 如果该词在文档中出现至少一次,对应位置为1,否则为0。
- 因此,
x ∈ {0, 1}^d。
模型的生成过程如下:
y ~ Bernoulli(φ_y)- 对于每个特征
j(每个词),其出现概率依赖于y:x_j | y=0 ~ Bernoulli(φ_{j|y=0})x_j | y=1 ~ Bernoulli(φ_{j|y=1})
模型参数包括:一个类先验 φ_y,以及 d 个针对 y=0 的词出现概率 φ_{j|y=0} 和 d 个针对 y=1 的词出现概率 φ_{j|y=1},共 2d+1 个参数。
利用条件独立性假设,联合似然可以分解:
L(φ) = ∏_i P(y_i) * ∏_j P(x_j_i | y_i)
最大似然估计为:
φ_y_hat = (Σ_i 1{y_i=1}) / nφ_{j|y=1}_hat = (Σ_i 1{x_j_i=1 and y_i=1}) / (Σ_i 1{y_i=1})(在垃圾邮件中,词j出现的文档比例)φ_{j|y=0}_hat = (Σ_i 1{x_j_i=1 and y_i=0}) / (Σ_i 1{y_i=0})(在正常邮件中,词j出现的文档比例)
拉普拉斯*滑
上述最大似然估计存在一个问题:如果某个词在训练集的某个类别中从未出现,其概率估计为0。那么,在预测时,任何包含该词的文档都会使得整个类的似然变为0,导致无法做出预测或得到 0/0 的不定式。
为了解决这个问题,我们引入拉普拉斯*滑。其思想是:在开始计数之前,为每个可能的计数“预先”添加一些虚拟的观测值。
对于伯努利事件模型,*滑后的估计变为:
φ_{j|y=1}_hat_smoothed = (1 + Σ_i 1{x_j_i=1 and y_i=1}) / (2 + Σ_i 1{y_i=1})φ_{j|y=0}_hat_smoothed = (1 + Σ_i 1{x_j_i=1 and y_i=0}) / (2 + Σ_i 1{y_i=0})
直观上,这相当于我们假设在观察数据前,已经看到了两类邮件各一封:一封包含了所有词(分子+1),一封不包含任何词(分母+2,因为有两种可能:词出现或不出现)。这样,即使一个词从未出现,其概率也不会是0。
多项式事件模型
朴素贝叶斯还有另一种形式:多项式事件模型。它与伯努利事件模型的主要区别在于对文档的表示:

- 伯努利模型:文档是词袋的多热编码,关注“词是否出现”。
- 多项式模型:文档是词序列,关注“词出现的次数”。它将一篇文档视为从多项分布(或范畴分布)中多次抽样产生的。
在多项式模型中,参数 φ_{k|y} 表示在类别 y 的文档中,抽样到词汇表中第 k 个词的概率。其最大似然估计是:在类别 y 的所有文档中,词 k 出现的总次数,除以该类所有文档的总词数。
拉普拉斯*滑版本为:
φ_{k|y}_hat_smoothed = (1 + count(k, y)) / (|Vocabulary| + total_words(y))
相当于在数据前添加了一篇虚拟文档,其中每个词都恰好出现一次。
总结
本节课中我们一起学习了生成学习算法的核心思想与两种经典模型。
- 生成式 vs. 判别式:生成式算法建模联合分布
P(x, y),而判别式算法直接建模条件分布P(y|x)。生成式建模通常更难,但能提供数据本身的生成规律。 - 高斯判别分析:用于连续特征。假设各类别数据来自不同均值、相同协方差的高斯分布。其后验分布形式与逻辑回归相同,但在其假设成立时更高效。
- 朴素贝叶斯:用于离散特征(尤其是文本)。基于强大的条件独立性假设,极大地简化了建模。我们学习了两种事件模型:
- 伯努利事件模型:将文档表示为词是否出现的二值向量。
- 多项式事件模型:将文档表示为词频向量。
- 拉普拉斯*滑:处理最大似然估计中零概率问题的关键技术,通过添加虚拟计数来避免过拟合和预测失败。

理解这些算法及其背后的假设,能帮助我们在实际问题中根据数据特性选择合适的模型。
机器学习 8:核方法与支持向量机 🧠


在本节课中,我们将要学习核方法(Kernel Methods)和支持向量机(Support Vector Machines,SVM)。核方法是一种强大的技巧,它允许我们在高维甚至无限维的特征空间中高效地运行线性算法。支持向量机则是一种经典的分类算法,它通过最大化分类间隔来寻找最优的决策边界。
回顾:生成式算法


上一节我们介绍了生成式算法。在训练时,我们最大化输入 x 和输出 y 的联合似然概率 p(x, y),并使用最大似然估计(MLE)来训练参数。这通常可以分解为两部分:类别先验 p(y) 和条件概率 p(x|y)。
在预测时,我们使用贝叶斯规则来构建后验分布 p(y|x)。根据对 p(x|y) 的不同假设(例如高斯分布、伯努利分布等),我们会得到不同的后验分布。
我们看到了两种不同类型的生成式模型:
- 高斯判别分析(GDA):假设
x是连续的,且p(x|y)服从一个均值与y相关、协方差共享的正态分布。其对应的后验形式与逻辑回归的函数形式相同。 - 朴素贝叶斯(Naive Bayes):假设
x是离散的(如文本中的单词),并做出了条件独立性的关键假设。这意味着p(x_j | y, x_k) = p(x_j | y)。我们构建了两种事件模型:- 伯努利事件模型:
p(x_j | y)服从伯努利分布。 - 多项式事件模型:
p(x_j | y)服从多项式分布。
- 伯努利事件模型:
我们还介绍了拉普拉斯*滑,其核心思想是避免因训练数据中未出现的罕见词而对预测产生严重影响。

引入核方法
到目前为止,我们在课程中看到的所有模型都是线性模型。例如,线性回归给出的是 x 的线性假设,逻辑回归给出的是数据空间中的线性分类边界。
然而,我们可以通过引入特征映射(Feature Map) 来构建非线性模型。特征映射 φ(x) 将原始属性(Attributes)x 转换到新的特征(Features)空间。例如,我们可以将一维的 x 映射到包含高阶多项式项的特征空间:φ(x) = [1, x, x^2, x^3, x^4]^T。在这个高维空间中进行线性回归或逻辑回归,就能在原始空间中产生非线性的假设或决策边界。

但问题随之而来:我们应该映射到多少维?为什么不是10维、1000维,甚至是无限维?核方法允许我们做到这一点。

线性回归的核化
让我们以线性回归为例,看看如何将其“核化”。在线性回归的梯度下降更新规则中,参数 θ 的更新依赖于输入 x 的点积。
当我们使用特征映射 φ(x) 时,更新规则变为对高维特征向量 φ(x) 进行操作。此时,参数 θ 也存在于高维特征空间中。
一个关键的观察是:如果我们从零向量 θ=0 开始梯度下降,那么在任意迭代步骤 t,参数向量 θ_t 都可以表示为训练样本特征向量的线性组合。
具体来说,可以证明 θ_t = Σ_{i=1}^{n} β_i^{(t)} φ(x_i),其中 β_i^{(t)} 是标量系数。这意味着我们无需直接维护高维的 θ 向量,只需维护一个与训练样本数 n 等长的系数向量 β 即可。
将 θ 的这种表示代入梯度下降更新公式,我们可以得到完全用系数 β 和特征向量点积 φ(x_i)^T φ(x_j) 表示的更新规则。
核函数(Kernel Function)
直接计算高维特征空间中的点积 φ(x_i)^T φ(x_j) 可能非常昂贵,甚至不可能(当维度无限时)。核函数 正是为了解决这个问题而引入的。
一个核函数 K 是一个函数,它接受两个输入 x 和 z,并返回一个实数。它满足以下性质:存在某个特征映射 φ,使得 K(x, z) = φ(x)^T φ(z)。
核函数的妙处在于:我们无需知道或计算具体的 φ(x) 和 φ(z),只需通过 K(x, z) 就能高效地计算出它们在高维空间中的点积结果。
例如,对于特征映射 φ(x) 包含所有阶数 ≤3 的单项式,其对应的核函数是:
K(x, z) = 1 + (x^T z) + (x^T z)^2 + (x^T z)^3
直接计算 φ(x)^T φ(z) 需要 O(d^3) 的时间,而计算核函数 K(x, z) 仅需 O(d) 的时间。
核化算法流程
基于以上观察,我们可以重写线性回归的算法,使其完全依赖于核函数,而不显式出现 φ(x)。
以下是核化线性回归的步骤:
- 预计算核矩阵(Kernel Matrix):对于所有训练样本对
(x_i, x_j),计算K_{ij} = K(x_i, x_j),形成一个n×n的对称矩阵K。 - 在系数空间进行梯度下降:初始化系数向量
β = 0。重复以下更新直到收敛:
β := β + α (y - Kβ)
其中α是学习率,y是目标值向量。 - 进行预测:对于新的测试点
x,预测值为:
h_θ(x) = Σ_{i=1}^{n} β_i K(x_i, x)
核方法的重要特性:
- 隐式高维计算:算法中完全不出现
φ(x),所有高维空间的计算都通过核函数隐式完成。 - 需要存储训练数据:与标准线性回归不同,核方法在预测时需要使用所有训练样本
{x_i}和学到的系数β来计算核函数值。这被称为“基于实例的学习”。
核函数的性质与构建
如何判断一个函数是否是有效的核函数? Mercer 定理给出了答案。
一个函数 K: R^d × R^d -> R 是有效核函数的充要条件是:对于任意有限的样本集合 {x_1, ..., x_m},由这些样本构成的核矩阵 K(其中 K_{ij} = K(x_i, x_j))是半正定(Positive Semi-Definite)且对称的。

常见的核函数示例包括:
- 多项式核:
K(x, z) = (x^T z + c)^d - 高斯核(径向基函数核 RBF):
K(x, z) = exp(-||x - z||^2 / (2σ^2))- 高斯核对应于一个无限维的特征空间。
- 核函数可以看作是相似性度量:相似的点对核函数值高,不相似的点对核函数值低。
支持向量机(SVM)简介
支持向量机是一种判别式分类算法。其核心思想是:在众多能够将数据分开的超*面中,选择那个到所有类别最*样本点的距离(即间隔,Margin) 最大的超*面。
首先,我们需要定义函数间隔(Functional Margin):对于样本 (x_i, y_i)(这里令 y_i ∈ {+1, -1})和分类超*面 w^T x + b = 0,其函数间隔为 γ_i = y_i (w^T x_i + b)。我们希望所有样本的函数间隔都尽可能大。
然而,函数间隔有一个问题:我们可以通过缩放 w 和 b 来任意增大它,而不改变超*面本身。因此,SVM 优化的是几何间隔(Geometric Margin),它对于缩放是不变的。
支持向量机的标准(软间隔)形式化表述为以下优化问题:
min_{w,b} (1/2)||w||^2 + C Σ_{i=1}^{n} max(0, 1 - y_i(w^T x_i + b))
其中:
(1/2)||w||^2项用于最大化几何间隔(等价于最小化||w||)。max(0, 1 - y_i(w^T x_i + b))被称为合页损失(Hinge Loss)。它惩罚那些函数间隔小于1的样本(即被误分类或离边界太*的样本)。C是一个正则化参数,控制对误分类的惩罚力度。
SVM 的核化与对偶形式
上述 SVM 的原问题(Primal Problem)可以通过拉格朗日乘子法转化为对偶问题(Dual Problem)。对偶形式为:
max_{α} Σ_{i=1}^{n} α_i - (1/2) Σ_{i=1}^{n} Σ_{j=1}^{n} α_i α_j y_i y_j (x_i^T x_j)
约束条件为:0 ≤ α_i ≤ C 且 Σ_{i=1}^{n} α_i y_i = 0。
在对偶形式中,关键观察是:
- 优化变量变成了拉格朗日乘子
α_i,每个α_i对应一个训练样本。 - 目标函数和决策函数都只依赖于训练样本之间的点积
x_i^T x_j。
这正是核方法可以大显身手的地方!我们可以将点积 x_i^T x_j 替换为核函数 K(x_i, x_j),从而在不对特征映射 φ 进行显式计算的情况下,在非常高维的特征空间中运行 SVM。
SVM 的一个重要性质:在最优解下,大多数 α_i 会等于0。那些 α_i > 0 所对应的训练样本被称为支持向量(Support Vectors),它们通常位于间隔边界上或被误分类。决策边界完全由这些支持向量决定,这使得 SVM 的预测效率很高。
总结
本节课中我们一起学习了:
- 核方法的核心思想:通过核函数
K(x, z)隐式地在高维特征空间中进行计算,避免了显式特征映射φ(x)带来的计算负担。 - 核方法的流程:以线性回归为例,我们看到了如何将算法“核化”,使其依赖于预计算的核矩阵和样本系数。
- 核函数的性质:通过 Mercer 定理判断一个函数是否为有效核函数,并了解了几种常见的核函数。
- 支持向量机的基本原理:SVM 旨在最大化分类间隔,其优化问题同时考虑了间隔最大化和分类误差。
- SVM 的核化:通过对偶形式,SVM 的优化和预测可以完全用样本间的点积表示,从而自然地引入核函数,实现非线性分类。

核方法是一种通用技巧,可应用于回归、分类(如 SVM)、聚类等多种机器学习算法,使其能够处理复杂的非线性模式。
机器学习 9:贝叶斯方法 🧠


在本节课中,我们将要学习贝叶斯方法。我们将介绍两种不同的贝叶斯方法:参数化方法和非参数化方法。作为参数化方法的例子,我们将探讨贝叶斯线性回归;作为非参数化方法的例子,我们将学习高斯过程。
回顾:第8讲 - 核方法
上一节我们介绍了核方法。核是一个函数 K(x, z),其中 x 和 z 通常是训练集或测试集中的样本。如果存在一个映射函数 φ,将样本映射到 P 维实空间(P 可以是无穷大),使得 K(x, z) = φ(x)^T φ(z),那么 K 就被称为核函数。
核函数需要满足两个关键性质:
- 对称性:K(x, z) = K(z, x)。
- 对于任何有限样本集,由这些样本构成的核矩阵是半正定的。
默瑟定理指出,性质2是 K 成为核函数的充要条件。这意味着核矩阵可以看作是由隐式特征映射 φ 的特征基构成的。
我们还讨论了支持向量机(SVM),它是一种与核方法结合良好的分类算法。SVM的系数具有稀疏性,这使得它在处理大量样本时依然高效。
贝叶斯方法简介
到目前为止,我们学习的方法通常被称为频率主义方法。在这些方法中,我们假设未知参数 θ 是一个未知的常数向量。我们通过定义似然函数 L(θ) = log P(数据 | θ),并最大化它来估计 θ,这被称为最大似然估计。
本节中,我们将看看一种不同的方法——贝叶斯方法。在贝叶斯方法中,我们将参数 θ 视为一个未被观测的随机变量。这个看似微小的改变,是贝叶斯方法与频率主义方法的根本区别。
一旦我们将 θ 视为随机变量,就需要为其关联一个概率分布。在贝叶斯方法中,我们首先为 θ 指定一个先验概率分布 P(θ)。然后,我们观察到数据 x,并假设数据来自分布 P(x | θ)。这个分布与似然函数在数学形式上相同,但哲学解释不同:我们明确地相信 θ 有一个先验分布。
与频率主义方法进行最大似然估计不同,贝叶斯方法应用贝叶斯规则来计算后验分布:
P(θ | x) = [P(x | θ) * P(θ)] / P(x)
其中,P(x) = ∫ P(x | θ) P(θ) dθ。
在监督式机器学习中,我们的数据是 (x, y)。我们假设 θ 有一个先验分布,并且 y 在给定 x 和 θ 的条件下服从某个分布。我们计算后验分布 P(θ | x, y)。然后,为了对新的测试样本 x* 进行预测,我们计算后验预测分布:
P(y | x, x, y) = ∫ P(y | x*, θ) P(θ | x, y) dθ*
这个公式有一个很好的解释:我们考虑所有可能的模型(即所有可能的 θ 值),每个模型都会对 y* 做出一个预测。然后,我们根据后验分布 P(θ | x, y) 给出的权重,对所有模型的预测进行加权*均。后验分布反映了我们在观察到数据后,对哪个 θ 是“正确”模型的信念强度。
贝叶斯方法的一个关键特点是其主观性:先验分布 P(θ) 的选择会影响后验分布和最终的预测。同时,贝叶斯方法自然地提供了不确定性估计,因为后验分布本身就是一个完整的概率分布。
参数化方法示例:贝叶斯线性回归 📈
现在,让我们通过贝叶斯线性回归来具体感受贝叶斯方法在回归问题中的应用。
在线性回归中,我们有一个训练集 {(x_i, y_i)},并假设:
y_i = θ^T x_i + ε_i
其中,噪声 ε_i ~ N(0, σ²)。
在贝叶斯框架下,我们额外为参数 θ 指定一个先验分布。一个常见的选择是高斯先验:
θ ~ N(0, τ² I)
在频率主义的线性回归中,我们通过最小化*方损失(等价于最大化似然)来估计 θ。而在贝叶斯线性回归中,我们直接应用贝叶斯规则计算后验分布 P(θ | S),其中 S 代表整个训练集。
经过推导,后验分布 θ | S 也是一个多元高斯分布:
θ | S ~ N( μ, Σ )
其中:
- μ = (X^T X / σ² + I / τ²)^{-1} (X^T y / σ²)
- Σ = (X^T X / σ² + I / τ²)^{-1}
这里的均值 μ 看起来很像标准正态方程的解 θ_MLE = (X^T X)^{-1} X^T y,但多了一项 I / τ²。这项起到了正则化的作用,即使 X^T X 不可逆,加上这项后也总是可逆的。
接下来,我们计算后验预测分布 P(y | x*, S)。对于给定的测试点 x,预测分布也是高斯分布:
y | x, S ~ N( x^T μ, x^T Σ x + σ² )*
这个分布的均值是我们的点预测,方差则包含了模型参数的不确定性(通过 Σ)和观测噪声(σ²)。当训练数据充足且测试点靠*训练数据区域时,预测方差较小,表示模型置信度高;反之,方差较大,表示模型不确定性高。
非参数化方法示例:高斯过程 🌌
上一节我们介绍了参数化的贝叶斯线性回归,本节中我们来看看非参数化方法——高斯过程。参数化模型的局限性在于其假设的函数形式(如线性)可能无法捕捉数据中复杂的模式。非参数化方法则考虑所有可能的函数,让数据来决定函数的具体形态。
高斯过程可以看作是多元高斯分布在函数空间上的推广。为了理解高斯过程,我们先回顾多元高斯的几个关键性质:
- 归一化:概率密度在全空间积分为1。
- 边缘化:从联合高斯分布中边缘化掉部分变量,得到的边缘分布仍是高斯分布。
- 条件化:已知部分变量的值,其余变量的条件分布仍是高斯分布。
- 求和:两个独立高斯随机变量之和仍是高斯分布。
在高斯过程中,我们不再定义参数向量 θ,而是直接定义在函数 f 上的分布。一个高斯过程由均值函数 m(x) 和协方差函数(核函数)k(x, x') 完全定义,记作:
f ~ GP( m(x), k(x, x') )
我们可以把函数 f 在任意一组输入点 {x_1, ..., x_N} 上的取值 [f(x_1), ..., f(x_N)] 看作一个向量。这个向量的联合分布就是一个多元高斯分布,其均值向量为 [m(x_1), ..., m(x_N)],协方差矩阵的第 (i, j) 项为 k(x_i, x_j)。
在回归任务中,我们假设观测到的 y 是函数值 f(x) 加上高斯噪声:
y = f(x) + ε, ε ~ N(0, σ²)
现在,考虑训练输入 X、训练输出 y 和测试输入 X。根据高斯过程的定义和噪声假设,联合分布 **P(f, f, y)** 是高斯分布。我们关心的是在观察到训练数据 y 后,测试输出 f* 的后验预测分布。

通过应用多元高斯的条件化性质,我们可以推导出后验预测分布 P(f | X*, X, y)* 也是一个高斯分布:
f | X, X, y ~ N( μ, Σ )**
其中:
- μ = K(X*, X) [K(X, X) + σ² I]^{-1} y*
- Σ = K(X, X) + σ² I - K(X, X) [K(X, X) + σ² I]^{-1} K(X, X)*
这里,K(A, B) 表示通过核函数 k 计算矩阵 A 中所有行和矩阵 B 中所有行之间的协方差所得到的矩阵。
高斯过程的核心在于核函数 k 的选择,它定义了函数之间的相似性,从而决定了函数的先验*滑度、周期性等性质。常见的核函数包括径向基函数(RBF)核、周期核、线性核等,它们还可以组合成更复杂的核。
高斯过程是一种非参数化模型,因为它没有对函数 f 的形式做任何参数化假设。在预测时,我们需要在内存中保留整个训练集 {X, y} 来计算核矩阵。可视化显示,高斯过程的后验预测分布会给出一个均值函数以及围绕它的置信区间。在训练数据密集的区域,置信区间很窄(预测确定);在数据稀疏的区域,置信区间很宽(预测不确定)。
总结
本节课中我们一起学习了贝叶斯方法的核心思想及其两种实现方式。


我们首先了解了贝叶斯方法与频率主义方法的根本区别:将模型参数视为随机变量并引入先验分布。通过贝叶斯规则,我们将先验与似然结合,得到后验分布,并进一步计算后验预测分布来进行决策。
接着,我们深入探讨了贝叶斯线性回归这一参数化方法的实例。我们看到,通过为权重引入高斯先验,后验分布也具有高斯形式,其解类似于带L2正则化的最小二乘解,并且自然地给出了预测的不确定性。
最后,我们学习了高斯过程这一强大的非参数化方法。它将多元高斯分布推广到函数空间,通过核函数定义函数的先验。在回归问题中,高斯过程能够提供完整的预测分布(均值和方差),其预测的灵活性完全由核函数控制,并且能优雅地处理不确定性。

贝叶斯方法为我们提供了强大的框架,不仅能够进行预测,还能量化预测中的不确定性,这在许多实际应用中至关重要。
机器学习 10:深度学习 I 🧠


在本节课中,我们将要学习神经网络和反向传播,这是深度学习的核心内容。我们将从神经网络的基本构建块开始,逐步深入到其架构和训练算法。
课程回顾 📚
上一节我们介绍了贝叶斯方法,包括参数化和非参数化两种类型。在参数化方法中,我们看到了贝叶斯线性回归,其核心思想是为未知参数 θ 设定一个先验分布 P(θ),然后基于观测数据 x 和 y,利用贝叶斯规则构建后验分布 P(θ | x, y)。最后,我们使用后验预测分布 P(y | x*, x, y)* 对新数据进行预测。这种方法通过对所有可能的模型进行加权*均,从理论上避免了过拟合。
在非参数化方法中,我们假设 y = f(x) + ε,其中 ε 服从正态分布,并为函数 f 设定一个高斯过程先验。高斯过程可以看作是多元高斯分布在无限维上的扩展。利用高斯过程的性质(如归一化、边缘化和条件化),我们构建了高斯过程回归模型。
神经网络简介 🧩
本节中我们来看看神经网络。到目前为止,我们看到的模型(如线性回归、逻辑回归)都是线性的。引入非线性的一种方式是通过核函数或特征映射。然而,设计合适的特征映射需要大量的经验和直觉。
神经网络提供了另一种方式。其高层次思想是:它不仅学习给定特征下的模型,还自动学习合适的特征集。换句话说,神经网络能够从数据中自动提取有用的特征表示。
从逻辑回归到神经元
首先,回顾一下逻辑回归。我们可以将其可视化为一个“神经元”:
- 输入是特征向量 x ∈ ℝ^d。
- 每个输入 x_i 通过一个权重 w_i 连接到一个求和节点。
- 求和结果加上偏置 b 得到 z = w^T x + b。
- z 通过一个非线性激活函数 g(z)(例如Sigmoid函数:g(z) = 1 / (1 + e^{-z}))得到输出 a。
- 在逻辑回归中,a 就是我们的预测值 ŷ。
这个结构中的节点被称为“神经元”,连接权重 w 和偏置 b 是模型的参数。
构建神经网络
神经网络通过组合和堆叠这样的“神经元”构建而成。
以下是构建多层网络的关键步骤:
-
添加宽度(同一层多个神经元):我们可以并行放置多个神经元,每个神经元都有自己的权重集 w 和偏置 b。这相当于同时训练多个不同的逻辑回归模型。每个神经元的输出 a 计算方式相同:z^{(l)}_j = (w{(l)}_j)T a^{(l-1)} + b^{(l)}_j,然后 a^{(l)}_j = g(z^{(l)}_j)。这里,上标 (l) 表示第 l 层。
-
添加深度(嵌套层):某一层的输出 a^{(l)} 可以成为下一层的输入。我们不断重复这个过程,将简单的构建块像乐高一样堆叠起来,形成深度网络。
-
网络架构术语:
- 输入层:接收原始数据 x(有时也称为第0层:a^{(0)} = x)。
- 隐藏层:介于输入和输出之间的层。
- 输出层:网络的最后一层,其输出 a^{(L)} 作为最终的预测 ŷ。
- 全连接网络:每一层的每个神经元都与前一层的所有神经元相连,这种架构称为全连接网络。
- 深度:网络的层数(通常不计输入层)。
- 宽度:某一层中神经元的数量。
激活函数的必要性
激活函数 g(z) 必须是非线性的。如果 g(z) 是恒等函数(即 g(z) = z),那么无论网络多深,整个网络都可以简化为一个单一的线性变换(ŷ = W̃ x),从而失去了深度带来的表达能力。因此,非线性激活函数对于构建有意义的深度网络至关重要。
常见的激活函数包括:
- Sigmoid: g(z) = 1 / (1 + e^{-z})
- Tanh: g(z) = (e^z - e^{-z}) / (e^z + e^{-z})
- ReLU (整流线性单元): g(z) = max(0, z)
网络参数与超参数
- 参数:模型通过训练数据学习得到的变量,即各层的权重矩阵 W^{(l)} 和偏置向量 b^{(l)}。
- 超参数:在训练开始前需要人为设定的配置,例如:
- 网络深度(层数 L)
- 各层宽度(神经元数量)
- 激活函数类型
- 学习率 α
- 初始化方案
超参数的选择通常通过交叉验证来确定。
随机初始化:打破对称性
如果将所有权重和偏置初始化为0,那么同一层内的所有神经元在训练过程中会学到完全相同的特征,这被称为对称性问题。为了解决这个问题,我们使用随机初始化(例如,从均值为0的小随机分布中采样),以确保每个神经元从不同的起点开始学习,从而促进多样性。

训练神经网络:反向传播 🔄
本节中我们来看看如何训练神经网络。训练的目标是最小化损失函数 ℒ(y, ŷ)。对于分类问题,常用二元交叉熵损失:ℒ = -[y log(ŷ) + (1-y) log(1-ŷ)]。
我们使用(随机)梯度下降法来更新所有参数。对于第 l 层的参数,更新规则为:
W^{(l)} := W^{(l)} - α * ∂ℒ/∂W^{(l)}
b^{(l)} := b^{(l)} - α * ∂ℒ/∂b^{(l)}
核心挑战在于高效计算所有这些梯度 ∂ℒ/∂W^{(l)} 和 ∂ℒ/∂b^{(l)}。反向传播算法正是用来解决这个问题的。
反向传播:链式法则的算法实现
从数学上讲,反向传播就是多元微积分中的链式法则。我们通过计算图来理解信息流动:从输入 x 开始,经过一系列计算(线性变换 z=Wa+b 和激活 a=g(z)),最终得到损失 ℒ。
为了计算损失 ℒ 对某个参数(如 W^{(2)})的梯度,我们需要应用链式法则,将梯度从输出端(损失)反向传播回该参数。这会涉及一连串的雅可比矩阵乘法。
计算图中的关键模式是交替出现的:
- 从 a 到 z 的层:线性变换,局部梯度是权重矩阵 W。
- 从 z 到 a 的层:非线性激活,由于是逐元素操作,其局部雅可比矩阵是一个对角矩阵,对角线元素是 g‘(z)。

反向传播的算法智慧在于:从输出层向输入层反向计算。在计算更高层参数的梯度时,许多中间结果(例如 ∂ℒ/∂z^{(l)})可以被缓存和复用于计算更低层参数的梯度,这极大地提高了计算效率。
具体推导以计算 ∂ℒ/∂W^{(2)} 为例,通过链式法则将其分解为:
∂ℒ/∂W^{(2)} = (∂ℒ/∂a^{(3)}) * (∂a{(3)}/∂z) * (∂z{(3)}/∂a) * (∂a{(2)}/∂z) * (∂z{(2)}/∂W)
其中:
- ∂ℒ/∂a^{(3)} 源自损失函数(例如,对于逻辑回归损失,∂ℒ/∂a^{(3)} = a^{(3)} - y)。
- ∂a{(l)}/∂z 是激活函数的导数构成的对角矩阵 diag(g'(z^{(l)}))。
- ∂z{(l)}/∂a 就是权重矩阵 W^{(l)}。
- ∂z{(l)}/∂W 的计算表明,最终 ∂ℒ/∂W^{(l)} 可以表示为两个向量的外积,这两个向量包含了来自后续层的梯度信息和前一层激活值的信息。
通过这种方式,我们可以为网络中的每个参数高效地计算出梯度。
总结 🎯
本节课中我们一起学习了深度学习的基础——神经网络。
- 我们从逻辑回归出发,将其视为一个基本的“神经元”构建块。
- 通过堆叠和组合神经元,我们构建了具有输入层、隐藏层和输出层的深度全连接网络。
- 我们强调了非线性激活函数的重要性,并介绍了几种常见的选择。
- 我们区分了模型参数和需要人为设定的超参数,并指出超参数通常通过交叉验证来优化。
- 为了训练神经网络,我们使用梯度下降法,并利用反向传播算法高效地计算所有参数的梯度。反向传播本质上是链式法则的巧妙应用,它通过反向计算和重用中间结果来提升效率。

理解这些基础概念是掌握更复杂深度学习模型的关键。
机器学习 11:深度学习(二)🧠


概述
在本节课中,我们将继续深入学习神经网络,重点回顾反向传播算法的细节,并理解其背后的数学原理。我们将神经网络视为一系列函数的组合,并通过链式法则计算损失函数对所有参数的梯度。此外,我们还将初步介绍偏差-方差权衡的概念,为后续的正则化学习打下基础。
神经网络回顾
上一讲我们介绍了神经网络。神经网络本质上是多层计算结构的组合,每一层可以看作是一个神经元向量。
每个神经元接收来自前一层的所有神经元的输出,执行某种计算,其输出又成为下一层神经元的输入。
在二分类任务中,网络的最后一层,即输出层,通常只有一个神经元。该神经元的输出值即为网络的预测值 \(\hat{y}\)。
网络的输出值取决于其内部参数以及我们输入的数据 \(x\)。对于每个输入 \(x^{(i)}\),都有一个对应的正确答案 \(y^{(i)}\)。我们根据预测值 \(\hat{y}^{(i)}\) 和真实值 \(y^{(i)}\) 计算损失,目标是最小化所有数据对的损失。
我们通过梯度下降法来实现这一目标。梯度下降的思想是计算损失函数相对于参数的梯度,然后沿着梯度的负方向对参数进行小幅更新。对于神经网络,我们同样采用这一方法。
反向传播与链式法则
计算神经网络中所有参数梯度的核心挑战在于如何同时高效地计算这些梯度。反向传播算法正是为此而生,其本质就是多元微积分中的链式法则。
我们可以将神经网络的计算过程视为一个计算图。图中的每个节点(或“模块”)代表一个函数,其输入是进入该节点的箭头,输出是离开该节点的箭头。
例如,考虑一个函数 \(f\),其输出为向量 \(\mathbf{a}_1\),输入为向量 \(\mathbf{z}_1\)。该函数的导数(即雅可比矩阵)的维度为:行数等于输出向量的元素个数,列数等于输入向量的元素个数。
在神经网络的计算图视图中,我们输入数据 \(x\),经过第一层计算:\(\mathbf{z}_1 = W_1 x + b_1\),然后应用一个逐元素的非线性激活函数 \(g\),得到 \(\mathbf{a}_1 = g(\mathbf{z}_1)\)。这构成了一层。
接着,我们将 \(\mathbf{a}_1\) 作为输入,通过下一层:\(\mathbf{z}_2 = W_2 \mathbf{a}_1 + b_2\),再经过激活得到 \(\mathbf{a}_2\)。这个过程可以重复 \(L\) 层。
对于二分类,最后一层(第 \(L\) 层)的输出是一个标量:\(z_L = W_L \mathbf{a}_{L-1} + b_L\),然后通过 sigmoid 函数得到预测值 \(\hat{y} = \sigma(z_L)\)。随后,我们计算损失,例如二元交叉熵损失:\(L = -[y \log \hat{y} + (1-y)\log(1-\hat{y})]\)。
我们的目标是计算损失 \(L\) 相对于所有参数 \(W_l, b_l\)(\(l=1,...,L\))的梯度,以便执行梯度下降。
通过链式法则计算梯度
假设我们想计算标量损失 \(L\) 相对于某个参数(例如 \(W_2\) 矩阵中的第 \(i,j\) 个元素 \(W_{2,ij}\))的梯度。根据链式法则,我们需要沿着从损失 \(L\) 到该参数的计算路径,将路径上各局部函数的雅可比矩阵相乘。
计算路径大致如下:
- \(L\) 对 \(\hat{y}\) 的导数(标量对标量)。
- \(\hat{y}\) 对 \(z_L\) 的导数(标量对标量)。
- \(z_L\) 对 \(\mathbf{a}_{L-1}\) 的导数(标量对向量,得到一个行向量)。
- \(\mathbf{a}_{L-1}\) 对 \(\mathbf{z}_{L-1}\) 的导数(向量对向量,得到一个方阵)。
- \(\mathbf{z}_{L-1}\) 对 \(\mathbf{a}_{L-2}\) 的导数(向量对向量,得到一个矩阵)。
- ... 如此反复,直到到达包含 \(W_{2,ij}\) 的层。
- 最后,计算 \(\mathbf{z}_2\) 对 \(W_{2,ij}\) 的导数(向量对标量,得到一个列向量)。
将这些雅可比矩阵相乘,最终会得到一个标量,即 \(\frac{\partial L}{\partial W_{2,ij}}\)。
一个关键的观察是:除了最后一层(可视为一个广义线性模型,如逻辑回归)和连接到具体参数的分支外,中间的计算模式是重复的。具体来说,每层都交替出现两种雅可比矩阵:
- \(\mathbf{z}_l\) 对 \(\mathbf{a}_{l-1}\) 的导数:这正好是权重矩阵 \(W_l\) 本身(因为 \(\mathbf{z}_l = W_l \mathbf{a}_{l-1} + b_l\))。
- \(\mathbf{a}_l\) 对 \(\mathbf{z}_l\) 的导数:由于激活函数 \(g\) 是逐元素应用的,这是一个对角矩阵,对角线元素是 \(g'(z_l^{(k)})\)。
因此,反向传播的计算可以高效地重复利用这些中间结果。
参数梯度的具体形式
让我们更仔细地看看如何计算损失 \(L\) 相对于某一层权重 \(W_l\) 中某个元素 \(W_{l,ij}\) 的梯度。
根据链式法则的推导,并利用上面观察到的模式,我们可以得到一个简洁的结果。定义 \(\delta_l = \frac{\partial L}{\partial \mathbf{z}_l}\)(这是一个行向量)。
经过计算,损失 \(L\) 相对于整个权重矩阵 \(W_l\) 的梯度可以表示为:
公式:\(\frac{\partial L}{\partial W_l} = \delta_l^T \cdot \mathbf{a}_{l-1}^T\)
这里 \(\delta_l^T\) 是列向量,\(\mathbf{a}_{l-1}^T\) 是行向量,其结果是一个矩阵,其第 \(i,j\) 个元素正是 \(\frac{\partial L}{\partial W_{l,ij}}\)。这本质上是两个向量的外积。
类似地,对于偏置项 \(b_l\) 的梯度计算更为简单,通常 \(\frac{\partial L}{\partial b_l} = \delta_l^T\)。
在实际操作中,为了高效计算所有层的梯度,我们采用反向传播算法:
- 前向传播:计算每一层的 \(\mathbf{z}_l\) 和 \(\mathbf{a}_l\),直到得到最终输出和损失。
- 反向传播:从最后一层开始,向后计算每一层的 \(\delta_l\)。
- 对于输出层,\(\delta_L\) 的计算类似于逻辑回归的梯度。
- 对于隐藏层,\(\delta_l = (\delta_{l+1} W_{l+1}) \odot g'(\mathbf{z}_l)\),其中 \(\odot\) 表示逐元素乘法。
- 利用计算好的 \(\delta_l\) 和存储的 \(\mathbf{a}_{l-1}\),计算每一层的参数梯度:\(\frac{\partial L}{\partial W_l} = \delta_l^T \mathbf{a}_{l-1}^T\),\(\frac{\partial L}{\partial b_l} = \delta_l^T\)。
小批量梯度下降
在实际训练中,我们通常使用小批量梯度下降。我们不是每次使用一个样本(随机梯度下降)或所有样本(批量梯度下降),而是每次随机采样一小批(mini-batch)样本。
损失函数定义为该批次所有样本损失的*均:
公式:\(J(W, b) = \frac{1}{B} \sum_{i=1}^{B} L(\hat{y}^{(i)}, y^{(i)})\)
其中 \(B\) 是小批量的大小。
在前向和反向传播时,输入 \(X\) 将是一个矩阵,其每一列是一个样本。线性变换 \(Z_l = W_l A_{l-1} + b_l\) 会产生维度上的变化(例如,\(W_l\) 是 \(m \times d\),\(A_{l-1}\) 是 \(d \times B\),结果 \(Z_l\) 是 \(m \times B\))。此时,偏置项 \(b_l\)(维度 \(m \times 1\))需要被“广播”到 \(m \times B\) 的矩阵上,以便与 \(W_l A_{l-1}\) 相加。现代深度学习框架(如PyTorch、TensorFlow)会自动处理这种广播操作。

神经网络的视角与理论
我们可以将神经网络视为一个可学习的特征映射 \(\phi(x)\) 后接一个线性模型。神经网络的前 \(L-1\) 层学习如何将原始输入 \(x\) 转换到一个新的特征空间 \(\phi(x)\),最后一层则在这个新特征空间上应用一个广义线性模型(如逻辑回归)。因此,神经网络的核心能力之一是学习数据的有用表示。
关于神经网络的理论能力,有一个重要的结论叫做通用*似定理。该定理指出,对于一个在有限输入区域上的任意连续函数 \(f(x)\),存在一个只有一个隐藏层(但可能很宽)的神经网络,可以以任意精度*似该函数。这说明了神经网络强大的表达能力。
然而,该定理只证明了这种网络结构的存在性,并没有给出如何通过训练(如梯度下降)找到这组参数的算法,也没有说明需要多少数据。在实践中,深度神经网络的训练仍然面临许多挑战,如梯度消失/爆炸问题,但通过诸如 ReLU 激活函数、批归一化等技术,可以在许多任务上取得卓越性能。
总结
本节课中,我们一起深入探讨了神经网络的反向传播算法。
- 我们首先回顾了神经网络作为复合函数的结构。
- 然后,我们详细阐述了如何利用链式法则(表现为雅可比矩阵的连乘)来计算损失函数对任意参数的梯度。
- 我们发现了计算图中的重复模式(权重矩阵 \(W\) 和对角激活导数矩阵),这使得反向传播可以高效进行。
- 我们推导了参数梯度的具体形式(外积),并概述了反向传播算法的步骤。
- 我们介绍了实际训练中使用的小批量梯度下降及其中的广播操作。
- 最后,我们从特征学习的视角理解了神经网络,并提及了其强大的理论表达能力(通用*似定理)。

理解反向传播是掌握神经网络训练的关键。虽然涉及许多细节,但其核心思想是直接的链式法则应用。下一讲,我们将开始讨论偏差-方差权衡与正则化,以理解如何控制神经网络的强大表达能力,防止过拟合。
机器学习 12:偏差、方差与正则化 🎯


在本节课中,我们将要学习机器学习中的三个核心且相互关联的概念:偏差与方差、模型选择与交叉验证以及正则化。偏差与方差是理解模型泛化性能的关键,是机器学习的核心思想之一。
神经网络回顾 🧠
上一讲我们介绍了神经网络与深度学习。神经网络是由简单的线性模型模块组合而成,通过非线性激活函数连接。这些非线性至关重要,因为如果没有它们,整个网络就可以简化为一个单层线性模型。
神经网络的训练是非凸优化问题,因此参数需要随机初始化(例如,全零初始化会因对称性问题而失败)。训练的核心方法是反向传播,它本质上是多元微积分链式法则的应用。我们通过计算最终损失对每一层参数的梯度来更新模型,这些梯度通过一系列简单的雅可比矩阵(如激活函数的导数或权重矩阵本身)链式相乘得到。
我们还提到了通用*似定理,它表明神经网络可以非常具有表现力,能够*似任意光滑可微函数。这引出了一个问题:拥有如此强大的表达能力是好事还是坏事?这自然地将我们引向偏差与方差的讨论。
偏差与方差 📊
在作业中,我们通过特征映射看到了一个现象:对于同一数据集,使用不同阶数的多项式进行拟合,结果差异很大。
- 使用 k=1(一次多项式)进行线性拟合,得到一条直线。
- 使用 k=2(二次多项式)进行拟合,得到一个二次曲线。
- 使用 k=20(二十次多项式)进行拟合,可能会得到一个非常“曲折”的曲线,它穿过了所有训练点。
在分类问题中也有类似现象。我们通常称 k=1 的模型为欠拟合,而 k=20 的模型为过拟合。
泛化误差的分解
在机器学习中,我们关心的不是模型在训练集上的表现,而是其在未见过的数据(测试集)上的表现,即泛化误差。泛化误差可以大致分解为两个部分:
- 偏差:由于模型表达能力不足(“残疾”)导致的泛化误差成分。即使是在训练集上,这类模型也表现不佳。
- 方差:由于训练数据有限导致的泛化误差成分。模型虽然表达能力很强,但由于数据不足,过度拟合了训练集中的噪声,导致在未见数据上表现不稳定。
简单来说:
- 欠拟合 大致对应 高偏差。
- 过拟合 大致对应 高方差。
*方误差下的精确分解
在*方误差损失和特定数据生成假设下,我们可以对测试误差(泛化误差)进行精确分解。假设数据生成过程为:
y = f(x) + ε,其中 E[ε] = 0,Var(ε) = σ²。
那么,在一个新测试样本 (x, y) 上的期望*方误差可以分解为:
E[(y - ĥ(x))²] = σ² + Bias[ĥ(x)]² + Var[ĥ(x)]
其中:
- σ²:不可约误差。源于数据本身的噪声,是任何模型都无法降低的误差下界。
- Bias[ĥ(x)]²:偏差的*方。度量了模型预测值的期望与真实值之间的系统性差异。
- Var[ĥ(x)]:方差。度量了在不同训练集上训练得到的模型,其预测值的变化程度。
这三个部分都是非负的。偏差和方差描述了模型误差的不同来源,一个模型可以同时具有高偏差和高方差。
统计学视角的直观理解
从经典统计学参数估计的角度看,可以更直观地理解偏差和方差。
假设真实参数为 θ*,我们通过在不同训练集上拟合模型,得到参数估计 θ̂ 的分布(抽样分布)。
- 偏差:抽样分布的均值与真实参数
θ*的差距。差距小则为低偏差估计量,反之为高偏差估计量。 - 方差:抽样分布本身的离散程度。分布集中则为低方差估计量,分布分散则为高方差估计量。
偏差和方差是独立的属性。一个估计量可以同时是低偏差高方差、高偏差低方差等。随着训练样本量 n 的增加,方差通常会减小,偏差也可能减小。如果当 n → ∞ 时偏差趋于0,则该估计量称为一致估计量。
模型选择与交叉验证 🔍
我们的目标是降低泛化误差。在实践中,我们通过交叉验证来评估和选择模型。
基本流程:训练集、验证集、测试集
以下是标准的操作流程:
-
分割数据:将数据集随机分为三部分:
- 训练集:用于拟合模型参数。
- 验证集(开发集):用于调整模型超参数(如多项式阶数
k、神经网络层数、正则化强度λ等)和选择模型。 - 测试集:用于在最终模型确定后,评估其泛化性能的最终、一次性的指标。
-
迭代调优:
- 在训练集上训练模型。
- 在验证集上评估模型性能。
- 根据验证集性能调整超参数,并重复此过程。
-
最终评估:
- 在整个调优过程结束后,使用从未参与训练或调优的测试集对最终选定的模型进行一次性能评估,以估计真实的泛化误差。
为什么需要独立的测试集? 因为我们在验证集上进行了多次评估和基于其结果的决策,这相当于在验证集上进行了某种程度的“过拟合”。测试集作为完全未被“污染”的数据,提供了对泛化误差更可靠的估计。
K折交叉验证
当数据量较小时,可以使用 K折交叉验证。
以下是K折交叉验证的步骤:
- 将训练集随机分成K个大小相似的子集(折)。
- 进行K次训练和验证。对于第
i次:- 将第
i折作为验证集。 - 将剩余的 K-1 折合并作为训练集。
- 训练模型并在第
i折上验证。
- 将第
- 将K次验证结果(如误差)的*均值作为模型性能的估计。
当 K = n(样本总数)时,称为留一交叉验证。这种方法在数据稀缺时非常有用,但计算成本较高。
正则化 ⚖️
正则化是一种用于防止过拟合、鼓励模型更“*滑”的技术。
动机与直观理解
回顾 k=20 多项式回归的例子,那个“曲折”的拟合曲线对应着非常大的参数值 θ_i。直觉上,如果参数值较小,即使模型复杂度高,得到的函数也会更*滑,更可能泛化得好。正则化的核心思想就是在损失函数中添加一项,以惩罚大的参数值。
L2正则化(岭回归)
在线性回归的*方误差损失基础上,添加参数向量的L2范数(*方和)作为惩罚项:
J(θ) = Σ (y⁽ⁱ⁾ - h_θ(x⁽ⁱ⁾))² + λ Σ θ_j²
其中 λ 是正则化参数,控制着原始损失项和正则化项之间的权衡。
λ很大:模型更关注让参数小,可能导致欠拟合。λ很小或为0:模型更关注拟合数据,可能导致过拟合。- 合适的
λ通过交叉验证选择。
贝叶斯视角:最大后验估计
正则化有深刻的贝叶斯解释。它等价于在参数上引入先验分布,然后进行最大后验估计。

在贝叶斯框架中:
- 我们为参数
θ设定一个先验分布p(θ)(例如,均值为0的高斯分布)。 - 结合数据似然
p(Data|θ),得到后验分布p(θ|Data) ∝ p(Data|θ) p(θ)。 - 最大后验估计是取后验分布中概率最大的
θ值:θ_MAP = argmax_θ p(θ|Data)。
取对数后:θ_MAP = argmax_θ [log p(Data|θ) + log p(θ)]。
- 第一项
log p(Data|θ)对应标准的极大似然估计(如*方误差损失)。 - 第二项
log p(θ)对应正则化项。
关键联系:如果先验 p(θ) 是均值为0、方差由 λ 控制的高斯分布,那么 log p(θ) 就正比于 -λ Σ θ_j²。因此,使用高斯先验的MAP估计,等价于在损失函数中添加L2正则化项。先验的方差(或精度)决定了正则化的强度。
类似地,如果使用拉普拉斯先验,则会导出 L1正则化(Lasso),它倾向于产生稀疏解(即许多参数为0),从而隐含地进行了特征选择。
总结 📝
本节课我们一起学习了机器学习中三个紧密相关的核心概念:
-
偏差与方差:我们理解了泛化误差可以分解为偏差、方差和不可约误差。偏差源于模型表达能力不足,方差源于对有限训练数据中噪声的过度敏感。这为我们诊断模型是欠拟合(高偏差)还是过拟合(高方差)提供了理论框架。
-
交叉验证:我们掌握了通过将数据分为训练集、验证集和测试集来评估模型、选择超参数和最终估计泛化性能的标准流程。K折交叉验证是处理小数据集的常用技术。
-
正则化:我们学习了通过修改损失函数(如添加L2惩罚项)来约束模型复杂度、防止过拟合的技术。我们从贝叶斯角度理解了正则化等价于为模型参数引入先验分布(如高斯先验对应L2正则化),并通过最大后验估计进行参数学习。

掌握这些概念对于构建泛化能力强的机器学习模型至关重要。在实践中,我们需要通过交叉验证来*衡偏差与方差,并利用正则化等技术来找到最佳的模型复杂度。
机器学习 13:偏差-方差权衡与统计学习理论 🎯

概述
在本节课中,我们将深入学习机器学习中的核心概念:偏差-方差权衡,以及正则化和假设类在其中扮演的角色。我们将从理论角度分析偏差和方差如何影响模型的泛化性能,并探讨如何在实际中*衡这两者。课程的后半部分将简要介绍统计学习理论的基础,特别是一致收敛的概念,为理解模型性能的理论边界打下基础。
1. 回顾:偏差与方差 📊
上一节课我们介绍了偏差和方差的概念。本节中,我们来更具体地看看这两个概念在预测问题中的体现。
在经典统计学中,我们关心的是为参数 θ 构建一个估计量 θ̂_n,其中 n 是训练样本的数量。θ̂_n 是一个随机变量,因为它依赖于从数据生成分布中采样的噪声。它的概率分布称为抽样分布。
- 偏差 是抽样分布均值与真实参数
θ*之间的差距。 - 方差 是估计量
θ̂_n的协方差,反映了抽样分布的离散程度。
在机器学习预测问题中,我们关心的是在未见数据上的预测性能。假设真实关系为 y = f(x) + ε,其中 ε 是零均值噪声。我们使用训练数据构造一个估计器 f̂_n,并在新测试点 x* 上进行预测。
预测误差的期望(均方误差,MSE)可以分解为三个部分:
MSE(f̂_n) = E[(y - f̂_n(x*))²] = 不可约误差 + 偏差² + 方差*
以下是三个部分的含义:
- 不可约误差:源于测试数据中的噪声,无法通过改进模型消除。
- 偏差²:模型预测的期望值与真实值
f(x*)之间的差距的*方。反映了模型本身的系统性误差。 - 方差:模型预测
f̂_n(x*)自身的方差。反映了模型对训练数据中噪声的敏感度。
2. 正则化的作用 ⚖️
在深入探讨权衡之前,我们先回顾一下正则化。正则化是一种惩罚模型参数取过大值的技术,目的是防止模型过拟合,变得过于“曲折”。
在线性回归中,我们通过在成本函数中添加一个惩罚项来实现 L2 正则化(岭回归):
J(θ) = Σ (y⁽ⁱ⁾ - θᵀx⁽ⁱ⁾)² + λ ||θ||²
其中 λ 是正则化系数,控制着惩罚的强度。
从贝叶斯的角度看,L2 正则化等价于为参数 θ 赋予一个均值为 0 的高斯先验分布。最大化后验概率(MAP)估计 θ̂_MAP 会得到介于最大似然估计(MLE)θ̂_MLE 和先验均值(0)之间的解,从而使估计的参数值更小。
如果使用拉普拉斯先验,则会得到 L1 正则化(LASSO),它倾向于产生稀疏参数(即许多参数恰好为 0)。
3. 案例研究:L2正则化线性回归中的权衡 🔬
现在,我们通过 L2 正则化线性回归的具体案例,来看正则化如何影响偏差和方差。
L2 正则化线性回归的解为:
θ̂_n = (XᵀX + λI)⁻¹ Xᵀy
通过分析 θ̂_n 的期望和协方差矩阵,我们可以得到以下结论:
- 对偏差的影响:当
λ > 0时,E[θ̂_n]不等于真实参数θ*,而是θ*的一个“收缩”版本。随着λ增大,这种收缩效应更强,偏差增大。 - 对方差的影响:
θ̂_n的协方差矩阵的特征值随着λ增大而减小。这意味着估计量的分布更集中,方差减小。
因此,我们看到了清晰的权衡:
- 增大
λ:方差减小(好),但偏差增大(坏)。 - 减小
λ:偏差减小(好),但方差增大(坏)。
这种偏差和方差之间的此消彼长关系,就是偏差-方差权衡。
这种对参数估计量的影响会直接传导到预测结果上。预测的偏差和方差也与 θ̂_n 的偏差和方差有直接关系。
4. 实践指南:如何改进模型? 🛠️
我们的最终目标是最小化泛化误差(即测试误差的期望)。泛化误差由不可约误差、偏差²和方差组成。不可约误差无法改变,因此我们只能通过降低偏差或方差来改进模型。
问题是,我们无法直接计算真实的偏差和方差,因为不知道真实函数 f(x)。在实践中,我们使用启发式方法来估计:
训练误差 ≈ 偏差
(验证集误差 - 训练误差)≈ 方差
这是一个非常有用的经验法则。基于此,我们可以采取有针对性的行动:
在决定下一步行动前,首先评估当前模型的瓶颈:
- 如果训练误差很高(高偏差),说明模型连训练数据都拟合得不好。此时应主要对抗偏差。
- 如果训练误差低,但验证集误差远高于训练误差(高方差),说明模型过拟合了训练数据。此时应主要对抗方差。
以下是针对不同问题的常见策略:
对抗偏差(欠拟合)的策略:
- 使用更复杂的模型(例如,为神经网络增加层数或神经元)。
- 添加更多特征。
- 减少正则化强度(
λ)。
对抗方差(过拟合)的策略:
- 获取更多训练数据。
- 使用更简单的模型。
- 增加正则化强度(
λ)。 - 使用特征选择。
核心工作流:始终先使用训练误差和验证误差的差距来诊断问题是高偏差还是高方差,然后有目的地选择上述策略之一进行干预。这是一个迭代的过程。
5. 统计学习理论简介:一致收敛 📐
上一节我们介绍了如何通过启发式方法指导实践。本节中,我们从理论角度看看模型性能的边界。这构成了统计学习理论的基础。
我们做两个基本假设:1) 训练数据和测试数据来自同一分布 D;2) 样本是独立同分布(IID)的。
定义两个关键概念:
- 风险
ε(h):假设h的期望损失,ε(h) = E_{(x,y)~D}[loss(y, h(x))]。这是真实的泛化误差。 - 经验风险
ε̂(h):在训练集S上的*均损失,ε̂(h) = (1/|S|) Σ_{(x,y)∈S} loss(y, h(x))。这是训练误差。
理想情况下,我们希望找到最小化真实风险 ε(h) 的假设。但实际上,我们只能找到最小化经验风险 ε̂(h) 的假设 ĥ(经验风险最小化,ERM)。
5.1 假设类与误差分解
我们通常将模型限制在一个假设类 H 中(例如,所有线性模型,所有深度为3的神经网络)。
- 最优类内假设
h*:在H中具有最小真实风险的假设,h* = argmin_{h∈H} ε(h)。 - 估计假设
ĥ:通过 ERM 在训练集上找到的假设,ĥ = argmin_{h∈H} ε̂(h)。
泛化误差 ε(ĥ) 可以分解为:
ε(ĥ) = (不可约误差) + (*似误差) + (超额风险)
其中:
- *似误差:
ε(h*) - (不可约误差)。这是由于我们将搜索范围限制在假设类H中所付出的代价。使用更丰富的H可以减小*似误差(降低偏差)。 - 超额风险:
ε(ĥ) - ε(h*)。这是由于我们只有有限数据而非无限数据所付出的代价。使用更大的数据集可以减小超额风险(降低方差)。
5.2 一致收敛与超额风险界
统计学习理论的核心工具是一致收敛。它描述了对于假设类 H 中的所有假设 h,经验风险 ε̂(h) 以高概率一致地接*真实风险 ε(h)。
一致收敛定理(模板):
以至少 1 - δ 的概率,对于所有 h ∈ H,有:
|ε(h) - ε̂(h)| ≤ γ
其中,边界 γ 是一个依赖于训练集大小 n、置信水* δ 以及假设类 H 复杂度(如 VC 维、Rademacher 复杂度)的函数。γ 通常随着 n 增大而减小,随着 H 复杂度增大而增大。
利用一致收敛定理和 ĥ 是经验风险最小化器这一事实,我们可以推导出超额风险界:
ε(ĥ) ≤ ε(h*) + 2γ
这个结论非常有力:它告诉我们,通过有限数据学习到的模型 ĥ 的性能,与假设类中可能的最佳模型 h* 的性能,其差距最多是 2γ。
5.3 权衡再现

考虑一个简单的例子:有限假设类,其大小为 K。可以证明 γ 的形式约为 √( (log K) / n )。
那么超额风险界约为:
ε(ĥ) ≤ ε(h*) + O( √( (log K) / n ) )
这里再次看到了权衡:
- 增大假设类
H(增大K):可以降低ε(h*)(*似误差,对应降低偏差),但会使边界项γ增大(对应增加方差)。 - 增大数据量
n:可以降低边界项γ(降低方差),但不影响ε(h*)。
这从理论层面再次印证了偏差-方差权衡的普遍性。
总结 🎓
本节课我们一起深入学习了机器学习中的核心议题——偏差-方差权衡。
- 概念回顾:我们明确了在预测问题中,泛化误差(均方误差)可以分解为不可约误差、偏差²和方差三部分。
- 正则化的角色:以 L2 正则化线性回归为例,我们看到了正则化系数
λ如何调节偏差与方差:λ增大会减小方差但增大偏差。 - 实践方法论:我们学习了关键的实践指南:使用训练误差估计偏差,用(验证误差 - 训练误差)估计方差。根据诊断结果,有目的地选择“对抗偏差”或“对抗方差”的策略来改进模型。
- 理论视角:我们简要介绍了统计学习理论,通过一致收敛的概念,理解了如何从理论上界定经验风险最小化器的性能。理论分析同样揭示了模型复杂度(假设类大小)与数据量之间的权衡,这本质上是偏差-方差权衡的理论体现。

掌握偏差-方差权衡的思想,并学会在实战中诊断和应对,是构建高效、稳健机器学习模型的关键。
机器学习 14:强化学习 I 🎮


在本节课中,我们将要学习强化学习的基础知识,特别是马尔可夫决策过程、价值迭代和策略迭代。这些概念构成了强化学习的核心。
课程概述与反馈 📢
大家好,欢迎来到CS229第14讲。今天的主题是开始新的一章——强化学习。我们将涵盖马尔可夫决策过程、价值迭代和策略迭代,这些内容构成了强化学习的核心。在周五的讲座中,我们将看到更复杂的扩展。
在进入今天的主题之前,先做一些公告。感谢大家通过我们提交的谷歌表单发送反馈,我们收到了很多好的建议和改进点。以下是一些反馈的简要总结以及我们将采取的改进措施:
- 关于办公时间:有反馈提到办公时间有太多最后一刻的更改。我们将尽力保持办公时间表的稳定,除非有个人紧急情况或助教无法控制的情况。
- 关于讲座形式:有同学希望使用幻灯片格式进行讲座。然而,考虑到这是一门数学性很强的课程,使用白板可能比幻灯片更能清晰地解释数学内容。
- 关于书写:有反馈希望书写更大一些。我会注意写大一些,如果看不清请随时提醒我。
- 关于讲座节奏:有同学觉得太快,有同学觉得太慢。一个好的折衷方案可能是将观众的问题推迟到完成某个章节后再统一回答,如果问题与讲座内容不直接相关,可能会建议在Piazza上提问。
- 关于作业难度:有反馈认为作业中的数学或编程部分太难。机器学习本身就是一个横跨计算机科学和统计学的领域,因此作业在数学和编程上都有一定难度是正常的。编程作业可能感觉有点长,但这是课程结构的一部分。
- 关于编程帮助:在办公时间,我们通常不专注于帮助学生调试代码,我们期望学生具备基本的编程能力。但如果队列中没有积压的问题,助教可能会提供一些帮助。建议在作业阶段的早期参加办公时间以获取帮助。
反馈表单仍然开放,欢迎大家继续提供反馈,我们会尽力改进以满足大家的需求。
课程回顾与偏差-方差权衡 🔄
上一节我们介绍了课程的整体进度,现在让我们快速回顾一下上一讲的内容,并对整个课程目前的位置做一个总结。
在上一讲或前两讲中,我们深入讨论了偏差-方差权衡。深刻理解偏差-方差权衡应该是你从这门课程中带走的最重要的收获之一。偏差-方差权衡是如此基础,对其有直观而深刻的理解将在你未来的机器学习职业生涯中带来最大的回报。
总结一下偏差-方差权衡。在机器学习中,我们关心的是泛化误差,即我们的模型在未见数据上的表现,而不是在训练数据上的表现。测试误差或泛化误差可以分解为三个可加的部分:
- 不可约误差:这只是测试示例中的噪声。我们的训练数据和测试数据都是有噪声的,测试数据中的噪声贡献了不可约误差,我们对此无能为力,只能接受。
- 偏差:可以将其视为模型的系统误差。这意味着如果你在所有可能的训练集上取*均,你的模型所犯的系统性误差(例如,对某些示例预测不足或过度预测,或者参数比应有的更接*0)被称为偏差。
- 方差:衡量我们的模型对训练数据中噪声的敏感程度。这就是测试数据噪声和训练数据噪声之间的区别所在:测试数据中的噪声导致不可约误差,而训练数据中的噪声导致模型的方差。
我们可以采取许多步骤来减少测试误差,例如尝试更大的模型、获取更多训练数据等。然而,并非所有步骤在所有情况下都有效。为了确定对你当前面临的问题最有效的步骤,理解这种偏差-方差权衡至关重要。
减少训练误差很简单,你总是可以通过使用更大、更复杂的模型来减少训练误差。但我们的目标是提高测试误差。我们所采取的步骤将取决于当前面临的问题主要是偏差问题还是方差问题。偏差-方差权衡基本上告诉你,通过采取某些步骤,你可能会减少偏差或方差之一,但也可能增加另一个。因此,我们能够判断当前哪个问题是主要问题,并有针对性地采取措施来解决该问题(偏差或方差)就变得非常重要。
例如,我们看到如果增加模型容量(即使用更复杂的模型),这将减少模型的偏差,但同时可能增加模型的方差。因此,如果你当前面临的问题是高方差,那么你几乎肯定不应该使用更大的模型,因为这会使你的问题恶化。
同样地,对于正则化,如果我们增加正则化,这将减少模型的方差,但也会增加模型的偏差。这意味着如果你当前的问题是高偏差,那么增加正则化会使情况变得更糟,而如果问题是高方差,增加正则化则会有所帮助。
因此,对你来说,表征并启发式地估计偏差和方差对当前测试误差的贡献是极其重要的。不幸的是,在实践中没有原则性的方法来分解和获得这些估计,这就是我们使用启发式方法的原因。
启发式方法是:你可以将训练误差本身视为偏差,将交叉验证误差与训练误差之间的差距视为方差。这就是交叉验证发挥作用的地方。交叉验证最重要的用途是我们可以从当前模型中获得这种偏差和方差的分解。
一旦我们得到了这种分解,我们就可以判断模型当前面临的是较大的偏差问题还是较大的方差问题,并根据哪个问题更大来采取一些补救措施。
总结是:每当你进行模型开发并希望提高模型性能时,你应该始终同时查看训练误差和交叉验证误差。我们关心的是提高交叉验证误差或测试误差,但仅仅查看这些误差本身并不能提供可操作的见解。为了获得可操作的见解,你需要同时查看训练误差和交叉验证误差,判断当前情况是高偏差还是高方差,然后相应地采取行动来补救高偏差或高方差。这可能是对你整个机器学习职业生涯最有帮助的事情。
课程整体概览 📚
现在让我们从整体上看看我们在课程中的位置。以下是我们迄今为止涵盖内容的快速概述:
- 第1-4周:监督学习。监督学习是学习一个我们称之为假设的函数
h,它将输入x映射到输出y。在监督学习中,输入和输出的概念非常清晰,而在无监督学习中则不然。我们有一个大小为n的训练集,包含这些(x, y)对,我们的目标是从这个训练集中学习这个假设函数,使其能够很好地泛化到未见数据。我们看到了两种主要算法:分类与回归。这种分类是基于y变量的数据类型。如果y是二元的(0或1),我们称之为分类;如果y是连续的,我们称之为回归。 - 广义线性模型:在了解了线性和逻辑回归之后,我们将其推广为广义线性模型,其中
y|x属于指数族分布。GLM不仅适用于分类或回归,它概括了y的数据类型。 - 判别式与生成式模型:我们还看到了构建模型的两种不同方法:判别式与生成式。在判别式模型中,我们直接学习
y|x,广义线性模型就是一个例子。另一种方法是生成式模型,我们想要学习如何生成新的示例,即生成完整的(x, y)对。 - 非线性模型:之后我们转向了非线性模型。我们实际上已经在第一次作业中通过使用特征映射探索了非线性。我们看到的更正式的特征映射方法是核方法。核是具有隐式特征映射的对称正定函数。使用核,我们可以构建基于核的方法,例如用于分类问题的支持向量机和用于回归问题的高斯过程。
- 神经网络:我们看到的另一种非线性方法是可学习的特征,即神经网络。你可以将神经网络视为最后一层的广义线性模型,而在此之前的所有层都是某种可学习的特征映射。
- 学习理论:之后我们转向了学习理论,主要涉及正则化及其贝叶斯解释(正则化对应于贝叶斯设置中的MAP估计)。我们研究了偏差和方差以及偏差-方差权衡,还研究了一致收敛,这是课程中更理论的部分。
以上就是直到上一讲的内容。今天和下一讲我们将涵盖强化学习,这将是对强化学习的一个非常快速的概述。强化学习是一个超级广阔的领域,有多门专门的课程,我们只会涵盖基础知识,并为你提供一个关于不同强化学习算法如何组合在一起的整体图景。
从下周开始,我们将开始学习无监督学习。最后,在第8周,我们将在周一和周三进行两次讲座,对整个课程进行全面复习,希望能为期末考试做好充分准备。
强化学习介绍 🤖
在迄今为止我们涵盖的主题(主要是监督学习)中,我们总是被告知对于给定的输入或给定情况,正确答案是什么。对于每个 x,我们都有一个对应的 y,这是正确答案或我们的模型应该学会预测的答案,并且这是直接给我们的。这就是为什么我们称之为监督学习。
而在强化学习中,这种监督有点弱。我们不是被告知在给定情况下该做什么,而是被给予某种奖励。你可以将其视为用奖励 R 代替监督 y。奖励总是一个实数值,可以是正的也可以是负的。你可以将奖励视为你工作做得有多好。没有所谓的“正确”奖励,强化学习的目标是最大化我们的长期奖励。
这意味着我们处理的是随时间变化的情况。在监督学习中,我们处理的是固定情况,每个示例都是独立同分布的。而在强化学习中,我们试图编程一个在环境或现实世界或模拟器中生活的智能体,使其随着时间的推移表现良好。
这种智能体的例子可以是学习如何行走的机器人、下棋或围棋的游戏智能体,甚至是你在金融市场中使用的自动交易代理。在这些场景中,你随着时间的推移做出多个决策,每次采取行动后都会获得某种奖励。
强化学习的目标是最大化随时间累积的奖励。这意味着我们需要从长远角度来优化我们将要累积的奖励量,从现在开始一直到未来。这与监督学习设置非常不同,在监督学习中,我们被给予一个示例,我们只关心在该示例上表现良好,而下一个示例是完全独立的。
正是这种时间概念使强化学习不同于一般的监督学习。在强化学习中,我们一次做一个决策,每个决策都会获得一些奖励,我们的目标是最大化这种累积到未来的奖励。
马尔可夫决策过程 🧩
我们形式化强化学习的方式是通过称为MDP或马尔可夫决策过程的形式体系。
一个MDP是一个五元组 (S, A, P, γ, R),其中:
S是状态的集合,即我们的智能体当前可能处于的所有可能状态的集合。A是动作的集合。P是转移概率,即P(s'|s, a),表示在状态s下采取动作a后转移到状态s'的概率。γ是折扣因子,一个介于0和1之间的标量。R是奖励函数,R: S × A → ℝ或有时只是R: S → ℝ。
让我们看一个例子。假设有一个智能体生活在一个网格世界中。智能体在任何给定时间可以位于这些网格中的一个。我们的目标是到达右上角的格子(奖励+1),并避免左下角的格子(奖励-1)。在其他所有格子中,我们假设有一个小的负奖励(例如-0.02)。
S是所有可能格子的集合(例如(1,1),(1,2), ...)。A是我们可以采取的动作集合:向北、向南、向西、向东移动。P是转移概率。例如,如果我们在状态(1,3)并采取动作“向北”,由于环境的不确定性(例如机器人打滑),我们可能以0.8的概率到达(2,3),以0.1的概率到达(1,2),以0.1的概率到达(1,4)。R是奖励函数。例如,R((4,3)) = +1,R((4,2)) = -1,其他状态R(s) = -0.02。γ是折扣因子,例如γ = 0.99。
当智能体启动时,我们假设它从某个初始状态 s₀ 开始。然后我们采取一个动作 a₀,根据转移概率 P(s₁|s₀, a₀) 进入一个新状态 s₁。在状态 s₁,我们获得奖励 R(s₁),然后采取动作 a₁,进入状态 s₂,依此类推。这个状态和动作的序列通常被称为一个试验、回合或轨迹。
当智能体经历一个特定的轨迹时,它在每个状态 s 都会获得一些奖励。随着时间的推移,智能体会累积奖励。这就是折扣因子 γ 发挥作用的地方。折扣因子基本上是一个系数,我们用它来乘以所有未来的奖励。在状态 s₁ 获得的奖励将乘以因子 γ,在状态 s₂ 获得的奖励将乘以 γ²,依此类推。智能体在未来累积的是这些折扣奖励的总和,而我们的目标就是最大化这个总和。
折扣因子的一个思考方式是:任何我们获得的正面奖励,越早获得越好。因此,折扣因子激励模型尽早获得更大的奖励,并激励模型将任何负面奖励推迟到未来。另一个常见的解释(尤其是在金融环境中)是,你可以将折扣因子视为利率,这意味着你希望尽早赚钱,并将损失推迟到未来。
策略与价值函数 ⚖️
给定这个MDP设置,我们可以定义两个核心概念:策略和价值函数。
策略 π 是一个从状态到动作的映射:π: S → A。它告诉你在给定状态下应该采取什么动作。策略是智能体可以灵活学习的东西,我们的目标是学习一个策略,即学习这个从状态映射到动作的函数。
价值函数 V^π 与策略 π 相关联。它是一个从状态到实值的函数:V^π: S → ℝ。V^π(s) 定义为从状态 s 开始,然后永远遵循策略 π 所获得的期望折扣奖励总和:
V^π(s) = 𝔼 [ R(s₀) + γR(s₁) + γ²R(s₂) + ... | s₀ = s, a_t ∼ π(s_t) ]
其中,期望是因为转移是随机的。奖励是短视的、即时的满足感,而价值是长期的、远见的,是遵循特定策略将获得的总折扣奖励总和。
为了最大化价值,你可能需要牺牲即时奖励,如果长期来看有做得非常好的前景。这就是奖励和价值之间的关键区别。
给定一个策略 π,我们可以计算相应的价值函数 V^π。反之,给定一个价值函数 V,我们可以构造一个相应的策略 π,其中在每个状态 s 采取的动作是选择那个能让你以最高概率到达具有最高价值的下一状态的动作。
因此,策略和价值函数在某种意义上是相互对偶的。π 隐含地定义了每个状态的价值函数,而 V 也隐含地定义了一个策略。
贝尔曼方程与策略评估 🔄
从策略 π 到价值 V^π 的关系可以通过贝尔曼方程来表达:
V^π(s) = R(s) + γ * Σ_{s'∈S} P(s' | s, π(s)) * V^π(s')
这个方程是递归的:一个状态的价值等于即时奖励加上所有可能下一状态的折扣价值的期望。
假设我们有有限个状态,V^π 是一个向量(每个状态一个值)。R 也是一个向量(每个状态的即时奖励)。我们可以定义一个矩阵 P^π,其中第 i 行第 j 列的元素是 P(s_j | s_i, π(s_i)),即从状态 s_i 遵循策略 π 采取动作后转移到状态 s_j 的概率。
利用这个矩阵,贝尔曼方程可以写成向量形式:
V^π = R + γ P^π V^π
解这个线性方程组,我们可以得到:
V^π = (I - γ P^π)^{-1} R
这为我们提供了一种方法:给定一个策略 π,计算遵循该策略时每个状态的长期价值。这个过程称为策略评估。
最优价值函数与最优策略 🏆
我们定义最优价值函数 V^* 为所有可能策略中能获得的最大价值:
V^*(s) = max_π V^π(s)
V^*(s) 告诉我们,从状态 s 开始,通过选择最佳可能策略,我们能获得的最高期望折扣奖励总和是多少。
V^* 也必须满足一个贝尔曼方程,称为贝尔曼最优性方程:
V^*(s) = R(s) + max_{a∈A} [ γ * Σ_{s'∈S} P(s' | s, a) * V^*(s') ]
与之前的贝尔曼方程不同,这里有一个 max 操作符,因此不能直接线性求解。
给定最优价值函数 V^*,我们可以定义最优策略 π^*:
π^*(s) = argmax_{a∈A} [ Σ_{s'∈S} P(s' | s, a) * V^*(s') ]
最优策略告诉我们,在状态 s 下,应该采取哪个动作以最大化期望的长期价值。
价值迭代算法 🔄
上一节我们定义了最优价值函数和最优策略,本节我们来看看如何计算它们。价值迭代是一种算法,用于计算最优价值函数 V^*。
算法步骤:
- 对于所有状态
s,初始化V(s) = 0。 - 重复直到收敛:
- 对于每个状态
s,更新:V(s) ← R(s) + max_{a∈A} [ γ * Σ_{s'∈S} P(s' | s, a) * V(s') ]
- 对于每个状态
这个更新规则正是贝尔曼最优性方程,但我们将其用作迭代更新。我们从一个初始估计(全零)开始,反复应用这个“贝尔曼备份”操作符。
为什么这会收敛?
贝尔曼备份操作符在数学上被证明是一个压缩映射。这意味着对于任何两个价值函数估计 V1 和 V2,应用操作符后得到的两个新估计之间的距离会比原来的两个估计之间的距离更小。压缩映射有一个不动点,反复应用操作符会收敛到这个不动点,而这个不动点正是最优价值函数 V^*。
因此,无论从哪里开始,价值迭代最终都会收敛到 V^*。收敛后,我们可以使用 V^* 通过之前的最优策略公式来提取最优策略 π^*。
策略迭代算法 🔄
另一种计算最优策略的算法是策略迭代。它直接在策略空间中进行操作。

算法步骤:
- 随机初始化一个策略
π。
机器学习 15:强化学习(二)🎮


概述
在本节课中,我们将完成对强化学习的探讨。主要内容包括:当环境模型(即状态转移概率)未知时如何学习模型,以及如何将之前讨论的方法扩展到连续状态空间。我们将介绍两种主要方法:离散化和拟合值函数迭代。课程最后,我们将对更广阔的强化学习领域进行一个概览性介绍。
快速回顾 📝
上一节课我们介绍了马尔可夫决策过程(MDP)的形式化定义。一个MDP由五个要素构成:状态集合 S、动作集合 A、状态转移概率 P(s'|s, a)、折扣因子 γ 和即时奖励函数 R(s) 或 R(s, a)。
我们引入了两个核心概念:
- 策略 π(s):一个规则手册,告诉智能体在状态 s 时应采取什么动作 a。
- 值函数 V^π(s):从状态 s 开始,遵循策略 π 所能获得的期望长期折扣奖励总和。它满足贝尔曼方程:
V^π(s) = R(s) + γ Σ_{s'} P(s'|s, π(s)) V^π(s')
我们还定义了最优值函数 V*(s),即所有可能策略中能获得的最佳长期价值,它也满足一个贝尔曼方程(最优贝尔曼方程):
V*(s) = R(s) + γ max_a Σ_{s'} P(s'|s, a) V*(s')
对应于最优值函数,存在一个(或多个)最优策略 π*。
我们学习了两种求解MDP(即找到 π*)的算法:
- 值迭代:迭代应用贝尔曼备份算子,该算子是收缩映射,保证收敛到 V*。
- 策略迭代:交替进行策略评估(给定 π 计算 V^π)和策略改进(根据 V^π 贪心地更新 π),直到策略收敛。
一个重要的微妙之处是:从一个值函数 V 通过贪心方式导出的策略 π',如果遵循 π',得到的值函数 V^π' 不一定等于原来的 V。
学习模型(当 P(s‘|s, a) 未知时)🔍
上一节我们假设已知状态转移概率 P(s‘|s, a)。但在许多实际问题中,我们并不知道环境如何运作。这就是基于模型与无模型强化学习的区别。这里的“模型”特指环境模型,即 P(s‘|s, a)。
核心思想
如果我们不知道 P(s‘|s, a),可以通过与模拟器或真实环境交互来收集数据,从而估计它。
以下是具体步骤:
- 运行多次试验(episodes),记录下每次在状态 s 采取动作 a 后,到达状态 s' 的轨迹。
- 使用最大似然估计来估计转移概率:
P̂(s‘|s, a) = (在状态 s 采取动作 a 并转移到 s‘ 的次数) / (在状态 s 采取动作 a 的总次数) - 如果某个 (s, a) 对从未出现过(分母为0),通常可以暂时假设一个均匀分布。
结合模型学习的算法
我们可以将模型学习与值迭代结合起来,形成一个完整的算法:
- 随机初始化一个策略 π。
- 重复以下步骤直到收敛:
a. 执行策略:遵循当前策略 π 运行一段时间,收集 (s, a, s') 三元组数据。
b. 估计模型:利用收集到的所有历史数据,更新对 P̂(s‘|s, a) 的估计。
c. 值迭代:使用估计出的模型 P̂ 代替真实的 P,执行值迭代算法,得到当前模型下的最优值函数估计 V。
d. 策略改进:根据得到的 V,用贪心方法更新策略 π。
注意:在步骤c中,进行值迭代时,可以将上一次迭代收敛的 V 作为初始化值,以加速收敛。
为什么需要迭代? 我们不能简单地穷举所有 (s, a) 对来学习模型,因为状态空间可能很大,或者我们无法任意选择起始状态。通过当前策略引导探索,并迭代改进,是一种更可行的方式。
扩展到连续状态空间 🌊
之前的方法都假设状态和动作空间是离散且有限的。然而,许多实际问题(如倒立摆)的状态是连续的(例如角度、速度)。本节我们探讨如何处理连续状态空间。
方法一:离散化
最直接的想法是将连续状态空间划分为离散的区间(“分箱”)。
优点:简单,可以直接应用之前的离散状态算法。
缺点:
- 维度灾难:如果状态有多个维度,每个维度离散化成10份,总状态数将呈指数增长(例如12维状态会变成 10^12 个状态)。
- 缺乏泛化:学到的值函数在每个“箱子”内是常数,无法泛化到未见过或数据稀疏的区域,也无法捕捉状态间的*滑关系。
方法二:拟合值函数迭代 🧠
为了克服离散化的缺点,我们采用值函数*似。核心思想是用一个参数化函数来*似值函数,例如线性函数或神经网络。
假设:
- 我们有一个模拟器,输入当前状态 s_t 和动作 a_t,输出下一个状态 s_{t+1}。
- 我们假设状态转移可以用一个(可能是随机的)模型来描述,例如一个线性动态系统:
s_{t+1} = A s_t + B a_t + ε, 其中 ε ~ N(0, Σ) - 我们假设值函数具有参数化形式,例如线性特征映射:
V(s) = θ^T φ(s)
模型学习(连续版)
- 遵循某个策略运行模拟器,收集大量的 (s, a, s') 三元组数据。
- 通过最小化预测误差来学习模型参数 A, B, Σ。
- 对于线性模型,可以通过线性回归求解 A, B。
- 对于噪声协方差 Σ,可以用残差的经验协方差来估计。
拟合值迭代算法
在连续设定下,我们无法像离散情况那样直接更新值函数表格。拟合值迭代算法如下:
- 从状态空间 S 中随机采样 N 个状态点 {s_1, ..., s_N}。
- 初始化值函数参数 θ = 0。
- 重复直到收敛:
a. 对于每个采样状态 s_i:
i. 对于每个可能动作 a:
* 从当前学习到的模型 P̂(s‘|s_i, a) 中采样 K 个下一个状态 {s’^{(1)}, ..., s‘^{(K)}}。
* 计算 Q(a) 的蒙特卡洛估计:
Q(a) ≈ (1/K) Σ_{j=1}^K [ R(s_i) + γ V(s‘^{(j)}) ]
其中 V(s‘^{(j)}) = θ^T φ(s‘^{(j)})。
ii. 令 y_i = max_a Q(a)。这可以看作是贝尔曼备份算子应用于 s_i 后得到的“目标值”。
b. 现在我们有了一组数据对 { (s_i, y_i) }。通过最小化*方误差来更新值函数参数 θ:
θ_new = argmin_θ Σ_{i=1}^N ( θ^T φ(s_i) - y_i )^2
这实际上是将“目标值” y_i 投影到我们假设的函数空间(由 θ^T φ(s) 定义)中,找到最接*的点。
算法理解:
- 该算法是值迭代在连续空间、函数*似下的类比。
- 在离散值迭代中,贝尔曼备份算子直接产生一个新的值函数向量。
- 在拟合值迭代中,贝尔曼备份算子产生一组“目标值” y_i,但这些目标值可能不在我们预设的参数化函数族内。因此,我们通过回归(投影)来找到函数族中与这些目标最匹配的函数。
- 由于函数表达能力的限制,算法可能无法收敛到真正的 V*,且收敛性无法保证,但在实践中通常效果良好。
注意:此算法仍假设动作空间是离散的,因为我们需要对动作 a 取最大值。
强化学习领域概览 🗺️
本节我们简要介绍强化学习更广阔的领域,将已学内容置于其中。
主要分类
-
基于值函数 vs. 基于策略
- 基于值函数:专注于学习最优值函数 V* 或动作值函数 Q*,然后导出策略。我们学过的值迭代、策略迭代、拟合值迭代都属于此类。
- 基于策略:直接参数化并优化策略函数 π_θ(a|s)。例如策略梯度方法。
-
基于模型 vs. 无模型
- 基于模型:像本节课前半部分那样,先学习或已知环境模型 P(s‘|s, a),然后利用模型进行规划。优点是可利用模型进行思考,样本效率可能更高。
- 无模型:不尝试学习环境模型,直接学习值函数或策略。最常见的是 Q学习 及其变种(如深度Q网络DQN)。Q函数 Q(s, a) 定义为在状态 s 采取动作 a 后期望获得的总回报。知道了 Q*,最优策略就是选择 Q* 值最大的动作。无模型方法在模型复杂或未知时非常有用。
-
同策略 vs. 异策略
- 同策略:用于评估或改进的策略与生成数据的策略是同一个。
- 异策略:评估或改进的策略与生成数据的策略不同。这允许利用旧策略收集的数据来训练新策略,与因果推断有密切联系。
其他重要概念
- 蒙特卡洛方法:通过运行完整回合并计算实际回报的*均值来估计值函数。
- 时序差分学习:介于动态规划和蒙特卡洛之间,通过当前估计和下一步估计的差异(TD误差)进行在线学习。我们拟合值迭代中的更新在精神上与之类似。
- 深度强化学习:使用深度神经网络作为值函数(如DQN)或策略函数(如策略梯度)的*似器。这极大地增强了处理高维状态(如图像)的能力。
强化学习是一个历史悠久(源于最优控制)且丰富的领域,与机器学习结合后,特别是在深度学习的推动下,取得了许多突破性进展。
总结
本节课我们一起学习了强化学习的两个重要扩展:
- 学习未知模型:当状态转移概率 P(s‘|s, a) 未知时,可以通过交互数据估计它,并将估计的模型嵌入到值迭代等算法中。
- 处理连续状态:通过离散化或更先进的拟合值函数迭代方法,将强化学习算法应用于连续状态空间。后者利用参数化函数*似值函数,并通过采样和回归来模拟值迭代过程。


最后,我们对强化学习的广阔领域进行了分类概览,包括基于值函数/策略、基于模型/无模型、同策略/异策略等维度,并提到了蒙特卡洛、时序差分学习以及深度强化学习等关键概念。这为我们进一步探索这个领域提供了基本的地图。
机器学习 16:K-means、GMM与EM算法 🎯


在本节课中,我们将开始学习无监督学习的新篇章。具体来说,我们将探讨K-means聚类算法、高斯混合模型以及期望最大化算法。这些算法旨在从没有标签的数据中发现潜在的结构和模式。
概述
到目前为止,我们已经学习了监督学习,即通过给定的输入-输出对来学习一个映射函数。之后,我们探讨了学习理论,包括偏差-方差权衡和泛化能力。上周,我们学习了强化学习,其目标是最大化长期累积奖励。从今天开始,我们将进入无监督学习领域。
在无监督学习中,我们只获得一组数据点 $ {x^{(1)}, x^{(2)}, ..., x^{(n)}} $,其中每个 $ x^{(i)} \in \mathbb{R}^d $,但没有对应的标签 $ y $。我们的目标是发现这些数据中的某种有趣结构,例如聚类或密度分布。
从监督学习到无监督学习


在监督学习中,例如逻辑回归,我们被给予带有标签的数据点,目标是找到一个分离超*面。而在无监督学习中,我们只获得数据点本身,目标是发现其中的聚类结构。例如,给定一组二维点,我们可能希望将它们分为两个簇。
然而,无监督学习的问题定义通常不如监督学习明确。例如,对于同一组数据点,可能存在多种合理的聚类方式。因此,我们的目标是在存在这种模糊性的情况下,学习到一种有意义的结构。
K-means聚类算法
K-means算法是最简单的无监督学习算法之一。它旨在将数据点划分为 $ K $ 个簇。
算法步骤
以下是K-means算法的具体步骤:
- 初始化:随机选择 $ K $ 个簇中心 $ \mu_1, \mu_2, ..., \mu_K $,每个 $ \mu_j \in \mathbb{R}^d $。
- 重复直到收敛:
- 分配步骤:对于每个数据点 $ x^{(i)} $,将其分配到最*的簇中心。\[c^{(i)} := \arg\min_j \| x^{(i)} - \mu_j \|^2 \]
- 更新步骤:对于每个簇 $ j $,重新计算其中心为该簇中所有点的均值。\[\mu_j := \frac{\sum_{i=1}^{n} \mathbb{1}\{c^{(i)} = j\} x^{(i)}}{\sum_{i=1}^{n} \mathbb{1}\{c^{(i)} = j\}} \]
- 分配步骤:对于每个数据点 $ x^{(i)} $,将其分配到最*的簇中心。
算法直观解释
K-means算法可以直观地理解为坐标下降法,用于最小化一个称为失真函数的目标:
在分配步骤中,我们固定 $ \mu $ 优化 $ c $;在更新步骤中,我们固定 $ c $ 优化 $ \mu $。这个函数是非凸的,因此算法可能收敛到不同的局部最优解,具体取决于初始化的簇中心。
密度估计与高斯混合模型
上一节我们介绍了用于发现离散簇结构的K-means算法。本节中,我们来看看一个相关但更一般的问题:密度估计。密度估计的目标是,给定一组来自某个未知连续概率分布的数据点,估计出这个分布的概率密度函数。
这是一个困难的问题,因为存在无数种可能的密度函数可以解释观测到的数据。一个常见的方法是使用高斯混合模型。GMM假设数据是由 $ K $ 个不同的高斯分布混合生成的。每个高斯分布对应一个潜在的“成分”,数据点以一定的概率从这些成分中生成。
GMM的生成过程
GMM的生成过程如下:
- 首先,从一个多项分布中采样一个潜在变量 $ z^{(i)} $,该分布参数为 $ \phi $,其中 $ \phi_j = P(z^{(i)} = j) $,且 $ \sum_{j=1}^{K} \phi_j = 1 $。
- 然后,根据采样到的 $ z^{(i)} = j $,从对应的高斯分布 $ \mathcal{N}(\mu_j, \Sigma_j) $ 中生成观测数据 $ x^{(i)} $。
这里,$ z^{(i)} $ 是隐变量,因为我们没有观测到它。我们的目标是在只给定 $ x^{(i)} $ 的情况下,估计所有参数 $ \phi, \mu, \Sigma $。
直观的GMM算法(软K-means)
受K-means启发,我们可以为GMM设计一个直观的迭代算法:
- E步(期望步):对于每个数据点 $ i $ 和每个簇 $ j $,计算点 $ i $ 属于簇 $ j $ 的后验概率(权重)。\[w_{ij} := P(z^{(i)} = j | x^{(i)}; \phi, \mu, \Sigma) \]
- M步(最大化步):使用这些权重作为“软分配”,重新估计参数。
- $ \phi_j := \frac{1}{n} \sum_{i=1}^{n} w_{ij} $
- $ \mu_j := \frac{\sum_{i=1}^{n} w_{ij} x{(i)}}{\sum_{i=1} w_{ij}} $
- $ \Sigma_j := \frac{\sum_{i=1}^{n} w_{ij} (x^{(i)} - \mu_j)(x^{(i)} - \mu_j)T}{\sum_{i=1} w_{ij}} $
这个算法可以看作是K-means的“软”版本,其中数据点以概率形式属于所有簇,而不是硬性分配到一个簇。
期望最大化算法框架
上一节我们基于直觉给出了GMM的迭代算法。本节中,我们将介绍一个更通用、更原则性的框架——期望最大化算法,它能推导出与直觉算法相同的更新规则。EM算法为在存在隐变量的模型中进行最大似然估计提供了一个通用框架。
Jensen不等式
在推导EM算法之前,我们需要一个重要的数学工具:Jensen不等式。
- 如果 $ f $ 是一个凸函数,那么对于任意随机变量 $ X $,有:\[\mathbb{E}[f(X)] \ge f(\mathbb{E}[X]) \]
- 如果 $ f $ 是严格凸函数,那么等号成立当且仅当 $ X $ 是常数(以概率1)。
- 对于凹函数(如 $ \log $),不等式方向反转:\[\mathbb{E}[\log X] \le \log(\mathbb{E}[X]) \]
EM算法推导
我们的目标是最大化观测数据的对数似然 $ \log p(x; \theta) $,其中 $ \theta $ 代表所有参数。由于涉及隐变量 $ z $,直接最大化很困难。
- 我们引入一个关于 $ z $ 的任意分布 $ q(z) $(满足 $ q(z) > 0 $),将对数似然重写为:\[\log p(x; \theta) = \log \sum_z q(z) \frac{p(x, z; \theta)}{q(z)} = \log \mathbb{E}_{z \sim q} \left[ \frac{p(x, z; \theta)}{q(z)} \right] \]
- 应用Jensen不等式(因为 $ \log $ 是凹函数):\[\log p(x; \theta) \ge \mathbb{E}_{z \sim q} \left[ \log \frac{p(x, z; \theta)}{q(z)} \right] \triangleq \mathcal{L}(q, \theta) \]我们称 $ \mathcal{L}(q, \theta) $ 为证据下界。
- Jensen不等式告诉我们,当 $ \frac{p(x, z; \theta)}{q(z)} $ 为常数(与 $ z $ 无关)时,等号成立。这等价于:\[q(z) = p(z | x; \theta) \]即 $ q(z) $ 等于给定当前参数 $ \theta $ 下隐变量的后验分布。
基于此,EM算法迭代执行以下两步:
- E步:固定参数 $ \theta $,令 $ q(z) := p(z | x; \theta) $。这使得下界 $ \mathcal{L} $ 在当前的 $ \theta $ 处紧贴于对数似然。
- M步:固定分布 $ q(z) $,更新参数 $ \theta := \arg\max_{\theta} \mathcal{L}(q, \theta) $。这提升了下界,同时也提升了对数似然(因为下界是它的下界)。

通过交替执行E步和M步,我们不断优化证据下界,从而间接地最大化观测数据的对数似然,最终收敛到一个局部最优解。
总结


本节课中,我们一起学习了无监督学习的入门知识。我们首先介绍了K-means聚类算法,它是一种通过迭代分配和更新来发现数据中离散簇结构的简单方法。接着,我们探讨了密度估计问题,并引入了高斯混合模型作为解决方案,它假设数据来自多个高斯分布的混合。我们基于K-means的直觉为GMM设计了一个迭代算法。最后,我们介绍了更通用的期望最大化算法框架,它通过交替执行E步(计算隐变量后验)和M步(最大化证据下界)来解决存在隐变量的模型的最大似然估计问题。EM算法为理解包括GMM在内的许多现代生成模型提供了重要的理论基础。
机器学习 17:因子分析与ELBO 🧠


在本节课中,我们将完成对期望最大化算法的学习,证明其收敛性,并将其应用于高斯混合模型。随后,我们将介绍一个名为因子分析的新模型,并同样使用期望最大化算法来求解它。
课程回顾 📚
上一讲我们开始了无监督学习的内容。在无监督学习中,我们只获得数据点集合 X,没有对应的监督标签 y。我们首先介绍了聚类问题,其目标是识别数据中隐藏的聚类结构。
我们看到的第一个算法是 K均值。在K均值中,我们给定一组示例 X 和期望的聚类数量 k。算法步骤如下:
- 随机初始化
k个不同的聚类中心μ_j,每个中心位于与X相同的R^D空间。 - 循环直到收敛:
- E步(分配):对于每个数据点
x_i,将其分配到最*的聚类中心μ_j。 - M步(更新):对于每个聚类中心
μ_j,仅查看在上一步E步中被分配到此中心的数据点,并计算这些点的*均值来更新μ_j。
- E步(分配):对于每个数据点
这个算法可以看作是在最小化一个称为失真函数的损失函数,并通过坐标下降法进行优化:在E步中固定 μ 优化 c,在M步中固定 c 优化 μ。
接着,我们介绍了高斯混合模型,可以将其视为“软”K均值。在该模型中,我们同样给定聚类数量 k 和数据点 X。我们假设数据的生成过程如下:
- 隐变量
z从一个多项式分布(类先验)中采样。 - 给定
z的值,数据点x从对应的高斯分布N(μ_z, Σ_z)中采样。
模型的参数是 φ(多项式参数)、μ(均值向量)和 Σ(协方差矩阵)。我们之前基于启发式方法提出了一个迭代算法:
- E步:对于每个示例
i,计算权重w_i^j,表示x_i属于第j个聚类的概率。 - M步:使用当前权重更新参数
φ、μ和Σ。例如,μ_j的更新是所有权重w_i^j下x_i的加权*均值。
期望最大化算法的一般形式 🔄
上一讲我们推导了期望最大化算法最一般的形式。我们的目标是最大化给定参数 θ 下观测数据 X 的边际对数似然,即 log P(X; θ)。
通过引入一个关于隐变量 z 的任意分布 Q(z),并应用琴生不等式,我们得到了证据下界:
ELBO = E_{z∼Q}[log (P(X, z; θ) / Q(z))]
这个下界被称为证据下界。琴生不等式的一个推论是,当且仅当 Q(z) 等于真实后验分布 P(z|X; θ) 时,这个下界是紧致的,即等于 log P(X; θ)。
基于此,我们得到了EM算法的一般形式:

- E步:固定当前参数
θ,计算后验分布Q(z) = P(z|X; θ)。这构造了一个在θ处紧贴log P(X; θ)的ELBO。 - M步:固定分布
Q(z),通过最大化ELBO来更新参数θ:θ := argmax_θ ELBO。
这个过程可以可视化:我们从某个 θ_0 开始,构造一个紧贴的ELBO(蓝色曲线),然后最大化这个ELBO得到 θ_1。接着在 θ_1 处构造新的紧贴ELBO,再次最大化,如此迭代。每一步都保证了 log P(X; θ) 不会减少。
EM算法的收敛性证明 ✅
现在我们来证明EM算法的收敛性。我们的策略是证明在每一步迭代 t,对数似然 L(θ) = log P(X; θ) 都不会减少,即 L(θ_{t+1}) ≥ L(θ_t)。
证明基于三个不等式:
- 琴生不等式:对于任意
θ和Q,有L(θ) ≥ ELBO(θ, Q)。 - M步定义:
θ_{t+1}是最大化ELBO的结果,所以ELBO(θ_{t+1}, Q_t) ≥ ELBO(θ_t, Q_t)。 - E步构造:在
θ_t处,我们令Q_t(z) = P(z|X; θ_t),这使得ELBO在θ_t处是紧致的,即L(θ_t) = ELBO(θ_t, Q_t)。
将这三个不等式串联起来:
L(θ_{t+1}) ≥ ELBO(θ_{t+1}, Q_t) ≥ ELBO(θ_t, Q_t) = L(θ_t)
因此,每一步迭代对数似然都不会减少。由于对数似然有上界,该算法最终会收敛到一个局部最优解。
将EM应用于高斯混合模型 🎯
现在,我们使用这个更原则性的EM框架来推导高斯混合模型的更新规则。首先,遵循应用EM的通用步骤:
- 明确模型:写出完整的联合概率
P(X, Z)。对于高斯混合模型:z_i ∼ Multinomial(φ)x_i | z_i=j ∼ N(μ_j, Σ_j)- 参数
θ = {φ, μ_1,...,μ_k, Σ_1,...,Σ_k}。
- 明确观测与隐变量:观测数据是
X,隐变量是Z(聚类身份)。 - E步:计算后验分布
Q_i(z_i=j) = P(z_i=j | x_i; θ)。根据贝叶斯规则,这等于P(x_i | z_i=j; θ) * P(z_i=j; θ) / Σ_l P(x_i | z_i=l; θ) * P(z_i=l; θ)。代入高斯分布和多项式分布的具体形式即可计算。 - M步:最大化ELBO。ELBO可以展开为
Σ_i Σ_j Q_i(z_i=j) [ log P(x_i | z_i=j; θ) + log P(z_i=j; θ) - log Q_i(z_i=j) ]。在M步中,Q是固定的常数,log Q项不包含参数θ,可以忽略。我们最大化剩余部分对θ的期望。
通过对 φ、μ_j、Σ_j 分别求导并令导数为零,我们可以得到与之前启发式方法相同的更新规则:
φ_j = (1/n) Σ_i Q_i(z_i=j)μ_j = (Σ_i Q_i(z_i=j) * x_i) / (Σ_i Q_i(z_i=j))Σ_j的更新也是类似的加权协方差形式。
因子分析模型 🧩
现在,我们转向一个新的模型——因子分析。我们考虑一个具有挑战性的场景:数据维度 D 远大于样本数量 n。如果我们试图用高斯分布对数据建模,并估计其协方差矩阵 Σ,那么 Σ 的秩最多为 n,而它是一个 D×D 的矩阵。当 D > n 时,Σ 是奇异的,其行列式为0,导致我们无法计算高斯概率密度函数。
因子分析通过引入隐变量 z 来解决这个问题。其核心思想是,我们观测到的高维数据 x ∈ R^D 实际上是由一个低维的隐变量 z ∈ R^k(其中 k < n)生成的。具体的数据生成过程如下:
z ∼ N(0, I)(k维标准正态分布)x | z ∼ N(μ + Lz, Ψ),其中:μ ∈ R^D是偏移量。L ∈ R^{D×k}是一个映射矩阵,将低维隐变量z映射到高维空间。Ψ ∈ R^{D×D}是一个对角矩阵,表示每个维度上独立的噪声。
模型等价形式:x = μ + Lz + ε,其中 ε ∼ N(0, Ψ)。
参数:θ = {μ, L, Ψ}。
观测变量:X。
隐变量:Z。
我们的目标是学习参数 θ,以对观测数据 x 进行密度估计,并可能推断其背后的隐变量 z。
因子分析的EM算法求解 ⚙️
我们将使用EM算法来求解因子分析模型。首先,我们需要推导出完整的联合分布 P(x, z)。由于 z 和 x 都是高斯的,且 x 是 z 的线性变换加噪声,因此 (z, x) 的联合分布也是一个多元高斯分布。
经过推导(具体步骤见讲义),联合高斯分布的均值和协方差为:
- 均值:
[0; μ] - 协方差矩阵:
[[I, L^T], [L, LL^T + Ψ]]
现在应用EM算法:
-
E步:计算后验分布
P(z | x; θ)。由于联合分布是高斯分布,条件分布z|x也是高斯分布,其均值和方差可以直接从联合分布的参数中读出(利用高斯分布的条件分布公式):- 均值:
μ_{z|x} = L^T (LL^T + Ψ)^{-1} (x - μ) - 协方差:
Σ_{z|x} = I - L^T (LL^T + Ψ)^{-1} L
对于每个数据点x_i,我们设定Q_i(z_i)为以上述均值和协方差参数化的高斯分布。
- 均值:
-
M步:最大化ELBO。ELBO的表达式为:
Σ_i E_{z_i∼Q_i} [ log P(x_i | z_i; θ) + log P(z_i) - log Q_i(z_i) ]
在因子分析中,log P(z_i)不包含参数θ,log Q_i(z_i)也不包含参数θ。因此,在M步中,我们只需要最大化Σ_i E_{z_i∼Q_i} [ log P(x_i | z_i; θ) ]。将
P(x_i | z_i; θ) = N(μ + Lz_i, Ψ)的对数形式代入,并对其关于μ、L、Ψ求期望、求导并令导数为零。这个过程计算量较大,但结果是闭合形式的更新公式(具体公式见讲义)。
关于EM算法步骤的重要说明:有时EM算法被描述为“E步计算隐变量的期望,M步最大化完整数据的似然”。这种描述仅适用于一些简单模型(如高斯混合模型)。更通用且始终正确的做法是:E步计算后验分布 Q 并构造ELBO,M步最大化这个ELBO。对于因子分析等复杂模型,必须遵循后一种通用步骤。
总结 🎓
本节课我们一起学习了以下内容:
- 回顾了K均值和高斯混合模型,理解了其迭代更新过程。
- 推导了期望最大化算法的一般形式,理解了其核心是迭代地构造并最大化证据下界。
- 证明了EM算法的收敛性,即每一步迭代都不会降低对数似然。
- 将EM算法应用于高斯混合模型,从原则性推导中得到了与之前一致的更新规则。
- 引入了因子分析模型,用于处理高维小样本数据,其假设数据由一个低维隐变量生成。
- 概述了使用EM算法求解因子分析的步骤,包括推导联合分布、计算后验分布以及通过最大化ELBO来更新参数。

EM算法为解决包含隐变量的概率模型参数估计问题提供了一个强大而通用的框架。
机器学习 18:主成分分析与独立成分分析 🎯


在本节课中,我们将继续学习无监督学习。主要内容包括:回顾并深入理解因子分析,完成主成分分析的学习,并开始介绍独立成分分析。
1. 回顾:期望最大化算法与因子分析 📚
上一讲我们证明了期望最大化算法的收敛性。证明的核心思想是,算法在每次迭代中都能保证增加观测数据的似然值。我们通过詹森不等式和M步的优化过程展示了这一点。
接着,我们学习了因子分析。因子分析旨在解决当数据维度 d 远大于样本数量 n 时,简单高斯模型会导致协方差矩阵奇异的问题。其核心思想是引入一个低维的隐变量 z(维度 k,且 k < d),通过一个映射矩阵 L 和噪声项 Ψ 来生成高维观测数据 x。
模型公式:
z ~ N(0, I), x|z ~ N(μ + Lz, Ψ)
其中 Ψ 是对角矩阵。
在E步,我们计算隐变量 z 的后验分布 Q_i。在M步,我们更新参数 μ、L 和 Ψ。虽然更新公式看起来复杂,但可以直观理解:
μ的更新就是x的样本均值。L的更新类似于在多个线性回归问题上同时进行参数估计,其中隐变量z的估计值ẑ充当了设计矩阵的角色。Ψ的更新则类似于估计每个维度上线性回归的残差噪声。
因子分析通过模型 x ~ N(μ, LL^T + Ψ) 确保了协方差矩阵 LL^T + Ψ 是非奇异的,从而解决了高维小样本的问题。
2. 主成分分析 🧩
上一节我们介绍了因子分析,它是一种概率性的子空间发现方法。本节中,我们来看看另一种更常用的非概率性方法——主成分分析。
PCA的目标是发现数据实际所在的低维子空间。我们通常假设样本数 n 大于维度 d。
2.1 核心思想与步骤

PCA的核心思想是:找到一个 k 维子空间(k < d),使得将原始数据投影到这个子空间后,投影点的方差最大化。这意味着我们希望在降维的同时,尽可能保留数据中的变异信息。

以下是PCA的实施步骤:
-
数据标准化:首先,对数据的每个特征(列)进行标准化,使其均值为0,方差为1。这消除了不同特征量纲的影响。
- 公式:对于第
j个特征,计算μ_j = (1/n) Σ x_{ji},σ_j^2 = (1/n) Σ (x_{ji} - μ_j)^2,然后令x_{ji}^{(std)} = (x_{ji} - μ_j) / σ_j。
- 公式:对于第
-
计算样本协方差矩阵:标准化后,计算数据的样本协方差矩阵。对于已中心化(均值为0)的数据
X,协方差矩阵为(1/n) X^T X。 -
特征分解:对协方差矩阵
(1/n) X^T X进行特征分解,得到特征值λ_1 ≥ λ_2 ≥ ... ≥ λ_d和对应的特征向量u_1, u_2, ..., u_d。 -
选择主成分:选择前
k个最大的特征值对应的特征向量u_1, ..., u_k作为新子空间的标准正交基。这k个向量被称为“主成分”。 -
数据投影:将原始数据
X投影到选定的k维子空间上,得到降维后的数据表示Z。- 公式:
Z = X U_k,其中U_k是由前k个特征向量组成的d × k矩阵。
- 公式:
2.2 方差解释与K值选择
如何确定降维后的维度 k?一个常用的方法是根据保留的方差比例来选择。
公式:选择最小的 k,使得 (Σ_{i=1}^k λ_i) / (Σ_{i=1}^d λ_i) ≥ t,其中 t 是预设的阈值(例如0.95,代表保留95%的方差)。
2.3 与因子分析的区别
- 方向:PCA中的矩阵
U将数据从高维x映射到低维z(投影),而因子分析中的矩阵L将隐变量从低维z映射到高维x(生成)。 - 概率性:PCA是非概率的,直接基于方差最大化;因子分析是概率性的,假设了生成模型。
- 顺序:PCA可以先进行全部分解,再根据方差比例选择
k;因子分析需要预先指定k。 - 适用场景:PCA更通用、计算简单(特征分解),在实践中更常用;因子分析在高维小样本 (
d >> n) 且需要概率解释时可能更有优势。
对于大规模矩阵的特征分解,可以使用幂迭代法等数值方法高效地计算主特征向量。
3. 独立成分分析 🎧
前面我们学习了用于降维和发现子空间的PCA与因子分析。ICA要解决的是一个完全不同的问题——盲源分离。
3.1 问题动机:鸡尾酒会问题
ICA最经典的例子是“鸡尾酒会问题”:在一个房间里有 d 个人同时说话,房间不同位置放置了 d 个麦克风。每个麦克风录制到的都是所有人声音的混合。我们的目标是,仅根据这些混合录音,分离出每个说话者独立的原始声音信号。

模型假设:
- 有
d个独立的源信号s(例如,每个说话者的声音波形)。 - 有
d个观测信号x(麦克风录音)。 - 观测信号是源信号的线性混合:
x = A s,其中A是一个d × d的混合矩阵。 - 目标:找到解混矩阵
W ≈ A^{-1},使得s = W x恢复出源信号。
3.2 关键假设
仅凭线性混合假设无法唯一确定解。ICA引入以下关键假设:
- 独立性:源信号
s_1, s_2, ..., s_d彼此统计独立。 - 非高斯性:源信号具有非高斯的分布。这是至关重要的假设,因为高斯分布的线性混合后,其独立性无法被区分,会导致无法恢复源信号。
直观上,非高斯分布(如拉普拉斯分布、逻辑分布)的密度函数具有“尖峰”或“重尾”特性,在混合后会产生特定的“角状”或“菱形”散点图结构。ICA算法通过寻找一个投影方向,使得投影后的信号尽可能非高斯(例如,峰度最大),从而恢复出独立的源信号。
3.3 ICA算法推导
我们假设每个源信号 s_j 的分布为某个已知的非高斯密度函数,例如逻辑斯蒂密度:p_s(s) = g'(s) = g(s)(1 - g(s)),其中 g(s) 是逻辑斯蒂函数 1/(1+e^{-s})。

给定观测数据 x 和解混矩阵 W,恢复的源信号为 s = Wx。根据概率密度变换的雅可比行列式,观测数据 x 的似然函数为:
公式:
L(W) = Σ_{i=1}^n ( Σ_{j=1}^d log p_s(w_j^T x^{(i)}) + log |det(W)| )
其中 w_j^T 是 W 的第 j 行。
我们的目标是最大化这个似然函数 L(W) 以找到 W。通过对 W 求梯度并利用梯度上升法进行优化。
更新规则(对于逻辑斯蒂源分布):
W := W + α * ( [1 - 2g(w_1^T x^{(i)}); ...; 1 - 2g(w_d^T x^{(i)}) ] * (x^{(i)})^T + (W^T)^{-1} )
其中 α 是学习率。
优化收敛后,用得到的 W 乘以观测数据 x,即可得到分离的源信号估计 s。


3.4 注意事项
ICA恢复的信号存在固有的模糊性:
- 排列模糊性:恢复出的信号顺序可能与原始源信号顺序不同。
- 缩放模糊性:恢复出的信号幅度可能与原始信号成比例关系(包括符号可能相反)。
在音频分离等应用中,这些模糊性通常是可接受的。
总结 📝
本节课中我们一起学习了无监督学习中的三个重要模型:
- 因子分析:一种概率性生成模型,通过引入低维隐变量解决高维小样本数据的建模问题,使用EM算法求解。
- 主成分分析:一种非概率的降维技术,通过最大化投影方差来找到数据的主成分子空间,核心是计算协方差矩阵的特征分解。
- 独立成分分析:用于解决盲源分离问题,在源信号独立且非高斯的假设下,通过最大化似然函数来寻找解混矩阵,从而分离混合信号。

PCA和因子分析都用于发现数据的低维结构,而ICA则用于分离混合信号中的独立成分。理解它们各自的假设、目标和应用场景,对于解决不同的无监督学习问题至关重要。
机器学习 19:最大熵与校准 📊

在本节课中,我们将要学习最大熵原理,并了解我们之前课程中见过的指数族分布是如何从该原理推导出来的。我们将展示在什么条件下,最大化熵等同于最大化似然估计(MLE)。这还将引导我们探讨一些有趣的主题,例如校准。我们将简要讨论校准的含义及其与最大化熵的关系。最后,如果时间允许,我们将讨论期望最大化算法的几个变体,以及这些变体如何引向无监督学习中的一些最新进展,如变分推断和变分自编码器。
上节课回顾 🔄
上一节我们介绍了主成分分析和独立成分分析。在PCA中,我们的目标是找到一个低维子空间。而在ICA中,我们的目标是找到解释数据的独立源。我们假设存在D个独立的源,它们通过一个混合矩阵混合成观测数据,我们的目标是从观测数据中恢复这些独立源。
指数族分布的最大似然估计 📈

首先,我们来推导给定观测数据y时,指数族分布的自然参数η的最大似然估计。
我们有一个指数族分布:
p(y | η) = b(y) * exp(η^T * T(y) - a(η))
给定数据 S = {y_1, ..., y_n},我们想要找到 η_hat_ML:
η_hat_ML = argmax_η Σ_{i=1}^n log p(y_i | η)
通过对η求导并令其为零,我们可以得到:
a'(η) = (1/n) Σ_{i=1}^n T(y_i)
因此,最大似然估计为:
η_hat_ML = a'^{-1}( (1/n) Σ_{i=1}^n T(y_i) )
这意味着,对于指数族中的任何概率分布,其自然参数的最大似然估计可以通过将观测充分统计量的样本均值通过正则响应函数(即a'的逆函数)来获得。
最大熵原理 ⚖️
现在,让我们切换视角,探讨最大熵原理。当我们想要根据一些观测数据估计一个概率分布时,最大熵原理提供了一种方法。
假设我们有一个在实数域上的概率分布 p(x),我们观察到了一些来自该分布的样本点。我们的目标是根据这些有限的样本点估计整个密度函数 p(x)。
最大熵原理告诉我们,应该首先将这些数据点转化为约束条件。例如,样本的均值和方差可以构成约束。然后,在所有满足这些约束条件的可行概率分布中,选择熵最高的那一个。
更形式化地,我们想要找到概率分布 p*:
p* = argmax_p H(p)
使得满足一系列线性约束:
Σ_i T_j(y_i) * p(y_i) = c_j,对于 j = 1, ..., m
这里,T_j 是充分统计量函数,c_j 是从数据中计算出的约束值(例如样本均值)。

从最大熵推导指数族分布 🔗
为了求解这个约束优化问题,我们构建拉格朗日函数:
L(p, η, λ) = H(p) + η^T (Tp - c) + λ (1^T p - 1)
其中,H(p) 是熵,η 和 λ 是拉格朗日乘子。
通过对 p_i 求导并令其为零,我们得到:
p_i = exp(λ - 1) * exp(η^T T(y_i))
利用概率和为1的约束,我们可以解出 λ,最终得到:
p(y) = exp(η^T T(y)) / Z(η) = exp(η^T T(y) - a(η))
其中,a(η) = log Z(η) 是对数配分函数。
结论:通过最大化熵并满足从数据中得出的线性约束,我们自然地得到了指数族分布的形式。约束中的 T_j 成为了充分统计量,拉格朗日乘子 η 成为了自然参数。
最大熵与最大似然的等价性 🤝
接下来,我们求解关于 η 的优化。对拉格朗日函数关于 η 求导并设为零,我们得到:
a'(η) = c
由于约束值 c 通常是从数据中估计的样本均值 (1/n) Σ T(y_i),因此我们有:
η_hat_ME = a'^{-1}( (1/n) Σ_{i=1}^n T(y_i) )
这与我们之前得到的最大似然估计 η_hat_ML 完全相同。
核心结论:在指数族分布的背景下,最大化熵(在满足数据约束下)等价于执行最大似然估计。

校准的概念 📉
现在,让我们探讨一个相关的话题:校准。当我们使用逻辑回归等模型时,模型会输出一个介于0和1之间的值,表面上看起来像概率。但什么才使得它成为一个真正的概率估计呢?
校准是指模型预测的概率值与实际观测频率相匹配的性质。例如,在所有模型预测下雨概率为80%的日子里,实际上下雨的天数比例应该接*80%。
为了评估校准,我们可以绘制校准图:
- x轴:预测的概率(例如,分成10个区间)。
- y轴:每个区间内真实标签的*均值(即观测频率)。
理想情况下,校准图应该是一条对角线 y = x,这意味着预测是完美校准的。
校准与准确性的区别 🎯
需要明确的是,校准和准确性是两个独立的概念:
- 一个模型可以非常准确(分类正确率高)但校准很差(预测概率不反映真实频率)。
- 一个模型可以完美校准(预测概率完全匹配长期频率)但准确性为零(例如,总是预测0.5)。
在实践中,我们通常同时关注模型的区分能力(准确性)和校准程度。
最大熵、评分规则与校准 🔗
那么,校准与最大熵有何关系呢?这需要通过评分规则的概念来连接。
评分规则 S(P, y) 用于评估一个预测的概率分布 P 相对于实际观测结果 y 的好坏。一个严格适当评分规则满足以下性质:当数据真实分布为 Q 时,预测 Q 本身所获得的期望评分是最优的(对于损失函数,则是最小的)。
可以证明,负对数似然损失是一个严格适当评分规则。因为:
E_{y~Q}[-log Q(y)] ≤ E_{y~Q}[-log P(y)] 对于所有 P 成立,当且仅当 P = Q 时取等号。这个不等式本质上就是KL散度的非负性。
由于最大熵等价于最大似然估计,而最大似然使用了负对数似然这个适当评分规则作为损失函数,因此:
- 适当评分规则鼓励模型预测真实的分布
Q。 - 如果模型预测了真实分布,那么它的预测自然是校准的。
- 因此,遵循最大熵原理(或等价地,进行最大似然估计)有助于模型产生校准良好的概率预测。
总结 📝
本节课我们一起学习了:
- 指数族分布的最大似然估计:其解为充分统计量样本均值通过正则响应函数的逆。
- 最大熵原理:在满足数据约束(通常是矩约束)的所有分布中,选择熵最高的分布。
- 最大熵与最大似然的等价性:对于指数族,两者导出了相同的参数估计。
- 校准的概念:评估预测概率是否与实际观测频率一致。
- 评分规则:特别是严格适当评分规则(如负对数似然),它鼓励模型预测真实的分布。
- 内在联系:最大熵原理 → 最大似然估计 → 使用适当评分规则 → 促进模型校准。

理解这些概念有助于我们构建不仅在分类上准确,而且在概率估计上可靠、可解释的机器学习模型。
机器学习 20:变分自编码器 (VAE) 🧠



概述
在本节课中,我们将学习变分自编码器。变分自编码器是深度学习生成模型领域的一个重要基础模型,它结合了神经网络、概率建模和变分推断的思想。我们将从简单的自编码器开始,回顾期望最大化算法,并逐步引入变分推断和变分自编码器的核心概念。
1. 自编码器 (Autoencoders) 🔄
上一节我们回顾了最大熵原理和校准。本节中,我们来看看一种无监督学习模型——自编码器。
自编码器是一种神经网络,其目标是学习数据的低维表示。它通过一个“瓶颈”结构,将输入数据压缩成一个低维的潜在表示,然后再尝试从这个表示中重建原始输入。
模型结构
自编码器由两部分组成:
- 编码器 (Encoder): 将高维输入数据
x映射到低维潜在表示z。 - 解码器 (Decoder): 将潜在表示
z映射回原始数据空间,得到重建数据x̂。
模型的目标是最小化原始输入 x 与重建输出 x̂ 之间的差异。损失函数通常使用均方误差:
公式: L(θ, φ) = Σ_i || x_i - x̂_i ||^2
其中,x̂_i = decoder_θ( encoder_φ(x_i) )。φ 是编码器的参数,θ 是解码器的参数。
与PCA的区别
自编码器可以看作是PCA的非线性推广。PCA使用线性变换进行降维和重建,而自编码器通过具有非线性激活函数的神经网络层,可以学习更复杂、非线性的数据表示。
2. 期望最大化 (EM) 算法的变体 🔄
为了理解变分自编码器的动机,我们需要回顾期望最大化算法及其在处理复杂后验分布时遇到的挑战。
在标准EM算法中,E步需要计算后验分布 p(z|x; θ)。然而,当模型复杂(例如,p(x|z) 是一个神经网络)时,这个后验分布通常难以直接计算。
以下是两种处理难解后验的常用方法:
2.1 MCMC-EM (马尔可夫链蒙特卡洛 EM)
当无法解析计算后验时,我们可以使用采样方法来*似E步中的期望。
核心思想: 在M步中,我们需要计算关于后验分布 q(z) = p(z|x) 的期望。我们可以用蒙特卡洛估计来*似这个期望:
公式: E_{z~q}[f(z)] ≈ (1/M) Σ_{m=1}^M f(z^{(m)})
其中,z^{(m)} 是从后验分布 q(z) 中采样的样本(使用MCMC方法,如吉布斯采样)。随着样本数 M 增大,这个估计会收敛到真实期望。
2.2 变分推断 (Variational Inference)
与采样方法不同,变分推断使用优化来*似后验分布。
核心思想: 我们引入一个由参数 φ 控制的分布族 q_φ(z)(称为变分分布),并通过优化 φ 来使 q_φ(z) 尽可能接*真实后验 p(z|x)。
衡量两个分布接*程度的常用指标是KL散度。我们可以证明,对数证据 log p(x) 可以分解为:
公式: log p(x) = ELBO(φ; θ) + KL( q_φ(z) || p(z|x; θ) )
其中,ELBO(证据下界)是一个关于 φ 和 θ 的函数。由于KL散度非负,ELBO 是 log p(x) 的下界。最大化 ELBO 等价于最小化 KL( q_φ(z) || p(z|x) ),从而使变分分布 q 逼*真实后验。
均值场假设 (Mean-field Assumption): 为了简化优化,变分推断常假设 q_φ(z) 可以分解为各分量独立的乘积形式:q(z) = Π_j q_j(z_j)。这被称为均值场变分推断。
3. 变分自编码器 (Variational Autoencoder, VAE) 🧩
现在,我们将自编码器、EM算法和变分推断的思想结合起来,构建变分自编码器。
3.1 模型设定
VAE是一个概率生成模型,它假设数据生成过程如下:
- 从一个简单的先验分布(如标准正态分布)中采样潜在变量
z:z ~ p(z) = N(0, I) - 给定
z,数据x由一个条件分布生成,其参数由解码器神经网络g_θ给出:x|z ~ p(x|z; θ) = N( g_θ(z), σ^2 I )
我们的目标是学习模型参数 θ,以及对于每个数据点 x_i,*似其后验分布 p(z|x_i)。
3.2 摊销推断 (Amortized Inference)
在标准变分推断中,我们需要为每个数据点 x_i 单独优化一个变分参数 φ_i。这在大数据集上效率很低。
VAE的关键创新是摊销推断:我们使用一个编码器神经网络 h_φ(x) 来一次性为所有数据点计算变分参数。对于输入 x,编码器输出变分分布 q_φ(z|x) 的参数(例如,高斯分布的均值和方差):
μ = h_φ^μ(x)log σ^2 = h_φ^σ(x)(输出对数方差以保证正值)
这样,我们不再为每个数据点存储一组变分参数,而是学习一个共享的神经网络参数 φ,从而“摊销”了推断成本。
3.3 重参数化技巧 (Reparameterization Trick)
为了通过随机梯度下降优化ELBO,我们需要计算关于编码器参数 φ 的梯度。然而,ELBO的期望项依赖于从 q_φ(z|x) 中采样 z,这使得梯度无法直接反向传播。
重参数化技巧解决了这个问题。对于高斯分布 z ~ N(μ_φ, σ_φ^2),我们可以将其重写为:
公式: z = μ_φ + σ_φ ⊙ ε,其中 ε ~ N(0, I)
这样,随机性被转移到了与参数 φ 无关的变量 ε 上。采样过程现在是一个确定性计算(μ_φ + σ_φ ⊙ ε)加上一个固定噪声。梯度现在可以顺利地通过确定性部分反向传播到参数 φ。
3.4 VAE的训练目标
VAE的最终训练目标是最大化所有数据点的ELBO之和:
公式: L(θ, φ) = Σ_i [ E_{z~q_φ(z|x_i)}[ log p_θ(x_i|z) ] - KL( q_φ(z|x_i) || p(z) ) ]
这个目标包含两部分:
- 重建损失 (Reconstruction Loss): 期望项鼓励解码器从潜在变量
z很好地重建输入x。 - 正则化项 (Regularization Term): KL散度项鼓励变分后验
q_φ(z|x)接*先验p(z)(通常为标准正态分布),这起到了正则化的作用,使得潜在空间具有良好结构(如连续性、完整性)。
训练时,我们使用蒙特卡洛采样(通常只采一个样本)来*似期望,并利用重参数化技巧,通过随机梯度下降同时优化编码器参数 φ 和解码器参数 θ。
总结


本节课我们一起学习了变分自编码器。我们从简单的自编码器出发,回顾了EM算法在处理难解后验时的局限。接着,我们介绍了两种解决方案:基于采样的MCMC-EM和基于优化的变分推断。最后,我们结合了摊销推断和重参数化技巧,构建了变分自编码器模型。VAE通过一个编码器网络*似后验分布,一个解码器网络定义数据似然,并通过最大化证据下界进行联合训练,从而能够学习有意义的数据潜在表示并生成新数据。这为后续更复杂的深度生成模型(如生成对抗网络)奠定了基础。
机器学习 21:评估指标 🎯


在本节课中,我们将要学习机器学习中至关重要的评估指标。我们将探讨为什么需要评估指标,深入研究二分类器的各种评估方法,并了解在类别不*衡等特定场景下如何选择合适的指标。最后,我们将总结一些在实际应用中选择和使用评估指标的一般性建议。
为什么评估指标很重要?🤔
在之前课程的所有算法中,我们定义了某种损失函数,并通过最小化训练数据上的损失来优化参数。然而,这些损失函数并不总是能反映真实世界的使用目标。例如,损失函数可能无法完全捕捉你的业务目标,如提高收入或利润。
因此,评估指标作为衡量模型性能的次级标准变得极其重要。评估指标还有助于将团队的努力组织起来,朝着某个业务目标前进。通常的做法是定义一个开发集,团队致力于提高模型在该开发集上的评估指标。
你需要开始将评估指标视为与损失函数本身不同的东西。评估指标也有助于量化期望性能与基线性能之间的差距。基线通常是你最初尝试的简单模型,它能让你了解整个项目的难度。如果期望性能与基线差距很大,这可能是一个具有挑战性的任务。同样,你也可以衡量期望性能与当前性能之间的差距,这能让你了解还需要取得多少进展。此外,跟踪性能随时间如何改进也很有用。
评估指标对于调试等较低级别的任务也很有用。例如,你想对模型进行偏差-方差分析以改进模型性能,评估指标在那里也很有用。
理想情况下,你的训练目标(损失函数)应该反映你的业务目标,但这并不总是可能的。例如,如果你关心准确率,使用准确率作为损失函数来训练模型是非常困难的,因为准确率甚至不可微分,最终会变成一个非常困难的组合优化问题。因此,通常无法将准确率直接用作损失函数。理想情况下,我们希望评估指标本身就是损失函数,但这并不总是可行的。这使得在开发模型时,除了损失函数之外,并行地测量评估指标变得必要。
二分类问题设定 🔍
在本节的大部分内容中,我们将局限于监督学习中的二分类问题。将 X 视为输入(例如图像或电子邮件),y 是二元输出(例如,图像中是否有行人,或文本是否为垃圾邮件)。模型输出是 ŷ。
ŷ 可以是不同类型。对于某些算法(如 k 最*邻或决策树),算法的输出直接是类别预测本身。而其他算法(如支持向量机或逻辑回归)的输出是某种实值分数。在逻辑回归中,输出是 y=1 的概率,这是一个实数值,而不是直接的类别。对于支持向量机,你会输出间隔(即样本距离分隔超*面的远*)。这些是基于分数的算法,我们需要选择一个阈值,一旦选择了阈值,就可以将模型转换为分类器。
在本节中,我们将主要关注这些基于分数的模型。想象一下这样的心理图景:从 0 到 1 的线代表概率,即模型可以输出的概率范围。绿点代表正例,点的位置是模型为该样本分配的概率。灰点代表负例。通过将它们放在这样一条线上,我们为预测定义了一个自然的顺序。
在开始调试模型之前,先查看开发集中样本的这种排序是很有帮助的,这能让你从宏观上了解模型在做什么。
核心概念与术语 📚
以下是几个有用的术语:


-
流行率:指正例样本所占的比例。这是一个标准术语。例如,如果你的数据中正例和负例数量相等,则流行率为 50%。如果有 10 个正例和 90 个负例,则流行率为 10%(10/(10+90))。流行率完全是数据的属性,它计算的是真实标签(ground truth)中的正例,而不是预测概率。流行率这个术语让我们能够判断是否存在类别不*衡问题。
-
类别不*衡问题:当一个类别的样本数量相对于另一个类别过多或过少时,就存在类别不*衡问题。例如,在 100 个样本的数据集中,如果有 2 个正例和 98 个负例,通常就认为存在类别不*衡问题。虽然没有公认的阈值来决定是否存在类别不*衡,但经验法则是,如果流行率低于 5% 或 10%,或者高于 90% 或 95%,那么可以合理地认为该问题存在低流行率。例如,在检测信用卡欺诈的问题中,非欺诈交易的数量可能非常高,因此流行率会非常小,远低于 1%。
从分数到分类器:阈值的作用 ⚖️
我们从这个基于分数的视图开始,将所有样本根据模型预测的概率进行排序。绿点和灰点是数据的属性,而它们的位置是模型的属性(模型为每个样本分配了概率)。这本身并不是一个分类器,但一旦我们决定一个阈值,它就成为分类器。
假设我们设定阈值等于 0.5。现在我们有了一个分类器:每个高于阈值线的样本都被分类为正例,无论它实际上是否为正例;每个低于阈值的样本都被分类为负例。垂直轴是我们的预测,任何高于 0.5 阈值的都被预测为正例,任何低于的都被预测为负例。真实标签则水*分开:左边是真正为正的样本,右边是真正为负的样本。
这里我们任意选择了阈值为 0.5。只有在我们选择阈值之后,基于分数的模型才成为分类器;在此之前,它只是分配分数或概率。
混淆矩阵 📊
我们在这里所做的是计算每个区块中的样本数量。左上角是实际为正且被预测为正的样本,右上角是被预测为正但实际为负的样本。这种矩阵被称为混淆矩阵,这是一个标准术语。
混淆矩阵有几个属性:
- 所有四个方格的总和是固定的,因为我们拥有的样本数量是固定的。
- 列的总和也是固定的(例如,本例中的 9+1 和 2+8 总是固定的),因为它们是正例和负例的数量。
- 混淆矩阵中可以改变的是基于我们选择的阈值以及样本被模型排序的方式,左列被分割到上方和下方的比例以及右列被分割到上方和下方的比例可以改变。
通过观察混淆矩阵,你可以判断模型的质量。你希望对角线上的值(正确预测)尽可能大,非对角线上的值(错误预测)尽可能小。
另一个观察是,混淆矩阵不给出标量值,它是一组四个数字。给定同一模型在同一数据集上的两个不同混淆矩阵,很难比较它们并明确地说哪个更好,因为它们不是标量,而是无法直接比较的四元组。
因此,我们开始从这个矩阵中提取可比较的指标。
从混淆矩阵中提取的指标 📈
以下是基于混淆矩阵计算的关键指标:
- 真正例:指实际为正且被预测为正的样本数量。这里的“真”指的是我们的预测是正确的。
- 真负例:指实际为负且被预测为负的样本数量。
- 假正例:指被预测为正但预测错误的样本,即实际为负但被预测为正的样本。
- 假负例:指实际为正但被预测为负的样本。
假正例和假负例是两种非常不同的错误,根据你正在处理的实际应用,它们可能产生非常不同的影响。通常,你希望分配给假正例和假负例的权重是不对称的。假正例和假负例也有其他术语,例如类型 I 错误和类型 II 错误。
根据所犯错误的类型,假正例和假负例的影响可能非常不同。例如,如果要根据一个人是否患有疾病来开具某种药物,而该药物对普通人没有不良副作用,那么你可能会更担心假负例,因为你不想错过给患者用药的机会。因此,你希望所有患有该病的患者都能被预测出来,以便给予药物治疗。
准确率、精确率与召回率 🎯
以下是几个核心的评估指标:
-
准确率:指所有样本中,我们预测正确的样本所占的比例。准确率通常是对角线之和除以所有元素之和。如果你想优化模型的准确率,那实际上对应于使用所谓的 0-1 损失(如果答案正确则损失为 0,错误则损失为 1)。在实践中优化 0-1 损失非常困难,因为它不是可微分的损失。
-
精确率:在我们预测为正的样本中,实际为正的样本所占的比例。精确率关注的是混淆矩阵的上半部分(所有被预测为正的样本)。精确率也称为阳性预测值。
-
召回率:也称为灵敏度。召回率衡量的是,在所有实际为正的样本中,有多少被我们的模型预测为正。召回率只关注混淆矩阵的左半部分(所有实际为正的样本),完全忽略右半部分(实际为负的样本)。
如果你想获得 100% 的召回率,无论模型好坏,只需将阈值设置为 0 即可。同样,如果你想获得 100% 的精确率,只需将阈值设置得足够高,只将最顶部的一个样本分类为正例即可。孤立地看待这些指标通常无法捕捉模型的真实性能。大多数时候,我们试图以某种方式*衡精确率和召回率。
- 负例召回率:也称为特异度。它计算在所有实际为负的样本中,模型正确分类为负的样本所占的比例。负例召回率只关注混淆矩阵的右半部分。
组合指标:F1 分数与 G 分数 ⚖️
你可以开始以某种方式将这些单独的分数组合起来。例如,F1 分数 是精确率和召回率的调和*均数。公式为:
1/F1 = 1/2 * (1/Precision + 1/Recall) 或 F1 = 2 * (Precision * Recall) / (Precision + Recall)
类似地,G 分数 是精确率和召回率的几何*均数。公式为:
G = sqrt(Precision * Recall)
这些分数是*衡精确率和召回率的不同方式。调和*均数和几何*均数都是如果其中一个值很低,整体*均值就会很低,这与算术*均数不同。几何*均数在某种程度上类似于取精确率和召回率的最小值。
阈值敏感性与 ROC 曲线 📉
到目前为止我们看到的所有指标都依赖于我们选择的阈值。这些是阈值敏感指标。如果我们改变阈值,这些数字中的一些会改变。
我们可以通过尝试尽可能多的不同阈值来重复这个练习。在这个例子中,有意义的有效阈值数量是样本数加一。对于每个特定的阈值,对应右边表格中的一行。随着我们改变阈值,我们会得到真正例、真负例、准确率、精确率、召回率等的不同值。
现在,整个表格是做出预测的模型的属性,但表格中的每一行取决于我们选择的阈值。
从表格中可以做出更多观察:
- 许多列是单调的。例如,真正例从 0 开始单调增加到 10,真负例单调减少,假正例单调增加,假负例单调减少,召回率单调增加(从 0 到 1),特异度单调减少(从 1 到 0)。
- 然而,其他一些指标,如 F1 分数和准确率,没有严格的单调性,它们会在某个阈值(例如 0.4 或 0.45 附*)达到最大值,然后在极端情况下减少。
- 精确率则上下波动。
我们想要做的是以某种方式捕捉这些列之间的权衡。正如我们之前看到的,如果你只想最大化召回率,只需将阈值设置为 0;如果你想最大化精确率,也许将其设置为 1 或略低于 1。但我们想要做的不是只看模型在某个指定阈值下的表现,而是以某种方式总结这些整个列。
这就是问题所在:我们如何总结精确率与召回率或特异度与灵敏度之间的权衡?这就是 ROC 曲线 等工具发挥作用的地方。
ROC 曲线与 AUC 📈
ROC 曲线称为接收者操作特征曲线,它展示了灵敏度和特异度之间的权衡。有时你可能会看到 ROC 曲线在某些书籍或文章中被翻转,x 轴是 1 减去灵敏度,这基本上是相同的。
ROC 曲线是通过扫描阈值得到的图。当我们从 0 到 1 扫描阈值时,对于每个阈值,我们读取灵敏度和特异度,并将该点绘制在灵敏度与特异度的图表上。通过连接不同阈值对应的点,我们得到这条 ROC 曲线。
ROC 曲线给出了随着阈值扫描,灵敏度与特异度之间的权衡。例如,当阈值设置为 1.0 时,灵敏度为 0,但特异度最大,这对应于左上角。随着你将阈值向下扫描到 0,你开始探索所有其他点。
另一种思考 ROC 曲线的方式是:创建一个网格,将水*轴切成与正例数量相等的段,将垂直轴切成与负例数量相等的段。你的模型会给出某种排序。从左上角开始,一次检查一个样本:如果遇到正例,向右移动;如果遇到负例,向下移动。因为你只能进行固定次数的右移和固定次数的下移,所以无论顺序如何,你总是从这里开始,在这里结束。如果你的所有正例都在顶部,那么曲线将趋向于右上角。
这种直觉产生了从 ROC 曲线导出的一个指标,称为 ROC 曲线下面积。如果在你开始向下扫描时,大多数或所有正例都是你先遇到的,那么 AUC 就会很高,因为正例只会让你不断向右移动。
另一个观察是,ROC 曲线总是可以分解为这些水*线段和垂直线段。每个块对应连续出现的正例组或负例组。
AUC 通常是一个有用的指标,用于检查模型在分类方面做得如何。如果它能很好地将所有正例放在上面,负例放在下面,那么 AUC 就会很高。
关于 ROC 曲线的更多观察:
- 如果一个模型随机分配概率,那么 ROC 曲线将沿着对角线分布。随机猜测器的 AUC 为 0.5。这是你应该为 AUC 设定的低标准。
- 如果你的模型 AUC 低于 0.5,那么你的模型基本上比随机猜测还差。然而,如果它非常低(例如 0.1),这某种程度上是个好消息,因为你只需翻转标签就可以获得非常高的 AUC。当然,这仍然令人不安,你应该调查为什么预测值很低,也许某处有错误。
- 因此,0.5 应该是你查看 AUC 时的低标准。当你读到某篇论文说 AUC 为 0.65 时,你不应该认为模型在 0 到 1 的范围内得了 0.65,而应该认为 0.65 是从 0.5 到 1 的比例。AUC 为 0.6 的模型相当接*随机猜测。
AUC 的另一种解释是:假设你随机选择一个正例,再随机选择一个负例。那么,在这个随机正负例对中,正例排名高于负例的概率恰好等于 AUC。这是思考 AUC 的另一种方式:随机正例排名高于随机负例的概率是多少?
另一个需要注意的点是,ROC 曲线对数据的流行率不敏感。这意味着,如果你有 130 个样本而不是 13 个,每个垂直下降的粒度会更小,但曲线下面积大致相同。因此,AUC 对数据的流行率不敏感。这是评估模型时需要记住的一点,因为这是 ROC 曲线的优点也是缺点。如果报告给你的 ROC 曲线是在流行率相等的数据集上测量的,但在现实世界中真实流行率非常不同,那么现实世界中的 ROC 性能仍然相同。这是它好的一面,但不好的一面可能是 ROC 曲线测量的是错误的东西。如果它报告的内容对流行率不敏感,那么也许 ROC 测量的不是正确的指标。
精确率-召回率曲线 📊
精确率-召回率曲线展示了精确率和召回率之间的权衡。它的绘制方式与 ROC 曲线类似:从阈值 0.1 开始,读取精确率和召回率值,得到一个点;然后稍微降低阈值,读取新的精确率和召回率值,这是下一个点,用线连接;继续降低阈值,得到新的精确率-召回率值,绘制并连接,最终得到一条完整的曲线。
这里需要注意几点:
- ROC 曲线在某种意义上是单调的,它永远不会回升,它只会向右或向下移动。而精确率-召回率曲线有时可以回升。
- 原因是,我们测量的是精确率和召回率之间的权衡。想象一下,如果我们从这里开始,降低阈值,得到一个样本,该样本是正例,那么精确率是 100%,但召回率是 0.1。然后我们再降低一个阈值,精确率仍然是 100%,召回率增加到 0.2。接着,假设我们遇到第三个样本,是负例,那么召回率根本没有提高,因为我们仍然只恢复了 10 个样本中的 2 个,但精确率从 2/2 下降到 2/3。因此,下降总是垂直的,因为我们遇到了负例,精确率下降,但召回率保持不变。一旦我们在这里,假设我们又开始遇到正例,那么我们从 2/3 到 3/4 到 4/5,这是一个逐渐增加的过程。因此,精确率-召回率曲线将具有这种垂直下降和缓慢爬升的标准模式,而 ROC 曲线将具有水*-垂直-水*-垂直的运动。
- 就像 ROC 曲线一样,你也可以测量精确率-召回率曲线下面积。
- 另一个观察是,ROC 曲线总是从左上角开始,到右下角结束。而精确率-召回率曲线,当你将阈值一直降到 0 时,你实际上预测所有样本为正,此时精确率将恰好等于流行率。因此,精确率-召回率曲线将在右侧终止于流行率水*。这也意味着,无论你的模型对样本的排序有多糟糕,在最坏的情况下,精确率-召回率曲线都无法进入某个区域。因此,在精确率-召回率曲线下面积中,有一部分面积是“免费”获得的。有一些 AUC-PR 的变体考虑了这一点,它们会扣除这部分免费面积,只测量模型真正赢得的面积。如果你的流行率很高,那么你的精确率-召回率曲线下面积可能看起来很好,仅仅是因为你免费获得了大量面积。
对数损失与校准 📉
让我们看这两个模型。假设有某个数据集,我们有两个模型 A 和 B。模型 A 和 B 为每个样本分配概率值。仅通过观察这个图,是否有理由偏好一个模型胜过另一个?B 看起来更好,因为它在这个区域和那个区域做得很好。在我们目前看到的所有指标中,哪个指标会将 B 排名高于 A?正确答案是:没有一个指标会将 B 排名高于 A,因为所有点的排名顺序是相同的。尽管它们聚集在一起,但如果你只看所有样本的排名位置,我们遇到正例和负例的顺序是相同的。我们目前看到的所有指标都只关心排名。例如,对于精确率-召回率曲线下面积,我们扫描阈值,但我们只关心遇到下一个正例或负例时的移动,我们并不关心阈值是多少。因此,我们目前看到的所有指标都是基于排名的指标。
正如我们在这里看到的,有两种情况在质量上看起来非常不同,但从我们目前看到的所有指标的角度来看,它们完全相同。这引出了对数损失的概念。

对数损失实际上就是我们在
机器学习 22:实用技巧与课程回顾 🎓


概述
在本节课中,我们将学习如何将机器学习应用于实际生产环境,并回顾整个课程的核心内容。我们将首先探讨构建可部署机器学习模型的一系列实用技巧,然后简要介绍期末考试的形式,最后对整个课程的知识点进行系统性回顾。
第一部分:生产环境中的机器学习实践 🛠️
上一节我们讨论了评估指标,本节我们将延续这个话题,探讨在实际应用中部署机器学习模型的一些实用建议。
构建生产模型的流程
以下是构建一个面向真实世界部署的机器学习模型的关键步骤。
1. 收集开发集
构建模型的第一步是开始收集一个开发集。开发集是指模型在生产环境中部署后将会遇到的数据。
- 匹配生产场景:开发集的分布应尽可能接*真实的生产场景。例如,如果你的目标用户是通过手机拍照,那么开发集就应该包含来自手机的照片。
- 尽早开始:在考虑训练数据之前,就应该先定义和收集开发集。尽可能多花时间收集能精确反映真实世界分布的数据。
- 亲自标注:建议你和你的团队亲自标注开发集,这能让你对数据的真实面貌有很好的感觉。
2. 定义评估指标
在收集数据集之后,需要定义一个评估指标。
- 设定目标:这个指标应该能捕捉产品中最重要的方面。定义好开发集和评估指标,就等于为你的团队设定了一个明确的目标。
- 首要任务:这两项任务应该是项目开始时首先要完成的工作。
3. 收集训练数据
接下来是收集训练数据。理想情况下,训练数据应尽可能接*开发集。
- 成本考量:然而,精确标注数据通常非常昂贵。因此,训练数据往往来自与开发集不完全相同的分布。
- 自动化标注:为了降低成本,通常会使用自动化或带噪声的标注。虽然质量可能下降,但可以通过大量数据来弥补。例如,可以基于文件名等简单规则进行初步标注,然后进行抽样检查以评估准确率。
4. 性能分解与诊断
目标是构建一个在生产环境中表现良好的模型。为了诊断和改进模型,我们需要分解性能指标。
以下是需要测量的五个关键性能指标及其意义:
- 人类水*性能:可以作为不可约误差的代理。
- 训练集性能:在训练集上模型的表现。
- 训练-开发集性能:从训练数据中留出的一部分数据(训练-开发集)上的表现,用于检查过拟合。
- 开发集性能:在手动收集和标注的开发集上的表现,用于评估模型在目标场景下的泛化能力。
- 部署性能:模型在实际生产环境中面对真实用户时的表现。
通过分析这些性能之间的差距,可以诊断问题的根源:
- 训练性能 vs. 人类水*性能:差距大表示模型偏差高。
- 训练性能 vs. 训练-开发集性能:差距大表示模型方差高。
- 训练-开发集性能 vs. 开发集性能:差距大表示存在分布不匹配。
- 开发集性能 vs. 部署性能:差距大表示可能对开发集过拟合。
5. 针对不同问题的行动方案
根据诊断结果,可以采取相应的行动:
- 高偏差问题:增加模型灵活性。
- 行动:添加更多特征、增加神经网络深度/宽度、减少正则化、使用更复杂的内核。
- 高方差问题:降低模型复杂度或获取更多数据。
- 行动:使用更小的模型、减少特征、增加正则化、使用更简单的内核、收集更多数据。
- 分布不匹配问题:使训练数据分布更接*开发集。
- 行动:花费资源收集更多真实数据并加入训练集,或对训练数据进行变换(如滤镜)以接*开发集分布。
- 开发集过拟合问题:重新收集新的开发集。
- 行动:当多次在开发集上评估并调整模型后,开发集可能“腐化”,需要收集新的、未见过的数据作为开发集。
6. 学习曲线:判断是否需要更多数据
为了判断“收集更多数据”是否有助于解决高方差问题,可以绘制学习曲线。
- 方法:用训练数据的不同子集(如10%, 20%, ..., 100%)训练模型,并分别绘制训练误差和开发集误差随数据量变化的曲线。
- 解读:
- 如果两条曲线已经非常接*且趋于*缓,说明增加数据帮助不大,可能是高偏差问题。
- 如果两条曲线之间仍有较大差距,且开发集误差有下降空间,说明增加数据可能有效,属于高方差问题。
核心建议总结
- 始终以部署性能为目标:所有中间测量(训练误差、开发集误差)都只是辅助诊断的工具,最终目标是提升模型在真实生产环境中的表现。
- 进行偏差-方差分析:在采取相互矛盾的行动(如增加特征 vs. 减少特征)之前,必须通过分析确定当前问题是高偏差还是高方差。
- 不要重复造轮子:在实际生产中,永远不要自己实现梯度下降等基础算法。应使用经过充分测试的成熟软件包。
第二部分:期末考试格式说明 📝
接下来,我们将简要介绍期末考试的预期格式。
期末考试将采用开卷形式,预计结构如下:
- 判断题:约10道。
- 简答题:约5道。
- 理论证明题:包含子问题,引导你完成一个较长的推导或证明。
- 理论/应用题:包含一个新颖的场景,需要你运用课程知识进行拓展。通常包括:
- 两个理论部分(推导更新规则、预测规则等)。
- 一个编程部分(在提供的初始代码中实现规则,生成图表并解释)。
考试须知:
- 可以查阅课程资料、笔记、作业答案甚至互联网,但严禁与他人交流。
- 考试期间Piazza将禁用公开提问,仅可发送私信给教学团队。如果问题涉及题目歧义,我们会公开澄清。
- 重点复习矩阵微积分、概率论和线性代数等先修知识,以及课程核心概念(如偏差-方差)。
第三部分:课程核心内容回顾(第一部分)📚
最后,我们将对整个课程内容进行回顾,并关联相关的作业问题。
监督学习概述
监督学习的目标是学习一个从输入 x 到输出 y 的映射函数 h。给定训练集 S = {(x_i, y_i)}_{i=1}^n。
y_i为实数:回归问题。y_i∈ {0, 1}:二分类问题。y_i为整数:计数或泊松回归等问题。
工作流程:训练集 → 学习算法 → 假设模型 h → 对新输入 x 做出预测 y。
线性回归
我们假设假设函数属于参数族:h_θ(x) = θ^T x。
1. 通过梯度下降求解
定义成本函数(*方误差):J(θ) = Σ (h_θ(x_i) - y_i)^2。
梯度下降更新规则:θ := θ - α * Σ (h_θ(x_i) - y_i) * x_i。
随机梯度下降:每次迭代随机选取一个样本 k 进行更新:θ := θ - α * (h_θ(x_k) - y_k) * x_k。
2. 正规方程(闭式解)
假设 X^T X 可逆,可得:θ = (X^T X)^{-1} X^T y。
3. 投影解释
将输出向量 y 投影到设计矩阵 X 的列空间上,投影矩阵为 X (X^T X)^{-1} X^T。求解 Xθ 等于该投影的问题,同样得到正规方程。
4. 概率解释
假设 y = θ^T x + ε,其中 ε ~ N(0, σ^2)。
则 P(y | x; θ) = (1/√(2πσ^2)) exp(-(y - θ^T x)^2 / (2σ^2))。
通过最大似然估计最大化该概率,等价于最小化*方误差成本函数 J(θ)。这表明高斯噪声假设天然导向*方误差损失。
逻辑回归
用于二分类问题,y_i ∈ {0, 1}。
1. 模型假设
假设 y_i | x_i 服从伯努利分布,其中:P(y_i = 1 | x_i; θ) = 1 / (1 + exp(-θ^T x_i))。
2. 最大似然估计
似然函数:L(θ) = Π [ (h_θ(x_i))^{y_i} * (1 - h_θ(x_i))^{1-y_i} ]。
取对数得到对数似然:l(θ) = Σ [ y_i log(h_θ(x_i)) + (1 - y_i) log(1 - h_θ(x_i)) ]。
通过梯度上升最大化 l(θ) 来求解 θ。逻辑回归没有闭式解。
3. 注意点
- 逻辑回归输出的是概率,需要后续设定阈值来做出分类决策。
- 当数据完全线性可分时,最大似然估计可能无法收敛(
θ会趋于无穷大)。这时通常需要引入正则化来使问题良定义。
牛顿法
牛顿法是一种求根方法,用于寻找函数 f 的零点(即 f(x)=0)。
- 应用于优化:在优化中,我们令
f等于成本函数J的梯度∇J(θ)。牛顿法找到梯度为零的点,即驻点。 - 更新规则(标量):
θ := θ - f(θ) / f'(θ)。 - 更新规则(向量,牛顿-拉弗森方法):
θ := θ - H^{-1} ∇J(θ),其中H是海森矩阵。 - 关键点:牛顿法本身不区分最大化或最小化,它只寻找最*的驻点。因此,只有当成本函数是凸函数(或凹函数)时,它才能保证找到全局最优解。对于像神经网络这样的非凸问题,通常不使用牛顿法。

总结

本节课我们一起学习了将机器学习模型投入生产环境的完整流程和实用技巧,包括从定义开发集和评估指标开始,到收集训练数据、进行性能分解与诊断,并针对高偏差、高方差等问题采取具体行动。我们还了解了期末考试的格式,并回顾了监督学习的基础——线性回归和逻辑回归的模型假设、求解方法及其概率解释,以及牛顿法这一优化工具的原理与局限。在下一讲中,我们将继续回顾课程的其他重要主题。
机器学习 23:课程回顾与总结 🎓


在本节课中,我们将对CS229机器学习课程的核心内容进行一次全面的回顾与总结。我们将梳理从监督学习到无监督学习,再到强化学习等各个模块的关键概念、算法和思想,帮助你构建完整的知识体系。
1. 监督学习回顾 📈
上一讲我们开始了期末考试复习,并回顾了监督学习。本节我们将继续深入,并完成整个课程的总结。
1.1 线性回归
线性回归是我们学习的第一个模型,它可以从多个角度进行理解:
- 最小化*方损失:通过最小化预测值与真实值之间的*方差来拟合模型。
- 概率解释:假设误差服从高斯分布,线性回归等价于最大化数据的似然函数。
- 投影解释:在特征空间中,预测结果是目标向量在由特征张成的子空间上的投影。
- 正规方程:通过求解
θ = (X^T X)^{-1} X^T y直接得到最优参数。
1.2 逻辑回归
逻辑回归是用于分类的模型。
- 它为每个样本输出类别为1的概率:
P(y=1|x; θ) = 1 / (1 + exp(-θ^T x))。 - 通过设定一个阈值(如0.5),可以将概率输出转换为分类器。
1.3 牛顿法
牛顿法是另一种优化算法,特别适用于凸或凹问题。
- 核心总结:牛顿法收敛速度可能很快,并且是“即插即用”的。
- 它自动进行优化,无需指定是最大化还是最小化函数。它通过找到最*的驻点来优化函数。如果函数是凸的,则自动最小化;如果是凹的,则自动最大化。
1.4 感知机算法
感知机算法是一种流式算法,每次处理一个样本,类似于随机梯度下降。
以下是其更新规则:
# 感知机更新规则
if y_i * (θ^T x_i) <= 0: # 如果预测错误
θ := θ + α * y_i * x_i
其中,g(z) 是指示函数,当 z >= 0 时返回1,否则返回0。
直观理解:我们希望参数向量 θ 的方向更接*正类样本的方向。当分类正确时,参数不变。当分类错误时,我们将误分类样本向量 x 的一个小倍数加到 θ 上,使 θ 的方向更接* x,从而修正决策边界。
重要性质:如果存在一个分离超*面,那么无论以何种顺序向算法呈现样本,感知机最终都会找到一个分离超*面。一旦找到,后续所有更新都将为0,算法收敛。
2. 指数族与广义线性模型 🔗
接下来,我们学习了指数族分布。
2.1 指数族
指数族是一类概率分布,其一般形式为:
P(y; η) = b(y) * exp(η^T T(y) - a(η))
其中:
y是变量。T(y)是充分统计量(在本课程中通常T(y) = y)。η是自然参数。b(y)是基测度。a(η)是对数配分函数。
指数族非常灵活,可以涵盖离散、连续、仅取正值、整数等多种类型的随机变量。
2.2 广义线性模型
GLM将指数族与输入特征联系起来。我们设定自然参数 η = θ^T x,其中 θ 是可学习参数,x 是对应于 y 的输入。
通过这种联系,GLM成为了回归、分类等模型的更一般形式。例如:
- 当
y为实数值时,得到回归模型。 - 当
y为0/1二值时,得到分类模型(如逻辑回归)。
重要性质:
- 期望:
E[y|x; θ] = a'(θ^T x) - 方差:
Var[y|x; θ] = a''(θ^T x) - GLM的对数似然的Hessian矩阵总是半正定的,因此优化问题是凸的。
2.3 最大熵与最大似然
对于给定的数据集,在指数族上执行最大似然估计,等价于在满足“充分统计量的期望等于样本均值”这一约束下,执行最大熵优化。这是一个对偶结果。
3. 生成模型 🧬
之前学习的算法都是对 P(y|x) 建模,即判别式模型。生成模型则尝试对 x 和 y 的联合分布 P(x, y) = P(x|y)P(y) 进行建模。
3.1 高斯判别分析
GDA假设:
P(y)服从伯努利分布(参数为φ)。P(x|y)服从高斯分布,对于每个类别y有其自己的均值μ_y,但所有类别共享同一个协方差矩阵Σ。
直观图像:在特征空间中,每个类别的数据都像一个高斯“云团”,这些云团形状相同(因为Σ相同),但中心位置(μ_y)不同。由于协方差相等,后验概率 P(y|x) 会呈现逻辑回归的形式,即决策边界是线性的。如果协方差不相等,决策边界将是二次的。
3.2 朴素贝叶斯
朴素贝叶斯常用于文本分类,其中输入 x 是离散的(如单词)。
- 它做出了条件独立性假设:在给定类别
y的条件下,特征x_i和x_j是独立的。这并不意味着x_i和x_j无条件独立。 - 我们学习了两种事件模型:
- 伯努利事件模型:
x_j表示词汇表中第j个词是否在文档中出现(0或1)。我们估计每个词在每个类别中出现的文档比例。 - 多项式事件模型:
x_j表示文档中第j个位置的词是什么。我们估计每个词在每个类别的所有文档中出现的次数比例,形成一个多项式分布。
- 伯努利事件模型:
- 拉普拉斯*滑:用于处理罕见词。我们不是从计数0开始,而是为每个事件预设一个先验计数(如1),然后再从数据中增加计数。这可以防止概率估计为0。
3.3 生成式 vs 判别式模型
- 生成式模型(如GDA):引入了更多关于数据分布的假设(先验知识)。如果这些假设正确,模型会更具样本效率,即用更少的数据就能学好。
- 判别式模型(如逻辑回归):对数据做出的假设更少,因此更稳健。但如果假设成立,判别式模型通常需要更多数据来达到相同的性能。
- 核心思想:你可以通过假设或数据向模型提供信息。正确的假设是有益的,可以减少对数据量的需求。
4. 核方法 ⚙️
核方法提供了一种高效引入特征映射的方式。
4.1 核的定义
我们从特征映射 φ(x): R^D -> R^P 开始(P 可以是无穷大)。核 K 是一个对应于该特征映射的函数,满足:
K(x, z) = φ(x)^T φ(z)
核函数直接在原始输入空间上计算,但其结果等于将输入映射到高维特征空间后再做内积。核技巧的关键在于,K(x, z) 的计算通常比显式构造 φ(x) 再做内积要高效得多。
4.2 核的性质与Mercer定理
函数 K 是一个核的必要条件是:对于任意一组点 {x_1, ..., x_m},由此构造的核矩阵(第 i, j 元素为 K(x_i, x_j))是对称且半正定的。
Mercer定理指出,上述条件同时也是充分条件。任何满足该条件的函数都是某个特征映射对应的核。
4.3 核技巧
如果我们能将一个算法完全用输入向量之间的内积 〈x_i, x_j〉 来表示,那么我们就可以用核函数 K(x_i, x_j) 替换这些内积。这相当于隐式地将数据映射到了高维(甚至无限维)特征空间,而无需显式计算 φ(x)。
- 在原始参数化中,我们学习一个参数向量
θ ∈ R^P。 - 在核化版本中,我们转而学习一个对偶系数向量
β ∈ R^n(每个样本一个系数)。
这使得我们能够使用无限维的特征映射,因为只需维护与样本数n同维的β向量,而不是无限维的θ向量。
4.4 支持向量机
SVM是一种基于核的分类算法,它专注于最大化几何间隔。
- 与逻辑回归的区别:逻辑回归试图最大化函数间隔,这可能导致参数无限增大。SVM最大化几何间隔,避免了这个问题。
- 支持向量:SVM的解具有稀疏性。最终的对偶系数
β中,大部分为0,只有少数对应样本(即“支持向量”)的系数非零。这些支持向量是离决策边界最*的样本,决定了边界的位置。 - 优势:SVM结合了核方法的优点(可处理高维特征),同时由于解是稀疏的,在预测时只需存储支持向量,而不是整个训练集,提高了效率。
4.5 高斯过程
高斯过程是用于回归的核方法。它将多元高斯分布推广到无限维。
- 我们可以将其视为一个无限维的随机向量,具有均值函数和协方差函数(即核函数)。
- 在处理数据集时,我们实际上是从这个无限维过程中,边缘化掉训练集和测试集之外的所有点,得到一个关于训练点和测试点的有限维联合高斯分布。
- 然后,利用高斯分布的条件规则,基于训练数据对测试点进行预测,得到的是一个预测分布(而不仅仅是点估计)。
核的选择:使用哪种核函数是一个需要调整的超参数,类似于在线性回归中选择哪种特征映射。
5. 神经网络与反向传播 🧠
神经网络可以看作是复杂的、可微分的、分层复合函数,每层都有参数和非线性激活。
5.1 前向传播
对于一个全连接网络,第 l 层的计算为:
a^{[l]} = g^{[l]}(W^{[l]} a^{[l-1]} + b^{[l]})
其中 g 是激活函数(如Sigmoid, ReLU)。
5.2 反向传播
反向传播本质上是多元微积分链式法则的应用,用于计算标量损失 L 对网络中每个标量参数(如 W_{ij}^{[l]})的梯度。
- 计算过程涉及一系列雅可比矩阵的乘法。
- 对于非线性层,其雅可比矩阵是对角阵,计算时可简化为元素乘法。
- 计算出所有梯度后,就可以使用梯度下降等优化算法同时更新所有参数。
6. 学习理论:偏差-方差分析 ⚖️
偏差-方差分析可能是本课程中最重要的概念,它将机器学习与纯粹的优化区分开来。
6.1 分解
我们的终极目标不是最小化训练误差,而是最小化在未知数据上的测试误差。以*方误差损失为例,测试误差可以分解为:
E[(y - ŷ)^2] = (不可减少的误差) + (偏差)^2 + 方差
- 不可减少的误差:源于数据本身的噪声。即使使用最完美的模型,也无法避免。
- 偏差:源于模型本身的局限性(不够灵活)。例如,用线性模型去拟合具有二次关系的数据。
- 方差:源于模型对训练数据中随机噪声的敏感度。如果换一组训练数据,模型参数变化很大,则方差高。
6.2 诊断与应对
- *似诊断:
- 高偏差:训练误差高。
- 高方差:训练误差与验证误差之间的差距大。
- 应对策略:
- 对抗高偏差:使用更复杂的模型、减少正则化、增加特征等。
- 对抗高方差:获取更多数据、增加正则化、使用更简单的模型等。
在采取任何行动前,都应先分析问题是高偏差还是高方差主导,然后有针对性地采取措施。
7. 正则化 🛡️
正则化通过在损失函数中添加对参数大小的惩罚项,来防止模型过拟合(控制方差)。
- L2正则化:惩罚参数的*方和
λ||θ||_2^2。这等价于在最大后验估计中使用了高斯先验。 - L1正则化:惩罚参数的绝对值之和
λ||θ||_1。这等价于使用了拉普拉斯先验,并能产生稀疏解。
8. 强化学习 🎮
强化学习处理的是序列决策问题,样本之间不再独立同分布。
8.1 马尔可夫决策过程
MDP由以下要素定义:状态集合 S、动作集合 A、转移概率 P(s'|s, a)、折扣因子 γ、奖励函数 R(s)。
8.2 策略与价值函数
- 策略 π:一个从状态到动作的映射规则。
- 价值函数 V^π(s):从状态
s开始,始终遵循策略π所获得的累积折扣奖励的期望。
8.3 求解算法
- 策略迭代:
- 策略评估:给定一个策略
π,计算其价值函数V^π。 - 策略改进:根据
V^π贪婪地改进策略,得到新策略π'。
重复以上两步直到策略收敛。
- 策略评估:给定一个策略
- 价值迭代:直接寻找最优价值函数
V*。通过反复应用贝尔曼最优算子来更新价值函数:
V(s) := R(s) + γ * max_a Σ_{s'} P(s'|s, a) V(s')
贝尔曼算子是压缩映射,保证迭代收敛到唯一的最优价值函数V*。 - 拟合价值迭代:当状态空间很大时,我们用一个参数化函数(如线性模型、神经网络)
V_θ(s)来*似价值函数。在每次迭代中,我们先应用贝尔曼算子得到目标值y,然后通过最小化(V_θ(s) - y)^2来更新参数θ,将目标值“投影”回函数*似空间。这种方法牺牲了精确性,但获得了泛化能力。
9. 无监督学习 🔍
在无监督学习中,我们只有输入数据 {x},没有标签 {y},目标是发现数据中的结构。
9.1 聚类 vs 降维
- 聚类:将数据分组到不同的簇中。代表算法:K-Means(非概率)、高斯混合模型(概率)。
- 降维/子空间发现:寻找数据的一个低维表示。代表算法:主成分分析(非概率)、因子分析(概率)。
9.2 期望最大化算法
EM算法是求解含有隐变量 z 的概率模型参数 θ 的强大工具。
- E步:基于当前参数
θ,计算隐变量的后验分布Q_i(z) = P(z|x_i; θ)。 - M步:基于
Q_i(z),更新参数θ以最大化数据的期望对数似然。
EM算法保证每次迭代都能提高似然函数,并最终收敛到局部最优。

9.3 独立成分分析
ICA用于解决盲源分离问题。它假设源信号是非高斯的,通过最大似然估计来寻找一个解混矩阵,从而从混合信号中分离出独立的源信号。
9.4 变分自编码器
VAE是深度生成模型。它使用一个编码器神经网络将输入 x 映射到隐变量 z 的后验分布参数,使用一个解码器神经网络从 z 重构 x。这种方法被称为“摊销推断”,因为它用一个共享的神经网络为所有样本学习后验分布,而不是像EM那样为每个样本单独计算一个后验。
10. 课程总结与寄语 🌟
本节课中,我们一起回顾了CS229机器学习课程涵盖的广阔领域:从基础的监督学习(线性/逻辑回归、GLM),到生成模型与核方法,再到神经网络、学习理论、正则化、强化学习以及无监督学习。
机器学习是一门强大的工具,它通过寻找数据中的相关性来构建预测模型。这种力量既可以用于造福社会,也可能被滥用。因此,在应用机器学习时,请务必保持审慎:
- 警惕数据偏见:模型会继承训练数据中的偏见和不公*性。请仔细思考数据是如何收集的。
- 理解局限性:相关性不等于因果性。基于相关性的预测在需要因果推断的领域可能存在风险。
- 广阔的应用前景:任何收集数据并需要预测的领域,都是机器学习的用武之地。
无论你是希望将机器学习应用于其他领域,还是立志于从事机器学习研究,希望本课程所传授的具体工具(各种模型算法)和通用原则(如偏差-方差分析),都能为你未来的学习和工作奠定坚实的基础。

祝大家在期末考试中取得好成绩!感谢大家参与本课程的学习。
机器学习理论 1:概述、监督学习与经验风险最小化 🎯


在本节课中,我们将学习机器学习理论的基础框架,特别是监督学习的基本设定、核心目标以及一个最基础的算法——经验风险最小化。我们将从定义输入空间、标签空间和损失函数开始,逐步构建起分析机器学习算法的数学语言。
监督学习的基本设定 📚
上一节我们介绍了课程的整体目标,本节中我们来看看监督学习的具体数学描述。监督学习是机器学习中最核心的范式,其目标是学习一个从输入到输出的映射。
以下是监督学习框架的核心组成部分:
- 输入空间:记作
X,代表所有可能的数据点(例如,图片的像素值、文本的词向量)。 - 标签空间:记作
Y,代表所有可能的输出或标签(例如,分类中的类别、回归中的实数值)。 - 联合概率分布:记作
P,是定义在X × Y上的联合分布。它描述了数据(x, y)在真实世界中出现的内在规律。 - 训练数据集:记作
(x1, y1), ..., (xn, yn),包含n个样本。每个样本对(xi, yi)都被假设为独立同分布地从P中采样得到。 - 损失函数:记作
l(ŷ, y),用于衡量预测值ŷ与真实值y之间的差异。通常,损失函数值是非负的,值越小表示预测越准确。 - 预测器/模型/假设:记作
h,是一个从输入空间X到标签空间Y的函数映射。我们的目标就是找到一个好的h。
风险与目标 🎯
在定义了基本组件后,我们可以量化一个模型的好坏。核心概念是风险,它衡量了模型在整体数据分布上的*均表现。
- 模型在单个样本上的损失:对于给定的模型
h和样本(x, y),其损失为l(h(x), y)。 - 期望风险(或总体风险):这是模型
h的终极性能指标,定义为损失函数在数据分布P上的期望值:
L(h) = E_(x, y)~P [ l(h(x), y) ] - 学习目标:监督学习的最终目标是找到一个模型
h,使其期望风险L(h)尽可能小。
假设类与*似误差 🔍
在实际中,我们通常不会在所有可能的函数中搜索最优模型,而是限定在一个特定的函数集合中。这个集合被称为假设类。
- 假设类:记作
H,是一个从X到Y的函数集合(例如,所有线性函数、所有深度神经网络)。 - *似误差:由于我们只在
H中搜索,即使找到其中最好的模型h*,其风险L(h*)也可能高于全局最优模型的风险。这个差距称为*似误差,定义为:
*似误差(H) = L(h*) - inf_{h} L(h)
其中h* = argmin_{h∈H} L(h)。*似误差衡量了假设类H的表达能力。
经验风险最小化算法 ⚙️
上一节我们明确了理论目标,本节中我们来看看如何从有限的训练数据出发,实现这个目标。最直接的方法是经验风险最小化。
- 经验风险:由于我们无法直接计算总体分布
P上的期望,我们使用训练数据集上的*均损失作为*似,称为经验风险:
L̂(h) = (1/n) * Σ_{i=1}^n l(h(xi), yi) - ERM算法:经验风险最小化算法选择那个在假设类
H中能最小化经验风险的模型:
ĥ = argmin_{h∈H} L̂(h) - 算法的合理性:根据大数定律,当样本量
n很大时,经验风险L̂(h)是总体风险L(h)的一个良好估计(即E[L̂(h)] = L(h))。因此,最小化L̂(h)有望得到一个具有较小L(h)的模型。
参数化模型与优化 🧮
在实际的计算机实现中,我们通常使用参数化的函数族。
- 参数化假设类:模型
h由一个参数向量θ决定,记作h_θ。假设类H则对应参数空间Θ(例如,Θ = R^d)。 - 参数化的ERM:此时,经验风险和ERM解都通过参数
θ来表达:
L̂(θ) = (1/n) * Σ_{i=1}^n l(h_θ(xi), yi)
θ̂_ERM = argmin_{θ∈Θ} L̂(θ) - 理论分析的核心问题:我们最终关心的是由ERM算法学到的模型
θ̂_ERM的超额风险是否足够小:
超额风险 = L(θ̂_ERM) - L(θ*)
其中θ* = argmin_{θ∈Θ} L(θ)是假设类中的总体风险最优解。分析的关键在于证明经验风险L̂(θ)与总体风险L(θ)足够接*。
渐*分析简介 📈
为了理论分析ERM,课程首先介绍了一种称为“渐*分析”的方法,即研究当样本数量 n 趋向于无穷大时算法的行为。
- 分析目标:我们希望得到超额风险的一个上界,其形式通常为:
L(θ̂_ERM) - L(θ*) ≤ C/n + o(1/n)
其中C是一个与问题维度等有关的常数,o(1/n)是比1/n更快趋于0的项。这表明随着数据增多,性能以1/n的速度改善。 - 核心结论(非正式):在一定的正则性条件下(如模型参数唯一、损失函数在最优解处Hessian矩阵正定等),并假设ERM估计量
θ̂_ERM是一致的(即随着n→∞,θ̂_ERM依概率收敛于θ*),我们可以得到一系列强大的渐*性质:- 参数估计误差:
θ̂_ERM - θ*的量级约为O(1/√n)。 - 风险误差:
L(θ̂_ERM) - L(θ*)的量级约为O(1/n)。 - 分布形态:
√n * (θ̂_ERM - θ*)依分布收敛于一个均值为零、协方差矩阵特定的多元高斯分布。 - 风险分布:
n * (L(θ̂_ERM) - L(θ*))依分布收敛于一个与上述高斯向量二次型相关的分布。
- 参数估计误差:
渐*分析的启发式证明思路 💡
上述结论可以通过泰勒展开和大数定律/中心极限定理进行启发式推导。
- 起点:ERM解满足一阶最优性条件:
∇L̂(θ̂_ERM) = 0。 - 泰勒展开:在总体最优解
θ*处对∇L̂(θ)进行一阶泰勒展开:
0 = ∇L̂(θ̂) ≈ ∇L̂(θ*) + ∇²L̂(θ*) (θ̂ - θ*) - 联系总体风险:重新整理上式,并利用:
- 大数定律:
∇L̂(θ*) ≈ ∇L(θ*) = 0,且∇²L̂(θ*) ≈ ∇²L(θ*) = H(Hessian矩阵)。 - 中心极限定理:
∇L̂(θ*)本身的波动量级为O(1/√n)。
- 大数定律:
- 推导结果:代入可得:
θ̂ - θ* ≈ -H^{-1} * ∇L̂(θ*)
由于∇L̂(θ*)量级为O(1/√n),H^{-1}为常数矩阵,因此θ̂ - θ*量级为O(1/√n)。 - 分析风险:对总体风险
L(θ)在θ*处进行二阶泰勒展开:
L(θ̂) - L(θ*) ≈ (1/2) (θ̂ - θ*)^T H (θ̂ - θ*)
因为(θ̂ - θ*)量级为O(1/√n),所以风险差量级为O(1/n)。
总结与展望 🚀
本节课中我们一起学习了机器学习理论的基础框架。我们从监督学习的数学定义出发,引入了输入空间、标签空间、损失函数和风险等核心概念。我们明确了学习的目标是最小化期望风险,并介绍了通过经验风险最小化这一基本算法来逼*该目标。我们还初步探讨了分析ERM算法的渐*方法,看到了在大样本极限下,算法具有非常良好的收敛性质和确定的分布形态。

然而,渐*分析依赖于样本数 n 趋于无穷的假设,这在现代机器学习(例如参数数量远超样本数)中往往不成立。因此,在接下来的课程中,我们将转向非渐*分析,致力于获得在有限样本 n 下同样成立的理论保证,这将使我们能更好地理解深度学习等复杂模型的实践。
机器学习理论 2:渐进分析、一致收敛与霍夫丁不等式 🎯


在本节课中,我们将继续学习机器学习理论中的核心概念。我们将首先回顾并完成关于渐进分析的讨论,然后深入探讨一致收敛的概念,并介绍一个关键工具——霍夫丁不等式。这些内容是理解机器学习模型泛化能力的基础。
渐进分析回顾 📈
上一节我们介绍了经验风险最小化(ERM)估计量 θ̂ 在样本量 n 趋于无穷时的渐*性质。本节中,我们首先来简要总结这些结论。
我们假设模型满足一致性(即 θ̂ 依概率收敛于总体风险最小化器 θ*)以及其他一些正则性条件(如海森矩阵满秩)。在这些假设下,我们得到了以下关键结论:
- 参数估计误差的阶:
θ̂ - θ*的幅度约为O(1/√n)。更形式化地,√n (θ̂ - θ*)依分布收敛于一个均值为0的随机变量。 - 超额风险的阶:超额风险
L(θ̂) - L(θ*)的幅度约为O(1/n)。更形式化地,n [L(θ̂) - L(θ*)]依分布收敛于一个常数。 - 参数估计的极限分布:
√n (θ̂ - θ*)依分布收敛于一个多元高斯分布,其协方差矩阵为:
Σ = [∇²L(θ*)]⁻¹ * Cov[∇ℓ(X, Y; θ*)] * [∇²L(θ*)]⁻¹
其中∇²L是海森矩阵,∇ℓ是单个样本的损失梯度。 - 超额风险的极限分布:
n [L(θ̂) - L(θ*)]依分布收敛于一个标量随机变量的分布。
这些结论通过泰勒展开和中心极限定理等工具推导得出。它们描述了在无限数据极限下,ERM估计量的统计行为。
设定良好的情况 🔧
上一节我们介绍了通用定理,本节中我们来看看一个更具体、更直观的特殊情况——设定良好的情况。
在这种情况下,我们假设数据 (X, Y) 是由某个以参数 θ* 参数化的概率模型 P(Y|X; θ) 生成的。同时,我们使用的损失函数是该模型的负对数似然。例如,逻辑回归使用交叉熵损失,带高斯噪声的线性回归使用均方误差损失。
在设定良好的情况下,我们可以得到更简洁的结论:
- 总体风险最小化器
θ*就是真实的数据生成参数。 - 梯度协方差等于海森矩阵:
Cov[∇ℓ] = ∇²L(θ*)。 - 因此,参数估计误差的极限协方差简化为:
Σ = [∇²L(θ*)]⁻¹。 - 进一步,缩放后的超额风险
n [L(θ̂) - L(θ*)]依分布收敛于一个自由度为p(参数维度)的卡方分布的一半。其期望为p/(2n)。
这意味着,在渐*意义上,超额风险主要取决于参数数量 p 和样本量 n,而与模型的具体曲率(海森矩阵)无关。
渐进分析的局限性与非渐进分析 🚧
然而,纯粹的渐进分析存在一个主要问题:它隐藏了对其他参数(如维度 p)的依赖关系。符号 O(·) 和 o(·) 通常只关注 n → ∞ 时的主导项,而常数项和对 p 的依赖可能被忽略。
例如,一个真实边界可能是 p/(2n) + 1/√n,另一个可能是 p/(2n) + p¹⁰/√n。在渐进分析中,两者都可能被表示为 p/(2n) + o(1/n),无法区分其优劣。但在实际中,当 p 很大时,第二个边界可能非常宽松,需要极大的 n 才能保证风险较小。
因此,我们需要转向非渐进分析。其核心思想是:推导出的边界中只允许隐藏绝对常数,但不能隐藏对问题其他参数(如维度 p、参数范数等)的依赖。我们使用大O符号 O(·) 来统一表示这种只包含绝对常数的依赖关系。
定义:在非渐进分析中,A = O(B) 意味着存在一个绝对常数 C > 0,使得对于所有相关的正数 A 和 B,有 A ≤ C * B。这里没有取极限的操作。
我们的目标是得到形式如下的边界:
L(θ̂) - L(θ*) ≤ O( f(p, n, ...) )
其中 f 是一个显式函数,其依赖关系清晰可见。
一致收敛的基本思路 🧠
为了推导非渐进边界,一个核心策略是证明一致收敛。其基本思路源于一个简单的观察:
引理:如果以下两个条件成立:
|L̂(θ*) - L(θ*)| ≤ α|L̂(θ̂) - L(θ̂)| ≤ α
那么,超额风险满足:L(θ̂) - L(θ*) ≤ 2α。
证明:
L(θ̂) - L(θ*) = [L(θ̂) - L̂(θ̂)] + [L̂(θ̂) - L̂(θ*)] + [L̂(θ*) - L(θ*)]
由于 θ̂ 是经验风险最小化器,有 L̂(θ̂) - L̂(θ*) ≤ 0。结合条件1和2,即可得证。
这个引理告诉我们,要控制超额风险,只需确保经验风险 L̂(θ) 和总体风险 L(θ) 在 θ* 和 θ̂ 这两个点上分别接*。然而,这两个条件的难度截然不同。
霍夫丁不等式:固定参数点的收敛 🎲
条件1(在 θ* 点接*)相对容易证明,因为 θ* 是一个固定的、与数据无关的参数。我们可以直接应用霍夫丁不等式。
霍夫丁不等式:设 X₁, ..., Xₙ 为独立随机变量,且对于每个 i,几乎必然有 aᵢ ≤ Xᵢ ≤ bᵢ。令 μ = E[ (1/n) Σ Xᵢ ] 为均值。那么,对于任意 ε > 0,有:
P( |(1/n) Σ Xᵢ - μ| ≥ ε ) ≤ 2 exp( - (2n²ε²) / Σᵢ (bᵢ - aᵢ)² )
这个不等式是大数定律的非渐进版本。它告诉我们,样本均值偏离其期望的概率随着 n 增大呈指数级衰减。
应用到我们的问题:对于任意固定的 θ,定义 Xᵢ = ℓ(Xᵢ, Yᵢ; θ)。假设损失函数有界,例如 0 ≤ ℓ ≤ 1。那么 aᵢ=0, bᵢ=1。应用霍夫丁不等式,并取 ε 在 √(log n / n) 量级,我们可以得到:以至少 1 - n^(-10) 的高概率,有
|L̂(θ) - L(θ)| ≤ O( √(log n / n) ) = Õ(1/√n)
其中 Õ 隐藏了对数因子。
这完美地证明了条件1,因为我们可以取 θ = θ*。
挑战:处理数据依赖的参数点 ⚠️
然而,条件2(在 θ̂ 点接*)要困难得多。关键在于,θ̂ 是依赖于数据的——它是基于样本 (Xᵢ, Yᵢ) 最小化经验风险得到的。
这意味着,当我们想将霍夫丁不等式应用于 Xᵢ = ℓ(Xᵢ, Yᵢ; θ̂) 时,这些随机变量不再是独立的!因为所有 Xᵢ 都通过 θ̂ 依赖于整个数据集。因此,霍夫丁不等式的独立性假设被破坏,直接应用会得到错误结论。
这就是一致收敛要解决的核心问题。我们需要证明一个更强的结论:以高概率,对于所有可能的 θ(至少在一个有意义的集合内),经验风险 L̂(θ) 都接*于总体风险 L(θ)。
形式化地,我们希望证明:
P( sup_{θ ∈ Θ} |L̂(θ) - L(θ)| ≤ ε ) ≥ 1 - δ
其中 ε 和 δ 都是 n 和其他参数的函数。
如果这个一致收敛界成立,那么它自然蕴含了条件2(因为 θ̂ ∈ Θ),从而我们可以通过之前的引理来界定超额风险。
从固定点到一致收敛的过渡 🔄
理解固定点收敛和一致收敛的区别至关重要。考虑一个简单的例子:假设随机经验风险函数 L̂(θ) 以等概率取三个不同的确定性函数之一。对于任意固定的 θ,L̂(θ) 偏离其期望的概率可能是 1/3。但是,要求对所有 θ 同时有 L̂(θ) 接* L(θ) 的概率则为零,因为总有一个实现会使两个函数在某些点不同。
因此,将概率 P(·) 和全称量词 ∀θ 交换顺序并非*凡操作,这通常会导致更宽松的边界。在接下来的课程中,我们将学习如何利用复杂度度量(如VC维、Rademacher复杂度)来推导非*凡且有用的一致收敛边界。
直观上,一致收敛保证了经验风险函数(蓝线)在整个参数空间上都紧贴着总体风险函数(黑线),而不仅仅是几个孤立的点。这为ERM估计量的泛化性能提供了坚实的保证。
总结 📝
本节课中我们一起学习了:
- 渐进分析的结论回顾,包括参数估计和超额风险的极限分布。
- 在设定良好情况下,这些结论的简化形式,揭示了超额风险与参数数量的基本关系
~ p/n。 - 渐进分析的局限性,即它可能隐藏对关键参数(如维度)的有害依赖。
- 转向非渐进分析的动机,目标是获得依赖关系明确的边界。
- 通过一个简单引理,将控制超额风险的问题转化为控制经验风险与总体风险在两点
θ*和θ̂的差距问题。 - 使用霍夫丁不等式轻松解决了在固定点
θ*的收敛问题。 - 指出了在数据依赖点
θ̂应用相同工具的根本困难,因为独立性假设被破坏。 - 引入了一致收敛作为解决方案,即需要证明经验风险在整个假设类上一致地接*总体风险。

一致收敛是统计学习理论的基石。在接下来的课程中,我们将深入探讨如何量化假设类的复杂度,并推导出实用的一致收敛边界。
机器学习理论 3:有限假设类与无限假设空间的离散化 🧠


在本节课中,我们将要学习如何证明机器学习中的“一致收敛”性质。具体来说,我们将探讨当假设类 H 是有限集合时,如何证明经验风险与总体风险之间的差异以高概率很小。接着,我们会将这种方法推广到无限假设类的情况,通过一种称为“暴力离散化”的技术,将无限问题转化为有限问题来处理。
回顾:一致收敛的目标
上一节我们介绍了“一致收敛”的概念。我们的核心目标是证明,以高概率,对于假设类 H 中的所有假设 h,经验风险 L̂(h) 与总体风险 L(h) 的差异都很小。用公式表示,即我们希望证明:
这与针对单个固定假设 h 证明收敛性不同,因为这里涉及对整个假设类取上确界(最大值)。
第一部分:有限假设类的情况 📊
首先,我们考虑假设类 H 是有限集合的情况,即 |H| < ∞。这是分析中最简单的情形。
定理陈述
假设损失函数 ℓ 是0-1损失(或取值在 [0,1] 区间内)。那么,对于任意 δ ∈ (0, 1/2),以至少 1 - δ 的概率,对于所有 h ∈ H,有:
其中 n 是样本数量。
作为推论,我们可以得到经验风险最小化(ERM)解 ĥ 的 excess risk 界:
这里 h^* 是假设类中的最优假设。
证明思路
证明分为两步:
- 个体收敛:利用霍夫丁不等式,证明对于任意一个固定的假设
h,|L̂(h) - L(h)|大的概率很小。 - 取并集界:对所有
h ∈ H应用并集界(Union Bound),将单个假设的失败概率加起来,得到整个假设类的失败概率上界。
以下是具体步骤:
步骤一:个体收敛
对于固定的 h,损失 ℓ(h(x_i), y_i) 是独立有界随机变量(在 [0,1] 区间)。应用霍夫丁不等式,对于任意 ε > 0:
步骤二:并集界
定义坏事件 E_h 为 |L̂(h) - L(h)| ≥ ε。我们关心的是至少存在一个 h 发生坏事件的概率,即 P(∪_{h∈H} E_h)。根据并集界:
我们希望这个失败概率小于 δ。因此,我们选择 ε 使得:
解出 ε:
由此,我们得到了定理中的界。以至少 1-δ 的概率,对于所有 h ∈ H,|L̂(h) - L(h)| 都不超过这个 ε。
分析与比较
- 样本复杂度:要使界有意义(例如小于1),我们需要
n ≳ log |H|。这表明假设类越复杂(|H|越大),所需的样本量就越多。 - 与非渐*结果的比较:经典的渐*分析可能给出
O(1/n)的收敛速率,而我们的界是O(√(log|H|/n)),速率更慢。这是因为我们假设更弱(例如,没有要求损失函数二阶可导),但换来的是界中明确显示了所有依赖关系(如log|H|),没有隐藏可能很大的常数项。
过渡到无限假设类
上一节我们成功地为有限假设类证明了一致收敛。然而,机器学习模型(如线性模型、神经网络)的参数空间通常是连续的,即假设类是无限的。本节中,我们来看看如何将有限情况下的证明思路推广到无限假设类。
一个直观的想法是:虽然假设类无限,但在计算机实际实现中,参数总是用有限精度的浮点数表示,这本质上将无限空间离散成了一个有限集合。我们可以沿着这个思路,进行更形式化的“离散化”。
第二部分:无限假设类的暴力离散化方法 ⚙️
我们考虑参数化的假设类:H = {h_θ : θ ∈ Θ},其中参数空间 Θ 是 R^p(p维欧氏空间)的一个子集。我们额外假设:
- 参数范数有界:
||θ||₂ ≤ B。 - 损失函数是
κ-Lipschitz 连续的:对于任意数据点(x, y),有|ℓ(h_θ(x), y) - ℓ(h_θ‘(x), y)| ≤ κ ||θ - θ‘||₂。
定理陈述
在上述假设下,以至少 1 - exp(-p) 的概率,对于所有 θ ∈ Θ,有:
核心部分是 O(√(p/n)),表明泛化误差的界依赖于参数维度 p 和样本量 n。
证明的核心工具:ε-覆盖
证明的关键是构造参数空间 Θ 的一个 ε-覆盖。
定义:集合 C ⊆ Θ 是 Θ 的一个(关于度量 d 的)ε-覆盖,如果对于任意 θ ∈ Θ,都存在 θ‘ ∈ C,使得 d(θ, θ‘) ≤ ε。直观地说,C 中的点像“灯塔”一样,Θ 中任何点都在某个“灯塔”的 ε 邻域内。
引理:对于范数球 Θ = {θ: ||θ||₂ ≤ B},存在一个 ε-覆盖 C,其大小满足:
(在课程中,我们证明了一个稍弱的版本 |C| ≤ (2B√p/ϵ + 1)^p,这对最终结论影响不大)。
构造方法很直接:在参数空间中打上一个网格,网格间距为 ε/√p。那么每个坐标有大约 O(B√p/ε) 种选择,总点数约为 (O(B√p/ε))^p。可以验证,网格点集构成了一个 ε-覆盖。
证明步骤
有了 ε-覆盖,证明就可以分为两步,模仿有限假设类的证明:
-
在覆盖集
C上应用有限假设类结论:
将C视为一个有限的假设类(|C|有限)。利用第一部分定理,以高概率,对于所有θ‘ ∈ C,有|L̂(θ‘) - L(θ‘)| ≤ ε₁(其中ε₁是类似√(log|C|/n)的量)。 -
将结论从
C推广到整个Θ:
对于任意θ ∈ Θ,在覆盖集C中找到它的*邻θ‘,满足||θ - θ‘||₂ ≤ ε。
利用损失函数的 Lipschitz 性质:|L(θ) - L(θ‘)| ≤ κε|L̂(θ) - L̂(θ‘)| ≤ κε
然后通过三角不等式“桥接”:
\[|\hat{L}(\theta) - L(\theta)| \leq |\hat{L}(\theta) - \hat{L}(\theta‘)| + |\hat{L}(\theta‘) - L(\theta‘)| + |L(\theta‘) - L(\theta)| \]右边第一项和第三项由 Lipschitz 性质控制(
≤ κε),第二项由步骤1的结论控制(≤ ε₁)。因此:\[|\hat{L}(\theta) - L(\theta)| \leq 2\kappa \epsilon + \epsilon_1 \] -
*衡误差项:
我们需要选择离散化精度ε和有限类收敛精度ε₁,使总误差最小化。ε越小,离散化误差2κε越小,但覆盖集C越大,导致ε₁变大(因为log|C| ∝ p log(1/ε))。通过精心选择ε ∝ 1/(κ√n)等,最终可以推导出定理中O(√(p/n))形式的主项。
证明的直观理解
整个证明可以看作在权衡两种误差:
- 离散化误差:用有限点集*似无限空间带来的误差,约为
O(κε)。 - 有限类统计误差:在有限覆盖集
C上估计带来的误差,约为O(√(log|C|/n)),而log|C| ≈ p log(1/ε)。
由于统计误差中对 ε 的依赖是对数级的 log(1/ε),增长很慢,因此我们可以选择一个非常小的 ε 来几乎消除离散化误差,而不会让统计误差爆炸。这种对数依赖关系是证明能成功的关键。
总结与展望 🎯
本节课中我们一起学习了如何证明机器学习理论中的一致收敛性。
- 我们首先处理了有限假设类的情况,核心是结合霍夫丁不等式和并集界,得到了泛化误差界
O(√(log|H|/n))。这明确了假设类复杂度(log|H|)与所需样本量n的关系。 - 接着,我们通过暴力离散化的方法,将结果推广到无限假设类。我们引入了 ε-覆盖的概念,将无限参数空间*似为一个有限集合,然后利用损失函数的 Lipschitz 性质将有限集上的结论推广到整个空间,最终得到了依赖参数维度
p的界O(√(p/n))。

这种离散化方法虽然直接,但有时比较繁琐,并且其得到的复杂度度量(参数维度 p)可能不是最紧的。在接下来的课程中,我们将探讨更精巧、更本质的复杂度度量工具,例如 Rademacher 复杂度 和 VC 维,它们能为我们提供更深刻、更广泛适用的泛化理论分析框架。
机器学习理论 4:高级集中不等式 🎯


在本节课中,我们将学习高级集中不等式,这是分析机器学习算法泛化性能的重要数学工具。我们将从回顾均匀收敛的基础知识开始,然后深入探讨两种类型的集中不等式:独立随机变量和的集中性,以及满足特定条件的函数值的集中性。这些工具将为后续课程中分析拉德马赫复杂性和其他理论奠定基础。
回顾:均匀收敛与超额风险
上一节我们介绍了均匀收敛的基本概念。我们证明了超额风险(excess risk)可以被一个界限所控制。具体来说,经验风险与期望风险(即总体风险)之间的差异,可以分解为两项。
第一项可以通过样本量进行控制。而第二项,即所有假设上经验风险与期望风险的最大偏差,是我们需要重点分析的对象。我们之前讨论了如何处理有限假设类和无限假设类的情况。
本节中,我们将为分析这个第二项准备更强大的数学工具。
集中不等式的目标与概述
集中不等式的核心思想是:当处理大量独立同分布的随机变量时,它们的某些聚合统计量(如和或更一般的函数)会高度集中在期望值附*,其尾部概率衰减得比切比雪夫不等式所给出的界限更快。
具体来说,我们关注两类不等式:
- 独立随机变量和的集中性:证明独立随机变量的和
Z = Σ X_i以高概率接*其期望E[Z]。 - 一般函数的集中性:对于满足特定条件的函数
F(X1, ..., Xn),证明即使它不是简单的和,其值也高度集中在期望附*。
第二类不等式对于证明诸如 sup_{h∈H} (L(h) - L̂(h)) 接*其期望这样的关键界限至关重要,因为我们可以将 sup 操作视为数据的一个函数。
从切比雪夫不等式到更快的尾部衰减
切比雪夫不等式:基础但宽松的界限
如果我们忽略随机变量的具体结构,一个通用的集中性结果是切比雪夫不等式:
对于任意随机变量 Z,有:
P(|Z - E[Z]| ≥ t) ≤ Var(Z) / t²
这个不等式很直观:方差越小,偏离期望的概率越低;阈值 t 越大,超出阈值的概率越小。然而,这个界限给出的尾部概率衰减速度是 1/t²(多项式衰减),对于许多应用来说不够紧。
高斯分布的启示:指数*方衰减
对于一个方差为 σ² 的高斯随机变量 Z,我们有更强(更紧)的尾部界限:
P(|Z - E[Z]| ≥ t) ≤ 2 exp( -t² / (2σ²) )
这里的关键区别在于衰减速度是 exp(-t²),即指数*方衰减,这比多项式衰减快得多。这意味着,要达到相同的失败概率 δ,高斯分布所需的区间宽度 t 仅按 √log(1/δ) 增长,而切比雪夫不等式则需要按 1/√δ 增长,后者在 δ 很小时要大得多。
我们的目标就是为更广泛的随机变量(特别是独立随机变量的和)建立类似高斯的、具有指数*方衰减的集中性界限。
次高斯随机变量 🧮
为了形式化“类高斯”行为,我们引入次高斯随机变量的概念。
定义(矩母函数形式):一个均值为 μ = E[X] 的随机变量 X 被称为 σ-次高斯 的,如果对于所有 λ ∈ R,其矩母函数满足:
E[exp(λ(X - μ))] ≤ exp(λ²σ² / 2)
这里的 σ² 被称为方差代理。这个定义本身不太直观,但它引出一个非常重要的推论。
推论(尾部界限形式):如果 X 是 σ-次高斯的,那么对于任意 t > 0,有:
P(|X - μ| ≥ t) ≤ 2 exp( -t² / (2σ²) )
这个推论非常直观:次高斯随机变量拥有与高斯变量类似的指数*方尾部衰减。实际上,一个方差为 σ² 的高斯随机变量本身就是 σ-次高斯的。定义和推论在常数因子意义下是等价的。
为什么用矩母函数?
证明集中不等式时,我们常使用马尔可夫不等式:P(Y ≥ t) ≤ E[Y]/t。切比雪夫不等式对应取 Y = (Z - E[Z])²。为了获得更快的衰减,我们可以考虑 Y = exp(λ(Z - E[Z]))。矩母函数 E[exp(λ(Z - E[Z]))] 的泰勒展开包含了 (Z - E[Z]) 的所有阶矩信息。通过优化选择参数 λ,我们可以自动找到各阶矩的最佳权衡,从而得到最紧的指数型界限。
次高斯随机变量的性质与例子
次高斯性之所以强大,一个重要性质是它在独立和下的可加性。
定理(可加性):设 X1, ..., Xn 是独立的随机变量,且 Xi 是 σ_i-次高斯的。那么它们的和 Z = Σ X_i 是 √(Σ σ_i²)-次高斯的。
这意味着 Z 满足尾部界限:P(|Z - E[Z]| ≥ t) ≤ 2 exp( -t² / (2 Σ σ_i²) )。
证明:利用独立性、矩母函数的定义以及指数函数的可分解性:
E[exp(λ(Z - E[Z]))] = Π E[exp(λ(X_i - E[X_i]))] ≤ Π exp(λ²σ_i²/2) = exp(λ² (Σ σ_i²)/2)
简洁的两行证明体现了矩母函数方法的优雅。
以下是常见的次高斯随机变量例子:
- Rademacher 变量:以等概率取
+1或-1。它是 1-次高斯的。 - 有界随机变量:如果随机变量
X几乎必然满足a ≤ X ≤ b,那么它是(b-a)/2-次高斯的(方差代理为(b-a)²/4)。这是机器学习中非常常见的情况。 - 高斯变量:方差为
σ²的高斯变量是 σ-次高斯的。
注:存在一类更广泛的随机变量,称为次指数随机变量,其尾部衰减为 exp(-t) 而非 exp(-t²)。这用于处理像卡方分布这样尾部较重的变量。
一般函数的集中性:McDiarmid 不等式 🛡️
现在我们将集中性的讨论从“和”推广到更一般的函数。一个关键结果是 McDiarmid 不等式(又称有界差分不等式)。
定理(McDiarmid 不等式):设 X1, ..., Xn 是独立随机变量,函数 f: 𝒳ⁿ → R 满足有界差分条件:对于所有 i 和所有 x1, ..., xn, x_i‘,有
|f(x1,...,x_i,...,xn) - f(x1,...,x_i‘,...,xn)| ≤ c_i
即,改变任何一个输入坐标,函数值的变化最多为 c_i。
那么,对于任意 t > 0,有:
P( f(X1,...,Xn) - E[f(X1,...,Xn)] ≥ t ) ≤ exp( -2t² / Σ c_i² )
对于下偏差也有类似结论。
直观理解:这个条件意味着函数 f 对其任何一个输入都不特别敏感。这类似于求和函数 f = Σ X_i 的情况,此时 c_i 是 X_i 的变化范围。McDiarmid 不等式告诉我们,只要函数具有这种“全局 Lipschitz”性质(每个坐标变化的影响有限),其输出就会像次高斯变量一样高度集中。
更一般的集中不等式与高斯情形
McDiarmid 要求每个坐标的绝对变化有界。对于无界分布(如高斯),我们有其他工具。
Efron-Stein 不等式:对于任意函数 f,有
Var(f(X)) ≤ Σ E[ (f(X) - E[f(X)|X_{-i}])² ]
这给出了方差的上界,与控制梯度期望的 Lipschitz 性质有关。要得到尾部界限,需结合切比雪夫不等式。
高斯分布的 Lipschitz 集中性:这是最理想的情形之一。
假设函数 f: Rⁿ → R 是 L-Lipschitz 的(关于欧几里得距离):|f(x) - f(y)| ≤ L ||x - y||。
若 X = (X1, ..., Xn) 是独立的标准高斯向量,则:
P( f(X) - E[f(X)] ≥ t ) ≤ exp( -t² / (2L²) )
即,f(X) 是 L-次高斯的。这里要求的是全局 Lipschitz 条件,比*均意义上的控制更强,但能直接得到指数尾部界。
McDiarmid 不等式证明思路 🔍
证明的核心思想是将复杂的函数 f 的偏差,分解为一列“鞅差”序列的和,从而化归为类似独立和的情况。
-
构造鞅差序列:
- 定义
Z0 = E[f(X)](常数)。 - 定义
Z_i = E[ f(X) | X1, ..., X_i ],即在已知前i个变量条件下的期望。 - 则
Z_n = f(X)。我们有 telescoping sum:
f(X) - E[f(X)] = (Z_n - Z_{n-1}) + (Z_{n-1} - Z_{n-2}) + ... + (Z_1 - Z_0)
记D_i = Z_i - Z_{i-1}。
- 定义
-
分析鞅差性质:
- 可以证明,在给定
X1, ..., X_{i-1}的条件下,D_i是一个有界的随机变量,其界与c_i相关。这是因为Z_i和Z_{i-1}只差在第i个变量的条件期望上,而有界差分条件保证了这种变化是有限的。
- 可以证明,在给定
-
应用次高斯性:
- 由于条件有界,
D_i在给定历史条件下是次高斯的。 - 利用矩母函数和迭代期望定律,可以推导出
f(X) - E[f(X)]的矩母函数有上界exp(λ² Σ c_i² / 8)。 - 由此即得 McDiarmid 不等式的指数尾部界。
- 由于条件有界,
这个证明展示了如何通过条件期望和鞅的技术,将函数集中性问题转化为我们熟悉的独立和问题。
总结 📚
本节课我们一起学习了高级集中不等式,这是统计学习理论中的核心分析工具。
- 我们从切比雪夫不等式出发,认识到其多项式衰减尾部的局限性,并追求类似高斯的指数*方衰减。
- 我们引入了次高斯随机变量的精确定义,它通过矩母函数或尾部界限来刻画这种快速衰减。我们看到了次高斯性在独立和下的可加性,以及有界变量、Rademacher 变量和高斯变量都是次高斯的例子。
- 我们将集中性推广到一般函数,学习了 McDiarmid 不等式。它要求函数满足有界差分条件,即改变任一输入对输出的影响有限。满足此条件的函数值会高度集中在其期望附*。
- 我们还简要了解了更一般的情形,如 Efron-Stein 不等式(控制方差)和针对高斯变量的 Lipschitz 函数集中性,后者在假设更强时能得到非常简洁漂亮的尾部界限。

这些不等式为我们后续分析机器学习算法的泛化误差、拉德马赫复杂性等提供了必不可少的概率论基础。掌握这些工具,有助于我们更深入地理解学习算法的统计行为。
机器学习理论 5:Rademacher复杂度与经验Rademacher复杂度 📚


在本节课中,我们将学习一种衡量假设类复杂度的新工具——Rademacher复杂度。我们将了解它的定义、直观含义,以及它如何用于推导比基于参数数量更精确的泛化误差上界。
概述
上一节我们介绍了集中不等式,为今天的内容做了准备。本节我们将回到一致收敛的主题。回顾我们的目标:证明对于假设类中的所有假设,其经验风险与真实风险(期望风险)的差异都很小。我们之前已经证明了一些结果,例如对于有限假设类,泛化误差上界约为 sqrt(log|H|/n);对于有 p 个参数的参数化假设类,上界约为 sqrt(p/n)。
然而,这些基于参数数量 p 的界存在局限性:它要求样本量 n 远大于 p,这在现代机器学习(如深度神经网络,参数可能多达数百万甚至数十亿)中往往不成立。此外,这个界过于“悲观”,因为它衡量的是所有具有 p 个参数的模型中最坏情况的复杂度,而无法区分其中结构更简单的模型(例如稀疏参数与稠密参数)。
因此,我们的目标是寻找更精确的复杂度度量,它可能依赖于数据分布,并能捕捉学习问题内在的难度。这种复杂度度量可以启发我们设计更好的正则化项。
Rademacher复杂度的定义
我们首先引入核心概念——Rademacher复杂度。
定义:设 F 是一个将输入空间 Z 映射到实数的函数族。设 P 是 Z 上的一个分布。则 F 的(*均)Rademacher复杂度定义为:
R_n(F) = E_{Z_1,...,Z_n ~ P} [ E_{σ_1,...,σ_n} [ sup_{f ∈ F} (1/n) * Σ_{i=1}^n σ_i * f(Z_i) ] ]
其中:
Z_1, ..., Z_n是从分布P中独立同分布抽取的样本。σ_1, ..., σ_n是独立的Rademacher随机变量,即等概率地取+1或-1。sup表示上确界(可以理解为最大值)。
直观理解:
式子内部是函数 f 在样本点上的输出 f(Z_i) 与随机噪声 σ_i 的相关性。如果对于几乎任何随机噪声模式,你都能在函数族 F 中找到一个函数 f,使其输出与该噪声模式高度相关,那么 F 的Rademacher复杂度就很高。这本质上衡量了函数族 F 的输出多样性或拟合随机噪声的能力。复杂度越高,表示函数族越复杂、越容易过拟合。
Rademacher复杂度与泛化误差
为什么我们要关心Rademacher复杂度?因为它直接给出了期望意义下一致收敛的上界。
定理(对称化技术):对于有界函数族 F,有:
E[ sup_{f ∈ F} ( (1/n)Σ f(Z_i) - E[f(Z)] ) ] ≤ 2 * R_n(F)
与我们目标的联系:
在机器学习中,我们关心的函数族 F 通常是损失函数族。具体地,对于假设类 H 和损失函数 l,我们定义:
F = { z=(x,y) → l(h(x), y) : h ∈ H }
那么,定理的左端就变成了我们关心的期望泛化误差:
E[ sup_{h ∈ H} ( L̂(h) - L(h) ) ]
其中 L̂(h) 是经验风险,L(h) 是真实风险。
因此,该定理表明,泛化误差可以被Rademacher复杂度所控制。
特例:二分类与0-1损失
为了获得更直观的理解,我们考虑一个特例:二分类问题(y ∈ {+1, -1}),使用0-1损失 l(h(x), y) = 1{ h(x) ≠ y }。假设假设 h 的输出也是 {+1, -1}。
我们可以将0-1损失重写为:
l(h(x), y) = (1/2) * (1 - y * h(x))
将这个形式代入Rademacher复杂度的定义并进行推导(利用Rademacher变量的对称性),可以得到:
R_n(F) = (1/2) * R_n(H)
其中 R_n(H) 是假设类 H 本身的Rademacher复杂度(将 h(x) 视为输出)。
在这个特例下,R_n(H) 有一个非常清晰的解释:它衡量了假设类 H 记忆随机标签的能力。如果对于任何随机分配的标签 σ_1,...,σ_n,都存在一个假设 h ∈ H 使得 h(x_i) ≈ σ_i,那么 R_n(H) 就很大,意味着泛化能力可能较差。
注意:这种简洁的等价关系 (
R_n(F) = 1/2 * R_n(H)) 仅在二分类0-1损失这一特例下严格成立。对于其他损失函数(如逻辑损失),两者的关系会更复杂,但直观上“衡量拟合随机噪声能力”的核心思想仍然是相似的。
定理证明思路(对称化技术)
上述定理的证明采用了概率论中经典的对称化技术。其主要步骤如下:
- 引入“幽灵”样本:除了原始样本
Z_1,...,Z_n,再独立抽取一组“幽灵”样本Z_1',...,Z_n'。由于期望相同,有E[f] = E[ (1/n)Σ f(Z_i') ]。 - 构造对称差:将目标表达式中的
E[f]替换为对幽灵样本的期望,并利用sup(·) ≤ E[sup(·)]的性质,将期望移到外部。 - 利用分布对称性:观察到
f(Z_i) - f(Z_i')的分布与σ_i (f(Z_i) - f(Z_i'))相同(其中σ_i是Rademacher变量)。因此可以引入σ_i而不改变期望值。 - 分离与合并:将包含
σ_i的项拆分为两部分,并利用三角不等式和分布对称性,最终证明其上界为2 * R_n(F)。
这个证明的关键在于,它将一个关于“经验*均减期望”的不对称表达式,转化为了一个关于“两个独立样本集函数值差”的对称表达式,进而通过引入Rademacher随机变量,将其与 R_n(F) 的定义联系起来。
Rademacher复杂度的性质
1. 对分布的依赖性
从定义可以看出,R_n(F) 依赖于样本的分布 P。这是一个优点,因为它意味着该复杂度度量能够捕捉数据分布本身的特性。
例子:考虑一个极端分布 P,它全部质量集中在单个点 z0 上。即使函数族 F 非常庞大(只要求 |f(z0)| ≤ 1),其Rademacher复杂度也很小(约为 1/√n)。这说明,在简单的数据分布上,即使模型族很复杂,也容易泛化。
2. *移不变性
Rademacher复杂度具有*移不变性。即,对于任意常数 c,定义新的函数族 F' = { f + c : f ∈ F },则有 R_n(F') = R_n(F)。
这意味着Rademacher复杂度关注的是函数族中函数之间的相对变化,而不是它们的绝对数值大小。
经验Rademacher复杂度
*均Rademacher复杂度 R_n(F) 涉及对样本 Z_1:n 的期望,这在实践中无法直接计算。因此我们引入其经验版本。
定义(经验Rademacher复杂度):给定一个具体的数据集 S = {z_1, ..., z_n},F 关于 S 的经验Rademacher复杂度定义为:
R̂_S(F) = E_{σ}[ sup_{f ∈ F} (1/n) * Σ_{i=1}^n σ_i * f(z_i) ]
注意这里 S 是固定的,期望只针对Rademacher变量 σ。
显然,*均Rademacher复杂度是经验Rademacher复杂度的期望:R_n(F) = E_S[ R̂_S(F) ]。
关键定理:我们可以证明,经验Rademacher复杂度集中在*均Rademacher复杂度附*。更具体地,对于有界函数族,以高概率(≥ 1-δ)有:
sup_{f ∈ F} ( (1/n)Σ f(Z_i) - E[f] ) ≤ 2 * R̂_S(F) + O( √( log(1/δ) / n ) )
并且也有 R̂_S(F) ≤ R_n(F) + O( √( log(1/δ) / n ) )。
这个定理的意义在于:
- 高概率保证:它将之前“期望意义下”的界,升级为“高概率成立”的界。
- 可计算性:虽然
R_n(F)涉及未知分布,但R̂_S(F)可以在给定的训练集S上(通过蒙特卡洛模拟σ)进行*似估计。 - 代价小:为了获得高概率保证,我们只需支付一个较小的附加项
O(√(log(1/δ)/n)),这个项通常比复杂度本身的主项R_n(F)(通常是O(1/√n)量级)要小。
总结
本节课我们一起学习了:
- Rademacher复杂度的定义与直观:它衡量一个函数族拟合随机噪声的能力,是函数族复杂度的度量。
- Rademacher复杂度的核心定理:期望意义下的泛化误差上界由
2 * R_n(F)控制。 - 对称化证明技术:通过引入幽灵样本和Rademacher变量,将非对称的泛化误差表达式转化为对称形式,从而完成定理证明。
- Rademacher复杂度的性质:它依赖于数据分布,并具有*移不变性。
- 经验Rademacher复杂度:其经验版本
R̂_S(F)是可计算的,并且以高概率接**均版本,从而让我们能得到高概率的泛化界。

Rademacher复杂度为我们提供了一个比参数数量更精细的复杂度度量工具。在接下来的课程中,我们将看到如何为具体的假设类(如线性模型)计算或界定其Rademacher复杂度,从而得到更实用的泛化理论保证。
机器学习理论 6:线性模型的间隔理论与Rademacher复杂度 🧠


在本节课中,我们将学习如何为具体的机器学习模型(特别是线性模型)界定Rademacher复杂度。我们将引入“间隔”的概念,并展示如何利用它来处理分类任务中不连续的0-1损失函数。最终,我们将得到一个泛化误差的界,该界同时依赖于模型的复杂度(通过Rademacher复杂度衡量)和分类器在训练数据上的“置信度”(通过间隔衡量)。
分类问题设定与回顾 📝
我们处理二分类问题。标签 y 属于集合 {-1, +1}。分类器 h 是一个将输入空间 X 映射到实数 R 的函数。最终的预测是 h(x) 的符号:sign(h(x))。
损失函数是0-1损失:
L_{0-1}(x, y, h) = 1{ y ≠ sign(h(x)) }
我们的目标是界定泛化误差。根据之前的课程,我们知道泛化误差(或超额风险)可以被Rademacher复杂度所界定。因此,接下来的核心任务是为具体的模型(如线性模型)界定其Rademacher复杂度。
然而,0-1损失函数是不连续的,这给分析带来了困难。为了解决这个问题,我们将引入一个替代的、更易于分析的损失函数。
间隔理论与替代损失函数 🛡️
首先,我们假设分类器在训练数据上实现了完美分类,即训练误差为0。在这个假设下,我们可以定义“间隔”。
对于一个数据点 (x, y) 和分类器 h,其(未标准化的)间隔定义为:
margin(x, y, h) = y * h(x)
由于训练误差为0,我们有 y * h(x) > 0。间隔越大,表明分类器对该数据点的分类“置信度”越高。
对于一个数据集,我们定义分类器在该数据集上的间隔为所有数据点中间隔的最小值:
γ = min_i [ y_i * h(x_i) ]
直观上,一个在所有训练样本上都有较大间隔的分类器,可能具有更好的泛化能力。
为了在理论分析中利用间隔信息,我们引入“斜坡损失”作为0-1损失的替代。它是一个依赖于参数 γ(目标间隔)的Lipschitz连续函数:
L_γ(t) =
1, if t ≤ 0
1 - t/γ, if 0 < t < γ
0, if t ≥ γ
其中,t = y * h(x)。这个函数是0-1损失的一个凸上界,且是Lipschitz连续的,其Lipschitz常数为 1/γ。
利用Rademacher复杂度进行界定 🔗
我们的目标是界定测试集上的0-1损失。利用斜坡损失作为上界,我们有:
L_{0-1}(h) ≤ L_γ(h)
接下来,我们可以利用之前学过的Rademacher复杂度泛化界来界定 L_γ(h)。根据定理,以高概率有:
L_γ(h) ≤ L̂_γ(h) + 2 * R̂_S(F) + 3 * √(log(2/δ) / 2n)
其中,F 是由斜坡损失函数与假设空间 H 复合而成的函数族:F = { (x,y) → L_γ(y * h(x)) | h ∈ H }。
现在,关键的一步是界定 R̂_S(F)。这里我们使用一个重要的引理——Talagrand收缩引理。
Talagrand收缩引理:设 φ: R → R 是一个Lipschitz连续函数,常数为 κ。那么,对于任何假设类 H,其复合函数类 φ ◦ H 的Rademacher复杂度满足:
R̂_S(φ ◦ H) ≤ κ * R̂_S(H)
我们将此引理应用于我们的场景。取 φ 为斜坡损失函数 L_γ,其Lipschitz常数为 κ = 1/γ。同时,我们定义 H' = { (x,y) → y * h(x) | h ∈ H }。那么 F = φ ◦ H'。根据引理:
R̂_S(F) ≤ (1/γ) * R̂_S(H')
进一步,可以证明 R̂_S(H') = R̂_S(H)(因为随机变量 σ_i 和 y_i * σ_i 同分布)。因此,我们得到:
R̂_S(F) ≤ (1/γ) * R̂_S(H)
这个结果非常有力:它将损失函数族的复杂度,简化回了原始假设空间 H 的复杂度,并引入了一个与间隔 γ 成反比的因子。
最终的泛化误差界 🎯
现在,我们将所有部分组合起来。假设我们的分类器在训练集上实现了完美分类,且最小间隔为 γ。那么,其经验斜坡损失 L̂_γ(h) = 0。
将上述不等式链组合起来,我们得到以高概率成立的泛化界:
L_{0-1}(h) ≤ O( R̂_S(H) / γ + √(log(1/δ)/n) )
这个界具有清晰的解释:
- R̂_S(H):衡量假设空间 H 的复杂度。复杂度越高,泛化误差上界越大。
- γ:训练集上的最小间隔。间隔越大,表明分类器对训练数据的分类越“自信”,泛化误差上界越小。
- 该界是尺度不变的。如果对 h 乘以一个常数,R̂_S(H) 和 γ 会同比变化,其比值保持不变,防止了通过简单缩放参数来“欺骗”理论界的可能。
技术细节说明:在上述推导中,我们选择的 γ 依赖于数据(即最小经验间隔),这会导致函数类 F 也依赖于数据,与均匀收敛理论的要求略有冲突。严谨的处理需要对一个 γ 的区间进行离散化并应用一致界,这通常会引入一个 log(γ_max) 的附加项,但核心结论 O(R̂_S(H)/γ) 保持不变。
线性模型的Rademacher复杂度界定 📏
上一节我们得到了一个依赖于 R̂_S(H) 和间隔 γ 的泛化界。本节中,我们来看看如何为具体的线性模型界定 R̂_S(H)。
我们考虑线性假设空间:H = { x → w^T x | ||w||_2 ≤ B }。
同时,假设数据点的范数有界:对于所有 x,有 E[ ||x||_2^2 ] ≤ C^2。
在这些条件下,我们有如下定理:经验Rademacher复杂度满足
R̂_S(H) ≤ (B / n) * √( Σ_i ||x_i||_2^2 )
其期望(*均Rademacher复杂度)满足
R_S(H) ≤ (B * C) / √n
证明概要:
我们从定义出发:
R̂_S(H) = E_σ [ sup_{||w||_2≤B} (1/n) Σ_i σ_i w^T x_i ]
- 利用线性性质,内层上界可以转化为:
sup_{||w||_2≤B} w^T ( (1/n) Σ_i σ_i x_i ) - 根据柯西-施瓦茨不等式,这个上界等于 B * || (1/n) Σ_i σ_i x_i ||_2。
- 现在我们需要处理这个随机向量的范数。再次利用期望的柯西-施瓦茨不等式和 σ_i 的独立性(当 i≠j 时,E[σ_i σ_j] = 0),我们可以得到:
E_σ || Σ_i σ_i x_i ||_2 ≤ √( E_σ || Σ_i σ_i x_i ||_2^2 ) = √( Σ_i ||x_i||_2^2 ) - 代入即得经验复杂度的界。对其再取关于数据分布 S 的期望,并利用假设 E[||x||_2^2] ≤ C^2,即可得到*均复杂度的界 B*C/√n。
这个结果表明,线性模型的Rademacher复杂度随着参数范数 B、数据范数 C 的增大而增大,并随着样本量 n 的增大而以 1/√n 的速率衰减。
不同范数约束下的复杂度比较 ⚖️
上一节我们考虑了 L2 范数约束下的线性模型。本节中,我们来看看在 L1 范数约束下,会得到怎样的Rademacher复杂度界。
考虑假设空间:H = { x → w^T x | ||w||_1 ≤ B }。
同时,假设数据点的各维度有界:对于所有 x,有 ||x||_∞ ≤ C,且 x ∈ R^d。
在这些条件下,我们有另一个定理:经验Rademacher复杂度满足
R̂_S(H) ≤ B * C * √( (2 log(2d)) / n )
证明思路:
- 同样从定义出发,并利用线性性质,将上界转化为 B * || (1/n) Σ_i σ_i x_i ||_∞。
- 关键的一步是注意到,在 L1 范数球上最大化线性函数,最优解总是在球的顶点(即标准基向量或其相反数)处取得。这意味着,我们可以将原始假设空间 H 的复杂度,约化为一个有限的假设空间 H' 的复杂度,其中 H' 只包含 2d 个函数,对应于 w 是 ±e_j(第j个标准基向量)的情况。
- 对于这个有限的假设空间 H',我们可以应用之前提到的有限假设类Rademacher复杂度界:R̂_S(H') ≤ √( (2 M^2 log |H'|) / n ),其中 M 是函数输出的上界。在这里,|H'| = 2d,且对于任何 h' ∈ H',有 |h'(x)| = |e_j^T x| ≤ ||x||_∞ ≤ C,因此可取 M = C。
- 代入计算,并乘以从 H 到 H' 约化时产生的因子 B,即可得到最终界。
比较与启示:
- L2界:R_S(H) ~ B * C / √n,与维度 d 无关。
- L1界:R_S(H) ~ B * C * √(log d / n),与维度 d 有弱的对数依赖关系。
这两个界各有适用场景:
- 当真实的参数向量 w 是稠密的(大部分分量非零)时,其 L2 范数可能相对较小,使用 L2 界可能更紧。
- 当真实的参数向量 w 是稀疏的(只有少数分量非零)时,其 L1 范数可能远小于 √d * ||w||_2,此时使用 L1 界可能得到更优的泛化保证,尽管它有一个 √(log d) 的因子。
这展示了Rademacher复杂度理论的一个优势:它可以自然地结合模型的不同结构假设(如不同的范数约束),给出更精细、更符合直觉的泛化分析。
总结 📚
本节课中我们一起学习了:
- 间隔理论:为了处理分类问题的0-1损失,我们引入了间隔的概念和斜坡损失函数。间隔衡量了分类器对训练样本分类的置信度。
- 泛化误差界:通过Talagrand收缩引理,我们得到了一个形式优美的泛化误差上界:L_{0-1}(h) ≤ O( R̂_S(H) / γ )。它揭示了泛化性能取决于模型复杂度(R̂_S(H))和训练置信度(γ)的权衡。
- 线性模型的Rademacher复杂度:我们具体计算了在线性模型下,分别在 L2 和 L1 参数范数约束下的Rademacher复杂度上界。L2 界为 O(B*C/√n),与维度无关;L1 界为 O(BC√(log d / n)),适用于稀疏参数场景。

这些工具为我们分析更复杂的模型(如神经网络)的泛化能力奠定了坚实的基础。在接下来的课程中,我们将把目光投向非线性模型。
机器学习理论 7:深度学习理论挑战与神经网络泛化界


概述 📚
在本节课中,我们将要学习深度学习理论中的核心挑战,并探讨如何为神经网络建立泛化界。我们将从经典机器学习理论的框架出发,分析其在深度学习背景下遇到的困难,并介绍当前理论研究的应对思路。
经典机器学习理论框架回顾 🔄
上一节我们介绍了机器学习理论的基础概念,本节中我们来看看经典理论通常如何分解问题。经典机器学习理论主要关注三个相互关联但又相对独立的方面。
以下是经典理论关注的三个核心方面:
- *似理论:也称为表达能力或表示能力。它关心的是假设类 H 能否充分*似真实的数据生成函数。其核心问题是:在拥有无限数据(即总体数据)的理想情况下,假设类中的最佳模型 h* 的表现如何?用公式表示,即评估 L(h*) 是否足够小。
- 泛化理论:也称为统计方面。它关心的是从有限数据中学到的模型 ĥ 与假设类中的最佳模型 h* 之间的差距。这通常通过泛化误差来度量:L(ĥ) - L(h*)。经典结论是,假设类越简单(复杂度低),泛化误差越小(通常以 O(1/√n) 的速率下降),这体现了奥卡姆剃刀原则。
- 优化理论:这是一个独立的计算问题,关注如何通过数值算法(如梯度下降)有效地最小化经验损失函数,找到参数 θ̂,使得 L̂(θ̂) 接* min L̂(θ)。
在经典视角下,*似理论和泛化理论之间存在权衡:更复杂的模型(高表达能力)可能降低*似误差,但会增加泛化误差(过拟合风险)。优化则被视为一个独立的后端计算任务。
深度学习带来的挑战与变化 ⚡
上一节我们回顾了经典框架,本节中我们来看看深度学习实践如何颠覆了这些经典认知。深度学习带来了两个根本性的变化。
以下是深度学习实践中观察到的两个关键现象:
- 使用高度过参数化的模型:在实践中,使用参数数量远大于样本数量的模型(d >> n)通常效果更好。即使模型已经完美拟合训练数据(训练误差为0),继续增加参数往往还能进一步提升测试性能。这与经典理论预测的“过拟合导致测试误差上升”相悖。
- 仅使用弱正则化:实践中通常只使用轻微的L2正则化,甚至不用。这意味着损失函数存在大量不同的全局(或*似全局)最优解,它们都能达到接*零的训练误差。
这些现象导致了一个核心困境:并非所有全局最优解都能同等泛化。不同的优化算法(如使用不同学习率)可能收敛到不同的全局最优解,而这些解在测试集上的表现差异巨大。
因此,经典的理论框架需要修正。优化算法不再仅仅是寻找“任何一个”损失函数的极小值,它还必须具备“隐式正则化”效应,即偏好于那些虽然训练误差低、但同时具有某种“低复杂度”特性的解,从而保证良好的泛化能力。
现代深度学习理论的研究范式 🧩
上一节我们看到了深度学习带来的核心挑战,本节中我们来看看当前理论界应对这些挑战的主流研究范式。新的研究范式将优化、隐式正则化和泛化三个任务紧密耦合。
以下是现代理论分析通常遵循的三步框架:
- 任务一:优化收敛性:证明所使用的优化算法(如SGD)能够收敛到经验损失的一个(*似)全局最优解。即找到 θ̂ 使得 L̂(θ̂) ≈ min L̂(θ)。
- 任务二:隐式正则化效应:证明上述优化算法找到的解 θ̂ 自动具有某种低复杂度性质。例如,其权重范数 R(θ̂) 较小。这个性质 R 依赖于具体的算法细节(如学习率、批量大小)。
- 任务三:基于复杂度的泛化界:证明对于任何同时满足低经验损失和低复杂度 R(θ) 的参数 θ,其泛化误差 L(θ) - L̂(θ) 都是有界的。这步可以借助改进的经典泛化理论工具(如Rademacher复杂度)来完成。
这个范式的关键在于,泛化能力不再仅仅由假设类决定,而是由“优化算法+假设类”共同决定。优化算法通过其隐式偏好,从庞大的假设类中挑选出了一个泛化能力好的子集。
神经网络泛化界初探:一个基础结果 📏
上一节我们介绍了新的理论分析框架,本节中我们来看一个具体的例子:为两层神经网络推导一个基于Rademacher复杂度的泛化界。这是一个基础结果,虽然不能解释过参数化的优势,但能展示基本的分析技巧。
考虑一个两层神经网络:
f_θ(x) = w^T φ(Ux)
其中 θ = (w, U),U 是 m × d 的矩阵(m 为隐藏单元数),φ 是ReLU激活函数(逐元素应用)。我们限制参数范围:||w||₂ ≤ B_w,且 U 的每一行 u_i 满足 ||u_i||₂ ≤ B_u。假设输入数据满足 E[||x||²] ≤ C²。
定理:在上述设定下,假设类 H 的Rademacher复杂度满足:
R_n(H) ≤ 2 B_w B_u C √(m / n)
证明思路(简述):
- 根据Rademacher复杂度的定义,写出包含上确界 sup 的表达式。
- 首先利用 w 的范数约束,通过柯西-施瓦茨不等式移除对 w 的上确界,将其转化为一个范数项。
- 将得到的向量的L2范数放宽为其无穷范数乘以 √m。
- 此时,对 U 的上确界可以转化为对单个向量 u 的上确界,并且由于ReLU是1-Lipschitz函数,可以应用收缩引理。
- 最终问题转化为线性函数类的Rademacher复杂度,利用已知结果可得最终上界。
注:这个上界随隐藏单元数 m 的增加而增大,这与我们观察到的“模型越大性能可能越好”的现象不符。因此,这是一个比较宽松的界,需要更精细的复杂度度量才能解释深度学习实践。
总结与展望 🎯
本节课中我们一起学习了深度学习理论的核心挑战和当前的研究思路。
我们首先回顾了经典机器学习理论中*似、泛化和优化三足鼎立的分析框架。然后,我们深入探讨了深度学习实践(过参数化、弱正则化)对该框架提出的根本性质疑,特别是优化算法对最终泛化性能的关键性影响。
接着,我们介绍了现代理论将优化算法的隐式正则化效应纳入泛化分析的新范式。最后,我们通过为一个两层神经网络推导Rademacher复杂度上界,展示了理论分析的基本工具,同时也指出了该初步结果的局限性。

在接下来的课程中,我们将深入探讨更精细的泛化界、神经正切核理论以及各种优化算法的隐式正则化效应,以期逐步揭开深度学习卓越性能背后的理论奥秘。
机器学习理论 8:神经网络泛化界的改进与核方法 🔍


在本节课中,我们将要学习如何为神经网络推导出更精细的泛化误差上界。我们将回顾之前较弱的泛化界,然后介绍一个更强、更精细的版本。这个新上界能够更好地处理网络中的缩放不变性,并且其复杂度度量与经验中观察到的“路径范数”相关。最后,我们将探讨这个新理论如何与核方法以及多层网络的分析联系起来。
回顾:两层神经网络的泛化界
上一节我们介绍了两层神经网络的一个泛化误差上界。其模型定义为:
f_θ(x) = w^T φ(Ux)
其中,φ 是逐元素的 ReLU 激活函数,w ∈ ℝ^M 是第二层权重,U ∈ ℝ^{M×d} 是第一层权重矩阵。
我们之前得到的 Rademacher 复杂度上界形式为:
R(H) ≤ 2 * B_w * B_u * C * √(M/n)
其中,假设类 H 定义为 ||w||₂ ≤ B_w 且 max_i ||u_i||₂ ≤ B_u。
这个上界存在一个缩放不变性问题:模型 (w, U) 与 (αw, U/α) 是等价的,但上界中的复杂度度量 B_w * B_u 并不具备这种不变性。此外,上界显式地依赖于神经元数量 M 的*方根,这可能不是最优的。
改进的泛化界:精细复杂度度量
本节中,我们来看看一个更强、更精细的泛化界。这个上界的关键在于引入一个新的复杂度度量,它能更好地捕捉网络的缩放不变性。
定理(精细泛化界):
定义复杂度度量 C(θ) = Σ_{j=1}^{M} |w_j| * ||u_j||₂。
给定一个界限 B,定义假设类 H_B = { f_θ : C(θ) ≤ B }。
同时,我们假设每个数据点满足 ||x_i||₂ ≤ C。
那么,经验 Rademacher 复杂度满足:
R̂(H_B) ≤ 2 * B * C / √n
几点说明:
- 为何更好:新上界
O(B/√n)严格优于旧上界O(√M * B_w * B_u / √n)。通过柯西-施瓦茨不等式可以证明:C(θ) ≤ ||w||₂ * √( Σ_j ||u_j||₂² ) ≤ ||w||₂ * √M * max_j ||u_j||₂。 - 缩放不变性:新的复杂度度量
C(θ)对更一般的缩放变换具有不变性。对于任意正数α_j,变换(w_j, u_j) → (α_j w_j, u_j/α_j)不改变模型输出,也不改变C(θ)的值。而旧的度量不具备此性质。 - 与路径范数的关联:
C(θ)类似于“路径范数”的概念,它计算了从输入到输出的所有路径的权重范数之和,并被经验发现与泛化性能相关。 - 关于 M 的依赖性:新上界不显式依赖于神经元数量
M。这意味着即使M → ∞,只要C(θ)有界,上界依然有效。实际上,可以证明最优的边际γ*_M是随着M增加而非递减的,因此对应的泛化上界~ 1/(γ*_M √n)可能随着M增大而改善(至少不会变差)。
证明思路:重新调整缩放
上一节我们通过顺序剥离 w 和 U 的界来推导 Rademacher 复杂度。本节中,我们采用类似的策略,但首先对参数进行重新缩放,以匹配我们想要的复杂度度量。
证明的核心步骤如下:
- 定义归一化的第一层权重:
ū_j = u_j / ||u_j||₂。 - 将模型重写为:
f_θ(x_i) = Σ_j (|w_j| * ||u_j||₂) * sign(w_j) * φ(ū_j^T x_i)。 - 此时,
|w_j| * ||u_j||₂这个组合正好出现在复杂度度量C(θ)中。利用C(θ) ≤ B的约束,我们可以应用霍尔德不等式(|Σ a_j b_j| ≤ (Σ |a_j|) * max |b_j|)将w的影响分离出来。 - 分离后,问题简化为对一个由归一化向量
ū(满足||ū||₂=1)构成的函数类求 Rademacher 复杂度。这与我们之前处理线性模型或带界权重的单层网络的过程类似。 - 利用 Lipschitz 性质去掉
φ,然后计算线性函数类的 Rademacher 复杂度,最终得到上界2BC/√n。
这个证明的关键在于,通过将缩放因子 ||u_j||₂ 吸收到 w_j 的系数中,我们得以在第一步就以“不变”的形式处理权重。
理论启示:最大边际与正则化
基于这个新的泛化理论,一个自然的想法是寻找具有最大边际的模型,同时控制其复杂度 C(θ)。这可以通过以下优化问题实现:
最小化 C(θ)
约束条件:对所有 i, y_i f_θ(x_i) ≥ 1
或者等价地:
最大化 γ
约束条件:对所有 i, y_i f_θ(x_i) ≥ γ,且 C(θ) ≤ 1
与 L2 正则化的等价性:
有趣的是,虽然复杂度度量 C(θ) 不同于标准的 L2 范数 ||θ||₂² = Σ w_j² + Σ ||u_j||₂²,但在寻找最大边际解时,两者是等价的。可以证明,在最优解处,必然有 |w_j| = ||u_j||₂ 成立,此时 C(θ) = (1/2)||θ||₂²。因此,最小化 L2 范数以获得最大边际解,等价于最小化 C(θ)。
与交叉熵损失的关联:
一个更贴*实践的结论是:使用非常弱的 L2 正则化项,并最小化交叉熵损失,当正则化系数 λ → 0 时,其解会收敛到上述的最大边际解(在归一化 ||θ||/γ 的意义下)。这在一定程度上解释了为什么实践中使用权重衰减(L2正则化)的梯度下降法能够找到泛化性能良好的模型。
与核方法及 L1-SVM 的联系
如果我们考虑神经元数量 M 趋于无穷的情况,可以得到一个有趣的视角。
-
无限宽网络的视角:我们可以将模型视为在所有可能的单位方向
ū(位于球面S^{d-1}上)上进行了特征映射。模型输出可写为:
f(x) = ∫ w(ū) φ(ū^T x) dū
这可以看作是在一个无限维的特征空间{φ(ū^T x) : ū ∈ S^{d-1}}中的线性函数。 -
复杂度度量变为 L1 范数:在这个视角下,复杂度度量
C(θ)对应于系数函数w(ū)的 L1 范数(在某种测度下)。因此,寻找最大边际解等价于在这个无限维特征空间中求解一个 L1 正则化的支持向量机(L1-SVM)。 -
与经典核方法的区别:经典的核方法(如标准SVM)对应的是 L2 正则化,它可以通过核技巧高效实现,即使特征空间是无穷维的。然而,L1-SVM 通常无法通过核技巧实现,因为它不仅依赖于特征的内积(核函数),还依赖于具体的特征表示。这表明,两层神经网络实际上实现了一种比传统核方法更强大的学习机制(即 L1 正则化的无限维特征学习),尽管其优化过程在理论上是否总能达到全局最优仍是一个开放问题。
迈向多层网络:Rademacher 复杂度的函数空间视角
为了分析更深层的网络,我们需要更强大的工具。首先,让我们回归根本,重新审视 Rademacher 复杂度的定义。
给定一个函数类 F 和样本 S = {z_1, ..., z_n},其经验 Rademacher 复杂度为:
R̂(F) = E_σ [ sup_{f∈F} (1/n) Σ_{i=1}^n σ_i f(z_i) ]
我们可以定义一个输出集合 Q ⊆ ℝ^n:
Q = { (f(z_1), ..., f(z_n))^T : f ∈ F }
即,Q 是所有函数 f ∈ F 在给定样本点 S 上输出值构成的向量集合。
于是,Rademacher 复杂度可以重写为:
R̂(F) = (1/n) E_σ [ sup_{v ∈ Q} σ^T v ]
这个视角非常重要,因为它表明:
- Rademacher 复杂度只依赖于函数类在样本点上的输出集合
Q,而与函数的具体参数化方式无关。 - 这使我们能够摆脱对参数空间的直接分析,转而研究输出向量集合
Q的几何复杂性。
有限函数类的界:
如果 Q 是一个有限集合,并且其中每个向量 v 满足 ||v||₂ / √n ≤ M,那么我们可以得到如下上界(利用 Massart 引理):
R̂(F) ≤ 2M √( (2 log |Q|) / n )
下一步:处理无限函数类:
对于无限函数类(Q 无限),我们将采用 离散化(覆盖) 加 并界(union bound) 的策略。基本思想是,用一个有限的 ε-覆盖 Q_ε 来*似 Q,使得 Q 中的每个点都被 Q_ε 中的某个点以 ε 精度逼*。然后,对有限覆盖集应用 Massart 引理,并加上由*似误差带来的项。为了得到最紧的界,我们需要一种层次化的、自适应的离散化方法,这引出了著名的 Dudley 熵积分定理。我们将在下一讲中介绍这些工具,并用它们来推导多层神经网络的泛化界。
总结
本节课中我们一起学习了:
- 改进的泛化界:为两层神经网络引入了一个新的、更精细的复杂度度量
C(θ) = Σ |w_j| * ||u_j||₂,并证明了相应的泛化上界R̂ ≤ 2BC/√n。该上界具有更好的缩放不变性,且不显式依赖于神经元数量。 - 理论启示:该上界引导我们寻找最大边际解,并建立了与 L2 正则化、交叉熵损失优化的联系。
- 与核方法的联系:在无限宽极限下,两层网络的最大边际学习等价于在一个无限维特征空间中的 L1-SVM,这超越了传统核方法(L2-SVM)的能力范围。
- 新工具的铺垫:为了分析更复杂的多层网络,我们引入了 Rademacher 复杂度的函数空间(输出集合)视角,并指出了通过离散化输出集合
Q来推导上界的一般路径,为后续学习 Dudley 熵积分等高级工具做好了准备。

下一讲,我们将深入探讨这些离散化工具,并尝试将其应用于推导多层神经网络的泛化保证。
机器学习理论 9:覆盖数与达德利定理 📚


在本节课中,我们将学习如何利用覆盖数来界定无限假设类的拉德马赫复杂度。我们将从简单的离散化方法开始,逐步深入到更强大的技术——链式法,并最终介绍达德利定理。这个定理为我们提供了一种通过积分覆盖数来计算复杂度上界的优雅方法。
覆盖数与简单离散化方法
上一节我们讨论了如何利用Massart引理为有限函数类界定拉德马赫复杂度。本节中,我们来看看当函数类 F 无限时,该如何处理。核心思想是离散化,但这次我们是在函数的输出空间(而非参数空间)进行离散化。
我们首先回顾覆盖数的定义。对于一个函数类 F,其 ε-覆盖 是一个有限集合 C,使得对于 F 中的任意函数 f,在 C 中都存在一个函数 f',满足两者在给定度量下的距离小于 ε。这里我们使用的度量是经验 L2 范数:
ρ(f, f') = sqrt( (1/n) * Σ_{i=1}^{n} (f(z_i) - f'(z_i))^2 )
覆盖数 N(ε, F, L2(P_n)) 是构建这样一个覆盖所需的最小函数数量。
基于覆盖数,我们可以得到一个简单的复杂度上界定理:
定理(简单离散化):设 F 是从空间 Z 映射到 [-1, 1] 的函数族。对于任意 ε > 0,其经验拉德马赫复杂度满足:
R̂_n(F) ≤ ε + sqrt( (2 log N(ε, F, L2(P_n))) / n )
证明思路:
- 设
C是F的一个ε-覆盖。 - 对于任意
f ∈ F,存在f' ∈ C使得ρ(f, f') ≤ ε。 - 将
f在数据点上的输出向量分解为f'的输出向量加上一个误差向量z。 - 利用柯西-施瓦茨不等式,可以证明误差项
⟨z, σ⟩的期望不超过ε。 - 对于覆盖
C本身(一个有限集合),我们可以直接应用Massart引理来界定其复杂度。 - 结合误差项和覆盖集的复杂度,即得到上述上界。
这个定理直观地展示了复杂度由两部分组成:离散化误差 ε 和 覆盖集 C 本身的复杂度。通过*衡这两部分,我们可以得到总体的上界。
链式法与达德利定理 🧠
上一节介绍的简单离散化方法在误差分析上采用了最坏情况下的界(柯西-施瓦茨不等式),这可能不够紧致。本节我们将介绍一种更精细的技术——链式法,它能通过多级离散化来获得更优的界,并最终导出达德利定理。
链式法的核心思想是进行多级*似,而非单级*似。我们构造一系列越来越精细的覆盖(例如,半径分别为 ε, ε/2, ε/4, ...)。对于一个目标函数 f,我们不是直接用最粗覆盖中的某个点来*似它,而是用一系列逐级逼*的点来*似:
f ≈ f_1 + (f_2 - f_1) + (f_3 - f_2) + ...
其中,f_j 是 f 在第 j 级覆盖中的最*邻点。这样,每一级的差值 (f_j - f_{j-1}) 都具有更小的范数。
通过对每一级差值应用Massart引理(因为每一级都只涉及有限个点),并将所有级别的界求和,我们可以得到一个复杂度上界,它是关于覆盖数对数的*方根的一个级数和。
达德利定理将这个级数和表达为一个更简洁的积分形式:
定理(达德利定理):设 F 是从 Z 映射到 R 的函数族,且函数值有界。则其经验拉德马赫复杂度满足:
R̂_n(F) ≤ (12/√n) * ∫_0^∞ sqrt( log N(α, F, L2(P_n)) ) dα
直观理解:
积分中的被积函数 sqrt( log N(α, ...) ) 衡量了在尺度 α 下函数类的“有效大小”。积分从 0 到 ∞ 意味着我们考虑了所有尺度下的复杂度贡献。达德利定理表明,总复杂度是所有尺度上对数覆盖数*方根的加权和。
覆盖数上界的典型形式与应用
达德利定理提供了一个将覆盖数转化为复杂度上界的通用框架。为了实际应用它,我们需要知道覆盖数 N(ε, F, L2(P_n)) 随 ε 衰减的速度。以下是几种典型情况及其对应的复杂度界:
以下是几种常见的覆盖数增长模式及其对应的拉德马赫复杂度上界(忽略对数因子):
- 指数衰减(温和):
log N(ε) ~ (1/ε)^r。积分结果为O( √r / √n )。 - 指数*方衰减(常见):
log N(ε) ~ R / ε^2。积分结果为O( √R / √n )。 - 指数立方衰减(临界):
log N(ε) ~ R / ε^3。直接积分会发散。此时需要使用改进的达德利定理,它只对ε从某个小的α积分到无穷,并对小于α的部分支付一个α的代价。通过巧妙选择α(例如α = 1/poly(n)),仍然可以得到~ √R / √n的界(可能带有额外的对数因子)。
改进的达德利定理形式:
R̂_n(F) ≤ inf_{α>0} { 4α + (12/√n) ∫_α^∞ sqrt( log N(ε, F, L2(P_n)) ) dε }
这个形式是简单离散化定理和原始达德利定理的插值。
线性模型的覆盖数
现在我们将覆盖数理论应用于具体的模型。首先考虑线性模型。
定理(线性模型覆盖数):设数据点 x_1, ..., x_n ∈ R^d 满足 ||x_i||_p ≤ C。考虑假设类 F = { x -> ⟨w, x⟩ : ||w||_q ≤ B },其中 1/p + 1/q = 1。那么,其对数覆盖数满足:
log N(ε, F, L2(P_n)) ≤ (B^2 C^2 / ε^2) * log(2d + 1)
特别地,当 p = q = 2 时,可以改进为:
log N(ε, F, L2(P_n)) ≤ (B^2 C^2 / ε^2) * log 2
观察:这个上界具有 log N(ε) ~ R / ε^2 的形式,其中 R = B^2 C^2。根据达德利定理,对应的拉德马赫复杂度上界为 O( BC / √n )(忽略对数因子),这与我们之前用其他方法得到的界一致。
这个结果可以推广到多输出线性层(例如神经网络中的一层)。对于矩阵参数 W,如果约束其 (2,1)-范数(即各行 L2 范数之和),那么其覆盖数上界形式类似,只是 B 被替换为该范数。
利普希茨复合性质
最后,我们介绍一个在分析复杂模型(如深度网络)时非常有用的工具:覆盖数的利普希茨复合性质。
引理(利普希茨复合):设 φ: R -> R 是一个 L-利普希茨函数。设 F 是一个函数类。那么,复合函数类 φ ◦ F = {φ ◦ f : f ∈ F} 的覆盖数满足:
log N(ε, φ ◦ F, L2(P_n)) ≤ log N(ε/L, F, L2(P_n))
证明思路:
- 取
F的一个(ε/L)-覆盖C。 - 可以证明,
φ ◦ C构成了φ ◦ F的一个ε-覆盖。 - 这是因为对于任意
φ ◦ f,存在f' ∈ C使得ρ(f, f') ≤ ε/L。由于φ是L-利普希茨的,可以推导出ρ(φ ◦ f, φ ◦ f') ≤ ε。
这个引理非常强大且直观:利普希茨变换不会显著增加函数类的覆盖数。这使得我们可以逐层分析神经网络的复杂度,只要每层的激活函数是利普希茨连续的。
总结
本节课中我们一起学习了:
- 覆盖数的概念,以及如何用它通过简单离散化为无限函数类界定拉德马赫复杂度。
- 链式法的精妙思想,它通过多级离散化得到了更紧致的界。
- 达德利定理及其积分形式,它提供了一个统一框架,将覆盖数积分转化为复杂度上界。
- 覆盖数上界的几种典型模式(如
~1/ε^2),以及它们通过达德利定理导出的复杂度阶。 - 线性模型的覆盖数上界,验证了其复杂度为
O(1/√n)。 - 覆盖数的利普希茨复合性质,这是分析复合模型(如神经网络)的关键工具。

这些工具为我们接下来分析更复杂的模型(如深度神经网络)的理论性质奠定了坚实的基础。下一讲,我们将应用这些工具来研究深度网络的泛化能力。
机器学习理论 10:深度网络的泛化界 🧠


在本节课中,我们将要学习如何为深度神经网络推导泛化误差界。我们将利用覆盖数这一工具,并通过迭代覆盖的思想,将单层网络的覆盖数界扩展到多层深度网络。最终,我们将得到一个依赖于网络权重矩阵谱范数乘积的泛化界。
课程回顾与本节目标
上一节我们介绍了覆盖数的概念,它是拉德马赫复杂度的上界。我们的目标是通过覆盖数来界定复杂度,因为这是分析拉德马赫复杂度的新工具。我们讨论了线性模型的覆盖数界,并介绍了利普希茨函数的覆盖数组合引理,该引理使得组合利普希茨函数后的覆盖数界仍然可控。
本节中,我们将把目光转向深度神经网络。深度网络本质上是由多个线性层与利普希茨激活函数(如ReLU)组合而成。因此,我们可以利用上一节的工具来分析其覆盖数与泛化界。
深度网络设定与主要定理
我们考虑一个深度神经网络 $ H_\theta $,其中 \(\theta\) 表示所有参数。网络共有 \(R\) 层,其结构如下:
- 输入 \(x\),满足 \(\|x\|_2 \leq C\)。
- 第 \(i\) 层进行线性变换 \(W_i\),然后通过一个利普希茨激活函数。
- 最后一层没有激活函数。
网络的输出可以表示为:
其中 \(\sigma\) 是1-利普希茨激活函数。
我们考虑满足以下范数约束的网络函数族:
- 权重矩阵的算子范数(谱范数)有界:\(\|W_i\|_{op} \leq \kappa_i\)。
- 权重矩阵转置的2-1范数有界:\(\|W_i^T\|_{2 \to 1} \leq B_i\)。
在这些假设下,我们有如下定理:
定理:在上述设定下,该深度网络函数族的拉德马赫复杂度(进而其泛化误差)的上界为:
其中,\(\tilde{O}\) 隐藏了常数和对数因子。
核心概念解释:
- 算子范数 \(\|W_i\|_{op}\):即矩阵的最大奇异值。它控制了线性变换 \(W_i x\) 的利普希茨常数,因为 \(\|W_i x - W_i y\|_2 \leq \|W_i\|_{op} \cdot \|x - y\|_2\)。
- 乘积项 \(\prod \kappa_i\):这来自于整个网络函数的利普希茨常数上界,是各层利普希茨常数上界的乘积。
- 多项式项 \(\sum \frac{B_i^{2/3}}{\kappa_i^{2/3}}\):这部分来自于证明过程,可以视为关于 \(B_i\) 和 \(\kappa_i\) 的多项式,其具体形式不如乘积项关键。
这个定理表明,网络的泛化能力主要受各层权重谱范数乘积的控制。如果这个乘积很大,泛化误差的上界也会很大。
证明的核心思想:迭代覆盖
证明的核心思想是迭代地覆盖网络函数集。我们将深度网络视为多个函数层的组合:
其中,每个 \(\mathcal{F}_i\) 代表一个“线性层+激活函数”的函数族,并且每个 \(f_i \in \mathcal{F}_i\) 是 \(\kappa_i\)-利普希茨的。
证明分为两个主要步骤:
- 控制单层的覆盖数:利用线性模型的覆盖数界,结合利普希茨激活函数,得到单层函数族 \(\mathcal{F}_i\) 的覆盖数上界。
- 组合多层覆盖数:通过一个引理,将单层的覆盖数界组合起来,得到整个深度网络的覆盖数界。
以下是证明的关键引理:
引理(迭代覆盖):假设对于每个单层函数族 \(\mathcal{F}_i\),当输入范数有界时,其覆盖数满足 \(\log \mathcal{N}(\mathcal{F}_i, \epsilon_i, \|\cdot\|) \leq g(\epsilon_i, C_{i-1})\)。那么,对于组合函数族 \(\mathcal{F}\),存在一个 \(\epsilon\)-覆盖,其对数规模满足:
其中,覆盖半径 \(\epsilon\) 与各层选择的半径 \(\epsilon_i\) 满足关系:\(\epsilon = \sum_{i=1}^{R} \epsilon_i \cdot (\prod_{j=i+1}^{R} \kappa_j)\)。
引理直观解释:我们可以通过逐层构造覆盖来构建整个网络的覆盖。首先为第一层构造一个覆盖,然后对于第一层覆盖中的每个中心点,为第二层在该点上的输出集合构造一个覆盖,依此类推。最终覆盖的规模是各层覆盖规模的乘积(在对数尺度下是求和),而总覆盖半径会受到各层利普希茨常数的影响而逐层放大。
从覆盖数到泛化界
在得到深度网络的覆盖数上界后,我们可以通过以下标准步骤得到拉德马赫复杂度上界,进而得到泛化误差界:
- 将覆盖数界代入关系式:\(\mathfrak{R}_n(\mathcal{F}) \lesssim \inf_{\epsilon > 0} \left\{ \epsilon + \frac{\sqrt{\log \mathcal{N}(\mathcal{F}, \epsilon, \|\cdot\|)}}{\sqrt{n}} \right\}\)。
- 通过优化选择参数 \(\epsilon_i\)(通常使用霍尔德不等式等技巧),得到最紧的界。
- 最终得到定理中所示的依赖于 \(\prod \kappa_i\) 和多项式项的复杂度上界。
当前方法的局限性与改进动机
虽然上述定理给出了一个泛化界,但它存在一些局限性,这也指明了未来的改进方向:
- 依赖最坏情况利普希茨常数:定理中的 \(\prod \kappa_i\) 是网络在整个输入空间上的最坏情况利普希茨常数上界。在实践中,网络在实际训练数据上的利普希茨常数可能小得多。
- 谱范数乘积可能很大:为了使网络各层的激活值不至于收缩至零,权重矩阵的谱范数通常不能太小(例如需要大于 \(\sqrt{2}\)),这可能导致乘积项 \(\prod \kappa_i\) 很大,从而使泛化界显得宽松。
- 与优化过程的联系:有理论和实证表明,随机梯度下降(SGD)倾向于找到“*坦”的极小值,而这些点对应的模型在数据上的利普希茨常数往往更小。
因此,一个更理想的泛化界应该依赖于模型在经验数据(即训练集)上的利普希茨性质,而不是最坏情况下的性质。幸运的是,让泛化界依赖于经验数据是可行的,并且这样的界仍然可以作为有效的正则化器或模型选择准则。
在接下来的课程中,我们将证明一种改进的泛化界,它直接依赖于网络在训练样本 \(x_1, ..., x_n\) 上的利普希茨常数,其形式将是该利普希茨常数和权重范数的多项式函数,而不包含指数项,并且证明过程会比本节课更为简洁。
总结
本节课我们一起学习了如何为深度神经网络推导泛化误差界。
- 我们首先回顾了覆盖数这一核心工具。
- 然后,我们设定了一个具有范数约束的深度网络模型。
- 通过迭代覆盖的思想,我们将单层线性模型的覆盖数界组合起来,得到了整个深度网络的覆盖数上界。
- 最终,我们得到了一个泛化界,其主要项是各层权重矩阵谱范数的乘积,这反映了网络整体利普希茨常数的影响。
- 最后,我们讨论了该理论的局限性,并指出了通过依赖经验数据利普希茨常数来获得更紧泛化界的改进方向。


理解这个证明过程有助于我们洞察深度网络泛化能力的本质,并为进一步设计更好的泛化理论奠定了基础。
机器学习理论 11:全层边际 🧠


概述
在本节课中,我们将学习如何为深度神经网络推导出更好的泛化界。我们将引入一个名为“全层边际”的新概念,它能够帮助我们摆脱传统泛化界中对深度的指数依赖,并得到一个依赖于训练数据本身性质(而非整个输入空间的最坏情况)的泛化界。
回顾与动机
上一节我们讨论了基于Rademacher复杂度的泛化界,其形式大致为:泛化误差 ≤ 多项式(权重范数)。这个界来源于对模型在整个输入空间上的最坏情况Lipschitz性质的考虑。
然而,这个界存在几个问题:
- 深度指数依赖:界随网络层数呈指数增长,这对于深度网络不利。
- 最坏情况Lipschitz性质:它依赖于模型在整个输入空间上的最坏情况*滑度,而非实际观察到的数据。
- 算法偏好:随机梯度下降等算法倾向于选择在经验数据上更*滑的模型,而非在整个空间上*滑的模型。
因此,我们的目标是得到一个形式如下的泛化界:
泛化误差(θ) ≤ 函数( f_θ 在经验数据 {X_1, ..., X_N} 上的Lipschitz性质, 数据范数 )
其中函数是多项式而非指数,且没有深度悖论。我们称之为数据依赖的泛化界。
广义边际与覆盖数
为了实现上述目标,我们需要引入新的工具。首先,我们定义广义边际。
设 f 是一个分类模型。标准的边际定义为 y * f(x),其中 y ∈ {+1, -1}。
广义边际 g(f, x, y) 需要满足两个性质:
- 如果
f对(x, y)分类正确,则g(f, x, y) > 0。 - 如果
f对(x, y)分类错误,则g(f, x, y) = 0。
这模仿了标准边际的行为。同时,我们引入无穷范数覆盖数 N_∞(F, ε),它要求覆盖函数在整个输入域上而不仅仅是在经验数据点上接*。显然,N_∞ 的要求比标准的 L2 经验覆盖数更严格。
基于此,我们可以得到一个与标准边际理论类似的引理:
引理(广义边际泛化界):
假设广义边际函数族 G = {g_f : f ∈ F} 的无穷覆盖数满足:log N_∞(G, ε) ≤ R^2 / ε^2。
那么,以至少 1 - δ 的概率,对于所有能正确分类所有训练样本的 f ∈ F,其0-1误差有界:
L_{0-1}(f) ≤ Õ( (R / √n) * (1 / γ_min) + ... )
其中 γ_min 是所有训练样本上的最小广义边际。
这个引理的证明思路是重用标准边际理论的框架,只是将标准边际替换为广义边际,并将覆盖数假设应用于广义边际函数族 G。
全层边际的定义
现在,我们给出广义边际 g 的一个具体、有用的实例,称为全层边际。
对于线性模型,标准(归一化)边际是 y * (w^T x) / ||w||。我们可以从另一个角度理解它:边际是使得模型改变预测结果所需的最小输入扰动。即,最小化 ||δ|| 使得 (w^T (x + δ)) * y ≤ 0。
对于深度模型,我们将这个“扰动”的观点推广到所有隐藏层。我们不是只扰动输入 x,而是扰动每一层的激活值。
考虑一个 R 层的网络 f。我们定义一组扰动 δ = (δ_1, ..., δ_R),其中每个 δ_i 是一个向量。扰动过程如下:
h_1 = W_1 x + δ_1 * ||x||h_2 = σ(W_2 h_1) + δ_2 * ||h_1||- ...
h_R = σ(W_R h_{R-1}) + δ_R * ||h_{R-1}||
这里,σ 是激活函数(如ReLU)。扰动 δ_i 的幅度由前一层的激活范数进行缩放。
全层边际 m(f, x, y) 定义为:
m(f, x, y) = min_{δ} √(∑_{i=1}^R ||δ_i||^2)
约束条件为:扰动后的网络输出 f(x; δ) 满足 f(x; δ) * y ≤ 0(即预测错误)。
直观上,全层边际衡量了改变网络预测所需的对所有中间层的最小联合扰动。如果这个值很大,说明网络对于中间层的扰动是鲁棒的,因此我们期望其泛化性能更好。
主要定理与证明思路
利用全层边际,我们可以得到以下主要定理:
定理(基于全层边际的泛化界):
以高概率,对于参数为 θ 的网络 f_θ,其0-1误差满足:
L_{0-1}(f_θ) ≤ Õ( (∑_i ||W_i||_{1,1}) / (√n * min_i m(f_θ, x_i, y_i)) + ... )
其中 ||W_i||_{1,1} 是第 i 层权重矩阵的 (1,1)-范数(元素绝对值之和)。
这个界的关键在于分母是全层边际,它依赖于数据。如果模型在训练数据上的全层边际很大,即使权重范数不小,泛化误差也可能很小。
证明的核心在于以下分解引理:
引理(覆盖数分解):
设 F_i 是第 i 层的函数族,F 是它们的复合。令 G 为对应的全层边际函数族。那么,G 的无穷覆盖数满足:
log N_∞(G, ε) ≤ ∑_{i=1}^R log N_∞(F_i, ε_i)
其中 ε_i 与 ε 和每层的复杂度有关。
这个引理之所以强大,是因为它将复合函数族(全层边际)的覆盖数,分解为各层函数族覆盖数的和,而不是积。这避免了深度的指数爆炸。
分解引理的证明思路:
- 首先证明全层边际
m(f, x, y)具有特殊的“Lipschitz”性质:对于两个网络f和f‘,有
|m(f) - m(f‘)| ≤ ∑_i max_x ||f_i(x) - f‘_i(x)||。
这通过构造扰动方案的可行解,并利用闵可夫斯基不等式证明。 - 利用这个性质,我们可以独立地为每一层
F_i构建一个ε_i-覆盖U_i。 - 那么,所有
U_i的复合U就构成了原复合函数族F的全层边际函数族G的一个覆盖。覆盖误差由步骤1中的不等式控制。
一旦有了覆盖数分解引理,将其与广义边际泛化界引理结合,并对每一层(例如线性层)应用其已知的覆盖数界,即可推出主定理。
解释与比较
- 与经典界的比较:经典泛化界依赖于
(乘积谱范数) / (标准边际)。全层边际界可以*似地表示为(标准边际) / (某种数据依赖的Lipschitz常数)。由于算法(如SGD)倾向于找到在训练数据上*滑(即Lipschitz常数小)的解,因此全层边际在实践中可能比最坏情况的谱范数乘积小得多,从而得到更紧的界。 - 与锐度感知最小化的联系:实践中有一种称为“锐度感知最小化”的技术,通过扰动模型参数来寻找*坦最小值。全层边际关注的是对隐藏激活的扰动。通过梯度公式
∇_{W_i} L = (∇_{h_i} L) * h_{i-1}^T可以看出,参数空间的*滑性与隐藏激活空间的*滑性是相关的。 - *均边际版本:定理中使用了最小全层边际。我们也可以推导出基于*均(逆)全层边际的界,这可能对某些数据分布更具鲁棒性。
总结
本节课我们一起学习了如何为深度网络构建更好的数据依赖泛化界。
- 我们首先指出了经典基于Rademacher复杂度的界的局限性(指数深度依赖、最坏情况Lipschitz假设)。
- 我们引入了广义边际的概念,并给出了一个相应的泛化界引理。
- 我们重点介绍了全层边际,这是一个具体的广义边际,它衡量了改变网络预测所需的对所有隐藏层的最小联合扰动。
- 我们阐述了基于全层边际的主要定理,其核心是一个将复合函数覆盖数分解为各层覆盖数之和的引理。
- 最后,我们讨论了全层边际界的优势,并将其与经典界以及实践中的相关技术进行了比较。

全层边际提供了一种将网络深度、权重范数和训练数据特性有机结合起来的泛化分析视角,朝着理解深度学习泛化之谜迈出了有意义的一步。
机器学习理论 12:神经正切核 (Neural Tangent Kernel) 🧠


在本节课中,我们将要学习一种分析神经网络训练过程的理论工具——神经正切核。我们将看到,通过对神经网络模型在其初始化点附*进行泰勒展开,可以将复杂的非凸优化问题转化为一个在特定区域内*似凸的优化问题,从而理解梯度下降算法为何能够成功训练深度网络。
课程反馈与调整 📝
上一节我们介绍了非凸优化中“所有局部极小值都是全局极小值”的性质。本节中,我们首先简要回顾一下课程反馈。
我阅读了课程调查的所有反馈,非常感谢大家提出的宝贵意见。部分反馈意见存在相互矛盾之处,这完全可以理解,因为不同人的偏好不同。我会尽力改进课程。
关于笔记记录,我写字速度较快,这可能会影响大家边听边记。我会适当放慢书写速度。此外,我个人在听理论课时倾向于少记笔记、多思考,因为课程会提供详细的讲义。大家也可以尝试这种方法,看看是否更适合自己。
关于作业难度,之前有些题目可能过难,它们在过去是加分题。本学期我考虑到大家三人一组,将其设为了常规题。今后的作业会避免需要特殊技巧的题目。如果想获得加分,也可以通过贡献课程笔记等方式。
神经正切核的核心思想 🔍
上一讲我们讨论了非凸优化的全局性质。今天,我们将关注参数空间中的一个特殊区域。
基本思想是:在初始化参数 θ₀ 附*的一个邻域内,对神经网络模型 f(θ, x) 进行一阶泰勒展开。我们将模型视为关于参数 θ 的函数,输入 x 是固定的。
展开公式如下:
f(θ, x) ≈ f(θ₀, x) + ∇_θ f(θ₀, x)^T (θ - θ₀)
我们定义线性化模型 g(θ, x):
g(θ, x) = f(θ₀, x) + ∇_θ f(θ₀, x)^T (θ - θ₀)
为简化分析,通常通过设计网络结构(例如使用对称初始化)使得 f(θ₀, x) = 0。这样,线性化模型简化为:
g(θ, x) = ∇_θ f(θ₀, x)^T Δθ,其中 Δθ = θ - θ₀
此时,g(θ, x) 是参数 Δθ 的线性函数。我们可以将 ∇_θ f(θ₀, x) 视为一个特征映射 φ(x)。这类似于核方法中的思想。
神经正切核 K(x, x‘) 定义为特征映射的内积:
K(x, x’) = φ(x)^T φ(x‘) = ∇_θ f(θ₀, x)^T ∇_θ f(θ₀, x’)
“正切”一词来源于此特征映射是神经网络函数在参数空间的梯度(即切空间)。
理论成立的条件与区域 🎯
现在的问题是:这种泰勒*似在什么情况下是有效的?
我们希望存在一个围绕初始化点 θ₀ 的邻域 B(θ₀),在该区域内满足以下三个条件:
- 函数值*似:原始损失函数
L̂(f_θ)与其线性*似L̂(g_θ)非常接*。 - 存在全局极小值:在该区域内,*似损失函数
L̂(g_θ)存在一个能达到*似零损失的全局极小点θ̂,并且原始损失函数在该点也接*零。 - 优化过程收敛于该区域:优化原始损失
L̂(f_θ)或*似损失L̂(g_θ)的算法(如梯度下降)不会离开该区域,并收敛到上述全局极小点附*。
条件3在某种程度上可由条件1和2推导,但仍需严格证明。
当满足以下设置时,上述条件可以同时成立:
- 过参数化:模型参数数量远大于训练样本数。
- 特定的初始化缩放:对初始化权重进行恰当的缩放。
- 小的随机性:使用较小的学习率或全批量梯度下降,以避免优化过程剧烈偏离该区域。
尽管这种分析方法存在局限性(例如,该区域可能并非我们真正关心的泛化性能良好的区域),但它揭示了深度网络损失曲面中存在“良性”凸区域的有趣现象。
邻域与*似误差的量化 📏
接下来,我们形式化地分析条件1和2。
首先,定义特征矩阵 Φ,其第 i 行为 φ(x_i)^T,维度为 N × P(N 样本数,P 参数量)。使用均方误差损失,*似模型的损失为:
L̂(g_θ) = (1/N) || y - Φ Δθ ||²
这正是一个线性回归问题。
以下是两个关键引理:
引理1(邻域内存在全局解):
假设 P > N 且特征矩阵 Φ 满秩(秩为 N),其最小奇异值为 σ > 0。那么,存在一个全局最小二乘解 Δθ̂ 满足 Φ Δθ̂ = y,并且其范数有界:||Δθ̂|| = O(√N / σ)。
这意味着,如果我们定义邻域 B(θ₀) 的半径为 O(√N / σ),则该邻域内包含*似损失的一个全局极小点。
引理2(*似误差界):
假设神经网络的梯度函数关于参数 θ 是 β-Lipschitz 连续的。那么,在邻域 B(θ₀) 内,对于任何 θ,函数值的*似误差满足:
|f(θ, x) - g(θ, x)| ≤ O( β * ||Δθ||² )
将邻域半径代入,可得在 B(θ₀) 内,*似误差为 O( β N / σ² )。
关键量:*似误差的阶由 β / σ² 控制。我们希望这个量很小,这样泰勒展开才准确。
使关键量趋于零的两种方法 ⚙️
有两种主要的技术途径可以使 β / σ² → 0:
方法一:缩放输出(Lazy Training)
对网络引入一个缩放因子 α:f_θ(x) = α * f̄_θ(x),其中 f̄ 是标准网络。固定其初始化。可以证明,缩放后的 β’ = α β̄,σ’ = α σ̄。因此,β‘ / σ’² = (β̄ / σ̄²) * (1/α)。当 α → ∞ 时,关键量趋于零。这对应于“懒惰训练” regime,即参数只需移动极小的距离就能拟合数据。
方法二:增加宽度(过参数化)
考虑一个两层神经网络:f(x) = (1/√M) Σ a_i σ(w_i^T x),其中 a_i 固定为 ±1,w_i 从高斯分布初始化。可以证明,当隐藏层宽度 M → ∞ 时:
- 神经正切核矩阵
ΦΦ^T收敛到一个固定的满秩矩阵K^∞,其最小奇异值σ趋*于一个正常数。 - Lipschitz 常数
β以O(1/√M)的速率衰减。
因此,β / σ² → 0。这意味着,网络越宽,其损失曲面在初始化点附*就越*滑、越接*其线性*似。
对于使用 ReLU 等非光滑激活函数的情况,需要一些特殊处理,但核心结论类似。
优化过程的等价性 🔄
最后,我们简要讨论如何建立条件3,即优化过程的等价性。
一个重要的观察是:在任意时刻 t,以当前参数 θ_t 为参考点进行泰勒展开,得到的线性化模型 g_t(θ) 在点 θ_t 处与原始模型 f(θ) 具有相同的一阶性质(函数值和梯度)。这意味着,损失函数 L(f_θ) 和 L(g_t(θ)) 在 θ_t 处也具有相同的一阶性质。
因此,在原始损失 L̂(f_θ) 上执行梯度下降,等价于在一系列随时间变化的损失函数 L̂(g_t(θ)) 上执行一种“在线学习”。这为分析原始网络的优化过程提供了强有力的工具:我们可以利用在线学习理论来分析这个不断变化的损失序列,同时利用这些损失函数都位于初始化点附*一个小邻域内的特性。
具体分析有两种主流思路:
- 利用*似损失
L̂(g_θ)的强凸性,证明其具有指数级收敛速度,然后将此分析迁移到原始损失上。 - 利用上述“在线学习”的等价性,直接分析梯度下降在变化损失序列上的行为。
我们将在下一讲详细介绍第一种更自包含、更简洁的分析方法。
总结 📚
本节课我们一起学习了神经正切核理论。
- 其核心思想是通过在初始化点泰勒展开,将神经网络局部线性化。
- 理论成立需要模型过参数化、适当初始化,并保证优化不离开线性化有效的邻域。
- 通过缩放输出或增加网络宽度,可以使线性*似足够精确。
- 在该邻域内,损失景观*似凸,存在全局极小解,并且梯度下降动力学可以与其线性*似模型的动力学关联起来。

神经正切核提供了理解深度网络训练的一个有力理论框架,尽管它有其局限性,但其中包含的数学思想非常深刻和有用。
机器学习理论 13:神经正切核与梯度下降的隐式正则化 🧠


在本节课中,我们将学习神经正切核方法的最后一部分,并探讨梯度下降的隐式正则化效应。
神经正切核方法回顾
上一节我们介绍了神经正切核方法。该方法的核心在于证明,在参数空间的一个特定邻域内,神经网络的输出 F(θ, x) 可以准确地用一个线性模型 G(θ, x) 来*似。
具体而言,我们定义了邻域 B(θ₀),其半径为 √n / σ。在该邻域内,*似误差 ε 满足:
ε ≈ β² n / σ²
其中,β 是梯度的上界,σ 是特征矩阵 Φ 的最小奇异值。当关键量 β / σ² 趋*于0时,*似效果会越来越好。
线性模型的优化分析
上一节我们介绍了*似关系,本节中我们来看看如何分析优化过程。我们的目标是证明,优化神经网络 F(θ) 与优化其线性*似 G(θ) 是相似的。
首先,我们分析线性模型 G(θ) 的梯度下降优化。G(θ) 本质上是一个线性回归问题:
L(Δθ) = ||y - Φ Δθ||²
其中,Φ 是 N×P 维的特征矩阵,每一行是 ∇F(θ₀, x_i) 的转置。Δθ 是参数 θ 与初始点 θ₀ 的差值。
梯度更新规则为:
Δθ_{t+1} = Δθ_t - η Φᵀ (y - Φ Δθ_t)
我们关注输出空间的变化。定义 ŷ_t = Φ Δθ_t,则残差 ŷ_t - y 的递归关系为:
ŷ_{t+1} - y = (I - η Φ Φᵀ) (ŷ_t - y)
当学习率 η 满足 η < 2 / σ_max(Φ Φᵀ) 时,矩阵 (I - η Φ Φᵀ) 的算子范数小于 1 - η σ²。这里 σ 是 Φ 的最小奇异值。因此,误差呈指数衰减:
||ŷ_T - y|| ≤ (1 - η σ²)^T ||ŷ₀ - y||
经过 T ≈ log(1/ε) / (η σ²) 次迭代后,经验损失可以小于任意小的 ε。
神经网络的优化分析
现在,我们将上述分析思路应用到神经网络 F(θ) 上。核心思想是模仿线性模型的证明,并处理其中的差异。
主要的差异在于,神经网络的“特征矩阵” Φ_t 会随着参数 θ_t 的变化而变化,而在线性模型中 Φ 是固定的。在时间 t 进行泰勒展开后,梯度下降更新为:
θ_{t+1} = θ_t - η ∇L(θ_t)
其中,梯度 ∇L(θ_t) = Φ_tᵀ (y - ŷ_t)。对输出进行泰勒展开,并忽略二阶项(当学习率 η 足够小时,二阶项 O(η²) 可忽略),我们可以得到与线性模型形式相似的输出残差递归式,只是将固定的 Φ 替换为 Φ_t。
为了完成证明,我们需要归纳地证明在整个优化过程中,参数 θ_t 始终停留在初始邻域 B(θ₀) 内。这依赖于一个关键事实:当 β / σ² 足够小时,存在一个全局最优解 θ_hat 位于该邻域内。由于优化过程会驱使参数向这个最优解移动,因此参数不会偏离邻域太远。在此条件下,可以证明 Φ_t 的最小奇异值始终有下界,从而保证误差的指数衰减。
综上所述,在特定条件下,优化神经网络会收敛到一个经验损失很小的解,其行为类似于优化一个核方法。
神经正切核的局限性
然而,神经正切核方法有其局限性。它表明在此机制下,神经网络的表现并不优于核方法。实际上,核方法的统计效率可能受到限制,因为它使用的是固定的、非自适应的特征。
考虑一个例子:数据 x ∈ ℝ^d,标签 y = x₁ * x₂。这是一个简单的非线性函数。使用带正则化的神经网络,可以学习到一个稀疏的特征组合(例如四个特定的神经元),从而高效地解决问题。而使用NTK核方法,我们是在最小化所有特征系数 a 的L2范数,这会倾向于一个稠密的特征组合,无法专注于对任务最有用的少数特征,因此可能需要 Ω(d²) 的样本量,而神经网络可能只需要 O(1) 的样本量。
这个例子说明,神经网络通过隐式地寻找稀疏解,可以拥有比核方法更好的统计效率。
梯度下降的隐式正则化
现在,我们转向一个新的主题:梯度下降的隐式正则化效应。观察发现,优化器的选择(如初始化、学习率)会隐式地偏好某些全局最优解。
在神经正切核机制中,特定的初始化使优化器收敛到NTK解,这可能并非泛化性能最好的解。我们将探讨如何通过改变优化设置(如使用小初始化或随机性)来离开NTK区域,并可能找到泛化更好的解。
过参数化线性回归中的隐式正则化
我们从一个简单的过参数化线性回归模型开始分析。设定如下:
- 数据矩阵
X ∈ ℝ^{N×d},N << d且X满行秩。 - 参数
β ∈ ℝ^d。 - 损失函数
L(β) = ½ ||y - Xβ||²。
由于 N < d,该问题存在无穷多个全局最优解。所有最优解可表示为:
β = X⁺ y + ζ
其中 X⁺ 是 X 的伪逆,ζ 是垂直于 X 所有行张成空间的任意向量(即 Xζ = 0)。
在这些全局最优解中,范数最小的解是 ζ = 0 对应的解,即 β^* = X⁺ y。
定理:如果使用梯度下降法,并以零向量 β₀ = 0 初始化,并采用足够小的学习率,那么优化过程将收敛到最小范数解 β^*。
以下是证明思路:
- 收敛到零损失:根据标准凸优化理论,梯度下降最终会使损失趋于零,即收敛到某个全局最优解。
- 参数始终位于数据张成空间内:我们可以归纳证明,所有迭代点
β_t都位于数据行向量{x₁, ..., x_N}的张成空间内。- 基础:
β₀ = 0显然在该空间内。 - 归纳:梯度
∇L(β_t) = Xᵀ (y - Xβ_t)位于Xᵀ的列空间,也就是X的行空间。因此,更新β_{t+1} = β_t - η ∇L(β_t)仍然在该空间内。
- 基础:
- 空间内的唯一解:所有全局最优解中,只有
β^* = X⁺ y位于X的行张成空间内。其他解β = X⁺ y + ζ由于ζ垂直于该空间,因此不在其中。
因此,被限制在数据行空间内进行优化的梯度下降,别无选择,只能收敛到该空间内唯一的全局最优解——也就是最小范数解。
直观理解:可以将解空间(紫色*面,满足 Xβ = y)和数据行张成空间(蓝色直线)画出来。优化目标是要到达紫色*面,但梯度下降的更新方向始终被限制在蓝色直线上。从原点(初始化点)出发,沿着蓝色直线移动,最终会到达它与紫色*面的交点,而这个交点正是离原点最*的点,即最小范数解。
这个简单的例子说明了初始化如何带来隐式的正则化效果:零初始化引导梯度下降找到最小范数解,而无需在损失函数中显式添加范数惩罚项。
总结


本节课中我们一起学习了:
- 完成了神经正切核方法的分析,证明了在特定条件下优化神经网络类似于优化一个线性模型。
- 讨论了NTK的局限性,即它可能并不比核方法更强大,而真正的神经网络可以通过特征学习的稀疏性获得更好的统计效率。
- 引入了梯度下降的隐式正则化概念,并在过参数化线性回归模型中证明,零初始化会引导优化器收敛到最小范数解。这为理解更复杂的非线性模型中的隐式正则化效应奠定了基础。下一讲我们将把这一分析扩展到非线性模型。
机器学习理论 14:初始化带来的隐式正则化效应 🧠


在本节课中,我们将探讨优化器(特别是梯度下降)在非凸模型中的隐式正则化效应。我们将聚焦于一个特定的非线性模型,并分析当使用小规模初始化时,梯度下降如何自动偏好稀疏解,从而在无需显式正则化的情况下恢复真实参数。
模型与问题设定 📝
我们考虑一个非线性模型,其参数为 β,输入为 x。模型定义为:
f(x) = (β ⊙ β) · x
其中 ⊙ 表示逐元素乘法(即 β ⊙ β 是 β 各分量的*方)。该模型对 x 是线性的,但对 β 是非线性的,因此损失函数关于 β 是非凸的。
我们假设真实数据由以下模型生成(无噪声):
y = (β* ⊙ β*) · x
其中真实参数 β* 是 稀疏 的,即其非零项的数量 ||β*||₀ ≤ r,且 r 远小于维度 d。为简化分析,我们进一步假设 β* 的所有非零项均为正。
我们处于过参数化场景:数据点数量 n 远小于参数维度 d(n << d),但 n 大于 r² 的量级(即 n = Ω(r²))。这意味着理论上存在无数个能完美拟合训练数据的全局最小值。
我们的目标是研究在以下目标函数上运行梯度下降:
L̂(β) = (1/(4n)) Σ (y_i - (β ⊙ β)·x_i)²
我们使用小规模初始化:β₀ = α · 1(所有分量初始化为一个很小的正数 α),然后进行梯度更新:β_{t+1} = β_t - η ∇L̂(β_t)。
我们将证明,该优化过程能够收敛到真实参数 β*,尽管目标函数中没有任何显式正则化项。
主要定理与解释 📜
以下是本节课的核心定理(简化版):
定理:假设数据量 n ≥ C r² log² d(C 为足够大的常数),初始化规模 α 小于某个逆多项式量级,学习率 η 为常数。那么,当迭代步数 T 满足 log(d/α)/η ≤ T ≤ 1/(η√d α) 时,梯度下降的输出满足:
||β_T ⊙ β_T - β* ⊙ β*||₂ ≤ O(α)
定理解读:
- 过参数化与多重解:由于
n < d,存在无数个能完美拟合数据的全局最小值。隐式偏置的作用是引导优化器选择其中一个特定的解。 - 初始化规模
α的作用:误差界与α成正比。因此,我们可以通过选择极小的α(如α = 1/d^10)来获得任意小的误差。同时,运行时间的下界仅与log(1/α)相关,因此选择极小的α对运行时间影响不大。 - 早期停止的必要性:定理给出了迭代步数的上界。这可以理解为需要进行“早期停止”。然而,由于上界与
1/α相关,当α极小时,这个上界非常宽松,在实践中可能不需要严格停止。 - 为何不能初始化为零:
β = 0是一个鞍点(梯度为零),梯度下降会停滞于此。因此需要一个小扰动来逃离鞍点,log(1/α)/η这个时间下界正是逃离鞍点所需的时间。
该定理表明,梯度下降结合小规模初始化,隐式地倾向于寻找 L₂ 范数较小的解(在 β 空间),这类似于在参数 θ = β ⊙ β 空间中进行 L₁ 正则化(因为 ||θ||₁ = ||β||₂²)。这与上一讲线性回归中梯度下降收敛到最小范数解的现象有相似之处。
经典方法与隐式正则化的对比 ⚖️
如果我们只关心解决问题,经典方法是使用显式正则化。对于这个模型,有两种等价的视角:
-
在
θ = β ⊙ β空间使用 Lasso (L₁正则化):
min_θ (1/(4n)) Σ (y_i - θ·x_i)² + λ ||θ||₁
经典理论表明,当n = Ω(r log d)时,此方法能恢复真实的θ*(即β* ⊙ β*)。 -
在
β空间使用岭回归 (L₂正则化):
min_β (1/(4n)) Σ (y_i - (β ⊙ β)·x_i)² + λ ||β||₂²
由于||θ||₁ = ||β||₂²,这本质上与 Lasso 等价。
本节课的结论是:使用小规模初始化的梯度下降,无需任何显式正则化项,就能自动实现类似于 L₂ 正则化的效果,并找到稀疏解 β*。
证明思路与关键直觉 🔍
证明的核心在于比较经验损失轨迹(实际梯度下降路径)和总体损失轨迹(在无限数据总体上的理想梯度下降路径)。
上一节我们介绍了总体轨迹的分析。本节中,我们来看看如何将经验轨迹与总体轨迹联系起来。
关键定义:稀疏向量集与限制等距性质 (RIP)
我们定义稀疏向量集合:
X_r = { β : ||β||₀ ≤ r }
对于这个集合中的向量,经验损失和总体损失(及其梯度)会非常接*。这种性质由限制等距性质 (RIP) 保证。
RIP 性质:以高概率,对于所有满足 ||v||₀ ≤ 2r 的向量 v,有:
(1/n) Σ |v·x_i|² ≈ ||v||₂²
这意味着,对于稀疏向量 v,其与数据点内积的*方均值*似等于其 L₂ 范数*方。该性质成立的条件是 n = Ω(r / δ²)。
由于我们的真实参数 β* 是 r-稀疏的,并且我们期望算法找到的解 β 也*似稀疏,因此 RIP 性质保证了在稀疏集 X_r 上,经验风险 L̂(β) 和总体风险 L(β) 是均匀接*的。
总体轨迹分析
首先分析在总体损失 L(β) 上的梯度下降。计算梯度:
∇L(β) = (β ⊙ β - β* ⊙ β*) ⊙ β
更新公式为:
β_{t+1} = β_t - η [ (β_t ⊙ β_t - β* ⊙ β*) ⊙ β_t ]
由于各坐标之间没有耦合,我们可以分坐标分析:
- 对于在
β*支持集内的坐标i(β*_i = 1):更新规则鼓励β_i增长到 1。 - 对于不在支持集内的坐标
i(β*_i = 0):更新规则鼓励β_i衰减到 0。
通过细致分析可以证明,总体梯度下降轨迹会收敛到 β*,并且整个轨迹始终保持在稀疏集 X_r 附*(即非支持集上的坐标值始终很小)。
直觉图示
想象参数空间:
- 原点
0附*是稀疏集X_r。 - 在
X_r内部,经验损失和总体损失行为相似,且唯一的全局最小值是β*。 - 在
X_r外部,存在无数个能完美拟合训练数据(即L̂(β)=0)的过拟合解,但它们的测试损失L(β)很大。
算法从靠*原点(即 X_r 内部)的小初始化开始。梯度下降在经验损失 L̂ 上运行。由于在 X_r 内 L̂ ≈ L,其行为*似于在总体损失 L 上运行。而总体梯度下降轨迹被证明会收敛到 β* 且不离开 X_r。因此,经验梯度下降轨迹也会被“限制”在 X_r 内,并跟随总体轨迹收敛到 β*,而不会偏离到外部那些过拟合解的区域。
核心挑战:需要严格证明经验轨迹不会因误差积累而偏离总体轨迹并冲出 X_r。这涉及到复杂的递归误差分析,通过将当前参数分解为 β_t = R_t e_1 + ζ_t(其中 e_1 方向代表 β* 的方向),并分别控制主分量 R_t 和误差分量 ζ_t 的增长来完成证明。
总结与思考 💡
本节课我们一起学习了梯度下降在特定非线性模型中的隐式正则化效应。通过将参数初始化为一个极小的值,梯度下降自动倾向于寻找一个稀疏的、L₂ 范数较小的解,从而在过参数化场景中恢复真实参数,而无需任何显式正则化项。
关键要点如下:
- 小初始化的作用:它作为一种隐式正则化,引导优化器偏好接*初始点的解(在本例中是最小
L₂范数解)。 - 与经典方法的联系:这种隐式效应与在适当参数化下使用
L₁或L₂显式正则化是等价的。 - 证明框架:通过分析总体梯度下降轨迹(易于分析)并证明经验轨迹在其附*,来解释隐式偏置的产生。
- 局限性:目前这种严格的理论分析仅适用于高度结构化的模型(如本课的二次参数化模型)。将其扩展到如深度神经网络等复杂模型,仍然是机器学习理论中的一个重要开放问题。

这种对隐式偏置的理解,有助于我们解释为何简单的优化算法如梯度下降,在过参数化的现代机器学习模型中依然能表现出良好的泛化性能。
机器学习理论 15:分类问题中的隐式正则化 📚


在本节课中,我们将继续探讨隐式正则化这一主题。上一节我们介绍了回归问题中的隐式正则化,本节中我们来看看分类问题中的情况。我们将看到,对于分类问题,梯度下降的行为会有所不同,它倾向于收敛到一个最大间隔解,这与回归情况下的最小范数解在概念上相似,但又不完全相同。
第一部分:梯度流与更精确的隐式正则化刻画 🔄
为了更精确地分析初始化如何影响正则化效果,我们首先引入一个简化分析的工具:梯度流。
梯度流本质上是学习率趋于无穷小时的梯度下降。它允许我们忽略学习率带来的二阶效应,从而得到更简洁的优化动态方程。其形式化定义如下:
对于一个损失函数 L(W),梯度下降的更新规则为:
W_{t+1} = W_t - η * ∇L(W_t)
如果我们改变时间尺度,使得每次更新只将时间计数器推进 η,那么当 η → 0 时,这个过程就变成了一个微分方程:
dW(t)/dt = -∇L(W(t))
模型设定
我们将讨论一个与上节课类似的模型,但做了一些修改以方便分析。模型定义如下:
f_W(x) = (W_+ ∘ W_+)ᵀ x - (W_- ∘ W_-)ᵀ x
其中 W_+ 和 W_- 是 d 维向量,W 是它们的拼接,∘ 表示逐元素乘积。这个模型可以表示任何线性模型,而不仅仅是正线性组合。
我们进行如下初始化:
W_+(0) = W_-(0) = α * 1 (所有元素为 α 的向量)
这使得初始模型输出为零:f_{W(0)}(x) = 0。α 的尺度将决定隐式正则化的效果。
我们关心的是模型收敛后对应的线性系数 θ,定义为:
θ = W_+ ∘ W_+ - W_- ∘ W_-
核心定理与解释
以下定理精确刻画了隐式正则化如何依赖于初始化尺度 α:
定理:假设梯度流收敛到一个可行解(即 Xθ = y),那么 θ 实际上是以下优化问题的最小化解:
min_θ Q_α(θ), s.t. Xθ = y
其中复杂度度量 Q_α(θ) 定义为:
Q_α(θ) = α² * Σ_i q(θ_i / α²)
函数 q(z) = 2 * (z * arcsinh(z/2) - √(4 + z²) + 2)
这个定理表明,尽管算法只是运行梯度下降,但它神奇地找到了一个在特定复杂度度量下的最小化解。
以下是两种极端情况的解释:
- 当
α → ∞(大初始化):此时复杂度度量Q_α(θ)*似于θ的 L2 范数。因此,梯度流收敛到最小 L2 范数解。这对应于神经正切核(NTK)机制。 - 当
α → 0(小初始化):此时复杂度度量Q_α(θ)*似于θ的 L1 范数。因此,梯度流收敛到最小 L1 范数解。这与我们上节课讨论的情况类似。
对于中间的 α 值,正则化效果是 L1 和 L2 范数之间的一种插值。这比我们之前的分析更为精确,它统一了不同初始化尺度下的隐式正则化行为。
证明思路简述
证明主要分为两步,这与我们分析线性回归隐式正则化的思路类似:
- 寻找不变量:首先,我们需要找到优化过程中始终保持不变的性质(不变量)。在线性回归中,不变量是
θ始终位于数据矩阵X的行张成空间中。在当前模型中,不变量更为复杂,但可以通过分析梯度流动态方程得到。 - 利用不变量确定解:然后,我们利用这个不变量,结合收敛到可行解的条件,来精确地确定梯度流最终收敛到了哪个解。具体来说,我们可以证明最终解
θ满足的方程,恰好是上述优化问题的 KKT 最优性条件。
第二部分:分类问题中的隐式正则化 ➗
现在,我们将目光转向分类问题。考虑一个线性可分的二分类数据集 {(x_i, y_i)},其中 y_i ∈ {+1, -1}。
我们使用逻辑损失(或*似它的指数损失):
L(W) = Σ_i log(1 + exp(-y_i * Wᵀ x_i))
对于线性可分数据,存在无数个能将数据完美分类的 W(只需将任意分隔超*面的法向量不断放大,损失就能趋*于零)。那么,梯度下降会收敛到哪个解呢?
答案是:最大间隔解。
定义与结论
首先定义归一化间隔:
γ(W) = min_i (y_i (Wᵀ x_i) / ||W||)
最大间隔解 W* 是最大化 γ(W) 的单位向量。
结论:对于线性可分数据,使用梯度流(或梯度下降)最小化逻辑损失,参数 W(t) 的范数将趋于无穷大,但其方向会收敛到最大间隔解的方向。更准确地说,迭代点的间隔 γ(W(t)) 会收敛到最大可能间隔 γ*。
直观解释
为什么梯度下降会倾向于最大间隔解呢?以下是直觉性的步骤:
- 损失趋于零:根据优化理论,梯度下降会使训练损失趋于零。
- 损失函数的*似:当
||W||很大时,逻辑损失log(1+exp(-z))非常接*指数损失exp(-z)。 - 参数范数趋于无穷:要使损失趋于零,
y_i Wᵀ x_i必须趋于正无穷,这意味着||W||必须趋于无穷。 - 考察对数损失:当
||W||很大时,考虑损失的对数更有启发性。令W = q * Ŵ,其中q = ||W||很大,Ŵ是单位方向向量。那么对数损失*似为:
log(L(W)) ≈ log( Σ_i exp(-q * y_i Ŵᵀ x_i) ) - Log-Sum-Exp 的*似:当
q很大时,log( Σ_i exp(q * u_i) ) ≈ q * max_i(u_i) + log(n)。应用到这里(注意符号):
log(L(W)) ≈ -q * min_i (y_i Ŵᵀ x_i) + log(n) = -q * γ(W) + log(n) - 最小化损失等价于最大化间隔:因此,最小化损失
L(W)就*似等价于最大化间隔γ(W)。由于q → ∞,占主导地位的就是最大化间隔项。
所以,梯度下降在参数范数增长的过程中,会自动选择那个间隔最大的方向。下一讲我们将给出更形式化的证明。
总结 📝
本节课我们一起学习了隐式正则化的进一步内容:
- 我们引入了梯度流作为分析工具,它简化了梯度下降的动态分析。
- 我们探讨了一个参数化线性模型,并给出了一个精确定理,表明隐式正则化的效果(表现为最小化某种复杂度度量)如何*滑地依赖于初始化尺度
α,在α → 0时接* L1 正则化,在α → ∞时接* L2 正则化(NTK机制)。 - 我们将问题转向分类。对于线性可分的二分类问题,使用梯度下降最小化逻辑损失时,参数会趋于无穷大,但其方向会收敛到最大间隔解。我们从直觉上解释了这是因为在极限情况下,最小化损失等价于最大化分类间隔。

本节课结束了对初始化隐式正则化的讨论,下一讲我们将探讨随机性(如 SGD)带来的隐式正则化效应。
机器学习理论 16:噪声的隐式正则化效应 🎯


在本节课中,我们将探讨随机梯度下降(SGD)中噪声的隐式正则化效应。我们将从简单的二次损失函数开始,逐步深入到更复杂的非二次损失函数,以理解噪声如何影响优化过程,并最终引导模型趋向于更*坦的最小值。
1. 基础设定与目标
我们首先设定一个通用的损失函数 G(θ),其中 θ 是模型参数。在本课程中,我们主要分析带有噪声的梯度下降算法,其更新规则如下:
公式:
θ_{t+1} = θ_t - η * (∇G(θ_t) + ξ_t)
其中:
η是学习率。∇G(θ_t)是损失函数在θ_t处的梯度。ξ_t是一个均值为零的随机噪声项,其分布可能依赖于当前参数θ_t。
这个公式可以捕捉到小批量随机梯度下降(Mini-batch SGD)的行为,其中噪声 ξ_t 源于使用数据子集计算梯度所带来的随机性。为了简化分析,我们通常假设噪声是高斯噪声。
2. 热身:二次损失函数(凸情况)
为了建立直觉,我们首先分析最简单的情况:一维二次损失函数。
2.1 一维二次损失
考虑损失函数 G(x) = (1/2) * x^2,其全局最小值在 x=0。带有噪声的梯度下降更新规则为:
公式:
x_{t+1} = x_t - η * (∇G(x_t) + σ * ζ_t) = x_t - η * (x_t + σ * ζ_t) = (1 - η) * x_t - η * σ * ζ_t
其中 ζ_t 是标准高斯噪声(均值为0,方差为1),σ 控制噪声的尺度。
过程分析:
- 当
x_t较大时,收缩项(1 - η) * x_t占主导,推动参数向零点移动。 - 当
x_t接*零时,噪声项-η * σ * ζ_t占主导,导致参数在零点附*随机波动。
通过递归展开,我们可以得到 x_t 的解析表达式:
公式:
x_t = (1 - η)^{t+1} * x_0 - η * σ * Σ_{k=0}^{t} (1 - η)^k * ζ_{t-k}
这个公式揭示了两个关键点:
- 收缩效应:初始值
x_0的影响随时间呈指数衰减。 - 噪声累积:历史噪声会累积,但越早的噪声被收缩得越厉害,其影响越小。
当 t → ∞ 时,x_t 的分布会收敛到一个稳态分布。我们可以计算其方差:
公式:
Var(x_∞) ≈ (η * σ^2) / 2
结论:
在经典的凸优化设定下,噪声主要带来两个影响:
- 降低最终解的精度:算法无法精确收敛到全局最小点,而是在其周围波动。
- 加速计算:使用小批量计算梯度比使用全批量更快。
因此,传统的观点是在精度和计算速度之间进行权衡:在优化初期使用较大的学习率以快速下降,后期衰减学习率以减少噪声影响,从而获得更精确的解。
此外,值得注意的是,尽管存在随机波动,但迭代值的期望 E[x_t] 仍然收敛于零。这意味着噪声引入了方差(波动),但没有引入系统性偏差。
3. 多维二次损失
将分析扩展到多维情况。考虑损失函数 G(x) = (1/2) * x^T A x,其中 A 是一个正定矩阵。更新规则为:
公式:
x_{t+1} = x_t - η * (A * x_t + ξ_t) = (I - ηA) * x_t - η * ξ_t
通过递归和特征分解,我们可以分析在各个特征方向上的行为。在特征向量 v_i 对应的方向上(特征值为 λ_i),迭代值的波动方差大致为:
公式:
波动方差 ∝ (η * σ_i^2) / λ_i
其中 σ_i^2 是噪声在该方向上的方差。
关键观察:
- 在曲率大(
λ_i大)的方向上,收缩强,噪声积累导致的波动小。 - 在曲率小(
λ_i小)的方向上,收缩弱,噪声积累导致的波动大。 - 在没有噪声(
σ_i^2 = 0)的方向上,迭代值不会产生波动。
这为后续理解非凸情况下的隐式正则化奠定了基础。
4. 非二次损失函数与三阶项的影响
现在,我们进入更核心的部分,分析非二次损失函数。假设全局最小值仍在 x=0,我们在该点进行泰勒展开:
公式:
∇G(x_t) ≈ ∇G(0) + ∇²G(0) * x_t + (1/2) * ∇³G(0) [x_t, x_t]
由于 ∇G(0) = 0,定义海森矩阵 H = ∇²G(0),三阶张量 T = (1/2) * ∇³G(0),则更新规则*似为:
公式:
x_{t+1} ≈ (I - ηH) * x_t - η * ξ_t - η * T[x_t, x_t]

与二次情况相比,这里多了一个三阶项 -η * T[x_t, x_t]。




分析:
- 当
H是严格正定矩阵时,收缩项(I - ηH) * x_t占主导。三阶项的量级为O(η^2)(因为x_t ~ O(√η)),通常比主导项小,因此影响微弱,只会引入一个很小的偏差。 - 然而,当
H在某些方向上是零(即存在*坦方向)时,情况就完全不同了。这在过参数化模型中很常见,例如存在一个全局最小值的流形。
5. 隐式正则化效应的核心机制
当海森矩阵 H 和噪声协方差矩阵 Σ 都只在一个低维子空间 K 中起作用时,有趣的现象发生了。
图像化理解:
想象一个“山谷”,K 方向是山谷的底部(*坦),K^⊥ 方向是山谷的侧壁(有曲率)。
- 在
K方向(*坦):算法主要受噪声驱动,进行随机游走(类似OU过程)。 - 在
K^⊥方向(有曲率):存在强收缩,将参数拉向山谷底部。
关键点: 三阶项 T[x_t, x_t] 在 K^⊥ 方向上可能具有分量。虽然它在单步更新中很小,但由于在 K^⊥ 方向上没有收缩机制来抵消它,这个微小的偏差会随着时间不断累积!
数学简化分析:
我们可以定义一个“伴随过程” u_t,它只包含二次*似部分(即忽略三阶项):
u_{t+1} = (I - ηH) * u_t - η * ξ_t
然后分析真实轨迹 x_t 与 u_t 的差异 r_t = x_t - u_t。在 K^⊥ 子空间上投影后,r_t 的更新*似为:
Proj_{K^⊥}(r_{t+1}) ≈ Proj_{K^⊥}(r_t) - η * Proj_{K^⊥}(T[u_t, u_t])
由于没有收缩项,r_t 在 K^⊥ 方向上的变化是 三阶项驱动方向的累积和。
经过复杂的分析(涉及遍历性、噪声稳态分布等),可以证明,在长时间运行后,SGD的隐式效应是沿着一个特定的方向 d 移动:
d ∝ -∇_x ( Tr( H(x) * S ) )
其中 S 是迭代值在稳态下的协方差矩阵。这意味着,算法倾向于移动到 损失函数海森矩阵的迹更小 的点,即 更*坦 的最小点。
最终结论(启发式):
在某些假设下,可以证明,在原始经验损失 L̂(θ) 上运行SGD,会收敛到以下正则化损失的一个驻点:
L_reg(θ) = L̂(θ) + λ * Tr( H(θ) )
这里,正则项是海森矩阵的迹,它衡量了该点处的*坦度。因此,SGD中的噪声隐式地偏好更*坦的最小值,而*坦性通常与更好的泛化性能相关。
6. 总结
本节课我们一起学习了噪声在随机梯度下降中的隐式正则化效应。
- 我们从简单的二次凸函数入手,理解了噪声导致迭代值在最小值附*波动,但不会引入系统性偏差。
- 然后我们分析了非二次函数,发现三阶导数项在存在*坦方向时会变得重要。
- 核心机制在于:在曲率方向,梯度下降的收缩效应占主导;在*坦方向,噪声驱动的随机游走占主导。而三阶项在*坦方向上的分量虽然微小,但由于缺乏收缩抵消,其效应会随时间累积。
- 这种累积效应驱使优化轨迹朝着损失函数海森矩阵迹更小的方向移动,即趋向于更*坦的区域,从而实现了隐式的正则化。

这种对*坦最小值的偏好,为理解SGD在过参数化深度学习模型中的良好泛化表现提供了一个重要的理论视角。
机器学习理论 17:无监督学习、高斯混合模型与矩方法 🧠


在本节课中,我们将学习无监督学习中的经典方法,特别是高斯混合模型和矩方法。我们将从回顾上一讲关于隐式正则化的内容开始,然后深入探讨如何利用数据矩来恢复潜在变量模型的参数。
回顾:隐式正则化与海森矩阵的迹
上一节我们讨论了噪声的隐式正则化效应。我们提到,在某些情况下,可以证明带有噪声的随机梯度下降倾向于最小化海森矩阵的迹。本节中,我们来看看为什么这是一个合理的优化目标。
海森矩阵定义为损失函数对参数的二阶导数。对于一个数据点,损失函数为:
其中 $ f_\theta(x) $ 是模型输出,$ \ell $ 是损失函数。梯度为:
海森矩阵则为梯度的梯度。通过链式法则,可以得到所谓的“高斯-牛顿分解”:
对于凸损失函数(如*方损失),第一项总是半正定的。经验上,第二项通常较小,尤其是在接*全局最优解时(此时 $ f_\theta(x) \approx y $,使得 $ \frac{\partial \ell}{\partial f} $ 接*零)。因此,海森矩阵的迹可以*似为:
最小化海森矩阵的迹,*似于最小化模型输出对参数的梯度范数,这与最大化模型的“全层边际”相关,是一种隐式的正则化。
证明:梯度流收敛于最大边际解
在关于分类问题隐式偏差的章节中,我们曾陈述了一个定理:对于线性模型和梯度流,迭代方向会收敛到最大边际解的方向。当时我们只给出了直观解释,现在我们来提供一个简洁的形式化证明。
考虑指数损失(与逻辑损失*似):
定义*滑边际为:
可以证明真实边际 $ \gamma(w) $ 大于*滑边际 $ \tilde{\gamma}(w) $。因此,如果我们能证明*滑边际收敛到最大边际 $ \gamma^* $,那么真实边际也必然收敛到 $ \gamma^* $。
证明的核心是分析梯度流下 $ -\log L(w_t) $ 的增长。梯度流的动态为 $ \dot{w}_t = -\nabla L(w_t) $。计算可得:
通过积分,可以得到 $ -\log L(w_t) $ 的下界。关键步骤是利用柯西-施瓦茨不等式和最大边际解 $ w^* $ 的性质,证明:
将其代入积分式,最终可以推导出:
这就完成了定理的证明。
无监督学习与潜在变量模型
现在,我们转向课程的最后一部分:无监督学习。在许多实际问题中,我们拥有大量未标记的数据。无监督学习的核心是如何利用这些数据来学习数据的底层结构或表示。
我们将重点讨论一种经典的理论方法:矩方法。虽然其实用性可能不如期望最大化(EM)算法,但其分析清晰,数学技巧优美,并且对理解其他问题也有帮助。
问题设定
我们关注潜在变量模型。假设数据由某个参数分布 $ p_\theta $ 生成,我们观察到未标记的样本 $ x_1, \dots, x_n \sim p_\theta $。目标是仅从数据中恢复参数 $ \theta $。
一个典型例子是高斯混合模型:
- 参数 $ \theta $ 包含 $ K $ 个高斯分布的均值 $ \mu_1, \dots, \mu_K $ 和混合权重 $ p_1, \dots, p_K $。
- 生成过程:首先以概率 $ p_i $ 选择第 $ i $ 个分量,然后从该高斯分布 $ \mathcal{N}(\mu_i, I) $ 中采样数据 $ x $。
我们的任务是从一堆无标签的数据点中,反推出这些 $ \mu_i $ 和 $ p_i $。
矩方法简介
矩方法的核心思想是:
- 估计矩:利用经验样本计算数据分布的各阶矩(如均值、协方差等)。
- 从矩恢复参数:建立矩与模型参数之间的理论关系,并通过求解这些关系来恢复参数。
以下是该方法的具体步骤:
第一步:计算矩
矩是描述分布形状的统计量。对于随机向量 $ x $:
- 一阶矩:均值 $ M_1 = \mathbb{E}[x] $
- 二阶矩:$ M_2 = \mathbb{E}[x x^T] $(协方差矩阵加上均值的外积)
- 三阶矩:一个三阶张量 $ M_3 $,其中 $ (M_3)_{ijk} = \mathbb{E}[x_i x_j x_k] $
- 更高阶矩依此类推。
第二步:设计恢复算法
设计一个算法 $ \mathcal{A} $,它接收估计出的矩 $ \hat{M}_1, \hat{M}_2, \dots $,并输出参数估计 $ \hat{\theta} $。算法的设计依赖于从理论矩 $ M $ 精确恢复 $ \theta $ 的可能性。
第三步:应用于经验矩并分析鲁棒性
将算法 $ \mathcal{A} $ 应用于从有限数据中计算出的经验矩 $ \hat{M} $。由于经验矩存在估计误差,我们需要证明算法 $ \mathcal{A} $ 对小的扰动是鲁棒的,即当 $ \hat{M} \approx M $ 时,有 $ \mathcal{A}(\hat{M}) \approx \theta $。
在本课程中,我们将主要关注前两步,即无限数据情况下的精确恢复,因为这是算法的核心。鲁棒性分析虽然对发表论文至关重要,但涉及更多数学细节,在此不做深入展开。
实例分析:两个高斯分量的混合
让我们通过一个简单例子来理解矩方法。考虑两个高斯分量的混合,且权重相等(各为 $ 1/2 $),均值分别为 $ \mu $ 和 $ -\mu $,协方差为单位矩阵。
- 一阶矩:\[M_1 = \mathbb{E}[x] = \frac{1}{2}\mu + \frac{1}{2}(-\mu) = 0 \]一阶矩为零,不包含 $ \mu $ 的信息。
- 二阶矩:\[\begin{aligned} M_2 &= \mathbb{E}[x x^T] \\ &= \frac{1}{2}\mathbb{E}_{z \sim \mathcal{N}(\mu, I)}[z z^T] + \frac{1}{2}\mathbb{E}_{z \sim \mathcal{N}(-\mu, I)}[z z^T] \\ &= \frac{1}{2}(\mu\mu^T + I) + \frac{1}{2}(\mu\mu^T + I) \\ &= \mu\mu^T + I \end{aligned} \]二阶矩包含了 $ \mu $ 的信息。我们可以通过两种方式恢复 $ \mu $:
- 减去单位矩阵并取*方根:$ \mu\mu^T = M_2 - I $。
- 谱方法:注意到 $ M_2 $ 的最大特征向量方向就是 $ \mu $ 的方向(即 $ \mu / |\mu| $),对应的特征值为 $ |\mu|^2 + 1 $。
在这个简单例子中,仅使用二阶矩就足以恢复参数 $ \mu $。
需要更高阶矩的情形:多个高斯分量的混合
当高斯分量数量 $ K > 2 $ 时,情况变得复杂。假设有 $ K $ 个分量,均匀混合(每个权重为 $ 1/K $),均值分别为 $ \mu_1, \dots, \mu_K $。
- 一阶矩:$ M_1 = \frac{1}{K} \sum_{i=1}^K \mu_i $,仅为均值的*均。
- 二阶矩:$ M_2 = \frac{1}{K} \sum_{i=1}^K (\mu_i \mu_i^T) + I $,为均值外积的*均加上单位矩阵。
现在的问题是:仅凭 $ M_1 $ 和 $ M_2 $ 能唯一恢复出所有 $ {\mu_i} $ 吗?答案是否定的。
为什么二阶矩不够?
考虑将所有均值向量排列成矩阵 $ U = [\mu_1, \dots, \mu_K] \in \mathbb{R}^{d \times K} $。那么:
其中 $ \mathbf{1} $ 是全1向量。现在,假设我们有一个 $ K \times K $ 的正交旋转矩阵 $ R $(满足 $ RR^T = I $),并且这个旋转矩阵保持全1向量不变(即 $ R\mathbf{1} = \mathbf{1} $)。这样的旋转矩阵在 $ K \geq 3 $ 时是存在的。
构造新的均值矩阵 $ U' = U R $。可以验证:
- $ U' \mathbf{1} = U R \mathbf{1} = U \mathbf{1} $,所以 $ M_1 $ 不变。
- $ U' (U')^T = U R R^T U^T = U U^T $,所以 $ M_2 $ 也不变。
然而,$ U $ 和 $ U' = UR $ 代表了完全不同的 $ K $ 个均值向量集合(因为列被旋转了)。这意味着,仅凭一阶和二阶矩,我们无法区分 $ U $ 和 $ UR $,因此无法唯一确定各个 $ \mu_i $。为了消除这种旋转不确定性,我们需要引入三阶矩 $ M_3 $ 的信息。
总结
本节课中我们一起学习了:
- 隐式正则化:探讨了最小化海森矩阵迹的直观意义,并将其与模型*滑性联系起来。
- 理论证明:为梯度流收敛于最大边际解的定理提供了一个优雅的形式化证明。
- 无监督学习框架:引入了潜在变量模型(如高斯混合模型)作为无监督学习的核心问题。
- 矩方法:介绍了一种通过数据矩来恢复模型参数的经典理论方法。
- 实例分析:
- 对于两个高斯分量的混合,二阶矩足以恢复参数。
- 对于更多分量的混合,二阶矩存在无法识别的旋转模糊性,因此需要利用三阶或更高阶的矩。

在下一讲中,我们将继续探讨如何利用三阶矩来唯一恢复高斯混合模型的参数,并可能涉及更复杂的模型。
机器学习理论 18:高斯混合模型与谱聚类 🧮


在本节课中,我们将继续学习无监督学习。首先,我们将深入探讨矩方法,特别是高阶矩的应用。接着,我们将转向另一种无监督算法——谱聚类。
回顾:高斯混合模型与矩方法
上一节我们讨论了高斯混合模型。其设定是,数据点 X 采样自一个由 K 个高斯分布组成的混合模型,每个分布有其均值 μᵢ 和协方差 Σᵢ。
我们首先讨论了 K=2 的特殊情况,此时可以通过计算数据的二阶矩来恢复均值 μᵢ。然而,当 K>2 时,仅凭二阶矩 E[X⊗X] 不足以精确识别所有 μᵢ,因为可能存在多组不同的均值向量产生相同的二阶矩。
这促使我们考虑使用三阶矩 E[X⊗X⊗X]。我们的目标是证明,通过三阶矩和一阶矩,我们可以恢复出关于 μᵢ 的足够信息。
三阶矩的计算与张量分解
对于一个从高斯分布 N(a, I) 中采样的随机变量 Z,其三阶矩可以表示为:
E[Z⊗Z⊗Z] = a⊗a⊗a + Σ_{l=1}^{d} (a_l * e_l⊗e_l⊗e_l + e_l⊗a⊗e_l + e_l⊗e_l⊗a)
其中 e_l 是标准基向量。这个引理表明,我们可以通过 Z 的一阶矩和三阶矩的线性组合来得到 a⊗a⊗a。
将这个引理应用于高斯混合模型中的每个成分,我们可以计算出 X 的三阶矩,并将其表达为关于 μᵢ 的函数。经过整理,我们可以利用观测数据的一阶矩和三阶矩,计算出一个核心张量:
T = (1/K) * Σ_{i=1}^{K} μᵢ⊗μᵢ⊗μᵢ
于是,问题转化为一个张量分解问题:给定一个形如 Σ_{i=1}^{K} aᵢ⊗aᵢ⊗aᵢ 的低秩张量 T,如何恢复出未知的向量 aᵢ?
张量分解问题概述
张量分解,特别是CP分解,旨在将一个张量分解为多个秩一张量之和。这与矩阵的奇异值分解类似,但更为复杂。
以下是不同条件下张量分解的可解性概述:
- 最坏情况:一般情况下,该问题是计算困难的,解可能不唯一或难以高效找到。
- 正交情况:如果向量 a₁, ..., a_K 彼此正交,那么每个 aᵢ 都是最大化
T(x,x,x)的全局极值点,可以通过类似幂迭代的方法在多项式时间内找到。 - 线性独立情况:如果向量组仅是线性独立的,同样可以在多项式时间内分解,例如使用“Jennrich算法”。
- 过完备情况:当成分数量 K 大于维度 d 时,分解更具挑战性,但仍有方法:
- 可以使用更高阶矩(如六阶)构造张量,条件放宽为
aᵢ⊗aᵢ线性独立。 - 使用四阶张量和更精巧的算法(如“Frobenius范数”方法),在 K < d² 的“一般”条件下可解。
- 如果 aᵢ 是随机生成的,那么即使使用三阶张量,也能处理 K 与 d 的多项式关系(如 K ~ d^{1.5})。
- 可以使用更高阶矩(如六阶)构造张量,条件放宽为
矩方法结合张量分解的框架非常强大,可应用于许多潜变量模型,如独立成分分析、隐马尔可夫模型和主题模型。
谱聚类:基于数据点间关系的无监督学习
现在,我们转向另一种无监督学习方法——谱聚类。与矩方法关注数据坐标间的高阶关系不同,谱聚类关注的是数据点之间的成对关系。
假设我们有 n 个数据点 X₁, ..., X_n,并给定一个 n×n 的相似度矩阵 G。G_{ij} 衡量了数据点 X_i 和 X_j 之间的相似性。
以下是两个例子:
- 图像数据:G_{ij} 表示两幅图像语义上的相似度。
- 社交网络:用户为节点,G_{ij}=1 表示用户 i 和 j 是好友,这隐含了他们在兴趣、职业等方面的相似性。目标是从这个未标记的图中发现隐藏的社区(即对用户进行聚类)。
谱聚类的核心思想是:图(或相似度矩阵)的特征分解与图的分割(聚类)问题密切相关。通过研究矩阵的特征向量,可以揭示数据点的簇结构。
随机分块模型:一个理论示例
为了更具体地说明,我们考虑一个经典的随机图模型——随机分块模型。
假设有 n 个节点,属于两个隐藏的社区 S 和 S̅(假设大小相等,各为 n/2)。图的生成规则如下:
- 如果两个节点属于同一社区,它们之间以概率 p 存在边。
- 如果两个节点属于不同社区,它们之间以概率 q 存在边。
- 通常假设 p > q,即社区内部连接更紧密。
我们的目标是仅从观测到的图 G(邻接矩阵)中恢复出隐藏的社区 S 和 S̅。
首先,分析期望矩阵 Ḡ = E[G]。它是一个分块矩阵,其前 n/2 行/列(对应 S)和后 n/2 行/列(对应 S̅)构成块。
- Ḡ 的最大特征向量是全1向量 1,其特征值为
(p+q)n/2。这反映了图的*均度。 - Ḡ 的第二特征向量是一个指示向量 u:在 S 对应的位置为 +1,在 S̅ 对应的位置为 -1。其特征值为
(p-q)n/2。
关键在于,第二特征向量 u 完美地揭示了社区结构:只需查看其各分量的符号,即可将节点划分到两个社区。
其直觉是,当我们从 Ḡ 中减去一个由常数 q 构成的背景矩阵(即 q * 11^⊤)后,剩下的矩阵 Ḡ' 是一个块对角矩阵。块对角矩阵的特征向量自然与块结构对齐。加上背景噪声后,全1向量成为主方向,而指示社区结构的向量成为第二方向。
从理论到实践:处理随机性
在实践中,我们只能观测到随机实现的矩阵 G,而非期望矩阵 Ḡ。
我们的算法是:计算矩阵 G - ((p+q)/2) * 11^⊤ 的第二特征向量(这里我们减去了估计的背景)。我们希望这个特征向量接*于理想的指示向量 u。
这要求随机噪声矩阵 G - E[G] 的谱范数远小于信号强度 (p-q)n/2。如果这个条件成立,那么根据矩阵扰动理论(如Davis-Kahan定理),观测矩阵的特征向量将接*期望矩阵的特征向量。证明这个谱范数条件成立,需要用到本课程早期介绍过的集中不等式工具。
对于多于两个社区的情况,原理类似,但需要考察多个特征向量,数学分析会更为复杂,其根本思想依然是通过特征向量来捕捉图的块结构。
总结
本节课我们一起学习了无监督学习的两个重要方向。
首先,我们深入探讨了矩方法在高斯混合模型中的应用。通过计算数据的高阶矩(特别是三阶矩),我们将参数估计问题转化为一个张量分解问题,并概述了在不同条件下解决该问题的可能性。
接着,我们介绍了谱聚类的基本思想。其核心在于利用数据点间的相似度矩阵,通过特征分解来发现数据中隐藏的簇结构。我们以随机分块模型为例,从理论上解释了为什么特征向量能够揭示社区信息,并简要讨论了如何将这一理论应用于实际的随机数据。


这两种方法展示了线性代数和概率论工具在解决复杂无监督学习问题中的强大力量。
机器学习理论 19:谱聚类 📊


在本节课中,我们将学习谱聚类方法。我们将从随机块模型的分析开始,然后探讨如何将谱方法应用于最坏情况下的图,以找到*似的最稀疏割。最后,我们将简要介绍如何将谱思想与深度学习结合,用于无监督表示学习。
随机块模型回顾
上一节我们介绍了随机块模型。我们的目标是对从该模型生成的图 G 进行特征分解。
我们证明了,如果对图的期望 E[G] 进行特征分解,第二个特征向量 u 的形式类似于 [1, 1, ..., -1, -1, ...],这直接揭示了隐藏的社区结构(S 和 S^c)。也就是说,取期望图的第二个特征向量就能得到隐藏社区。
我们论证过,关键在于证明随机图 G 与其期望 E[G] 在算子范数下足够接*。这是因为如果我们考虑方程 G - λ₁v₁v₁ᵀ = (G - E[G]) + (λ₂u₂u₂ᵀ),那么只要扰动项 G - E[G] 的算子范数远小于信号项 λ₂u₂u₂ᵀ 的算子范数(即 (p - q)n/2),对等式左侧矩阵进行特征分解得到的特征向量就会接*真实的 u。
证明扰动项的上界
现在,我们来证明这个关键引理:以高概率成立,||G - E[G]|| ≤ O(√(n log n))。
这看起来与我们之前讨论的标量集中不等式不同,因为 G 是矩阵。然而,我们可以将其转化为熟悉的形式。
算子范数可以表示为:
||G - E[G]|| = max_{||v||=1} |vᵀ(G - E[G])v|
这等价于:
max_{||v||=1} | Σ_{i,j} v_i v_j (G_{ij} - E[G_{ij}]) |
现在,对于固定的单位向量 v,内部求和 Σ_{i,j} v_i v_j G_{ij} 是一组独立随机变量的和,其期望是 Σ_{i,j} v_i v_j E[G_{ij}]。因此,我们可以对固定的 v 应用霍夫丁不等式,证明其经验值与期望值接*。
挑战在于如何处理外部的 max。这正是均匀收敛问题。我们可以使用离散化技术来处理。
以下是步骤:
- 首先,对于任意固定的单位向量
v,应用霍夫丁不等式,得到偏离概率上界为exp(-ε²/2)。 - 然后,在单位球面上选取一个
ε-网。这个网的大小是指数级的,但只带来对数因子损失。 - 对所有网中的点取并集界,并利用
ε-网的*似性质将结论推广到所有单位向量v。 - 最终选择
ε = O(√(n log n)),使得失败概率足够小。
这样就证明了引理。这个证明虽然有些技术性,但思路直接,能清晰地展示各项依赖关系。
信号与噪声比较
得到噪声水* O(√(n log n)) 后,我们可以将其与信号水* (p - q)n/2 进行比较。
结论是:如果 p - q ≫ √(log n / n),那么我们就可以*似地恢复隐藏社区。这意味着社区间的连接概率不需要有巨大差异,只要分离度随图规模增大而缓慢衰减即可。直观上,观察的节点越多,社区结构就越清晰。
关于随机块模型部分,还有一些补充说明:
- 可以通过后处理步骤,在特定条件下从*似恢复提升到精确恢复。
- 可以扩展到多个社区块的情况。
- 文献中有更精确的阈值分析。
最坏情况图的谱聚类
现在,我们转向另一个重要主题:对最坏情况图进行聚类。我们仍然使用特征分解,但分析方式将不同,因为图不再是随机的。
首先,我们需要定义目标:在最坏情况图中,我们要恢复什么“隐藏社区”?这需要我们引入一些定义。
图的传导率
给定一个无向图 G=(V, E),设 S 是顶点集 V 的一个子集,S^c 是其补集。
子集 S 的传导率 φ(S) 定义如下:
φ(S) = |E(S, S^c)| / vol(S)
其中:
|E(S, S^c)|是连接S和S^c的边的总数。vol(S) = Σ_{i∈S} d_i是S中所有顶点的度之和,即与S相关联的总边数(端点之一在S内)。
传导率衡量了一个割的“稀疏”程度。φ(S) 越小,说明 S 和 S^c 之间的连接越少,割得越好。传导率总是小于等于1。
为了避免对称性带来的混淆(φ(S) 和 φ(S^c) 通常不同),我们通常只考虑体积较小的一侧。因此,我们要求 vol(S) ≤ vol(V)/2。
图 G 的最稀疏割传导率 Φ(G) 定义为所有满足体积约束的割中,最小的传导率:
Φ(G) = min_{S: vol(S) ≤ vol(V)/2} φ(S)
在最坏情况下,我们的目标是找到一个*似的最稀疏割 Ŝ,使得 φ(Ŝ) 接* Φ(G)。
归一化邻接矩阵与拉普拉斯矩阵
设 D 为度矩阵(对角矩阵,D_{ii} = d_i)。我们定义归一化邻接矩阵 Ā:
Ā = D^{-1/2} A D^{-1/2}
其中 A 是邻接矩阵。这意味着 Ā_{ij} = A_{ij} / √(d_i d_j)。
在许多情况下,为简化分析,可以假设图是 k-正则的(所有顶点度相同)。此时,Ā = (1/k) A,归一化只是缩放。
接着定义归一化拉普拉斯矩阵 L:
L = I - Ā
其中 I 是单位矩阵。归一化拉普拉斯矩阵和归一化邻接矩阵的特征值与特征向量密切相关。如果 Ā 的特征值为 1 - λ₁, 1 - λ₂, ...(按递减排序),对应的特征向量为 u₁, u₂, ...,那么 L 的特征值就是 λ₁, λ₂, ...(按递增排序),特征向量相同。
切比雪夫不等式:连接谱与割
一个核心理论结果是切比雪夫不等式,它将图的谱(特征值)与最稀疏割联系起来。
该不等式表述如下:
λ₂ / 2 ≤ Φ(G) ≤ √(2 λ₂)
其中 λ₂ 是归一化拉普拉斯矩阵 L 的第二小特征值(即第一非零特征值)。
这个不等式极其重要,因为它将组合优化问题(寻找最稀疏割)与线性代数问题(计算矩阵特征值)联系了起来。前者是NP难的,而后者可以高效计算。
不仅如此,我们还能高效地找到一个*似割 Ŝ,满足:
φ(Ŝ) ≤ √(2 λ₂) ≤ 2√(Φ(G))
通过取整特征向量寻找*似割
以下是寻找这样一个*似割 Ŝ 的过程:
- 计算归一化拉普拉斯矩阵
L的第二个特征向量u₂。设其分量为β₁, β₂, ..., β_n。 - 根据分量值
β_i对顶点进行排序。 - 考虑所有前缀集合:
S₁ = {顶点对应最小的 β 值},S₂ = {顶点对应最小的两个 β 值},...,S_n = {所有顶点}。 - 在这些候选集合中,至少有一个集合
Ŝ满足φ(Ŝ) ≤ √(2 λ₂)。
本质上,我们对特征向量的分量设置一个阈值,将所有低于阈值的顶点归入集合 S。通过尝试所有可能的阈值(即所有前缀),我们保证能找到那个好的割。
直观理解
为什么第二特征向量与割相关?
首先,第一特征向量(对应特征值0或1)通常与顶点度相关(例如 [√d₁, √d₂, ...]),它捕获的是图的“背景”密度信息,而非社区结构。
第二特征向量才开始捕捉顶点间的相互关系。我们可以从瑞利商的角度理解。
对于拉普拉斯矩阵 L,其瑞利商为 R(v) = (vᵀ L v) / (vᵀ v)。
可以推导出,对于正则图,vᵀ L v ∝ Σ_{(i,j)∈E} (v_i - v_j)²。
如果我们限制 v 为二值向量(例如,v_i ∈ {0, 1}),那么 v 的支撑集就定义了一个割 S。此时,瑞利商 R(v) 正比于割 S 的传导率 φ(S)。
因此:
- 寻找最稀疏割
Φ(G)等价于在二值向量约束下最小化瑞利商。 - 特征向量分解则是无约束地最小化瑞利商,得到的是实数向量。
证明的思路就是:先通过特征分解得到无约束最优解(实数特征向量),然后通过一个“取整”步骤将其转化为二值向量,并证明这个取整过程不会使瑞利商(即传导率)增加太多。
这些理论可以自然地推广到加权图和非正则图。
从理论到实践:谱聚类算法
上述理论主要来自理论计算机科学社区,研究如何分割给定的图。在机器学习中,我们面临一个额外步骤:如何从数据构造这个图。
经典的谱聚类算法步骤如下:
- 构建图:给定
n个数据点x₁, ..., x_n。计算相似度矩阵W,其中W_{ij} = exp(-||x_i - x_j||² / (2σ²))(高斯核)。将W视为加权邻接矩阵。 - 计算归一化拉普拉斯矩阵
L。 - 计算特征向量:计算
L的前k个最小特征值对应的特征向量u₁, ..., u_k(k为期望的簇数)。 - 形成新特征表示:将每个数据点
x_i映射到由这些特征向量第i个分量组成的k维向量:z_i = [u₁(i), u₂(i), ..., u_k(i)]。这可以看作是一种降维或表示学习。 - 对表示进行聚类:在新的
k维空间中对点{z_i}运行聚类算法(如K-Means)。
存在的问题与改进思路
这种方法的一个核心问题是:图 G 本身可能没有意义。如果原始数据点在高维空间中彼此远离(例如,两张不同的狗图片欧氏距离可能很大),那么基于欧氏距离构建的图可能无法捕获语义相似性。
因此,理论分析只保证了“给定一个好图,能找到其*似最稀疏割”,但并未说明如何从数据中获得一个“好图”。
*期研究尝试将谱思想与深度学习结合。基本思路是:
- 考虑定义在整个数据分布(总体)上的无限大图,其中顶点是所有可能的数据点(如图像),边权重定义在语义相似或视觉相*的点之间。
- 这个图的特征向量是定义在全体数据点上的函数。我们无法直接计算。
- 我们用一个参数化模型(如神经网络)
f_θ(x)来*似这个特征函数。目标是找到参数θ,使得f_θ(x)成为该无限图拉普拉斯矩阵的特征函数。 - 通过推导,可以得到一个可优化的目标函数,其经验估计形式与实践中使用的对比学习损失函数相似。这为理解对比学习提供了新的谱视角。
总结
本节课我们一起学习了谱聚类方法。
- 我们首先回顾了随机块模型,分析了谱方法如何恢复隐藏社区,关键在于证明随机图与其期望在谱范数下接*。
- 接着,我们探讨了如何将谱方法应用于最坏情况图。我们定义了传导率和最稀疏割,并介绍了切比雪夫不等式,该不等式将图的传导率与拉普拉斯矩阵的第二特征值联系起来,并提供了通过取整特征向量来寻找*似稀疏割的算法。
- 最后,我们讨论了谱聚类在机器学习中的应用,以及当前研究如何将谱理论与深度学习结合,用于设计更有效的无监督表示学习方法。


谱方法的核心在于通过线性代数(特征分解)来揭示数据中非线性的簇结构,是连接图论、线性代数和机器学习的重要桥梁。
机器学习理论 20:非凸优化、PCA的非凸优化与矩阵补全 🎯


在本节课中,我们将要学习非凸优化在机器学习中的核心问题,特别是为什么梯度下降等为凸函数设计的算法,在非凸的深度学习目标函数上依然能够有效工作。我们将通过分析优化问题的“地貌”来理解这一点,并探讨两个具体的例子:主成分分析和矩阵补全问题。
概述:非凸优化的挑战与机遇
上一节我们介绍了机器学习理论中的一些宏观问题。本节中,我们来看看从优化角度理解深度学习。
“优化地貌”指的是损失函数构成的曲面。我们不会过多关注如何设计更新算法,而是重点分析我们优化的函数具有何种特性,使得我们可以使用一些标准优化算法。
你不需要深入的优化背景,但需要知道梯度下降是什么。我们将要解决的核心问题是:为什么许多为凸函数设计的优化算法,在深度学习的非凸函数上依然有效?在实践中,人们观察到梯度下降或其变种通常能很好地优化机器学习中的非凸函数。我们试图理解其原因。
以下是几个关键观察事实:
- 观察一:梯度下降并不总能找到全局最小值。对于连续函数,这显而易见。例如,从一个局部最小值附*的点出发,梯度下降可能会收敛到该局部最小值,即使存在更优的全局最小值。
- 观察二:对于一般的非凸函数,寻找全局最小值是NP难问题。这意味着存在一些函数,无法在多项式时间内通过任何算法找到其全局最小值。
- 观察三:在凸函数的情况下,梯度下降可以保证收敛到全局最小值。
- 观察四:深度学习中的目标函数是非凸的。这几乎是不言自明的,因为一旦网络超过两层,由于非线性激活函数的存在,目标函数通常是非凸的。
- 观察五:梯度下降或随机梯度下降在实践中确实有效,能够找到损失函数的*似(有时甚至几乎是精确的)全局最小值。例如,在图像任务中,损失函数非负,而优化后得到的损失值通常非常小,这让人相信算法找到了一个*似全局最优解。
那么,如何调和这些看似矛盾的事实呢?关键在于,NP难的结论是针对最坏情况下的函数。而我们实际优化的函数并非最坏情况。我们可以将函数家族想象成一个集合,其中包含非常难优化的函数,也包含一个易于优化的子集(凸函数)。然而,在凸函数和最难函数之间,还存在一个更大的函数子集,它们虽然非凸,但具有一些“良性”性质,使得梯度下降能够有效优化。本节课的目标就是识别这些良性性质,并证明某些机器学习损失函数具备这些性质。
本讲计划与核心思路
我们本讲(及下一讲第一部分)的计划如下:
- 识别一个更大的函数集合,对于该集合中的函数,梯度下降能够收敛到全局最优解。
- 证明某些机器学习损失函数属于这个集合。
大部分精力将放在第二部分。第一部分的结果在直觉上是清晰的,但其详细证明需要大量优化算法分析的背景知识,因此我们不会深入细节。
核心思路非常简单:
我们知道梯度下降可以找到局部最小值(这里有一个需要注意的细微之处)。此外,如果我们知道函数的所有局部最小值同时也是全局最小值,那么结合这两点就意味着梯度下降可以找到全局最小值。
因此,我们要识别的、能被梯度下降有效优化的函数集合,就是那些“所有局部最小值均为全局最小值”的函数。然后,我们需要证明实际使用的机器学习函数具有这一性质。当然,并非所有问题都具备此性质,我们将展示一些可以严格证明此性质的简单案例。
收敛到局部最小值:严格鞍点条件
如前所述,关于“梯度下降能收敛到局部最小值”这一说法存在细微之处。我们需要将其形式化。
首先进行一些定义。设函数 F 是二阶可微的(为简化起见)。点 x 是局部最小值的定义是:存在一个包含 x 的开邻域 N,使得在该邻域内,F(x) 是所有函数值中最小的。
从微积分可知,如果 x 是局部最小值,则梯度 ∇F(x) = 0,且海森矩阵 ∇²F(x) 是半正定的。然而,反之则不成立。梯度为零且海森矩阵半正定并不保证该点是局部最小值。
一个简单的例子是函数 f(x₁, x₂) = x₁² + x₂³。在原点 (0,0),梯度为零,海森矩阵是半正定的(实际上是正定的,因为 ∂²f/∂x₁² = 2 > 0,其他二阶导为0)。但原点不是局部最小值,因为沿着 x₂ 方向(立方函数),在原点任意小的邻域内,我们都可以找到使函数值更小的点。
问题的根源在于,当梯度为零且海森矩阵只是半正定(而非严格正定)时,海森矩阵在某些方向上的曲率可能为零(即该方向是*坦的)。此时,高阶导数开始发挥作用。如果二阶导数在某个方向严格为正或负,那么在足够小的邻域内,二阶项将主导函数行为。但如果二阶导数为零,那么三阶甚至更高阶的导数将变得重要,这使得分析变得复杂。
事实上,存在以下定理:在不做任何假设的情况下,验证一个点是否为局部最小值是NP难问题。因此,寻找局部最小值本身也是NP难的。这为我们之前的计划带来了障碍,因为如果寻找局部最小值都很难,那么我们的计划就无法执行。
解决方法是排除那些需要处理高阶导数的病态情况。为此,我们引入 严格鞍点条件。这个条件本质上假设函数中没有那些微妙的、需要检查高阶导数才能判断是否为局部最小值的候选点。任何点是否为局部最小值,都可以仅通过检查一阶和二阶导数来确定。
以下是严格鞍点条件的定义(采用 Li et al. 的表述):我们称函数 F 是 (α, β, γ)-严格鞍 的,如果对于每一个点 x ∈ ℝᵈ,都满足以下三个条件之一:
- ||∇F(x)|| ≥ α (梯度很大,不可能是*稳点)。
- λ_min(∇²F(x)) ≤ -β (海森矩阵的最小特征值为负,说明是严格鞍点,不可能是局部最小值)。
- x 与某个真正的局部最小值 x* 在欧几里得距离上不超过 γ。
条件1和2排除了那些明显不是局部最小值的点。条件3则说明,如果一个点不满足1和2(即梯度很小且海森矩阵*似半正定),那么它一定非常接*一个真正的局部最小值。这就排除了之前提到的病态情况。
关于这个条件有几点说明:首先,α, β, γ 是正常数。其次,这个条件在实践中很难数值验证,它更像是一个用于理论证明的性质。
有了严格鞍点条件,我们就可以得到以下定理:假设函数 F 满足 (α, β, γ)-严格鞍条件,那么许多优化算法(如梯度下降、随机梯度下降等),在适当的学习率下,可以在关于 (1/α, 1/β, 1/γ, 维度 D) 的多项式时间内,收敛到某个局部最小值的 ε 邻域内。
现在,如果我们额外假设 所有局部最小值都是全局最小值,那么结合严格鞍点条件,就意味着优化器可以在多项式时间内收敛到全局最小值。我们可以将“局部最小即全局最小”与严格鞍点条件重新表述为以下定理形式:
假设存在常数 ε₀ > 0, τ₀ > 0, C,使得对于任意 x ∈ ℝᵈ,如果满足:
- ||∇F(x)|| ≤ ε₀
- ∇²F(x) ⪰ -τ₀ I (海森矩阵的最小特征值不小于 -τ₀)
那么 x 一定与某个全局最小值在欧氏距离上不超过 ε₀^C。
在此条件下,许多优化器可以收敛到该函数的全局最小值,误差为 δ,所需时间是关于 (1/δ, 1/τ₀, 维度 D) 的多项式。
至此,我们完成了计划的第一部分:识别了一类具有“良性”地貌(所有局部最小即全局最小,且满足严格鞍点条件)的函数,梯度下降可以在多项式时间内优化它们。接下来,我们将展示机器学习中一些具备此性质的例子。
示例一:主成分分析与矩阵分解
第一个例子是主成分分析,或者更广义地说,矩阵分解。我们考虑秩为1的情况。假设给定一个 D × D 的对称半正定矩阵 M。我们希望找到最好的秩1*似。从线性代数可知,最好的秩1*似是由最大特征值对应的特征向量给出的。
然而,我们感兴趣的是与之对应的非凸目标函数。我们试图寻找向量 x,使得以下目标函数最小化:
g(x) = || M - x xᵀ ||_F²
其中 ||·||_F 表示弗罗贝尼乌斯范数。这是一个非凸函数,因为它是关于 x 的四次多项式。
我们的目标是证明:即使这个函数是非凸的,在矩阵 M 是秩1且半正定的假设下,它的所有局部最小值都是全局最小值。
在一维情况下,函数 g(x) = (M - x²)² 的图像有两个对称的局部最小值,它们都是全局最小值。在高维情况下,由于旋转对称性,情况类似但更复杂。
证明思路很简单:
- 首先找到所有一阶*稳点(梯度为零的点)。
- 然后从这些*稳点中筛选出局部最小值。
- 证明这些局部最小值都是全局最小值。
步骤一:求*稳点。
计算梯度并设其为零:∇g(x) = -4 (M x - ||x||² x) = 0。
这意味着 M x = ||x||² x。这恰好是特征向量的定义:x 是 M 的特征向量,对应的特征值是 ||x||²。
假设 M 有特征值 λ₁ ≥ λ₂ ≥ ... ≥ λ_D ≥ 0,对应的单位特征向量为 v₁, v₂, ..., v_D。那么所有*稳点都具有形式 x = ±√λᵢ * vᵢ(对于每个 i)。
步骤二:利用海森矩阵筛选局部最小值。
我们需要检查哪些*稳点是局部最小值。我们通过分析海森矩阵的二次型来做到这一点,而不直接写出庞大的海森矩阵。一个有用的技巧是计算 vᵀ ∇²g(x) v 对于特定方向 v 的值。
通过计算(具体过程略),可以得到二次型公式。我们关心的是,对于局部最小值,这个二次型对任意 v 都必须非负。
一个信息量很大的方向是选择 v = v₁,即对应最大特征值 λ₁ 的特征向量(也就是全局最小值的方向)。将 v₁ 代入二次型公式,并利用 x 是*稳点(即 M x = λ x,其中 λ = ||x||²)的性质,我们可以得到一个不等式。
现在考虑两种情况:
- x 对应最大特征值 λ₁(即 x = ±√λ₁ v₁)。那么它显然是全局最小解。
- x 对应其他特征值 λ < λ₁。由于不同特征值对应的特征向量正交,有 xᵀv₁ = 0。将这一点代入之前得到的关于 v₁ 的二次型不等式,最终会推导出 λ ≥ λ₁,这与假设 λ < λ₁ 矛盾。因此,任何对应非最大特征值的*稳点,其海森矩阵在 v₁ 方向上的二次型必定为负,这意味着它不是局部最小值(因为存在一个方向使得二阶变化为负)。
因此,唯一的局部最小值就是那些对应最大特征值 λ₁ 的*稳点,也就是全局最小值。这就完成了证明。
证明概要总结:如果一个*稳点 x 不是全局最优,那么在指向全局最优解的方向 v₁ 上移动,虽然一阶变化为零(因为是*稳点),但二阶变化是负的,这说明该点不是局部最小值。因此,只有全局最优解才能是局部最小值。
示例二:矩阵补全问题
第二个例子是矩阵补全,这是PCA或矩阵分解的一个升级版,也是机器学习中的一个重要问题。
问题定义:假设存在一个未知的秩为1、对称、半正定的地面真实矩阵 M = z zᵀ,其中 z ∈ ℝᵈ, ||z|| = 1。我们随机观测到 M 的一部分条目。具体来说,每个条目以概率 p 被独立地包含在观测集合 Ω 中。我们观测到的矩阵是 P_Ω(M),即仅保留 Ω 中索引对应的条目,其余位置置零。目标是从部分观测中恢复出完整的矩阵 M。
这个问题在推荐系统中非常重要。例如,矩阵的行代表用户,列代表商品,条目代表评分。我们只观测到部分用户对部分商品的评分,希望预测所有缺失的评分,以便进行推荐。恢复之所以可能,是因为我们假设了矩阵具有低秩结构(这里是秩1),这意味着其自由度远小于矩阵的条目数。
目标函数:一个实践中常用的方法是优化以下非凸目标函数:
F(x) = ∑_{(i,j) ∈ Ω} ( M_{ij} - x_i x_j )² = || P_Ω(M - x xᵀ) ||_F²
其中 x 是我们的参数向量,x xᵀ 是我们对完整矩阵的估计。我们希望在观测到的条目上,估计值与真实值尽可能接*。
不相干假设:为了使恢复成为可能,我们需要一个额外的假设,称为“不相干假设”。它要求地面真实向量 z 的各个分量不能过于集中,即其无穷范数 ||z||_∞ ≤ μ / √d,其中 μ 是一个常数或对数因子。这个假设排除了像 z = e₁(只有一个非零分量)这样的极端情况,因为那种情况下矩阵过于稀疏,除非观测到那个特定条目,否则无法恢复。
定理陈述:假设不相干条件成立,并且观测概率 p 满足 p ≥ poly(μ, log d) / ε(即 p 大致在 1/d 的量级,再乘以一些多项式和对数因子),那么函数 F(x) 的所有局部最小值都接*于 ±z(即地面真实解),误差在 √ε 级别。而 ±z 显然是全局最小值(此时损失为零)。此外,也可以证明该函数满足严格鞍点条件。
由于证明过程较长,我们将在下一讲中继续完成矩阵补全问题的证明。
总结

本节课中我们一起学习了非凸优化在机器学习中的核心分析思路。我们了解到,尽管优化一般非凸函数是困难的,但通过分析目标函数的“地貌”性质(如“所有局部最小即全局最小”和“严格鞍点条件”),我们可以解释为什么梯度下降等算法在实践中常常有效。我们通过主成分分析这个例子,详细演示了如何证明一个非凸函数具备这种良性地貌。最后,我们介绍了矩阵补全问题及其对应的非凸目标函数,并陈述了关于其优化地貌的定理,为下一讲的证明做好了铺垫。

浙公网安备 33010602011771号