New-York-University-Machine-Learning-Notes-全-

New York University Machine Learning Notes(全)

机器学习课程 P1:统计学习理论基础 🧠

在本节课中,我们将学习机器学习的核心理论基础——统计学习理论。我们将从决策理论的基本概念开始,逐步构建出经验风险最小化的框架,并探讨如何在实际中通过优化算法(如梯度下降)来寻找最优的决策函数。


课程概述与后勤安排 📋

课程网页已发布在GitHub上,请花时间阅读课程大纲和重要日期。本学期我们将使用Piazza进行课程讨论和答疑,这是提问的首选方式。

课程安排如下:

  • 周三课程:标准讲座,时间为晚上7点10分至9点。
  • 周四时段会议:额外的必修课程,通常用于扩展周三内容或补充数学主题。

课程评分构成如下:

  • 作业(约8次):占总分的40%。
  • 考试(两次):占总分的40%。
  • 项目:占总分的20%,包括最终报告和海报展示。
  • 额外加分:通过完成可选作业或在课堂/Piazza上积极贡献获得,最多可将最终成绩提高半个等级。

第一份作业将于明天发布,提交需使用NYU课堂系统并以PDF格式完成。合作完成作业是可以的,但需独立撰写解决方案并注明合作者。


从决策到学习:问题形式化 🎯

在数据科学中,我们通常需要根据输入信息采取行动或做出预测。为了系统地解决这类问题,我们首先需要将其形式化。

核心组成部分

一个典型的机器学习场景包含以下四个核心部分:

  1. 输入 (X):系统接收到的信息,例如一张图片、一段音频或一组特征。输入空间记为 𝒳
  2. 行动 (A):系统根据输入产生的输出,例如一个分类标签、一个数值或一个概率。行动空间记为 𝒜
  3. 结果 (Y):世界给出的真实结果或反馈,例如图片中是否有动物的真实情况。结果空间记为 𝒴
  4. 损失函数 (L):用于评估行动 A 相对于真实结果 Y 好坏的函数,记为 L(A, Y)。损失越小越好。

这个过程可以描述为:我们观察输入 X,通过某个策略(即决策函数)采取行动 A,然后世界揭示结果 Y,最后我们用 L(A, Y) 来评估这次行动。

经典问题示例

以下是几个机器学习问题的形式化示例:

  • 线性回归

    • 输入空间 𝒳 = ℝ^d (d维特征向量)
    • 行动/结果空间 𝒜 = 𝒴 = ℝ (预测一个实数值)
    • 损失函数 L(A, Y) = 1/2 (A - Y)^2 (平方损失)
  • 逻辑回归(用于分类)

    • 输入空间 𝒳 = ℝ^d
    • 行动空间 𝒜 = [0, 1] (预测一个介于0和1之间的数,常解释为概率)
    • 结果空间 𝒴 = {0, 1} (真实的类别标签)
    • 损失函数常使用交叉熵损失。
  • 支持向量机 (SVM)

    • 输入空间 𝒳 = ℝ^d
    • 行动空间 𝒜 = ℝ (产生一个得分,正数代表正类)
    • 结果空间 𝒴 = {0, 1}{-1, +1}
    • 损失函数如合页损失 (Hinge Loss)。

统计学习理论框架 📊

上一节我们定义了单次预测的评估方式。本节中,我们来看看如何评估和寻找一个整体的、优秀的预测策略(即决策函数)。

风险:理想的评估标准

我们假设存在一个未知的数据生成分布 P(X, Y),我们观察到的所有数据都来自这个分布。决策函数 f 的质量由其风险 (Risk)期望损失 (Expected Loss) 来衡量:

R(f) = 𝔼[L(f(X), Y)]

其中期望 𝔼 是对联合分布 P(X, Y) 取的。风险 R(f) 越小,表示决策函数 f 在平均意义上表现得越好。在所有可能的函数中,能达到最小风险的函数 f* 称为贝叶斯决策函数,它是我们学习的终极目标。

示例

  • 在平方损失下,贝叶斯决策函数是条件期望:f*(x) = 𝔼[Y | X=x]
  • 在0-1损失(分类错误率)下,贝叶斯决策函数是选择后验概率最大的类别:f*(x) = argmax_c P(Y=c | X=x)

经验风险:现实的替代方案

然而,我们无法直接计算风险,因为我们不知道真实分布 P(X, Y)。我们拥有的是一组从该分布中独立同分布采样得到的训练数据 D_n = {(x1, y1), ..., (xn, yn)}

根据大数定律,我们可以用经验风险 (Empirical Risk) 来近似真实风险:

R̂_n(f) = (1/n) Σ_{i=1}^n L(f(x_i), y_i)

经验风险 R̂_n(f) 是风险 R(f) 的一个无偏且一致的估计量。当数据量 n 足够大时,R̂_n(f) 会非常接近 R(f)


经验风险最小化及其挑战 ⚠️

既然我们可以用经验风险来评估函数,一个直接的想法是:在所有可能的函数中,选择那个在训练数据上表现最好的,即最小化经验风险的函数。这被称为经验风险最小化 (Empirical Risk Minimization, ERM)

f̂ = argmin_f R̂_n(f)

过拟合问题

然而,不加限制的ERM会导致严重的过拟合 (Overfitting)。考虑一个极端例子:假设我们只关心在有限的训练数据点上预测正确。我们可以构造一个函数,它仅在训练数据点上有正确的预测,在其他所有输入上都给出错误预测。这个函数的经验风险为0(完美拟合训练数据),但其真实风险却可能非常高(在实际应用中表现糟糕)。这是因为函数“记住”了训练数据,而没有学到能够泛化到新数据的规律。

假设空间:引入归纳偏好

为了解决过拟合,我们需要将搜索范围限制在一个合理的函数集合内,这个集合称为假设空间 (Hypothesis Space),记为 。假设空间体现了我们对问题解的预先假设或偏好,例如“函数应该是平滑的”或“函数是线性的”。

于是,我们转向受限的经验风险最小化

f̂ = argmin_{f ∈ ℱ} R̂_n(f)

同时,我们也可以定义在假设空间 内的最优风险函数:

f*_ℱ = argmin_{f ∈ ℱ} R(f)

通过精心设计假设空间 ,我们可以在保持模型表达能力的同时,有效控制过拟合的风险。


优化方法:梯度下降 🚀

上一节我们定义了要优化的目标(经验风险)。本节中,我们来看看如何通过数值优化方法,在实际中找到假设空间中的经验风险最小化器 。我们以最常见的线性回归为例。

问题设定

在线性回归中,我们的假设空间是线性函数集合:ℱ = { f(x) = w^T x | w ∈ ℝ^d }。使用平方损失,经验风险最小化问题转化为:

min_w R̂_n(w) = min_w (1/(2n)) Σ_{i=1}^n (w^T x_i - y_i)^2

梯度下降法

梯度下降法是一种迭代优化算法。其核心思想是:函数在某一点的梯度方向指向该点函数值增长最快的方向。因此,沿着梯度的反方向移动,函数值就会下降。

算法步骤

  1. 初始化参数向量 w(例如,随机初始化)。
  2. 重复以下步骤直到满足停止条件:
    a. 计算当前 w 处目标函数的梯度 ∇R̂_n(w)
    b. 更新参数:w ← w - η * ∇R̂_n(w),其中 η学习率 (Learning Rate) 或步长。

对于线性回归,梯度为:∇R̂_n(w) = (1/n) Σ_{i=1}^n (w^T x_i - y_i) x_i

随机梯度下降法

标准的梯度下降(又称批量梯度下降)在每一步都需要计算整个训练集上损失的平均梯度,这在数据集很大时计算代价高昂。

随机梯度下降 (Stochastic Gradient Descent, SGD) 对此进行了改进:在每一步,我们随机均匀抽取一个样本 (x_i, y_i),并用该样本的损失梯度来估计整体梯度,然后进行更新:

w ← w - η * ∇L(w^T x_i, y_i) = w - η * (w^T x_i - y_i) x_i

小批量梯度下降是介于两者之间的方法,每次随机抽取一小批(如32个)样本计算平均梯度进行更新。SGD和小批量梯度下降虽然每一步的方向有噪声,但计算效率极高,且在大数据场景下通常能更快地收敛到较好的解。

学习率设置:学习率 η 的选择至关重要。太小会导致收敛慢,太大会导致震荡甚至发散。实践中,可以采用学习率衰减策略(如随时间 t 减小:η_t = η0 / (1 + γ*t)),或使用更高级的优化器(如Adam)。


总结 📝

本节课我们一起学习了统计学习理论的基础框架:

  1. 问题形式化:我们将机器学习问题分解为输入 X、行动 A、结果 Y 和损失函数 L 四个部分。决策函数 f: 𝒳 → 𝒜 是我们的学习目标。
  2. 评估标准:我们引入了风险 R(f) 作为衡量决策函数好坏的理想标准,但由于分布未知,我们使用经验风险 R̂_n(f) 来近似它。
  3. 学习范式:直接最小化经验风险会导致过拟合。因此,我们通过限制搜索范围到一个合理的假设空间 来进行受限的经验风险最小化
  4. 优化实现:为了求解这个最小化问题,我们介绍了梯度下降法及其在大数据下的高效变体——随机梯度下降法小批量梯度下降法

这个框架为理解后续各种具体的机器学习模型(如线性模型、支持向量机、神经网络)奠定了坚实的理论基础。在接下来的课程中,我们将深入探索不同的假设空间和优化技巧。

课程 P10:回归树 🌳

在本节课中,我们将要学习一种全新的、本质上是非线性的机器学习模型——回归树。与之前我们接触过的线性模型不同,回归树通过一系列基于特征的简单决策来做出预测,其预测结果是分段常数的。我们将从基本概念开始,逐步了解如何构建、训练和优化一棵回归树。


概述 📋

回归树是一种用于预测连续数值的决策树模型。它通过将输入空间划分为若干个矩形区域,并在每个区域内预测一个常数值来进行工作。本节课我们将学习其工作原理、构建方法以及如何通过“剪枝”来防止过拟合。


回归树的基本概念

上一节我们介绍了回归树是一种非线性模型。本节中我们来看看它的具体工作方式。

一棵回归树从一个输入向量 X 开始。它通过在每个节点回答一个关于单个特征的问题(例如,“特征 X1 是否大于 5?”)来逐步向下遍历。如果答案为“是”,则走向右分支;如果为“否”,则走向左分支。最终,输入会到达一个称为“叶节点”的终端节点,每个叶节点都对应一个唯一的预测值。

核心公式: 回归树的预测函数可以形式化地表示为:
f(x) = Σ_{m=1}^{M} c_m * I(x ∈ R_m)
其中:

  • M 是区域(叶节点)的总数。
  • R_m 是第 m 个区域。
  • c_m 是区域 R_m 内的预测值(一个常数)。
  • I(·) 是指示函数,当 x 在区域 R_m 内时值为 1,否则为 0。

由于区域 R_m 是互不相交的,任何输入 x 只会落在一个区域内,并获得对应的预测值 c_m


如何确定区域内的预测值?

上一节我们了解了回归树的结构。本节中我们来看看如何为每个区域确定最优的预测值 c_m

我们使用平方损失作为标准。对于一个给定的区域 R_m,为了最小化该区域内所有训练点的平方误差,最优的预测值 c_m 就是落入该区域的所有训练样本 y 值的平均值。

核心公式: 对于区域 R_m,其最优预测值为:
c_m = (1 / N_m) * Σ_{x_i ∈ R_m} y_i
其中 N_m 是区域 R_m 中训练点的数量。


如何构建回归树?——贪心算法

理论上,我们希望找到一棵在给定复杂度(如叶节点数量)下,能最小化训练误差的树。但找到这样一棵全局最优的树在计算上是不可行的。

因此,我们采用一种贪心算法来递归地构建树。其核心思想是:在每一步,我们都选择当前“最好”的分裂,而不考虑这个选择对后续步骤的影响。

构建一棵树需要解决两个关键问题:

  1. 如何找到“最好”的分裂?
  2. 何时停止分裂?

以下是构建过程的核心步骤:

第一步:寻找最佳分裂
对于当前节点(包含一组数据点),我们尝试所有可能的特征 j 和所有可能的分裂点 s

  • 分裂将当前区域划分为两部分:
    • R1(j, s) = {X | X_j <= s}
    • R2(j, s) = {X | X_j > s}
  • 对于每个候选的 (j, s),我们计算分裂后的两个区域 R1R2 内的预测值(即 y 的平均值 c1c2)。
  • 我们选择能使分裂后总平方误差最小的那个 (j, s) 作为本次分裂。
    核心公式: 分裂后的总平方误差为:
    Σ_{x_i ∈ R1} (y_i - c1)^2 + Σ_{x_i ∈ R2} (y_i - c2)^2

第二步:递归分裂
在完成一次分裂后,我们在新生成的两个子节点上,分别递归地重复第一步的过程。

第三步:停止条件
为了避免过拟合,我们需要设定停止分裂的条件。一个常见的方法是:当节点内的样本数量少于某个最小值(例如5个)时,就不再继续分裂,该节点成为叶节点。


如何防止过拟合?——树的剪枝

上一节我们通过贪心算法构建了一棵可能很复杂的大树。本节中我们来看看如何通过“剪枝”来简化模型,防止过拟合。

直接构建一棵大小合适的树是困难的。更有效的方法是先构建一棵非常大的树(例如,直到每个叶节点只有很少几个点),然后通过“剪枝”来减少其复杂度。

剪枝的核心思想是:衡量树的复杂度(例如用叶节点数量 |T| 表示),并将其作为正则化项加入损失函数。

核心公式: 成本复杂度准则
C_α(T) = R_hat(T) + α * |T|
其中:

  • R_hat(T) 是树 T 在训练集上的经验风险(如平方误差)。
  • α 是正则化参数,控制对复杂度的惩罚力度。
  • |T| 是树 T 的叶节点数量。

剪枝算法步骤

  1. 从完整的大树 T0 开始。
  2. 尝试剪去 T0 的每一个内部节点(即用其子树的叶节点合并),得到一系列子树。
  3. 对于每个 α 值,计算每棵子树的 C_α(T),并选择值最小的那棵树。一个重要的理论结果是:对于任何 α,最优树都存在于通过这种“最弱连接剪枝”得到的一系列嵌套子树中。
  4. 通过交叉验证来选择最佳的 α 值,从而确定最终的树模型。

回归树的优势与应用

我们已经学习了回归树的构建与优化。本节中我们总结一下它的主要优势和潜在应用场景。

以下是回归树的一些关键优势:

  • 本质非线性:能够自动建模特征与目标之间的复杂非线性关系,无需手动设计非线性特征。
  • 可解释性:特别是当树结构较小时,决策路径清晰,易于向他人解释模型的预测逻辑。
  • 处理缺失值:树模型可以通过“代理分裂”等机制处理特征缺失的情况,即当最佳分裂特征缺失时,使用另一个最相似的替代特征进行决策。
  • 自动特征工程:训练好的树结构(其划分的区域)可以转化为一组二元特征,这些特征可以输入到线性模型(如Lasso)中,作为一种自动化的非线性特征构造方法。

总结 🎯

本节课中我们一起学习了回归树。

  • 我们了解到回归树是一种通过轴平行分割来构建分段常数预测函数的非线性模型。
  • 我们学习了使用贪心算法递归地构建树,其核心是在每一步寻找能最大程度减少平方误差的特征和分裂点。
  • 我们探讨了通过成本复杂度剪枝来防止过拟合,即先建大树,后剪枝,并通过交叉验证选择最佳复杂度。
  • 最后,我们讨论了回归树在可解释性、处理非线性关系及缺失值方面的优势。

回归树是理解更强大集成方法(如随机森林和梯度提升树)的基础,我们将在后续课程中接触到它们。

机器学习课程 P11:分类决策树与优化理论回顾 🌳

在本节课中,我们将要学习分类决策树的基本原理,并回顾一些重要的优化理论概念,包括对偶性和互补松弛条件。


分类决策树

上一节我们介绍了回归树,本节中我们来看看分类树。分类树是决策树用于分类任务的一种形式。与回归树类似,它通过一系列基于特征的判断将输入空间划分为不同的矩形区域,并在每个叶节点给出一个预测。

树的结构与预测

分类树同样是二叉树结构。在每个节点,我们选择一个特征和一个分割点,将数据分成左右两个子集。最终,每个输入样本会到达一个叶节点,该节点对应输入空间中的一个特定区域。

对于分类问题,每个叶节点的预测值是该节点内训练样本中出现最频繁的类别。我们也可以预测类别的概率分布,即每个类别的相对比例。

设区域 \(R_m\) 中有 \(n_m\) 个训练样本。定义 \(\hat{p}_{mk}\) 为区域 \(R_m\) 中第 \(k\) 类样本的比例:

\[\hat{p}_{mk} = \frac{1}{n_m} \sum_{i \in R_m} I(y_i = k) \]

我们的预测类别 \(k(m)\) 是比例最高的类别:

\[k(m) = \arg\max_k \hat{p}_{mk} \]

该叶节点的估计误分类率为 \(1 - \hat{p}_{mk(m)}\)

如何选择最佳分割

构建树的核心问题是如何为每个节点选择最佳的分割特征和分割点。这需要一个衡量分割好坏的准则,即“节点不纯度”度量。

以下是几种常见的节点不纯度度量(以二分类为例,其中 \(p\) 是正类样本比例):

  • 误分类错误率\(1 - \max(p, 1-p)\)
  • 基尼指数\(2p(1-p)\)
  • 交叉熵/信息增益\(-p \log p - (1-p) \log (1-p)\)

这些度量在 \(p=0.5\)(最不纯)时最大,在 \(p=0\)\(p=1\)(最纯)时最小。基尼指数和交叉熵在构建树时更常用,因为它们对节点纯度的变化更敏感,倾向于产生更纯的节点。

对于一个将节点分割为左子节点 \(R_L\) 和右子节点 \(R_R\) 的分割,其总体不纯度是左右子节点不纯度的加权平均:

\[\text{不纯度} = \frac{n_L}{n_L + n_R} \cdot \text{不纯度}(R_L) + \frac{n_R}{n_L + n_R} \cdot \text{不纯度}(R_R) \]

我们遍历所有可能的特征和分割点,选择使该加权不纯度最小的分割。

关于寻找分割点的技巧:对于连续特征,我们只需要在训练样本在该特征上的取值之间进行检查,因为在这些值之间移动分割点不会改变训练数据的划分结果。

树的剪枝与特性

与回归树类似,分类树在生长后也可能需要剪枝以控制复杂度、防止过拟合。一个常见的做法是:虽然可能使用基尼指数或交叉熵来生长树,但在剪枝时使用误分类错误率作为准则,因为我们的最终目标是降低误分类率。

决策树有几个重要特性:

  1. 无需数据标准化:树的分裂只依赖于特征的顺序,而不关心特征的尺度或具体数值大小。因此,对特征进行标准化、中心化等预处理对决策树没有影响。
  2. 可处理有序特征:只要特征值可以比较大小(有序),就可以用于决策树。对于无序的分类特征,算法需要调整,例如通过选择特征子集进行分割。
  3. 预测非平滑:决策树的预测是分段常数函数,在区域边界处不连续。

优化理论回顾

在课程的后半部分,我们回顾了与支持向量机(SVM)相关的优化理论,特别是拉格朗日对偶性。

原始问题与拉格朗日函数

考虑一个带约束的优化问题(原始问题):

\[\min_w \phi(w) \quad \text{s.t.} \quad \Omega(w) \leq R \]

我们引入拉格朗日乘子 \(\lambda \geq 0\),构造拉格朗日函数:

\[L(w, \lambda) = \phi(w) + \lambda (\Omega(w) - R) \]

可以证明,原始问题等价于:

\[p^* = \min_w \max_{\lambda \geq 0} L(w, \lambda) \]

对偶问题

交换最小化和最大化的顺序,得到对偶问题:

\[d^* = \max_{\lambda \geq 0} \min_w L(w, \lambda) \]

定义对偶函数 \(g(\lambda) = \min_w L(w, \lambda)\),则对偶问题是 \(\max_{\lambda \geq 0} g(\lambda)\)

根据弱对偶性,始终有 \(d^* \leq p^*\)

强对偶性与KKT条件

\(d^* = p^*\) 时,称为强对偶性。对于一个凸优化问题(目标函数 \(\phi\) 和约束函数 \(\Omega\) 均为凸函数),如果存在一个“严格可行”点(即满足 \(\Omega(w) < R\) 的点),则强对偶性成立(Slater条件)。

在强对偶性成立的前提下,设原始问题的最优解为 \(w^*\),对偶问题的最优解为 \(\lambda^*\),它们满足KKT条件,其中包括重要的互补松弛条件

\[\lambda^* (\Omega(w^*) - R) = 0 \]

这意味着,如果约束不是紧的(即 \(\Omega(w^*) < R\)),则必有 \(\lambda^* = 0\);如果 \(\lambda^* > 0\),则约束必是紧的(即 \(\Omega(w^*) = R\))。


总结

本节课中我们一起学习了以下内容:

  1. 分类决策树的原理,包括如何利用基尼指数或交叉熵等不纯度度量来选择最佳分割,以及决策树无需数据标准化、可处理有序特征等重要特性。
  2. 优化理论中的对偶性,包括原始问题、对偶问题的形式,弱对偶性与强对偶性的概念,以及强对偶性成立的条件(凸问题加Slater条件)和由此导出的互补松弛条件。

这些知识是理解许多机器学习模型(如SVM)和算法的基础。

课程 P12:集成方法入门 🧠

在本节课中,我们将要学习集成方法,这是一种通过组合多个模型来提升预测性能的强大技术。我们将重点介绍自助法、袋装法和随机森林,并简要了解提升方法的基本思想。课程内容将涵盖核心概念、数学原理以及它们在实际中的应用。


回顾:偏差与方差 📊

上一节我们介绍了集成方法的动机,本节中我们来看看理解模型性能的两个核心概念:偏差与方差。首先,我们需要明确一些统计学基本术语。

参数是概率分布 P 的一个函数。例如,均值 μ、方差 σ²、中位数等都是分布的参数。我们可以将其表示为 μ = μ(P),表明 μ 是作用于分布本身的一个函数。

统计量是数据样本 D 的一个函数。如果一个统计量的目的是估计一个参数,那么它就被称为点估计量。例如,μ̂ 是数据的一个函数,用于估计参数 μ

对于一个实值参数 μ 及其估计量 μ̂,我们可以定义其偏差和方差:

  • 偏差Bias(μ̂) = E[μ̂] - μ
    • 如果 E[μ̂] = μ,则估计量是无偏的。
  • 方差Var(μ̂) = E[(μ̂ - E[μ̂])²]

偏差和方差描述的是估计量 μ̂ 作为一个函数的性质,而不是针对某个特定数据样本。它们依赖于估计量的函数形式以及数据背后的真实分布 P


自助法:从单个样本估计分布 🔄

上一节我们讨论了如何用多个独立样本来估计统计量的分布,但在现实中我们通常只有一个样本。本节中我们来看看如何通过自助法来解决这个问题。

自助法的核心思想是:既然我们无法从原始分布 P 中重复抽样,我们就从已有的单个样本 D_N(大小为 N)中进行有放回地重复抽样,来模拟“新样本”的生成过程。

一个自助样本是从原始数据集 D_N 中有放回地随机抽取 N 次所得到的样本。由于是有放回抽样,自助样本中会包含重复的原始数据点,同时也会遗漏大约 37% (≈ 1/e) 的原始数据点。

以下是自助法的基本步骤:

  1. 从原始数据集 D_N 中,通过有放回抽样,生成 B 个自助样本(每个大小均为 N)。
  2. 对每个自助样本,计算我们关心的统计量(例如 μ̂)。
  3. 将这 B 个统计量的结果视为来自 μ̂ 抽样分布的近似,进而可以估计其方差、置信区间等。

自助法是一种基于单个样本估计统计量分布的有效策略。虽然其理论依据复杂,但实践证明它在许多情况下都非常有效。


袋装法:降低预测方差 🛍️

上一节我们介绍了自助法,本节中我们来看看如何利用它来改进机器学习模型,这种方法称为袋装法

设想一个理想情况:如果我们有 B 个独立的训练集,在每个训练集上训练一个模型,然后将这 B 个模型的预测结果进行平均(对于回归问题)或投票(对于分类问题)。由于模型之间相互独立,这种平均操作可以显著降低预测的方差,而期望值保持不变。

然而,现实中我们只有一个训练集。袋装法的思路是:用自助样本代替独立的训练集。

  1. 从原始训练集生成 B 个自助样本。
  2. 在每个自助样本上独立地训练一个基学习器(例如决策树),得到 B 个模型 f̂¹, f̂², ..., f̂ᴮ
  3. 对于新样本 x,组合所有模型的预测:
    • 回归f̂_bag(x) = (1/B) * Σ f̂ᵇ(x)
    • 分类:采用多数投票或对预测概率取平均。

袋装法特别适用于高方差、低偏差的基学习器(例如未剪枝的深度决策树)。因为袋装法主要作用是降低方差,而对偏差影响不大。线性回归等本身方差较小的模型,从袋装法中获益有限。

袋装法还有一个有用的副产品:袋外误差估计。由于每个自助样本平均只包含约63%的原始数据,剩下的约37%的数据自然构成了该模型的验证集。我们可以用这些“袋外”数据来评估模型性能,无需单独划分验证集。


随机森林:改进的袋装法 🌲

上一节我们介绍了袋装法,本节中我们来看看其一个著名且强大的变体——随机森林。它通过引入额外的随机性来进一步提升模型性能。

袋装法中使用自助样本,但由此训练出的模型之间可能仍然存在较高的相关性,这限制了方差减少的效果。随机森林在袋装法的基础上,对决策树的构建过程进行了关键修改:

在决策树的每个节点需要分裂时,随机森林不是从所有 d 个特征中选择最优特征,而是先随机选取一个特征子集(通常大小为 √dlog₂(d)),然后仅在这个子集中选择最优分裂特征。

以下是随机森林的核心步骤:

  1. 从原始训练集生成 B 个自助样本。
  2. 对于每个自助样本,构建一棵深度决策树。在构建树的每个节点时:
    a. 随机选择 m 个特征(m ≈ √d)。
    b. 从这 m 个特征中选择最佳分裂点。
  3. 将训练得到的 B 棵树组合起来,通过投票或平均进行预测。

这种随机特征选择带来了两大好处:

  1. 进一步降低方差:树与树之间的相关性降低,使得模型集成的方差减少效果更佳。
  2. 提升计算效率:每个节点只需评估少量特征,加快了单棵树的训练速度。

随机森林通常使用深度、未剪枝的树作为基学习器(保持低偏差),依靠集成来控制过拟合(降低高方差)。参数 B(树的数量)和 m(每次分裂考虑的特征数)可以通过交叉验证来调整。


提升方法简介:顺序构建强模型 🚀

之前我们讨论的袋装法和随机森林属于并行集成方法,模型独立构建。本节我们简要介绍另一大类:顺序集成方法,以提升方法为代表。

提升方法的核心思想是顺序地训练一系列弱学习器(仅比随机猜测略好的简单模型,如决策树桩),每个新模型都专注于纠正前一个模型所犯的错误。

经典的AdaBoost算法流程概述如下:

  1. 初始化所有训练样本的权重为相等值。
  2. 对于 m = 1M(轮次):
    a. 使用当前的样本权重训练一个弱学习器 G_m(x)
    b. 计算 G_m(x) 在加权训练集上的误差率。
    c. 根据误差率计算该弱学习器的权重 α_m(表现越好,权重越高)。
    d. 更新样本权重:增加被 G_m(x) 分类错误样本的权重,减少正确分类样本的权重。
  3. 组合所有弱学习器,形成最终强分类器:G(x) = sign( Σ α_m * G_m(x) )

通过重新调整样本权重,提升方法迫使后续的模型更加关注之前难以正确分类的样本。最终通过加权投票的方式结合所有弱学习器。提升方法能够将一系列弱模型组合成一个非常强大的模型,是集成学习中另一项里程碑式的技术。


总结 📝

本节课中我们一起学习了集成方法的基础知识。我们从偏差和方差的统计概念出发,理解了模型误差的构成。接着,我们探讨了自助法,这是一种利用重抽样来估计统计量分布的强大工具。

基于自助法,我们学习了袋装法,它通过组合多个在自助样本上训练的模型来降低预测方差。然后,我们深入了解了随机森林,它通过在决策树构建中引入随机特征选择,进一步降低了模型间的相关性,从而获得了更优异的性能。

最后,我们简要介绍了提升方法的思路,它通过顺序训练并聚焦于错误样本来构建强大的集成模型。集成方法是现代机器学习中不可或缺的工具,能够有效提升模型的稳定性和预测精度。

课程 P13:提升方法(Boosting)全面介绍 🚀

在本节课中,我们将要学习提升方法(Boosting),这是一种强大的顺序集成学习技术。我们将从 AdaBoost 算法开始,逐步理解其工作原理,并将其置于一个更通用的“前向分阶段加性建模”框架中,最后探讨其推广形式。


回顾:集成方法与 Boosting 概念

上一节我们介绍了集成方法的整体概念。本节中我们来看看顺序集成方法,即 Boosting。

其核心思想是顺序构建多个模型。首先构建一个模型,分析其在哪些数据点上表现好,哪些表现差。然后增加那些表现不佳的数据点的重要性(权重),再构建一个新模型来尝试修正前一个模型的错误。如此反复,每一步都试图改进前一步的不足之处。

我们从“弱分类器”的概念开始。弱分类器是一种分类器,其性能至少比随机猜测(50%准确率)要好。在 AdaBoost 的设定中,我们处理严格的二分类问题(标签为 -1 和 +1),并且弱学习器输出的是硬分类(非概率分数)。

核心问题:给定一个弱假设空间(例如决策树桩),我们能否通过某种方式组合从这个空间中选择的多个分类器,使其在训练集上的表现远超“比随机稍好”的水平?

为了实现这一点,我们需要“加权训练集”的概念。每个训练样本都有一个非负的实值权重,我们的目标是最小化加权经验风险,即损失函数的加权平均值,而不仅仅是简单平均。

如果我们有一个可以最小化加权经验风险的算法,那很好。如果没有,我们可以通过“按权重重新采样”的技巧来利用一个只能最小化普通经验风险的“黑盒”算法。具体做法是:将权重归一化为一个概率分布,然后根据这个分布对原始训练集进行重采样(有放回)。在新采样得到的大数据集中,样本出现的频率与其权重成正比,从而使得在新数据集上的普通经验风险近似等于原问题的加权经验风险。


AdaBoost 算法框架 🧩

上一节我们介绍了 Boosting 的基本思想和加权训练集。本节中我们深入看看 AdaBoost 的具体算法框架。

AdaBoost 的粗略框架如下:

  1. 从给所有训练样本分配相同权重开始。
  2. 进入多轮迭代。在每一轮中:
    • 使用当前加权的训练集,拟合一个弱分类器。
    • 计算这个弱分类器的加权错误率。
    • 根据错误率计算该分类器的权重(组合系数)。
    • 根据分类结果更新样本权重:增加被错误分类样本的权重。
  3. 将多轮得到的弱分类器进行加权线性组合,得到最终预测函数。对于分类问题,取该实数值的符号作为最终类别。

一个关键点:新增的分类器可能只在之前分错的点上表现更好,而在其他点上表现变差。但由于最终结果是所有分类器的加权组合,之前那些在多数点上表现良好的分类器仍然起作用,这是一个动态平衡的过程。

以下是算法中几个核心部分的详解:

1. 弱分类器的权重 (α_m)

设第 m 轮弱分类器 G_m 的加权错误率为 ε_m。该分类器在最终线性组合中的权重 α_m 由以下公式计算:
α_m = (1/2) * ln((1 - ε_m) / ε_m)

公式解读

  • ε_m 很小(分类器很好)时,(1 - ε_m)/ε_m 很大,α_m 也很大,意味着这个好分类器在最终投票中占很大权重。
  • ε_m 接近 0.5(和随机猜测差不多)时,α_m 接近 0。
  • ε_m > 0.5 时,α_m 为负。但 AdaBoost 要求弱分类器至少比随机好(ε_m < 0.5),所以 α_m 始终为正。

2. 样本权重的更新

样本权重的更新也依赖于 α_m。设更新前样本 i 的权重为 w_i

  • 如果 G_m 正确分类了样本 i,其新权重为:w_i * exp(-α_m)
  • 如果 G_m 错误分类了样本 i,其新权重为:w_i * exp(+α_m)

直观理解

  • 由于 α_m > 0exp(α_m) > 1exp(-α_m) < 1
  • 因此,错误分类的样本权重会增大,正确分类的样本权重会减小。
  • 增大的幅度 exp(α_m) 与分类器权重 α_m 相关:分类器越好(α_m越大),它分错的样本权重提升得越多,迫使后续的分类器更加关注这些“难”样本。

在实际实现中,每轮更新后会对所有权重进行归一化,使其和为1,方便下一轮计算加权错误率。


AdaBoost 训练过程图解 🎨

上一节我们介绍了 AdaBoost 的数学公式。本节中我们通过一个可视化例子来直观理解其训练过程。

考虑一个二维空间中的二分类问题(红点和蓝点)。我们使用“决策树桩”(在单个特征上的一次分裂)作为弱分类器。

  • 第一轮:所有点权重相同。弱分类器(一条垂直分割线)可能将大部分点分类正确,但会错分一些点(例如,红圈中的蓝点)。
  • 第二轮:被第一轮错分的点权重变大(图中点变大)。新的弱分类器会倾向于在权重大的区域(即上一轮错误区域)做出更正确的判断。它可能会在另一维度上画一条水平分割线来修正部分错误。
  • 后续轮次:过程持续。被反复错分的点权重变得非常大。每个新的弱分类器都试图修正当前组合模型仍然表现不佳的区域。
  • 最终模型:将多轮得到的决策树桩(垂直线、水平线等)进行加权组合,其决策边界会变得非常复杂和非线性,远超单个决策树桩的能力。

这个例子展示了 Boosting 如何将许多简单的“弱”模型组合成一个强大的“强”模型。


AdaBoost 的理论保证:训练误差界 📉

上一节我们直观感受了 AdaBoost 的工作过程。本节中我们来看看它为什么有效,即其理论保证。

AdaBoost 有一个关于训练误差的重要定理。定义第 m 轮弱分类器的“边缘”(Margin)为 γ_m = 1/2 - ε_m,它衡量了该分类器比随机猜测好多少。

定理:设最终分类器为 G(x) = sign(∑ α_m G_m(x))。其训练集上的 0-1 错误率 R_train 满足:
R_train ≤ ∏_{m=1}^M [2 * sqrt(ε_m * (1-ε_m))] = ∏_{m=1}^M sqrt(1 - 4γ_m^2)

结论解读

  • 乘积项 sqrt(1 - 4γ_m^2) 小于 1。
  • 只要每一轮的弱分类器都略好于随机猜测(即 ε_m < 0.5γ_m > 0),这个上界就会随着轮数 M 的增加而指数级下降
  • 这意味着,如果数据能被弱分类器的线性组合完美分开,并且每一轮都能找到比随机稍好的弱分类器,AdaBoost 的训练误差可以迅速降至零。

示例:假设每一轮都能保证 ε_m ≤ 0.4(即 γ_m ≥ 0.1)。那么上界约为 (0.98)^M。当 M=200 时,上界约为 0.018。这表明训练误差会快速减小。


从算法到框架:前向分阶段加性建模 🔄

上一节我们分析了 AdaBoost 自身的性质。本节中我们将看到,AdaBoost 可以被视为一个更通用框架的特例。

AdaBoost 最初以一种特定的迭代算法形式提出。但我们可以从“损失函数最小化”的角度重新审视它,这更符合我们熟悉的机器学习范式(如线性回归、SVM)。

这个通用框架称为前向分阶段加性建模(Forward Stagewise Additive Modeling)。其目标是:通过迭代地添加新的基学习器(弱分类器)来最小化一个指定的损失函数 L

算法流程

  1. 初始化模型,例如 f_0(x) = 0
  2. 对于 m = 1M
    a. 固定之前已添加的所有模型 f_{m-1}(x)
    b. 寻找一个基学习器 g_m(x) 和系数 β_m,使得添加到当前模型后,损失函数减小最多:
    (β_m, g_m) = argmin_{β, g} ∑_{i=1}^N L(y_i, f_{m-1}(x_i) + β * g(x_i))
    c. 更新模型:f_m(x) = f_{m-1}(x) + β_m * g_m(x)

关键发现:可以证明,当损失函数 L 取为指数损失(Exponential Loss),即 L(y, f(x)) = exp(-y * f(x)),并且基学习器 g(x) 输出为 {-1, +1} 时,通过前向分阶段加性建模得到的最优解,其每一步更新恰好等价于 AdaBoost 算法中的 α_mG_m 的更新规则。

这意味着,AdaBoost 本质上是在最小化指数损失函数。这为我们理解 AdaBoost 提供了一种新的视角:它不再是一个神秘的“配方”,而是一种针对特定损失函数的优化算法。


推广:梯度提升(Gradient Boosting)📈

上一节我们将 AdaBoost 纳入了损失函数最小化的框架。本节中我们自然可以问:能否将这种方法推广到其他损失函数?

答案是肯定的,这就是梯度提升(Gradient Boosting)

在梯度提升中,我们不再局限于指数损失。对于任何可微的损失函数 L(例如平方损失用于回归,对数损失用于分类),我们都可以使用前向分阶段加性建模。

然而,直接求解每一步的 (β_m, g_m) 可能很困难。梯度提升采用了一种巧妙的近似方法:用损失函数的负梯度作为当前模型残差的近似

梯度提升算法流程

  1. 初始化一个常数值模型,如 f_0(x) = argmin_c ∑ L(y_i, c)
  2. 对于 m = 1M
    a. 对每个样本 i,计算当前模型的负梯度(即伪残差):
    r_{im} = - [∂L(y_i, f(x_i)) / ∂f(x_i)]_{f=f_{m-1}}
    b. 用一个基学习器(通常是回归树)g_m(x) 去拟合这些伪残差 {r_{im}}(作为新的目标值)。
    c. 通过线搜索确定步长 ρ_m,以最小化损失:ρ_m = argmin_ρ ∑ L(y_i, f_{m-1}(x_i) + ρ * g_m(x_i))
    d. 更新模型:f_m(x) = f_{m-1}(x) + ρ_m * g_m(x)

与 AdaBoost 的关系:可以证明,当损失函数为指数损失时,计算出的伪残差恰好与 AdaBoost 中权重更新的方向一致。因此,AdaBoost 是梯度提升在指数损失下的一个特例。

梯度提升的威力在于其通用性。通过选择不同的损失函数,它可以灵活地应用于回归、分类、排序等多种任务。其现代实现(如 XGBoost, LightGBM, CatBoost)在效率和精度上都非常出色,是数据科学竞赛和工业应用中的常用工具。


总结与思考 💡

本节课中我们一起学习了提升方法(Boosting)的核心内容。

我们从 AdaBoost 这个具体的算法入手,理解了其通过迭代调整样本权重、组合弱分类器来提升性能的直观过程。我们探讨了其理论训练误差上界,明白了只要弱学习器持续提供比随机猜测略好的假设,性能就能指数提升。

接着,我们将 AdaBoost 放入了更通用的前向分阶段加性建模框架中,发现它实际上是在最小化指数损失函数。这一视角将 AdaBoost 从一种特定算法提升为一种基于损失函数优化的建模思想。

最后,我们将其进一步推广到梯度提升,它通过拟合损失函数的负梯度(伪残差)来工作,能够兼容几乎任何可微的损失函数,从而成为一个极其强大和灵活的机器学习框架。

Boosting 方法,特别是其现代变体,通过将许多简单模型(如浅层决策树)的智慧结合起来,常常能产生预测能力极强的模型,是机器学习工具箱中不可或缺的利器。

课程 P14:梯度提升算法详解 🌳

在本节课中,我们将深入学习梯度提升算法。我们将从算法的基本步骤开始,逐步理解其工作原理、关键参数以及在实际应用中的一些重要变体。课程内容将涵盖从理论公式到实践调优的各个方面,旨在让初学者能够清晰地掌握这一强大的机器学习技术。


算法概述与初始化

梯度提升是一种集成学习方法,它通过迭代地添加弱学习器(通常是决策树)来构建一个强大的预测模型。算法的核心思想是每一步都沿着损失函数减少最快的方向(即负梯度方向)前进,但将这一步“投影”到我们选定的基假设空间中。

首先,我们将预测函数初始化为零:
F_0(x) = 0

然后,我们开始分阶段(M 个阶段)构建模型。在每一步 m,我们都会向当前模型添加一个新的基学习器 h_m(x),并乘以一个步长 λ


计算梯度方向

上一节我们介绍了算法的初始化,本节中我们来看看每一步是如何确定添加哪个函数的。

关键的第一步是计算当前模型预测的“梯度”。我们想知道如何直接调整对每个训练样本的预测,以最大程度地减少总损失。这通过计算损失函数 L 关于当前模型预测 F_{m-1}(x_i) 的偏导数来实现。

对于第 i 个训练样本,其梯度分量为:
g_{m,i} = ∂L(y_i, F_{m-1}(x_i)) / ∂F_{m-1}(x_i)

将所有训练样本的梯度分量堆叠起来,就得到了第 m 步的梯度向量 g_m。这个向量指明了在函数空间中,无约束情况下最优的局部调整方向(即负梯度方向 -g_m)。


将梯度投影到假设空间

我们得到了无约束的优化方向,但我们需要添加的函数必须来自我们预先选定的基假设空间 H(例如,所有深度为 3 的决策树)。因此,我们不能直接添加 -g_m

我们需要在基假设空间 H 中找到一个函数 h_m,使其尽可能接近这个理想的负梯度方向。这可以形式化为一个回归问题:

h_m = argmin_{h∈H} Σ_{i=1}^n [ -g_{m,i} - h(x_i) ]^2

换句话说,我们试图用基学习器 h 去拟合当前残差(即负梯度)。找到这个 h_m 后,我们将其乘以步长 λ,并添加到现有模型中:
F_m(x) = F_{m-1}(x) + λ * h_m(x)


算法输入与特性

以下是使用梯度提升算法前需要准备或决定的几个关键组成部分:

  1. 损失函数:需要是可微的,例如平方损失、对数损失等。
  2. 基学习器空间:通常是回归树,需要选择树的深度或叶子节点数量。
  3. 回归求解算法:用于求解上述投影问题(即拟合 h_m)。
  4. 迭代步数 M:一个重要的停止标准,防止过拟合。
  5. 步长 λ:控制每步的贡献,通常较小的步长(如 0.1)效果更好,但需要更多迭代。

梯度提升的强大之处在于其灵活性。它可以适配任何可微的损失函数,并且在实际应用中(尤其是在结构化数据上),基于树的梯度提升(如 XGBoost、LightGBM)通常是效果最好的方法之一。


基学习器:决策树

在实践中,最常用的基学习器是决策树,特别是浅树(即树桩)或限制叶子节点数量(如 4-8 个)的树。

最终预测函数的形式是基学习器的线性组合。例如,使用决策树桩时,模型形式如下:
F(x) = Σ_{m=1}^M λ * [ α_{m,1} * I(x_j ≤ t_m) + α_{m,2} * I(x_j > t_m) ]

这里有一个重要的限制:特征间的交互作用必须已经存在于基学习器中。提升过程只是线性组合这些基学习器,不会创造新的特征交互。因此,如果使用决策树桩(单层决策),最终模型也无法捕获特征间的交互。使用更深的树(允许在内部节点进行多次判断)作为基学习器,模型就能自动学习特征间复杂的交互关系。


参数调优与正则化

梯度提升有几个关键参数可以调整以优化性能并防止过拟合:

  1. 步长 λ:较小的步长(如 0.01, 0.1)通常能获得更好的测试性能,模型更平滑,但需要更多的迭代次数(M)来达到相同的训练误差。
  2. 子采样(行采样):也称为随机梯度提升。每一步不是使用全部数据计算梯度,而是随机采样一部分数据(例如 50%)。这既能加速训练,也是一种有效的正则化手段。
  3. 列采样:在构建每棵树时,随机采样一部分特征。这与随机森林中的思想类似,能有效防止过拟合,并且在一些现代实现(如 XGBoost)中被认为非常有效。
  4. 树的相关参数:如树的最大深度、叶子节点数量等,直接控制了基学习器的复杂度。

进阶变体:XGBoost 与牛顿法

标准的梯度提升使用一阶梯度信息。更高级的方法可以使用二阶信息(牛顿法),以更快的速度逼近最小值。

牛顿法的思想是:在当前点用二阶泰勒展开(一个二次函数)局部近似目标函数,然后直接一步走到该二次函数的最小值点。在梯度提升的框架下,使用牛顿步方向有时比纯梯度方向更高效。

XGBoost 是一个著名的梯度提升实现,它的主要特点包括:

  • 使用了牛顿法进行优化。
  • 系统地引入了列采样作为正则化方法。
  • 在工程实现上做了大量优化,支持并行计算、处理缺失值等,使其非常高效且适用于大规模数据。

总结

本节课中我们一起学习了梯度提升算法的核心原理。我们从初始化一个零模型开始,通过迭代计算损失函数的梯度,并将负梯度方向投影到基假设空间(如决策树)中来选择要添加的弱学习器。我们讨论了步长、迭代次数、子采样等关键参数对模型性能的影响,并理解了特征交互作用是如何通过基学习器引入的。最后,我们简要介绍了 XGBoost 等高级变体如何利用二阶信息和工程优化来提升算法效率和效果。梯度提升因其强大的预测能力和灵活性,已成为机器学习实践中不可或缺的工具之一。

课程 P15:多分类与结构化预测入门 🧠

在本节课中,我们将学习多分类问题的基本概念,并探索如何将二分类方法扩展到多分类场景。我们将重点介绍一种名为“一对多”的降维方法,并分析其局限性。随后,我们将引入一个更通用的“兼容性函数”框架,并在此框架下探讨线性多分类方法。最后,我们会简要介绍结构化预测的概念,为处理更复杂的输出空间(如序列标签)打下基础。

从二分类到多分类:一对多方法

上一节我们回顾了二分类的基本原理。本节中,我们来看看如何利用已有的二分类器来解决多分类问题。一种直观的策略是“一对多”方法。

以下是“一对多”方法的基本步骤:

  1. 对于 K 个类别中的每一个类别 i,训练一个独立的二分类器。
  2. 每个分类器 h_i 的目标是将类别 i 的样本(作为正类)与所有其他类别的样本(作为负类)区分开。
  3. 对于一个新的输入 x,我们让所有 K 个分类器对其进行评分或预测。
  4. 最终的预测结果是给出最高评分或最确信预测的那个类别,即 argmax_i h_i(x)

这种方法虽然简单,但在某些数据分布下可能失效,例如当不同类别的决策区域并非线性可分,或者存在分类器“认领”重叠区域的情况时。

线性分类器的几何视角回顾

为了理解后续内容,我们需要重温线性分类器的几何意义。对于一个二分类线性得分函数 score(x) = w^T x(这里暂不考虑偏置项),其预测规则为:若 w^T x > 0 则预测为正类,否则预测为负类。

从几何上看,w^T x 等于向量 w 和 x 的模长乘以它们夹角的余弦值:||w|| * ||x|| * cos(θ)。因此,预测为正类等价于要求夹角 θ 的余弦值为正,即 θ 在 (-90°, 90°) 之间。这意味着向量 x 需要落在由法向量 w 定义的超平面的“正面”一侧。

多分类的线性方法框架

一对多方法的局限性促使我们寻找更自然的多分类建模方式。我们引入一个更通用的框架:兼容性函数。

我们不再为每个类别训练独立的函数,而是定义一个统一的兼容性函数 h(x, y),它接受输入 x 和候选输出 y(即类别),并输出一个表示两者匹配程度的分数。最终的预测规则是选择兼容性最高的类别:
预测y = argmax_{y ∈ Y} h(x, y)

对于线性模型,我们将兼容性函数定义为特征向量与参数向量的内积:
h(x, y) = w^T · Ψ(x, y)
其中,Ψ(x, y) 是一个类敏感特征映射,它将 (x, y) 对共同映射到一个特征向量空间。参数向量 w 则在这个空间中被学习。

构建类敏感特征映射

如何构造 Ψ(x, y) 是关键。一种直接的方法是“多向量”法,它本质上复制了“一对多”的线性版本。

假设原始输入特征为 x ∈ R^d,共有 K 个类别。我们可以定义 Ψ(x, y=i) 为一个长度为 K*d 的向量,其结构如下:

  • 仅在对应于第 i 个类别的 d 维块中放置原始特征向量 x。
  • 其他 (K-1) 个 d 维块全部置为 0。
    此时,参数向量 w 也被相应地划分为 K 个 d 维子向量 [w1, w2, ..., wK]。计算内积 w^T · Ψ(x, y=i) 的结果恰好就是 wi^T x。这样,最大化兼容性分数就等价于在 K 个线性分类器 wi^T x 中选择得分最高的一个。

更高级的特征映射可以融合 x 和 y 的交互信息。例如,在文本分类中,特征可以是“当前单词是‘apple’且类别是‘名词’”。在广告推荐中,特征可以是“用户对体育感兴趣且广告与体育相关”。这类特征能够更精细地刻画输入与特定输出之间的关联。

多类别支持向量机

有了兼容性函数的框架,我们就可以定义损失函数并进行学习了。受二分类支持向量机的启发,我们为多分类问题定义间隔。

对于一个训练样本 (xi, yi),我们希望正确类别 yi 的兼容性分数远高于其他所有错误类别 y‘。即,我们希望对于所有 y‘ ≠ yi,有:
h(xi, yi) > h(xi, y‘)
更严格地,我们希望这个差距至少达到一个目标间隔 Δ(yi, y‘),其中 Δ 可以是一个常数(如1),也可以是一个根据错误严重程度定制的损失函数(例如,在词性标注中,混淆两个相似词性的惩罚较小)。

因此,我们可以定义样本 (xi, yi) 上的合页损失为:
L(xi, yi) = max(0, max_{y‘≠yi} [Δ(yi, y‘) + h(xi, y‘) - h(xi, yi)])
这个损失鼓励正确类别的分数比其他类别高出至少 Δ 的幅度。

多类别支持向量机的目标就是最小化所有训练样本的损失之和,并加上对参数 w 的正则项(如 L2 正则化):
最小化: λ||w||^2 + (1/n) * Σ_i L(xi, yi)

结构化预测简介

当输出空间 Y 非常大且具有内部结构时(例如,Y 是所有可能的词性标签序列),我们就进入了结构化预测的领域。直接枚举所有可能的 y 来计算 argmax 是不可行的。

解决的关键在于利用输出空间的结构,使得兼容性函数 h(x, y) = w^T · Ψ(x, y) 能够分解为局部贡献的和。例如,在序列标注问题中,我们可以设计特征函数,使其只依赖于输入 x 的局部窗口和输出 y 中相邻的标签。
Ψ(x, y) = Σ_{局部片段} ψ_局部(x, y的局部)
这样,全局特征向量就是所有局部特征向量的和。由于这种可加性,寻找使得 w^T · Ψ(x, y) 最大的 y 可以通过高效的动态规划算法(如维特比算法)来完成,而无需遍历指数级数量的可能序列。

总结

本节课中我们一起学习了多分类问题的核心思想。我们从简单的“一对多”降维方法出发,指出了其不足,进而引入了一个基于兼容性函数的通用线性框架。通过定义类敏感特征映射 Ψ(x, y),我们将多分类问题转化为学习一个统一的参数向量 w。我们还将二分类支持向量机的间隔思想推广到多类别场景,定义了多类别支持向量机的目标函数。最后,我们简要介绍了结构化预测的概念,说明了当输出空间具有结构时,如何通过分解特征函数并利用动态规划来高效地进行预测。这套框架是许多现代分类和序列标注模型的基础。

课程 P16:广义线性模型与考试复习 📚

在本节课中,我们将学习广义线性模型(GLM)的概率设定,并理解其与最小二乘法的联系。随后,我们将回顾近期考试中的关键题目,涵盖支持向量机(SVM)、优化方法以及感知机等内容。


广义线性模型与概率设定 🔍

上一节我们介绍了项目中的一些问题,本节中我们来看看广义线性模型。它本质上是一种概率设定。我们将通过一个例子,展示广义线性模型如何与最小化平方范数(即最小二乘法)相关联。

我们的假设空间由一系列函数组成,这些函数将输入映射到具有参数化均值和方差的高斯分布。你可以想象,给定一个输入,模型会输出一个对应的高斯分布。因此,目标是为每个输入 x 找到参数,使得 f(x) 是一个高斯密度函数。

我们使用标准差 σ²。找到参数 v 就确定了函数 f。因此,f 依赖于 v 并以 x 为输入。我们可以将预测 y 的密度函数写作以下形式:

p(y | x; v) = N(y; wᵀx, σ²)

这表示在给定 x 和参数 v(其中包含 w)的条件下,y 服从均值为 wᵀx、方差为 σ² 的正态分布。

如果我们有一组独立同分布的数据 {(xᵢ, yᵢ)},其联合概率密度(似然函数)为所有单个数据点概率密度的乘积:

L(v) = ∏ᵢ p(yᵢ | xᵢ; v)

在概率设定下,我们的目标是找到能最大化这个似然函数的参数 v(或 w)。即:

w = argmax_w L(w)*


从最大似然到最小二乘法 ➡️

在正态性假设下,最大化似然函数等价于最大化其对数似然函数,因为对数函数是单调的,不改变最大值点的位置。

对似然函数取对数并展开后,我们会发现,最大化对数似然函数等价于最小化以下表达式:

∑ᵢ (yᵢ - wᵀxᵢ)²

这正是我们熟悉的最小二乘损失函数。

因此,在假设误差服从正态分布且方差固定的前提下,使用最大似然估计得到的参数,与最小二乘法得到的解是一致的。这建立了概率模型与经典线性回归之间的桥梁。


考试题目回顾与解析 📝

上一部分我们探讨了理论模型,现在我们来分析考试中的具体题目。

1. 支持向量机(SVM)与硬间隔

第一个问题涉及线性可分数据。题目要求找到“最大化间隔的超平面”,但关键前提是硬间隔,即不允许任何分类错误(松弛变量为0)。

以下是核心要点:

  • 目标是找到一个能完全正确分隔所有数据点的超平面。
  • 即使这意味着为了分类正确而牺牲“间隔”的宽度,也必须优先保证所有点都被正确分类。
  • 在硬间隔SVM中,“分隔超平面”的定义本身就要求它必须将所有点分开。

2. 特征变换与线性可分

第二个问题展示了一个在原始二维空间中线性不可分的数据集(例如,点分布呈“X”形或“V”形)。题目要求“找到能使数据线性可分的特征”。

解决此类问题有两种思路:

  1. 构造非线性分类器:在原始空间中直接使用非线性函数(如抛物线)作为决策边界。
  2. 特征映射:将数据点通过一个函数 Φ 映射到更高维的空间,使得在新空间中数据是线性可分的。

以下是可行的特征映射示例:

  • 使用平方项:例如,映射 Φ(x₁, x₂) = (x₁, x₂, x₁² + x₂²)。这相当于将数据点“抬升”到一个三维抛物面上,从而可以用一个平面(线性分类器)分隔。
  • 使用绝对值:例如,映射 Φ(x₁, x₂) = (|x₁|, x₂)。这相当于将第二、四象限的点“反射”到第一象限,使得原本“V”形的数据变成两条可分的簇。

关键:选取一个点(如 (-1, 2))手动计算其在新特征空间中的坐标(如 (1, 2)),有助于理解映射如何改变数据的几何结构。

3. 优化中的步长方向

第三个问题考察了在优化凸函数 J(v) 时,沿特定方向更新参数的效果。题目给出了三种情况:

以下是每种情况的判断:

  1. 凸且可微:沿负梯度方向,以足够小的步长 η 更新。这保证会使函数值下降,并保证会向最优解靠近。
  2. 凸但不可微:沿负次梯度方向更新。这不一定保证函数值下降(存在反例),但保证会向最优解靠近(有定理保证)。
  3. 凸函数之和(如经验风险):随机沿其中一个分量函数的梯度方向更新(如SGD)。这既不保证函数值立即下降,也不保证立即向整体最优解靠近。但长期来看,在适当条件下,它能收敛到最优解。

4. 岭回归(Ridge Regression)

第四个问题要求推导岭回归的解。岭回归的目标函数是:

J(w) = ||Xw - y||² + λ||w||²

通过对 w 求导并令导数为零,可以得到正规方程:

XᵀXw + λIw = Xᵀy

进而解得:

w = (XᵀX + λI)⁻¹Xᵀy*

关键点:由于 λ > 0,矩阵 (XᵀX + λI) 总是可逆的(即使 XᵀX 不可逆),这解决了普通线性回归中可能存在的数值不稳定问题。

5. 感知机与合页损失(Hinge Loss)

第五个问题涉及感知机算法。感知机的损失函数是合页损失(Hinge Loss)的一个特例:

loss = max(0, -y_i * (wᵀx_i))

这与支持向量机中使用的间隔损失在形式上是相同的。其中 y_i * (wᵀx_i) 被称为“函数间隔”。

题目要求:

  1. 写出超平面完美分隔数据的条件:即对于所有数据点 i,满足 y_i * (wᵀx_i) > 0
  2. 讨论损失为零与完美可分的关系:损失为零不一定意味着完美可分。例如,当权重 w = 0 时,损失也为零,但显然无法分隔任何数据。因此,命题“损失为零 ⇒ 完美可分”是错误的。

6. 正则化感知机与拉格朗日对偶

第六个问题探讨了正则化感知机的对偶形式。原始问题是带约束的优化:

min_w J(w) s.t. ||w||² ≥ 1

我们可以通过引入拉格朗日乘子 λ (λ ≥ 0),构造拉格朗日函数:

L(w, λ) = J(w) + λ(1 - ||w||²)

原始问题等价于 min_w max_{λ≥0} L(w, λ)。其对偶问题是交换极值顺序:max_{λ≥0} min_w L(w, λ)

为什么对偶问题的最优值与原始问题相同?
考虑内层的 max_{λ≥0} 操作:

  • 如果约束被违反(即 1 - ||w||² > 0),那么通过取 λ → ∞L(w, λ) 会趋于无穷大。
  • 如果约束被满足(即 1 - ||w||² ≤ 0),那么最优的 λ 为 0,此时 L(w, 0) = J(w)
    因此,外层的 min_w 操作实际上就是在满足约束 ||w||² ≥ 1 的条件下最小化 J(w),这与原始问题一致。

总结 🎯

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

  1. 广义线性模型(GLM) 的概率解释,并推导出在正态假设下,其最大似然估计等价于最小二乘法
  2. 回顾了考试中的核心题型,包括:
    • 硬间隔SVM 必须完全分类正确。
    • 通过特征映射(如平方项、绝对值)解决线性不可分问题。
    • 优化中,梯度方向更新对于凸可微函数的良好性质,以及随机梯度下降的不同行为。
    • 岭回归 的推导及其解的良好性质。
    • 感知机损失 与合页损失的关系,以及损失函数的局限性。
    • 带约束优化问题的拉格朗日对偶形式及其等价性。

希望本次复习能帮助你巩固这些机器学习中的重要概念。

课程 P17:概率模型与广义回归 📊

在本节课中,我们将学习一种新的动作空间:输出上的概率分布。我们将探讨如何预测概率分布,而不是单一的类别或数值,并了解这在数据科学问题(如异常检测)中的应用。课程将涵盖概率模型的基本概念、评估方法,并介绍逻辑回归、泊松回归等广义线性模型。


概述

到目前为止,我们已经讨论了几种不同类型的动作空间。假设空间包含许多决策函数,每个决策函数从输入空间获取一个输入,并在动作空间中给出一个输出。我们讨论过的动作空间包括:

  • 回归中的实数线。
  • 硬分类中的 {-1, +1}
  • 多类分类中的离散有限集 {1, ..., K}

今天,我们将引入一个新的动作空间:输出上的概率分布。这意味着,对于多类问题,我们不是输出单个类别,而是输出类别集合上的一个概率分布。


动机:城市感知项目

为了理解这种方法的动机,让我们看一个实际项目:城市感知(CitySense)。这个项目的目标是成为位置数据的专家,其第一款产品是旧金山夜生活的实时指南。它需要回答:“当前哪些地方异常热门?”

数据科学的核心问题是:如何判断某个地点在特定时间是否“异常流行”?

我们使用的数据集是出租车GPS轨迹数据,特别是出租车的下车地点,作为人们前往某地的标志。我们需要:

  1. 建立典型行为的模型(例如,城市某区域在一天中不同时间的典型出租车下车次数)。
  2. 实时观察实际数据,并与模型预测进行比较,以发现异常(如意外的音乐会)。

预测概率分布的优势

假设我们的输出空间是实数(即回归问题)。我们想要获取一个输入 x,并输出给定 xy 的概率分布 P(y|x)

拥有预测分布 P(y|x) 后,我们可以做很多事情:

  • 优化任意损失函数:例如,要最小化平方损失,可以预测该分布的期望值 E[y|x];要最小化绝对损失,可以预测该分布的中位数。
  • 衡量事件的异常程度:例如,在出租车接送预测中,如果模型预测分布为泊松(λ=40),而实际观察到100次接送,我们可以计算 P(y >= 100 | x) 来衡量该事件有多不寻常。
  • 计算预测区间:可以找到值 ab,使得 P(a <= y <= b | x) = 0.95,从而得到一个95%的预测区间。

数据与问题设定

我们的数据是纽约市的出租车接送数据。我们将城市空间划分为网格单元,时间按小时划分。因此,每个数据点可以表示为:

  • 输入 x:网格单元ID、周几、小时。
  • 输出 y:该网格单元在该小时内观察到的接送次数(计数数据)。

预测问题:给定一个查询(如“周三晚上8点,在网格单元G”),我们想要输出该地点该时段接送次数的概率分布。

数据划分的注意事项:由于数据具有时间序列特性,在划分训练集和测试集时,应按时间顺序划分(例如,用前N周的数据训练,用之后的数据测试),以模拟模型在实际部署中只能使用历史数据进行预测的场景。


建模方法:分层 vs. 合并

在建模时,我们面临一个偏差-方差的权衡:

  • 完全分层:为每个网格单元和每个小时单独建立一个模型。这减少了偏差(因为模型专门针对该条件),但增加了方差(因为每个模型可用的数据很少)。
  • 合并:将多个网格单元或时间段的数据合并在一起建立一个模型。这减少了方差(因为使用了更多数据),但可能增加偏差(因为忽略了不同条件间的差异)。

选择分层还是合并,取决于我们是否有足够的数据来可靠地估计每个独立条件下的分布。


评估预测分布:似然

如何评估一个预测分布 P_hat(y|x) 的好坏?一个标准方法是使用似然

定义:对于观测到的数据集 D = {(x_i, y_i)},预测分布 P_hat 的似然是 P_hat 分配给这些数据的概率(或概率密度)的乘积:
L(P_hat; D) = ∏_i P_hat(y_i | x_i)

我们通常使用对数似然,因为它更易于计算和优化:
log L(P_hat; D) = ∑_i log P_hat(y_i | x_i)

评估准则:一个好的预测分布应该给新数据(测试集)赋予高的似然值。因此,我们可以通过比较不同模型在测试集上的平均对数似然来评估它们。


参数模型与最大似然估计

我们通常使用参数模型,即一个由参数 θ 索引的概率分布族 P(y; θ)。例如:

  • 泊松分布:P(k; λ) = (e^{-λ} λ^k) / k!,参数 θ = λ
  • 高斯分布:参数 θ = (μ, σ^2)

最大似然估计:给定数据集 D,我们寻找能最大化数据似然(或对数似然)的参数值 θ_hat
θ_hat = argmax_θ ∑_i log P(y_i; θ)

这等价于在经验风险最小化框架中,最小化负对数似然损失。


广义回归框架

现在,我们将概率建模扩展到有输入 x 的情况,这被称为广义回归。我们的目标是学习一个决策函数 f,它接收输入 x,并输出 y 的一个概率分布 P(y|x)

框架设定

  • 动作空间:概率密度函数或概率质量函数的集合。
  • 损失函数:负对数似然 l(f(x), y) = -log f(x)[y],其中 f(x)[y] 是模型 f 在输入 x 下为观测值 y 分配的概率。
  • 经验风险R_emp(f) = (1/n) ∑_i -log f(x_i)[y_i]

我们的目标是在假设空间 H 中找到一个函数 f,以最小化经验风险。


示例一:逻辑回归(伯努利回归)

当输出 y 是二元的(例如 {0, 1}),我们使用伯努利分布。逻辑回归预测 y=1 的概率为:
P(y=1|x) = σ(w^T x) = 1 / (1 + e^{-w^T x})
其中 σ 是逻辑函数(sigmoid函数),它将线性分数 w^T x 映射到 (0, 1) 区间。

模型拟合:通过最大似然估计(即最小化负对数似然损失)来学习参数 w。正则化项(如L2正则化)可以加入损失函数中以防止过拟合。


示例二:多项式逻辑回归(多类分类)

当输出 yK 个类别时,我们预测一个类别上的分布(多项分布)。首先,为每个类别 k 计算一个线性分数:s_k = w_k^T x
然后,使用 softmax 函数将这些分数转换为概率:
P(y=k|x) = e^{s_k} / ∑_{j=1}^K e^{s_j}
softmax 函数确保所有类别的概率之和为1,且每个概率都大于0。

模型拟合:同样通过最小化负对数似然损失来学习所有参数 {w_1, ..., w_K}


示例三:泊松回归

当输出 y 是计数数据时(如出租车接送次数),泊松分布是一个自然的选择。泊松回归预测泊松分布的参数 λ(即期望计数)为:
λ = exp(w^T x)
这里使用指数函数 exp 作为连接函数,确保 λ > 0

模型拟合:使用泊松分布的概率质量函数构建似然,并通过最大似然估计学习参数 w


广义线性模型

逻辑回归、多项式回归和泊松回归都是广义线性模型的特例。GLM的统一模式是:

  1. 线性预测器:η = w^T x
  2. 连接函数:通过一个单调可微的连接函数 g,将线性预测器 η 与分布参数的均值 μ 联系起来:g(μ) = η
  3. 指数族分布:响应变量 y 服从一个指数族分布(如伯努利、多项式、泊松、高斯等)。

这种统一的框架允许我们为各种类型的数据(二值、计数、连续值等)系统地构建概率预测模型。


总结

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

  1. 预测概率分布的概念及其在提供不确定性度量和决策支持方面的优势。
  2. 使用似然作为评估预测分布质量的核心准则。
  3. 最大似然估计作为拟合参数概率模型的基本方法。
  4. 将概率建模纳入监督学习框架,引入广义回归,其中动作空间是概率分布。
  5. 几个重要的广义线性模型实例:逻辑回归(用于二分类)、多项式逻辑回归(用于多分类)和泊松回归(用于计数数据)。

通过预测完整的概率分布,而不仅仅是单个值,我们的模型能够传达更多信息,支持更复杂的决策,并更好地量化预测的不确定性。

机器学习复习课:考试要点梳理 📚

在本节课中,我们将复习第一次考试后至今所学的核心内容,为即将到来的考试做准备。课程将涵盖核方法、决策树、集成学习(Bagging、Boosting)以及多类分类等关键主题。

核方法回顾 🔍

上一节我们介绍了核方法的基本思想。本节中我们来看看核技巧的具体含义和应用。

核技巧适用于那些目标函数可以完全表示为输入数据内积形式的机器学习算法。具体来说,当算法中的目标函数仅依赖于输入数据点 x_ix_j 的内积 x_i^T x_j,而不单独出现 x_i 时,就可以应用核技巧。

核技巧的核心在于,我们可以将这个标准的内积替换为其他形式的内积。这通常通过两种方式实现:

以下是构造新核函数的两种主要方法:

  1. 定义新的特征映射:引入一个特征映射函数 φ(x),将原始输入空间映射到新的特征空间,然后在新空间中使用标准欧几里得内积,即 K(x_i, x_j) = φ(x_i)^T φ(x_j)
  2. 直接定义核函数:直接定义一个函数 K(x_i, x_j),并证明它满足作为内积所需的条件(对称性、正定性)。

决策树特性 🌳

接下来,我们转向决策树模型。决策树有一些独特的性质,使其在特定场景下非常有用。

决策树模型不关心特征的具体数值,只关心特征值的相对排序。例如,对“温度”特征进行对数变换,不会改变决策树的划分结果,因为值的相对顺序保持不变。

决策树通过一系列规则将输入空间划分为不同的矩形区域,每个区域对应树的一个叶节点,并拥有自己的预测值。

一个有趣的技巧是将叶节点转换为特征。具体来说,可以为树的每个叶节点(即每个区域)定义一个指示函数。该函数在输入 x 落入对应区域时输出1,否则输出0。这样,我们就得到了一个非线性的特征映射。

将这些非线性特征(指示函数)作为新的输入,传递给线性模型(如Lasso回归),就可以利用所有数据训练出一个具有非线性决策边界的模型。这种方法结合了树模型捕捉非线性结构的能力和线性模型高效处理大数据集的优势。

集成学习:Bagging 🤝

现在,让我们探讨集成学习方法。首先介绍Bagging(自助聚合)。

Bagging的基本流程如下:从大小为N的数据集中,有放回地抽取一个大小为N的自助样本,在此样本上训练一个基学习器。重复此过程多次,得到多个模型。最终的预测是所有模型预测的平均值。

Bagging的主要思想是降低模型预测的方差,从而提升泛化性能。随着自助样本数量的增加,模型的平均预测会趋于稳定,通常不会导致过拟合加剧。

以下是Bagging的一个关键特性:

  • 方差减少:对多个独立训练的模型取平均,可以减少预测的方差。
  • 偏差不变:模型的平均预测的期望值(偏差)与单个模型的期望值相同,因此Bagging不改变偏差。

为了在训练过程中评估模型性能,可以使用“袋外”估计。在构建每个自助样本时,平均约有 1/e ≈ 36.8% 的原始数据未被选中,这些数据可以作为该基学习器的验证集,用于评估其性能。

集成学习:随机森林与Boosting 🌲➡️🌳

基于Bagging的思想,我们进一步学习随机森林和Boosting。

随机森林是Bagging的一个扩展,专门用于决策树。除了对数据行进行自助采样外,它在构建每棵树的每个节点时,还会从所有特征中随机选取一个子集(例如,特征总数的平方根)来寻找最佳划分点。这增加了树之间的多样性,进一步降低了方差。

Boosting是另一种强大的集成技术,它顺序地训练一系列弱学习器,每个新学习器都更关注前序学习器预测错误的样本。

以下是关于AdaBoost和梯度提升的要点:

  • AdaBoost:要求基学习器输出硬分类(如-1或+1)。它通过最小化指数损失函数来逐步组合弱学习器。指数损失对错分样本惩罚很重,因此对异常值敏感。
  • 梯度提升:这是一种更通用的框架。它需要指定一个可微的损失函数和一个能够进行回归的基学习器(因为需要拟合当前模型的负梯度)。算法通过梯度下降的思想,在函数空间中进行优化,逐步添加新模型来减少损失。

多类分类模型 🎯

最后,我们复习多类分类问题。我们讨论了几种将二分类扩展到多类的方法。

在多类分类中,我们有一个类别敏感的损失函数 L(a, y),其中 a 是预测的类别,y 是真实类别。损失矩阵通常在对角线(正确分类)上为0。

我们介绍了基于线性评分函数的方法。定义一个特征映射 φ(x, y),它编码了输入 x 和类别标签 y 的兼容性。评分函数为 s(x, y) = w^T φ(x, y),最终预测为得分最高的类别 argmax_y s(x, y)

常用的多类损失函数包括:

  1. 多类Hinge损失:用于支持向量机风格的多类分类。
  2. 多类逻辑损失(Softmax):对应于多项式逻辑回归,通过最大化似然(或最小化负对数似然)进行训练。

我们还回顾了条件概率模型的一般形式:通过线性变换 w^T x 得到一个分数,再通过一个链接函数 f 将其映射到合适的参数空间(例如,使用sigmoid函数得到概率,使用exp函数得到泊松分布的参数)。

总结 📝

本节课中我们一起复习了机器学习中多个核心主题。我们回顾了核技巧的本质及其两种实现方式,理解了决策树基于排序的特性以及将其叶节点作为特征使用的技巧。我们深入探讨了集成学习,明确了Bagging降低方差、不改变偏差的原理,以及随机森林通过特征采样增加多样性的机制。我们还对比了AdaBoost和更通用的梯度提升框架。最后,我们梳理了多类分类的建模思路和常用的损失函数。希望本次复习能帮助大家更好地准备考试。

课程 P19:贝叶斯网络与贝叶斯方法入门 🧠

在本节课中,我们将学习机器学习中的两个核心概念:贝叶斯网络贝叶斯方法。贝叶斯网络是一种描述概率分布的语言,而贝叶斯方法则提供了一种基于概率的推理框架。我们将从基础概念开始,逐步深入,确保初学者也能轻松理解。


概率推理概述 📊

概率推理的核心思想是使用随机变量来表示我们感兴趣的系统。例如,在机器学习中,特征和标签都可以被视为随机变量。为了完全理解这个系统,我们需要知道这些随机变量的联合分布

一旦我们有了联合分布,就可以进行推理,即对系统提出查询。例如,给定某些变量的观测值,我们可以推断其他变量的最可能值或其分布。这个过程与学习(即找出概率分布本身)是相辅相成的。

一个典型的例子是医学诊断:我们有代表症状(如咳嗽、发烧)和疾病(如感冒、肺炎)的随机变量。通过观察某些症状,我们可以推断患者患某种疾病的概率。


联合分布与参数问题 🧮

我们如何表示离散随机变量的概率分布?一种直接的方法是列出所有可能的变量组合及其概率,形成一个巨大的概率表。

假设我们有 d 个二元随机变量。表示其无限制的全联合分布需要多少参数?答案是 2^d - 1。这是因为每个变量有两种状态,共有 2^d 种组合,而所有概率之和为1,因此可以省略一个参数。

当变量数量 d 很大时(例如成百上千),这种表示方法所需的参数数量会呈指数级增长,导致存储、计算和参数估计都变得不可行。因此,我们需要找到限制概率分布复杂性的方法。


独立性假设 🔗

限制概率分布集合的一个标准方法是做出独立性假设。最极端的情况是假设所有 d 个随机变量都相互独立。在这种情况下,联合概率等于各变量边缘概率的乘积。

对于 d 个二元随机变量,在相互独立的假设下,仅需要 d 个参数(每个变量一个概率值)即可表示整个分布。这与无限制联合分布所需的 2^d - 1 个参数形成了鲜明对比。

然而,完全独立通常是一个过强的假设。现实中,变量之间往往存在依赖关系。因此,我们需要一个介于完全依赖和完全独立之间的折中方案。


条件独立性 🤝

条件独立性是贝叶斯网络的核心思想。它描述的是:在给定某些其他变量的条件下,另一些变量变得独立。

考虑一个例子:有三个变量——R(下雨)、W(草湿)、S(路滑)。如果知道正在下雨(R),那么知道草是湿的(W)并不会提供关于路是否滑(S)的额外信息,因为 R 已经解释了 WS。因此,在给定 R 的条件下,WS 是条件独立的,记作 W ⊥ S | R

形式化定义如下:给定随机变量 RWS 条件独立,当且仅当 P(W, S | R) = P(W | R) * P(S | R)

利用条件独立性,我们可以用更少的参数来表示联合分布。在上面的例子中,无假设时需要7个参数,完全独立时需要3个参数,而引入条件独立性后只需要5个参数。这有效地控制了模型的复杂度。


贝叶斯网络:定义与表示 🕸️

贝叶斯网络是一种用于指定具有特定因子分解的联合概率分布的图模型。这种因子分解通常对应着条件独立性关系。

一个贝叶斯网络是一个有向无环图,其中:

  • 每个节点代表一个随机变量。
  • 每条有向边表示变量之间的直接依赖关系。
  • 没有父节点的节点有其边缘概率分布
  • 有父节点的节点有其条件概率分布,条件是其所有父节点。

根据图结构,联合概率分布可以分解为每个节点在其父节点条件下的概率的乘积。对于一个有变量 X1, X2, ..., Xn 的网络,其联合分布为:
P(X1, X2, ..., Xn) = ∏ P(Xi | Parents(Xi))


贝叶斯网络中的结构模式 🔄

贝叶斯网络中的图结构编码了特定的条件独立性。以下是三种基本结构模式:

  1. 共同原因(Common Cause)

    • 结构C → AC → B (一个父节点,两个子节点)
    • 例子C=下雨,A=路滑,B=草湿。
    • 独立性AB 一般不独立,但在给定 C 时条件独立。
  2. 链式结构/间接影响(Chain)

    • 结构A → C → B
    • 例子A=下雨,C=地湿,B=鞋脏。
    • 独立性AB 一般不独立,但在给定 C 时条件独立。
  3. 共同结果(Common Effect)

    • 结构A → CB → C (两个父节点,一个子节点)
    • 例子A=课程难度,B=知识水平,C=期末成绩。
    • 独立性AB 最初是独立的,但在观察到 C 后,它们变得不独立(已知成绩后,课程难度能提供关于知识水平的新信息)。


朴素贝叶斯分类器 📨

朴素贝叶斯是贝叶斯网络在机器学习中的一个经典应用,常用于文本分类等问题。

其网络结构非常简单:一个父节点代表类别标签 Y,多个子节点代表特征 X1, X2, ..., Xd,所有特征都只依赖于类别标签。

这编码了一个关键假设:在给定类别标签 Y 的条件下,所有特征 Xi 都是条件独立的。虽然这个假设在现实中往往不成立(例如文本中的词语并非独立),但它极大地简化了模型,使得参数估计和计算变得非常高效。

对于二元特征和二元分类,模型需要 1 + 2d 个参数:1个用于 P(Y)2d 个用于所有 P(Xi | Y)


从贝叶斯网络到其他模型 🔄

贝叶斯网络的框架可以衍生出许多强大的模型:

  • 马尔可夫链:可以视为一个线性链状的贝叶斯网络,描述了状态随时间的转移。
  • 隐马尔可夫模型:包含未被观测的隐状态序列 Z 和与之相关的观测序列 XZ 形成一个马尔可夫链,而每个观测 X_t 只依赖于当前隐状态 Z_t
  • 卡尔曼滤波器:是隐马尔可夫模型在连续变量下的特例,其中所有分布(状态转移和观测)都是高斯的,且是线性的。广泛应用于目标跟踪等领域。
  • 最大熵马尔可夫模型:箭头方向与隐马尔可夫模型相反,直接对给定观测序列 X 的标签序列 Y 的条件分布 P(Y | X) 进行建模,常用于序列标注任务。

贝叶斯方法:从频率主义到贝叶斯推断 🔄

上一节我们介绍了如何用图模型表示概率关系。本节我们来看看另一种重要的概率思想——贝叶斯方法。它与经典的频率主义统计学有着根本的不同。

频率主义统计中:

  • 参数 θ 被视为一个固定但未知的常量。
  • 我们从数据中计算一个统计量(数据的函数)作为 θ点估计(如样本均值估计总体均值)。
  • 我们关注估计量的性质,如一致性(数据量无限时收敛到真值)和效率(收敛速度快慢)。

贝叶斯统计中:

  • 参数 θ 本身被视为一个随机变量,具有自己的概率分布。
  • 我们在看到数据之前,对 θ 有一个先验分布 P(θ),它编码了我们的初始信念。
  • 我们有一个描述数据 D 如何依赖于 θ似然模型 P(D | θ)
  • 在看到数据 D 后,我们根据贝叶斯定理更新信念,得到后验分布 P(θ | D)

贝叶斯定理公式如下:
P(θ | D) = [P(D | θ) * P(θ)] / P(D)
其中 P(D) = ∫ P(D | θ)P(θ) dθ 是数据的边际似然(通常视为归一化常数)。

后验分布综合了先验知识和观测数据,代表了看到数据后对参数 θ 的理性信念状态。


抛硬币例子:共轭先验 🪙

让我们用一个抛硬币的例子来具体说明。参数 θ 是硬币正面朝上的概率,取值范围 [0, 1]。我们观察到 n_h 次正面和 n_t 次反面。

  • 似然P(D | θ) ∝ θ^{n_h} * (1-θ)^{n_t} (伯努利分布)
  • 先验:我们选择 θ 上的 Beta分布 作为先验,因为它定义在 [0,1] 区间且形式灵活。
    Beta分布的概率密度函数为:P(θ) ∝ θ^{α-1} * (1-θ)^{β-1}
    其中 α, β 是超参数,可以理解为“先验的虚拟成功次数和失败次数”。
  • 后验:将似然与先验相乘,得到后验分布:
    P(θ | D) ∝ θ^{n_h} * (1-θ)^{n_t} * θ^{α-1} * (1-θ)^{β-1} = θ^{(α+n_h)-1} * (1-θ)^{(β+n_t)-1}
    这正是另一个 Beta 分布,参数更新为 (α+n_h, β+n_t)

当先验分布与后验分布属于同一分布族时,我们称该先验为共轭先验。共轭先验使得后验计算有解析解,非常方便。Beta分布是伯努利/二项似然的共轭先验。

随着数据量的增加,后验分布会越来越集中于 θ 的真实值附近(方差减小)。


贝叶斯点估计 🎯

得到后验分布 P(θ | D) 后,如果我们仍需一个具体的点估计值 θ_hat,该如何选择呢?这取决于我们如何定义“好”的估计。

常见的基于后验分布的点估计有:

  1. 后验均值θ_hat = E[θ | D]。在平方损失函数下,这是最优估计。
  2. 后验中位数:在绝对损失函数下,这是最优估计。
  3. 最大后验估计θ_hat = argmax_θ P(θ | D),即后验分布的众数。在“0-1”损失函数(只关心估计是否完全正确)下,这是最优估计。MAP估计也常被使用。

总结 📝

本节课我们一起学习了概率图模型和贝叶斯推断的核心思想。

  • 我们首先了解了用联合分布表示系统以及进行概率推理的概念。
  • 为了应对联合分布参数过多的问题,我们引入了条件独立性假设。
  • 贝叶斯网络作为一种有向无环图,提供了一种直观表示变量间条件依赖关系的方式,其联合分布可分解为局部条件概率的乘积。我们分析了三种基本结构及其蕴含的独立性。
  • 我们看到了贝叶斯网络在机器学习中的直接应用——朴素贝叶斯分类器,以及它如何衍生出隐马尔可夫模型等更复杂的模型。
  • 随后,我们转向贝叶斯方法,理解了它与频率主义统计的区别,核心在于将参数视为随机变量并利用先验分布和贝叶斯定理得到后验分布。
  • 通过抛硬币的例子,我们实践了共轭先验(Beta分布)如何使后验计算变得简单,并讨论了如何从后验分布中得到点估计(如后验均值、MAP估计)。

贝叶斯网络和贝叶斯方法为我们提供了强大的工具,用于在不确定性下进行建模、推理和决策。

课程 P2:2. 梯度下降与矩阵微分基础 🧮

在本节课中,我们将学习梯度下降的基本思想,以及如何对涉及矩阵和向量的函数进行微分。我们会从一个简单的例子开始,逐步理解梯度、导数以及如何利用它们来寻找函数的最小值。


概述:从实际问题到梯度下降

在深入研究函数的导数和求导之前,让我们从一个实际生活中的例子开始。在一个典型的问题中,你有一个观察到的输入,你设计一个过程来接受这个输入并将其转化为某种输出。同时,你拥有真实的标签。你会将你的输出与真实标签进行比较。如果你的输出与真实观察值偏差很大,你就想施加一些惩罚。这个惩罚取决于你如何构建你的成本函数。它可能是线性的、二次的,或者是0-1损失函数。

一个简单而有趣的例子是,我们有一个矩阵 A 和观测值 b。我们定义损失函数 L(x) 为输出 Ax 与目标 b 之间差值的平方范数的一半。我们的目标是最小化这个损失函数。

公式: L(x) = 1/2 * ||Ax - b||²

当然,有各种专门的方法(如线性代数方法)来解决这个最小化问题。但为了今天的主题——微分,我们将探讨基于梯度的方法。如果我们尝试使用某种基于梯度的方法,会发生什么?这个函数 L(x) 定义了一个巨大的空间,在这个空间的每一点,L(x) 都指定了一个值,描述了一个像多山地表一样的曲面。你的初始点在这个表面上,你计算梯度,梯度指向最陡峭的上升方向。取其负值,就指向最陡峭的下降方向。然后你沿着这个方向走几步。这个过程会把你带向函数值更低的地方。

所以,最终目标是找到 L(x) 的一个低值。我们称这个过程为优化,特别是最小化。


理解更新规则

你可以看到更新规则,它看起来像一个有点滑稽的箭头(例如:x ← x - η ∇L(x))。对数学家来说,一开始这可能看起来很奇怪:这不是一个等式。如果两边都有 x,我把它们抵消掉会发生什么?这个符号是什么意思?

记住风景和运动粒子的类比。更新规则实际上是描述你移动步骤的方式。每次,左手边是你当前的位置,右手边是你的下一个位置。你只是按照给定的规则,用下一个位置替换当前位置。

让我们专注于理解所有这些符号的含义。现在看起来可能微不足道,但最终它会变得非常有用。

更新规则示例: x ← x - η ∇L(x)

  • x:我们将观测值表示为向量,它是一排数字。
  • :箭头表示替换过程,用右手边更新左手边。
  • -:负号。注意,你不能直接从向量中减去一个标量。这里的操作是向量减法,所以我们需要确保操作两侧的对象都是向量。这是一个常见的错误。
  • η:这是一个标量,称为学习率,它告诉你步长有多大。如果太大,就像徒步旅行者迈出巨大的步伐,可能会越过山谷,导致发散。如果太小,则需要很多微小的步骤,收敛会很慢。
  • ∇L(x):这是梯度。L(x) 是一个将向量映射为实数的函数(标量函数)。它的梯度 ∇L(x) 是一个向量,由 Lx 每个分量的偏导数组成。

因此,η ∇L(x) 是标量与向量的乘法。最后,x - η ∇L(x) 是从一个向量中减去另一个向量,这是有效的操作。


计算一个具体例子的梯度

现在假设我们在二维空间工作,A 是一个 2x2 矩阵,b 是一个二维向量。我们有损失函数的具体形式:

公式: L(x) = 1/2 * ||Ax - b||²

目标是找到这个函数的导数(梯度)。我们有两个分量 x₁x₂。梯度 ∇L(x) 的第一个分量是 ∂L/∂x₁,第二个分量是 ∂L/∂x₂

首先,我们按分量写出 Ax - b

  • 第一行:a₁₁ x₁ + a₁₂ x₂ - b₁
  • 第二行:a₂₁ x₁ + a₂₂ x₂ - b₂

向量 v = Ax - b 的平方范数是其分量的平方和:||v||² = v₁² + v₂²

所以,L(x) = 1/2 * [ (a₁₁ x₁ + a₁₂ x₂ - b₁)² + (a₂₁ x₁ + a₂₂ x₂ - b₂)² ]

现在我们对 x₁ 求偏导,使用链式法则:

公式:
∂L/∂x₁ = (a₁₁ x₁ + a₁₂ x₂ - b₁) * a₁₁ + (a₂₁ x₁ + a₂₂ x₂ - b₂) * a₂₁

类似地,对 x₂ 求偏导:

公式:
∂L/∂x₂ = (a₁₁ x₁ + a₁₂ x₂ - b₁) * a₁₂ + (a₂₁ x₁ + a₂₂ x₂ - b₂) * a₂₂


寻求更简洁的矩阵表示法

如果你想把上面的表达式写下来并用 Python 编码,除非有一个很好的矩阵形式,否则会相当冗长。你不想为每个分量都写出完整的表达式。你想要一个简洁的账户来书写东西。

以下是两个有用的例子:

1. 二次型:
考虑函数 f(x) = xᵀ A x,其中 A 是对称矩阵。这是一个标量函数。它的梯度是 ∇f(x) = (A + Aᵀ)x。当 A 对称时,简化为 2Ax

推导思路: 可以将 xᵀ A x 写为求和形式 Σᵢ Σⱼ Aᵢⱼ xᵢ xⱼ。求导时,利用乘积法则,将一项视为常数对另一项求导。

2. 向量值函数的雅可比矩阵:
如果函数 f: ℝⁿ → ℝᵐ 输出一个向量,那么它的导数是一个矩阵,称为雅可比矩阵。雅可比矩阵的第 i 行是第 i 个输出分量函数的梯度(作为行向量)。

最简单的例子是矩阵乘法:f(x) = A x。它的雅可比矩阵就是矩阵 A 本身。

公式: 如果 f(x) = A x,则 J_f(x) = A


梯度下降与临界点

让我们回到梯度下降。徒步旅行者的目标是沿着最陡峭的下降方向前进。那么,什么时候停止呢?

教授的笔记中提到了四个停止标准,但它们都指向同一个概念:临界点。当梯度向量的范数(大小)为零或非常接近零时,你就到达了一个临界点。在这一点上,没有下降方向,所以你停下来。

临界点可以是:

  • 局部最小值:你处在山谷底部。
  • 局部最大值:你处在山顶。
  • 鞍点:在一个方向上是山谷,在另一个方向上是山脊,例如函数 f(x, y) = x² - y² 在 (0,0) 的点。

为了分类一个临界点,我们需要看二阶导数(对于多变量函数,是海森矩阵)。海森矩阵是一个对称矩阵。

海森矩阵与特征值:

  • 如果海森矩阵的所有特征值都为正,则该点是局部最小值
  • 如果所有特征值都为负,则是局部最大值
  • 如果特征值有正有负,则是鞍点
  • 如果有些特征值为零,则情况可能是退化的(例如,平坦的区域)。

总结与注意事项

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

  1. 梯度下降的基本原理:通过沿着负梯度方向更新参数来最小化函数。
  2. 理解更新规则:仔细识别公式中的每个符号(向量、标量、操作符)至关重要,避免常见错误。
  3. 计算梯度:对于像 L(x) = 1/2 * ||Ax - b||² 这样的函数,我们展示了如何通过分量求导来计算梯度。
  4. 矩阵微分:介绍了二次型 xᵀ A x 的梯度和向量值函数 Ax 的雅可比矩阵,这些提供了更简洁的表示。
  5. 临界点:梯度为零的点。通过分析海森矩阵的特征值,可以判断它是局部最小值、最大值还是鞍点。

重要提醒: 梯度下降定理(保证收敛到最小值)通常要求函数是凸的。对于非凸函数,你可能会收敛到局部最小值或鞍点。理解定理成立的条件并思考如何构造反例打破这些条件,是深入理解的关键。

请通过练习来巩固这些概念,特别是注意在求和与求导过程中正确处理索引,这是常见的错误来源。

课程 P20:Lab_April_21 试题解析教程 📚

在本教程中,我们将对课程 P20 的 Lab_April_21 试题进行详细解析。我们将逐一讲解各个部分的核心概念、解题思路和关键步骤,确保初学者也能轻松理解。课程内容涵盖了机器学习中的基础概率、决策树、集成学习、损失函数优化等多个重要主题。


第一部分:基础概率与期望值 📊

上一节我们介绍了课程的整体结构,本节中我们来看看第一部分关于基础概率与期望值的题目。

这部分主要考察对期望值、偏差和方差等基本概念的理解。题目描述了一个从数据分布 D 中采样,并比较预测平均值与实际值的过程。

核心概念

  • 期望的线性性质E[aX + b] = aE[X] + b
  • 方差的非线性性质Var(aX) = a²Var(X)
  • 样本均值的方差Var(样本均值) = Var(单个样本) / 样本数量

以下是解题的关键步骤:

  1. 期望值计算:预测平均值 Z-bar 的期望值等于单个预测 Z 的期望值,因为期望算子是线性的。
  2. 偏差分析:预测的期望值与真实值 μ 之间的差异即为偏差。由于 μ 是常数,ZZ-bar 的偏差期望值相同。
  3. 方差分析:利用方差性质 Var(cX) = c²Var(X) 以及独立同分布样本的方差可加性,推导出 Z-bar 的方差是 Z 的方差除以样本数量 m
  4. 模型选择:应选择方差较小的预测模型,因为方差越小,预测越稳定。
  5. 相关性影响:如果预测之间存在正相关性,通常会增大整体方差,因此应优先选择相关性较小的模型。

第二部分:决策树与信息熵 🌳

在理解了基础统计量之后,我们进入决策树部分,这里考察信息熵的计算和信息增益的理解。

题目给出了一个包含四个样本的数据集,目标是根据特征(如“宠物距离”、“开放空间”)预测“地点是否合意”。关键是要区分目标变量(是否合意)和用于分割的特征

核心概念

  • 信息熵:度量系统的不确定性。对于二元分类,公式为 H(p) = -p*log₂(p) - (1-p)*log₂(1-p)
  • 信息增益:父节点熵与子节点熵的加权平均之差。IG = H(父节点) - Σ (w_i * H(子节点_i))

以下是解题思路:

  1. 计算父节点熵:在未分割前,所有四个样本处于同一节点。根据目标列中“是”与“否”的比例计算熵。这里样本空间大小为2(是或否),而非样本数量4。
  2. 计算不同分割方式的信息增益:分别尝试用“宠物距离”和“开放空间”两个特征对数据进行分割。对于每种分割:
    • 计算分割后各子节点的熵。
    • 根据子节点样本数计算权重 w_i
    • 用父节点熵减去加权子节点熵,得到该特征的信息增益。
  3. 比较信息增益:信息增益越大的特征,意味着用它分割能带来更多的“信息纯度”提升,是更好的分割选择。题目中,通过计算可以比较出哪个特征的信息增益最大、哪个最小,而第三个特征的信息增益应介于两者之间。

第三部分:AdaBoost 算法 ⚡

接下来我们分析集成学习中的 AdaBoost 算法相关问题。

这部分问题涉及 AdaBoost 的基础分类器、组合预测、指数损失函数以及算法收敛性。

核心概念

  • 基础分类器 (Base Classifier):在每轮迭代中训练的弱分类器 h_m(x)
  • 组合预测:最终分类器是各轮弱分类器的加权投票 H(x) = sign( Σ α_m * h_m(x) )
  • 指数损失:AdaBoost 可以理解为在最小化指数损失函数 L(y, f(x)) = exp(-y * f(x))

以下是题目要点解析:

  1. 基础分类器输出:基础分类器 h_m(x) 的输出是离散的,例如 +1-1(或 0/1),用于指示分类是否正确。
  2. 最终预测形式:最终预测是基础分类器输出的线性组合 Σ α_m * h_m(x) 的符号。权重 α_m 根据该轮分类器的错误率计算。
  3. 损失函数与优化:AdaBoost 的前向分步加性模型 (FSAM) 视角下,每一步是优化指数损失函数,通过选择弱分类器 h 和权重 v 来最小化经验风险。
  4. 假设空间差异:两个看似相似的公式代表了不同的假设空间。一个是线性函数空间,另一个是其组合,后者空间更大,不能简单等同。
  5. 收敛性条件:算法保证经验误差在有限轮数内达到零的关键条件是每一轮的加权错误率 γ_m 必须严格大于零且小于 0.5(即略好于随机猜测)。如果 γ_m 可以等于 0.5,则乘积项可能不收敛到零,算法无法保证有限步内达到零训练误差。
  6. 泛化问题:在训练集上达到零错误率(即“记住”数据)后继续优化损失,可能找到损失更低的解,但这不一定能提升在测试集上的表现,可能发生过拟合。


第四部分:多类分类与次梯度 📉

现在我们将目光转向多类分类问题,这里涉及结构化预测和次梯度计算。

题目设定了一个三维分类问题,样本在 R² 中,标签在 {1, 2, 3} 中。

核心概念

  • 结构化预测损失:对于多类分类,一种损失函数形式为 L(y, h(x)) = max_{y'≠y} [Δ(y', y) + h(x)[y']] - h(x)[y],其中 Δ 是代价矩阵,h(x)[k] 是对第 k 类的评分。
  • 次梯度 (Subgradient):对于不可微的最大值函数,可以使用次梯度进行优化。对于 f(x) = max_i f_i(x),若 f_k(x) = f(x),则 f_kx 处的梯度是 fx 处的一个次梯度。

以下是解题步骤:

  1. 计算预测与损失:给定分类器 h(x) 对每个类的评分和代价矩阵 Δ,可以计算损失。首先找到使 h(x)[y'] + Δ(y', y) 最大的错误类别 y',然后计算损失值。
  2. 计算经验风险:对所有样本的损失求平均,得到经验风险 J(h)
  3. 参数化与次梯度:将分类器参数化为 h(x)[k] = <v_k, φ(x)>。为了求解,需要计算经验风险 J(V) 关于参数 V 的(次)梯度。利用提示,通过代入使 max 函数取到最大值的 y' 来“移除”最大值操作,从而得到可微的表达式并计算梯度。

第五部分:核化与表示定理 🔄

本节我们探讨如何利用核方法将线性模型扩展到非线性空间。

题目要求我们将一个带正则化的线性模型损失函数,通过表示定理转化为基于核函数的形式。

核心概念

  • 表示定理 (Representer Theorem):对于由正则化项 Ω(||f||) 和经验损失项组成的优化问题,其解可以表示为训练样本的线性组合 f*(x) = Σ α_i * K(x_i, x)
  • 核函数 (Kernel Function)K(x, z) = <φ(x), φ(z)>,能隐式计算高维特征空间的内积。

以下是推导过程:

  1. 写出原始损失函数:模型为 f(x) = <v, φ(x)>,损失函数包含权重 v 的 L2 正则项和平方损失项。
  2. 应用表示定理:由于正则化项是 ||v||²(即 ||f||² 的单调函数),满足表示定理条件。因此最优解 v* 可写为 v* = Σ α_i * φ(x_i)
  3. 代入并核化
    • v* 的表达式代入模型 f(x) = <v, φ(x)>,利用内积线性性质,得到 f(x) = Σ α_i * K(x_i, x)
    • v* 的表达式代入正则化项 ||v||²,同样利用内积性质,得到 Σ Σ α_i α_j K(x_i, x_j)
    • f(x) 的核化形式代入经验损失项。
  4. 得到核化损失函数:最终得到一个完全由系数 α 和核矩阵 K 表示的损失函数 J(α),优化变量从高维的 v 变为系数 α

第六部分:平方损失与条件期望 📈

最后,我们研究平方损失函数在分类问题中的性质及其与条件期望的关系。

题目展示了如何推导出最小化平方损失的最优预测,并揭示其与分类概率的联系。

核心概念

  • 条件期望最小化平方损失:对于平方损失 L(y, ŷ) = (y - ŷ)²,给定 x 时,使条件期望 E[L | x] 最小的预测 ŷ* 是条件期望 E[y | x]
  • 边际 (Margin):对于二分类问题 (y ∈ {-1, +1}),定义边际 m = y * ŷ

以下是推导与分析:

  1. 最小化条件期望
    • P(y=1 | x) = p(x),则 P(y=-1 | x) = 1-p(x)
    • 计算条件期望:E[(y - ŷ)² | x] = p(x)*(1 - ŷ)² + (1-p(x))*(-1 - ŷ)²
    • ŷ 求导并令导数为零,解得最优预测 ŷ*(x) = 2p(x) - 1
    • 反之,可得 p(x) = (ŷ*(x) + 1)/2
  2. 平方损失作为边际函数
    • 将平方损失 (y - ŷ)² 展开。利用 y² = 1,可以将其重写为 1 - 2yŷ + ŷ²
    • 进一步配方,可以将其表示为关于边际 m = yŷ 的函数:(1 - m)²。这表明平方损失惩罚的是负边际(即分类错误或置信度低的情况)。
  3. 与指数族分布的联系:题目另一部分将模型参数化为 λ = wᵀx,并假设数据服从参数为 λ 的指数族分布。通过写出数据的联合似然(或对数似然),并忽略与参数 w 无关的常数项,可以建立模型与最大似然估计的联系。随机梯度下降可用于优化对应的损失函数。

总结与回顾 🎯

在本节课中,我们一起深入解析了 Lab_April_21 的试题,涵盖了机器学习中的多个核心模块:

  1. 概率基础:重温了期望、方差的性质,以及模型选择中偏差-方差的权衡。
  2. 决策树:练习了信息熵和信息增益的计算,理解了特征选择的过程。
  3. AdaBoost:剖析了该集成算法的组件、损失函数视角以及算法收敛的关键条件。
  4. 多类分类:学习了结构化预测损失函数及其次梯度计算方法。
  5. 核方法:通过表示定理实践了将线性模型转化为核化形式的步骤。
  6. 损失函数:推导了平方损失最优解与条件期望的关系,并了解了其与边际概念的联系。

希望这份详细的教程能帮助你巩固这些知识,并为理解更复杂的机器学习模型打下坚实的基础。

课程 P21:贝叶斯回归与聚类入门 🧠

在本节课中,我们将学习贝叶斯统计在回归问题中的应用,并初步探讨聚类算法,特别是K均值和高斯混合模型。我们将从贝叶斯线性回归开始,理解如何将先验信念与数据结合,然后转向无监督学习中的聚类概念。


贝叶斯统计回顾 📊

上一节我们提到了贝叶斯方法的核心思想。本节中,我们来详细回顾其基本框架。

在贝叶斯统计中,我们从两件事开始:

  1. 似然模型:描述在给定未知参数 θ 时,观测到数据集 D 的概率,记为 P(D|θ)
  2. 先验分布:在查看任何数据之前,对参数 θ 的概率分布,记为 P(θ)。这代表了数据科学家最初的信念。

将两者结合,我们得到数据和参数的联合分布:P(D, θ) = P(D|θ)P(θ)

我们的目标是计算在观测到数据 D 后,参数 θ后验分布,应用贝叶斯规则:
P(θ|D) = P(D|θ)P(θ) / P(D)
其中,分母 P(D) 是边际似然,作为一个归一化常数,确保后验分布积分为1。

后验分布 P(θ|D) 总结了我们从数据中获得的关于 θ 的所有信息。基于此,我们可以采取行动,例如:

  • 计算后验期望值作为点估计。
  • 构造一个区间,使得 θ 落在该区间内的后验概率为95%(贝叶斯置信区间)。

贝叶斯线性回归 📈

上一节我们回顾了贝叶斯推断的基础。本节中,我们来看看如何将其应用于线性回归这一预测问题。

我们回到预测设置,有输入空间 X 和输出空间 Y。条件概率模型(似然)描述了给定输入 x 和参数 w 时,输出 y 的分布。

高斯回归模型

我们假设给定输入 x 和权重参数 w,输出 y 服从高斯(正态)分布:
y | x, w ~ N(w^T x, σ^2)
其中,σ^2 是已知的噪声方差。这与经典线性回归的假设相同。

若有 n 个独立观测数据点 {(x_i, y_i)},数据的似然函数为:
P(y | X, w) = ∏_{i=1}^n N(y_i | w^T x_i, σ^2)
最大化这个似然函数,就等价于最小化残差平方和,即得到最小二乘估计。

引入先验分布

贝叶斯方法的不同之处在于,我们将参数 w 也视为随机变量,并为其指定一个先验分布。为简化计算,我们常选择高斯先验:
w ~ N(0, Σ_0)
其中,均值 0 和协方差矩阵 Σ_0 是预先设定的超参数。

计算后验分布

根据贝叶斯规则,参数 w 的后验分布正比于似然与先验的乘积:
P(w | X, y) ∝ P(y | X, w) P(w)
由于似然和先验都是高斯的,后验分布 P(w | X, y) 也是一个高斯分布。我们可以推导出其均值和协方差矩阵的闭合形式。

后验均值 μ_p 的表达式非常眼熟。如果我们设先验协方差 Σ_0 = (σ^2 / λ) I,那么后验均值 μ_p 恰好是岭回归的解:
μ_p = (X^T X + λ I)^{-1} X^T y
这里,先验的精度(方差的倒数)直接对应了岭回归中的正则化强度 λ。先验方差越大(λ 越小),表示我们对 w 的初始信念越不确定,后验就越倾向于最大似然估计(最小二乘解)。

进行预测

在贝叶斯框架中,对于一个新的输入 x_new,我们预测其输出 y_new 的分布(预测分布),而不是一个单一值。这需要我们对所有可能的 w 按其后验概率进行积分:
P(y_new | x_new, D) = ∫ P(y_new | x_new, w) P(w | D) dw
对于高斯线性模型,这个预测分布也是一个高斯分布,其均值为后验均值给出的预测 μ_p^T x_new,方差则包含两部分:一部分来自参数 w 的后验不确定性,另一部分来自数据固有的噪声 σ^2。这使我们能够为预测提供“误差条”,量化预测的可信度。


K均值聚类算法 🔵🔴

上一节我们探讨了有监督的贝叶斯回归。本节中,我们转向无监督学习,看看如何将数据点分组,即聚类。

K均值是最著名的聚类算法之一,其目标是将数据点划分到 K 个簇中,使得每个点到其所属簇中心的距离平方和最小。

以下是K均值算法的步骤:

  1. 初始化:随机选择 K 个数据点作为初始簇中心。
  2. 分配步骤:将每个数据点分配到距离其最近的簇中心所在的簇。
  3. 更新步骤:重新计算每个簇中所有点的平均值,将该平均值设为新的簇中心。
  4. 迭代:重复步骤2和步骤3,直到簇中心不再发生变化或达到最大迭代次数。

注意事项与挑战

  • 数据标准化:如果特征尺度差异很大,应在聚类前进行标准化(如Z-score归一化),否则尺度大的特征将主导距离计算。
  • 局部最优:K均值可能收敛到局部最优解,而非全局最优。通常需要多次随机初始化并选择结果最好的一个(根据距离平方和最小判断)。
  • 选择K值:K值需要预先指定。增加K总会降低训练集上的距离平方和,因此不能直接用它选择K。常用方法包括肘部法则、轮廓系数或基于业务知识。
  • 评估聚类:在没有真实标签的情况下,评估聚类质量是一个挑战。内部指标(如簇内紧密度、簇间分离度)和外部指标(如有真实标签时的调整兰德指数)可供参考。

高斯混合模型:概率视角的聚类 🎲

上一节我们介绍了K均值这种硬分配聚类算法。本节中,我们从概率生成模型的角度来理解聚类,即高斯混合模型。

高斯混合模型假设数据是由多个高斯分布混合生成的。生成每个数据点的过程如下:

  1. 首先,根据混合权重 π_1, ..., π_K(满足 Σ π_k = 1)随机选择一个簇 z
  2. 然后,从被选中的簇 z 对应的高斯分布 N(μ_z, Σ_z) 中采样出一个数据点 x

这里,簇标签 z 是未被观测到的隐变量。我们观测到的只有数据点 x

推断与学习

  • 推断:如果已知所有模型参数(π_k, μ_k, Σ_k),对于任意点 x,我们可以计算它属于每个簇 k 的后验概率,即软分配
    γ_{ik} = P(z_i = k | x_i)
    这比K均值的硬分配提供了更多信息。
  • 学习:我们的目标是从数据 {x_i} 中估计出所有参数。这可以通过最大化数据的对数似然函数来实现。然而,GMM的对数似然函数形式复杂(涉及对数的求和),直接求导最大化非常困难。

EM算法

期望最大化算法 是求解GMM参数的一种经典迭代方法。它交替执行以下两步:

  1. E步(期望步):基于当前参数估计,计算每个数据点 x_i 属于各簇的责任度 γ_{ik}
  2. M步(最大化步):基于当前的责任度 γ_{ik},更新模型参数。每个簇 k 的新参数计算如下:
    • 混合权重:π_k^{new} = (Σ_i γ_{ik}) / N
    • 均值:μ_k^{new} = (Σ_i γ_{ik} x_i) / (Σ_i γ_{ik})
    • 协方差:Σ_k^{new} = (Σ_i γ_{ik} (x_i - μ_k^{new})(x_i - μ_k^{new})^T) / (Σ_i γ_{ik})
      M步的更新公式可以理解为用软分配权重 γ_{ik} 进行加权的经验估计。

EM算法保证每次迭代后,数据的对数似然值不会下降,最终会收敛到一个局部最优解。

问题与注意点

  • 参数非唯一性:交换簇的标签(排列参数),似然值不变。
  • 奇异性:理论上,如果将一个高斯分量坍缩到一个单独的数据点上,并让方差趋于零,似然值可以趋于无穷大。这在实践中通过正则化或贝叶斯方法避免。

总结 🎯

本节课我们一起学习了:

  1. 贝叶斯线性回归:通过引入参数先验,将岭回归自然地纳入贝叶斯框架,并能提供预测的不确定性估计。
  2. K均值聚类:一种简单高效的硬分配聚类算法,但其结果受初始化和数据尺度影响,且需要预先指定簇数量。
  3. 高斯混合模型:一种基于概率生成模型的软分配聚类方法。我们了解了其基本思想、推断方法,并引出了用于参数估计的EM算法,为下一节深入讲解EM算法打下基础。

从频率派的点估计到贝叶斯派的分布估计,从硬分配到软分配,我们看到了处理回归和聚类问题的不同哲学与工具。

课程 P22:高斯混合模型与EM算法详解 🧮

在本节课中,我们将学习高斯混合模型(GMM)的生成过程、参数估计的挑战,以及如何使用期望最大化(EM)算法来解决这些挑战。我们将从模型的基本概念开始,逐步深入到EM算法的数学原理和迭代过程。

高斯混合模型概述

上一节我们介绍了聚类的基本概念,本节中我们来看看一种更灵活的模型——高斯混合模型。

高斯混合模型假设数据点是从多个高斯分布(或称“成分”)中生成的。每个成分都有一个与之关联的概率,我们用 π 表示。每个成分还有一个特定的高斯概率密度函数。

高斯混合模型的生成过程描述如下:

  1. 首先,我们从分类分布中抽取一个变量 z,它代表聚类分配或成分分配。
  2. 然后,根据分配到的成分 z,从对应的高斯分布中抽取数据点 x

因此,观测数据点 x 的联合概率分布可以写为:
p(x, z) = p(z) * p(x|z)
其中,p(z) 是分类分布(概率为 π_z),p(x|z) 是高斯分布。

然而,我们通常只观测到 x,而 z 是隐变量。因此,我们需要的是 x 的边缘分布,通过对所有可能的 z 求和(即“边缘化”)得到:
p(x) = Σ_z p(x, z)

最大似然估计的挑战

为了估计高斯混合模型的参数(π, μ, Σ),我们通常使用最大似然法。对于独立同分布的 n 个数据点,其对数似然函数为:
J(θ) = Σ_i log p(x_i) = Σ_i log [ Σ_z p(x_i, z) ]

这里的挑战在于,对数函数内部有一个求和项。这导致了对数似然函数 J(θ) 难以直接最大化,因为求和对数阻碍了高斯分布中指数项与对数项的简化。

EM算法的引入与动机

为了解决上述优化难题,我们引入期望最大化(EM)算法。EM算法通过引入隐变量 z 的分布 Q(z),构建一个易于优化的“下界”函数。

以下是EM算法的核心思想步骤:

  1. E步(期望步):在给定当前参数估计的条件下,计算隐变量 z 的后验分布 Q(z) = p(z|x, θ_old)。这相当于为每个数据点计算属于各个成分的“责任” γ_ic。
  2. M步(最大化步):固定 Q(z),通过最大化“完整数据”的对数似然期望来更新参数 θ_new。

对于高斯混合模型,这两个步骤有非常直观的解释:

  • E步:计算每个数据点 x_i 属于第 c 个高斯成分的概率 γ_ic。
  • M步:利用计算出的“责任”γ_ic 作为权重,更新每个高斯成分的参数。例如,均值 μ_c 的更新公式为所有数据点的加权平均,权重就是 γ_ic。

通过交替执行E步和M步,参数估计会逐步改进,对数似然值也会单调增加,直至算法收敛。

EM算法的数学原理

上一节我们介绍了EM算法的直观流程,本节中我们来看看其背后的数学原理,理解它为何有效。

EM算法的关键在于构建对数边际似然的一个下界函数 L(Q, θ)。通过詹森不等式,我们可以证明对于任意分布 Q(z),下式恒成立:
log p(x|θ) ≥ L(Q, θ) = E_{z~Q}[log p(x, z|θ)] - E_{z~Q}[log Q(z)]

我们的目标是最大化这个下界 L(Q, θ)。有趣的是,通过代数变换,我们可以发现边际似然与下界之间的差距正好是 Q(z) 与真实后验分布 p(z|x, θ) 之间的KL散度:
log p(x|θ) = L(Q, θ) + KL[ Q(z) || p(z|x, θ) ]

由于KL散度总是非负的,且当两个分布相等时为零,这为我们如何选择 Q(z) 提供了线索。

以下是EM算法迭代步骤的理论对应:

  1. E步(固定 θ,优化 Q):为了在当前参数 θ_old 下最大化下界 L(Q, θ_old),我们需要最小化KL散度项。最优解是令 Q(z) 等于当前的后验分布,即:
    Q*(z) = p(z|x, θ_old)
    此时,下界在 θ_old 处与对数边际似然“紧贴”(相等)。

  2. M步(固定 Q,优化 θ):在固定 Q*(z) 后,我们通过最大化下界 L(Q*, θ) 来更新参数。这等价于最大化完整数据对数似然的期望:
    θ_new = argmax_θ E_{z~Q*}[log p(x, z|θ)]
    由于 Q* 已确定,这个期望通常比原始的对数边际似然更容易优化。

每一次迭代,E步构建一个在当前位置紧贴的新下界,M步则沿着这个下界向上爬升。由于每次迭代都保证了 log p(x|θ_new) ≥ log p(x|θ_old),因此EM算法能保证对数似然单调不减地收敛到一个局部极值点。

总结

本节课中我们一起学习了高斯混合模型及其参数估计方法。

  • 我们首先了解了GMM的生成式模型,它通过混合多个高斯分布来生成数据。
  • 我们认识到直接最大化其对数似然函数存在困难。
  • 接着,我们引入了EM算法,它通过交替执行E步(计算隐变量后验/责任)和M步(更新模型参数)来迭代优化。
  • 最后,我们从变分下界的角度深入探讨了EM算法的数学原理,明白了它通过最大化一个紧贴的下界来间接最大化似然函数,并保证了收敛性。

EM算法是处理含有隐变量模型的一种强大而通用的框架,高斯混合模型是其最经典和直观的应用之一。

课程 P23:EM算法与神经网络入门 🧠

在本节课中,我们将深入学习EM算法,并初步了解神经网络的基本概念。我们将从EM算法的原理和收敛性开始,然后探讨其几种扩展变体。最后,我们将转向神经网络,介绍其基本结构、工作原理以及在现代机器学习中的应用。


EM算法回顾与深入

上一节我们介绍了EM算法的基本思想,本节中我们来看看其数学细节和收敛性。

我们有一个包含潜在变量(Z)和观测变量(X)的概率模型。目标是找到参数θ,以最大化观测数据的边际似然 p(X|θ)。直接优化这个目标很困难,因此EM算法通过迭代优化一个下界 L(q, θ) 来间接求解。

下界 L(q, θ) 的定义如下:
L(q, θ) = E_{q(Z)}[log p(X, Z|θ)] - E_{q(Z)}[log q(Z)]

其中,q(Z) 是潜在变量Z上的一个概率分布。这个下界与真实对数边际似然之间的差距,恰好是 q(Z) 与真实后验分布 p(Z|X, θ) 之间的KL散度。

EM算法的两个步骤

以下是EM算法的核心迭代步骤:

  1. E步(期望步):固定当前参数 θ_old,寻找使下界 L(q, θ_old) 最大的分布 q。可以证明,最优的 q* 就是当前参数下的后验分布 p(Z|X, θ_old)。这一步通常涉及计算关于 q* 的期望。
  2. M步(最大化步):固定分布 q*,寻找使下界 L(q*, θ) 最大的新参数 θ_new。这等价于最大化一个期望完全数据对数似然。

通过交替执行E步和M步,算法能保证每次迭代都使边际似然 p(X|θ) 单调不减,并最终收敛到一个驻点。

EM算法的收敛性

关于EM算法的收敛性,有一个重要定理:在一定的正则性条件下,对于任意初始点 θ_0,由EM算法产生的序列 {θ_n} 会收敛到对数似然函数的一个驻点 θ*。这保证了算法不会在非驻点处无限徘徊。


EM算法的扩展变体

上一节我们介绍了标准的EM算法,本节中我们来看看几种实用的扩展变体,以应对计算上的挑战。

广义EM算法

在标准M步中,我们要求完全最大化 L(q*, θ)。广义EM算法放松了这个要求,只要求找到一个能严格提升下界的新参数 θ_new 即可。例如,沿着梯度方向走一小步。

变分EM算法

有时,E步中计算最优后验分布 p(Z|X, θ) 非常困难。变分EM算法的思想是,限制 q(Z) 来自一个易于处理的分布族(例如,所有变量独立的“平均场”族),然后在这个族内寻找最接近真实后验的 q 来最大化下界。

用于MAP估计的EM算法

当我们在参数θ上有先验分布 p(θ),并希望进行最大后验估计时,EM算法依然适用。此时,我们需要最大化的目标是后验概率 p(θ|X) 的对数。通过引入下界,M步的目标会多出一项关于先验 log p(θ) 的项。


神经网络入门 🧠

上一节我们讨论了基于概率模型的EM算法,本节中我们来看看一种截然不同的、基于函数近似的强大工具——神经网络。

神经网络的基本结构

神经网络,特别是前馈神经网络,可以看作一个复杂的非线性函数。其基本构件是神经元(或节点),它们分层组织。

以下是神经网络的一个简单示例结构:

  • 输入层:接收原始特征。
  • 隐藏层:对输入进行非线性变换。一个节点计算其所有输入的加权和,然后通过一个非线性激活函数(如Sigmoid或ReLU)。
  • 输出层:将最后一个隐藏层的输出进行线性组合,产生最终的预测。

数学上,对于一个隐藏层节点 h_j,其输出为:
h_j = σ( Σ_i (w_{ij} * x_i) )
其中,σ 是激活函数,w_{ij} 是连接权重。

激活函数

激活函数是神经网络非线性的来源。常见的激活函数有:

  • Sigmoidσ(x) = 1 / (1 + e^{-x}),将输入压缩到(0,1)区间。
  • ReLU(整流线性单元)f(x) = max(0, x),计算高效,能缓解梯度消失问题。

神经网络的训练

神经网络的参数(所有权重)通过最小化一个损失函数(如均方误差或交叉熵)来学习。最常用的优化算法是随机梯度下降及其变体(如小批量梯度下降)。

反向传播是一种高效计算损失函数相对于所有参数梯度的方法,它是梯度下降在神经网络中的具体实现。

神经网络的特性与应用

  • 表示能力:即使只有一个隐藏层,只要节点足够多,神经网络就能以任意精度逼近任何连续函数。
  • 特征学习:隐藏层可以看作网络自动学习到的数据特征。在深度网络中,底层可能学习到边缘等简单特征,而高层则学习到更复杂的结构(如物体部件)。
  • 应用领域:在图像识别、语音处理、自然语言处理等领域,深度神经网络取得了最先进的性能。
  • 迁移学习:可以将在一个大型数据集上预训练好的网络(如学习到的特征提取器)用于新的、数据量较小的任务,这是一种高效的策略。


总结

本节课中我们一起学习了EM算法的核心原理、收敛性及其几种扩展变体(广义EM、变分EM、用于MAP估计的EM)。随后,我们转向了神经网络,介绍了其基本结构(输入层、隐藏层、输出层)、激活函数的作用、以及通过反向传播进行训练的基本思想。最后,我们探讨了神经网络的强大表示能力和在现代机器学习中的关键应用。EM算法和神经网络分别代表了概率建模和函数近似两大机器学习范式中的重要工具。

机器学习课程 P3:风险分解与正则化 🧠

在本节课中,我们将学习机器学习中的核心概念:风险分解、假设空间以及两种重要的正则化方法——L1(Lasso)和L2(Ridge)回归。我们将从理论框架出发,理解模型性能的构成,并探讨如何通过正则化技术来平衡模型的复杂度和泛化能力。


课程后勤与复习

上一节我们介绍了统计学习理论的基础。现在,我们先处理一些课程后勤事项。

以下是关于课程讨论平台Piazza的说明:

  • 所有注册课程的同学都应加入Piazza。
  • 讨论区已经非常活跃,已有大约50条帖子。
  • 请在提问前先阅读已有问题,避免重复提问。
  • 鼓励同学们互相帮助回答问题。

通过帮助他人参与讨论,可以减轻讲师的工作负担。同时,阅读他人的问题也能带来很多收获。


今日课程概述

今天我们将深入探讨以下内容:

  1. 风险分解:理解模型总误差的来源。
  2. 假设空间:学习如何通过限制假设空间来控制模型复杂度。
  3. 正则化算法:具体学习L1(Lasso)和L2(Ridge)正则化在回归问题中的应用。
  4. 优化方法:简要讨论如何优化带有正则化项的目标函数。

明天我们将继续探讨Lasso和Ridge回归的一些有趣特性,并开始讨论分类损失函数。预告一下,下周的课程在数学上可能最具挑战性,内容密集,建议提前预习已上传的往年资料。


风险分解:理解模型误差的来源

首先,我们快速复习一下上节课的统计学习理论核心概念:

  • 输入/输出空间:决策函数 f 接收输入 x 并产生输出(或动作)a
  • 损失函数 L:根据预测动作 a 和真实输出 y 给出一个损失值,值越小越好。
  • 风险 R(f):决策函数 f 的期望损失,这是评估函数的黄金标准,计算公式为 R(f) = E[L(f(x), y)]
  • 贝叶斯最优决策函数 f*:在所有可能函数中最小化风险的函数,其对应的风险称为贝叶斯风险
  • 经验风险 R_emp(f):由于我们不知道真实的数据分布,只能用数据集 D 上的平均损失来近似风险,即 R_emp(f) = (1/n) * Σ L(f(x_i), y_i)
  • 假设空间 F:为了避免过拟合,我们不优化所有函数,而是将搜索范围限制在一个预先定义的函数集合内,例如线性函数、多项式或决策树。

风险分解的可视化

我们可以通过一个图来理解不同函数之间的关系:

  1. 所有可能函数:构成一个大的空间。
  2. 贝叶斯最优函数 f*:位于这个空间中的某处,具有最小的可能风险 R(f*)
  3. 假设空间 F:是我们选择的一个函数子集。
  4. 假设空间内最优函数 f_F:在子集 F 中风险最小的函数,其风险 R(f_F) >= R(f*)
  5. 经验风险最小化器 f_hat:基于有限数据集,在 F 中最小化经验风险 R_emp 得到的函数。

误差分解

基于以上定义,我们可以分解经验风险最小化器 f_hat过剩风险(即其风险与贝叶斯风险的差距):
R(f_hat) - R(f*) = [R(f_hat) - R(f_F)] + [R(f_F) - R(f*)]

这个分解包含两部分:

  1. 估计误差R(f_hat) - R(f_F)。这是由于我们只有有限数据样本,无法精确找到 f_F 而产生的误差。估计误差是随机的,因为它依赖于抽样的数据集。假设空间 F 越大,估计误差通常越大(更容易过拟合)。
  2. 近似误差R(f_F) - R(f*)。这是由于我们将搜索范围限制在 F 内,而最优函数 f* 可能不在 F 中而产生的误差。近似误差是非随机的,是假设空间 F 本身的性质。假设空间 F 越大,近似误差通常越小。

数据科学家的核心工作就是在近似误差和估计误差之间进行权衡,通过选择合适的假设空间 F 来最小化总过剩风险。

优化误差

在实际中,我们可能无法精确计算出经验风险最小化器 f_hat,只能通过优化算法(如梯度下降)得到一个近似解 f_tilde。这引入了第三类误差:

  • 优化误差R(f_tilde) - R(f_hat)。这是我们使用的算法无法找到精确的 f_hat 而产生的误差。

因此,完整的过剩风险分解为:
R(f_tilde) - R(f*) = [R(f_tilde) - R(f_hat)] + [R(f_hat) - R(f_F)] + [R(f_F) - R(f*)]
即:优化误差 + 估计误差 + 近似误差


示例:决策树的风险分解

为了使概念更具体,我们来看一个分类问题的玩具示例。

问题设置

  • 输入空间:单位正方形 [0,1] x [0,1]
  • 输入分布:正方形上的均匀分布。
  • 输出(类别):蓝色或橙色。对于点 (x1, x2),若 x1 > x2,其为橙色的概率是0.9;若 x1 <= x2,其为橙色的概率是0.1。
  • 贝叶斯风险:即使使用最优决策函数(预测对角线以下为橙色,以上为蓝色),错误率也有10%。

假设空间:我们使用二叉决策树。树通过一系列基于坐标的阈值问题(如“x1 <= t1?”)将输入空间划分为矩形区域,并在每个区域(叶节点)预测一个类别。
我们考虑嵌套的假设空间序列:F_d 表示所有深度不超过 d 的决策树集合。

实验结果

  • 近似误差:随着树深度 d 增加(假设空间变大),类中最优树 f_F 的风险下降,逐渐接近贝叶斯风险(10%)。这说明近似误差在减小。
  • 估计误差+优化误差:随着树深度 d 增加,从数据中学习得到的树 f_tilde 的风险先下降后上升,呈现经典的U形曲线。
    • 当树太浅(d小)时,模型能力不足,风险高(欠拟合)。
    • 当树太深(d大)时,模型过于复杂,对训练数据过拟合,导致在新数据上风险上升。
    • 最优的树深度需要在两者之间取得平衡。

这个例子清晰地展示了通过调整假设空间大小(树的深度),如何在近似误差和估计误差之间进行权衡。


正则化:控制假设空间的实用方法

上一节我们介绍了通过选择不同大小的假设空间来权衡误差。在实践中,一种非常有效且常用的方法是正则化

伊万诺夫正则化与吉洪诺夫正则化

核心思想是为假设空间中的函数 f 定义一个复杂度度量 Ω(f)(例如,线性模型中系数的L2范数、决策树的深度)。通过控制复杂度,我们可以定义一系列嵌套的假设空间。

有两种等价的实现形式:

  1. 伊万诺夫正则化(硬约束):在假设空间 F 中,附加一个复杂度约束。
    f_hat = argmin_{f in F} R_emp(f), subject to Ω(f) <= R
    这里 R 是复杂度上限,直接定义了假设空间 F_R = {f in F: Ω(f) <= R}

  2. 吉洪诺夫正则化(软惩罚):将复杂度作为惩罚项加入经验风险。
    f_hat = argmin_{f in F} [ R_emp(f) + λ * Ω(f) ]
    这里 λ >= 0 是正则化系数。λ 越大,对复杂度的惩罚越重,得到的函数越简单。

对于许多常见设置(如接下来要讲的回归问题),这两种形式是等价的,即对于每个 R,都存在一个 λ 使得两者解相同,反之亦然。


L2正则化:岭回归

现在我们将正则化思想应用到线性回归中。假设我们的函数空间是线性函数 f(x) = w^T x

普通最小二乘法(OLS) 最小化经验风险(平方损失):
min_w (1/n) Σ (y_i - w^T x_i)^2
当特征很多或特征间存在多重共线性时,OLS容易过拟合,系数 w 可能变得很大且不稳定。

岭回归(Ridge Regression) 通过吉洪诺夫正则化(L2惩罚)来解决这个问题:
min_w [ (1/n) Σ (y_i - w^T x_i)^2 + λ * ||w||_2^2 ]
其中 ||w||_2^2 = Σ w_j^2 是系数向量的L2范数平方。

效果

  • 惩罚项 λ * ||w||_2^2 会倾向于让系数 w 整体变小,但通常不会恰好为0。
  • 随着 λ 从无穷大变化到0,解路径上所有系数平滑地从0变化到OLS解。
  • 对应的伊万诺夫形式是:min_w (1/n) Σ (y_i - w^T x_i)^2, subject to ||w||_2^2 <= R

L1正则化:Lasso回归

Lasso回归采用L1范数作为复杂度惩罚:
min_w [ (1/n) Σ (y_i - w^T x_i)^2 + λ * ||w||_1 ]
其中 ||w||_1 = Σ |w_j| 是系数向量的L1范数。

关键特性——稀疏性
与岭回归不同,Lasso的正则化路径显示,随着 λ 从大到小变化,许多系数会保持为0,直到某个阈值后才变为非零。这意味着Lasso可以自动进行特征选择,最终模型可能只依赖于一部分特征。

为什么需要稀疏性?

  1. 可解释性:模型只使用少数特征,更容易理解和解释。
  2. 特征成本:收集或计算特征可能有成本,稀疏模型可以节省开支。
  3. 计算与存储效率:预测时只需要计算少数特征,速度快,存储开销小。
  4. 预处理:可作为特征选择步骤,筛选出的特征再用于更复杂的模型。

几何视角:为什么Lasso导致稀疏解?

我们可以从几何角度直观理解Lasso和Ridge的区别。考虑一个只有两个参数 w1, w2 的简单情况。

  • L2约束(岭回归):约束条件 w1^2 + w2^2 <= R 在平面上是一个圆盘。最小化经验风险等价于寻找一个椭圆(等经验风险线)与这个圆盘的切点。这个切点通常不在坐标轴上,所以两个系数一般都不为零。
  • L1约束(Lasso):约束条件 |w1| + |w2| <= R 在平面上是一个菱形。椭圆与菱形的切点有很高的概率出现在菱形的角点上,而角点恰好对应某一个坐标为0(例如 (R, 0)(0, R)),这就产生了稀疏解。

这种“碰角”现象使得Lasso倾向于产生稀疏模型,而Ridge则倾向于产生稠密但系数较小的模型。


总结

本节课我们一起学习了机器学习模型评估与改进的核心框架:

  1. 风险分解:将模型的过剩风险分解为近似误差估计误差优化误差,理解了模型性能的各个来源。
  2. 假设空间:通过限制假设空间可以控制模型复杂度,但需要在近似误差(空间太小)和估计误差(空间太大导致过拟合)之间权衡。
  3. 正则化:介绍了通过复杂度度量来控制假设空间大小的两种实用方法——伊万诺夫(硬约束)和吉洪诺夫(软惩罚)正则化。
  4. L2与L1正则化:深入探讨了岭回归(L2)Lasso回归(L1)。岭回归通过收缩系数来稳定模型,而Lasso回归则能产生稀疏解,自动进行特征选择。
  5. 几何解释:从优化几何的角度理解了Lasso产生稀疏解的原因。

理解这些概念是构建有效、可解释且泛化能力强的机器学习模型的基础。下一节课我们将继续探讨这些正则化方法的更多性质。

课程 P4:Lasso 优化与正则化对比 🧠

在本节课中,我们将学习如何优化 Lasso 回归模型,并深入比较 Lasso 与 Ridge 正则化的不同特性。我们将探讨处理 L1 正则化不可微问题的技巧,并分析当特征高度相关时,不同正则化方法如何影响模型权重。


1. Lasso 优化问题回顾

上一节我们介绍了 Lasso 回归的目标函数。本节中我们来看看如何优化这个包含不可微 L1 范数的目标函数。

Lasso 的目标函数是平均平方损失加上 L1 正则化项,其形式为:
目标函数 = 平均平方损失 + λ * ||W||₁
其中 ||W||₁ 是系数向量 W 的 L1 范数(绝对值之和)。

直接应用梯度下降会遇到问题,因为 L1 范数在零点不可微分。


2. 处理不可微性的技巧:正负部分分解

为了解决 L1 范数不可微的问题,我们引入一个常用技巧:将任意实数分解为其正部分和负部分。

对于任意实数 A,我们定义:

  • 正部分 A⁺:如果 A > 0,则 A⁺ = A;否则 A⁺ = 0
  • 负部分 A⁻:如果 A < 0,则 A⁻ = |A|;否则 A⁻ = 0

基于此,我们可以得到两个有用的等式:

  1. A = A⁺ - A⁻
  2. |A| = A⁺ + A⁻

现在,我们将这个技巧应用于系数向量 W。我们把 W 的每个分量 W_j 分解为 W_j⁺W_j⁻,从而将 W 表示为两个新向量的差:W = W⁺ - W⁻。同时,L1 范数可以重写为:||W||₁ = sum(W⁺) + sum(W⁻)

通过这种分解,我们成功地将不可微的绝对值函数转换成了可微的形式,但代价是变量数量翻倍(从 D 个变为 2D 个),并且需要对 W⁺W⁻ 施加非负约束。


3. 投影随机梯度下降法

上一节我们通过变量分解得到了一个可微但带有约束的目标函数。本节中我们来看看如何使用投影随机梯度下降法来求解。

投影随机梯度下降法在标准随机梯度下降的基础上增加了一个“投影”步骤。其流程如下:

以下是投影随机梯度下降的基本步骤:

  1. 计算当前点关于目标函数的(随机)梯度。
  2. 沿着梯度反方向移动一个步长(随机梯度下降步)。
  3. 检查新得到的点是否违反了约束(即 W⁺W⁻ 的分量是否变为负值)。
  4. 如果违反约束,则将负值分量“投影”回零(即截断为0),使其重新满足非负约束。

这种方法直观且易于实现,特别适合处理此类简单的非负约束。


4. 坐标下降法

除了基于梯度的方法,坐标下降法是另一种常用于优化Lasso的有效方法。它的核心思想是每次只优化一个变量,而固定其他所有变量。

在坐标下降法中,我们循环遍历每一个系数 W_j。在第 j 步,我们求解以下子问题:
W_j_new = argmin_{W_j} [目标函数(W_1, ..., W_j, ..., W_D)]
其中,除了 W_j,其他所有系数 W_k (k ≠ j) 都保持固定。

令人惊讶的是,对于Lasso问题,这个一维子问题存在闭式解。具体形式如下:
W_j_new = S(C_j / (Σ X_ij²), λ / (Σ X_ij²))
其中 S 是软阈值函数,C_j 是一个与第 j 个特征和当前残差相关的统计量。

坐标下降法在每次迭代中更新一个系数,效率很高,尤其适用于高维问题。


5. Lasso与Ridge正则化的深入对比

理解了优化方法后,我们回到模型本身,深入比较Lasso和Ridge正则化的本质区别。

考虑一个简单的思想实验:假设我们只有一个特征 X1,用线性回归拟合得到最佳模型 Y = 4 * X1。现在引入一个与 X1 完全相同的冗余特征 X2(即 X2 = X1)。

在这种情况下,许多不同的系数组合都能得到相同的预测结果(例如 [4, 0], [2, 2], [1, 3]),因为只要 W1 + W2 = 4,预测函数就相同。

以下是不同系数组合及其对应的正则化惩罚:

  • 系数 [4, 0]: L1范数 = 4, L2范数 = 16
  • 系数 [2, 2]: L1范数 = 4, L2范数 = 8
  • 系数 [1, 3]: L1范数 = 4, L2范数 = 10

核心结论

  • Lasso (L1):对于一组信息完全相同的特征,Lasso正则化不关心权重如何在它们之间分配,只要系数的绝对值和相同即可。它可能随机地将权重赋给其中一个或几个,甚至将某些系数压缩至零,从而产生稀疏解。
  • Ridge (L2):L2正则化倾向于在高度相关的特征之间均匀分配权重(如 [2, 2]),因为这样可以最小化系数的平方和。

在实际应用中,特征往往高度相关而非完全相等。Lasso可能只从一组相关特征中挑选一个代表,而Ridge则会使用整组特征并赋予相近的权重。如果目标是预测的稳健性(通过对多个噪声版本取平均来降低方差),Ridge或类似方法通常更优。


6. 弹性网:结合L1与L2的优点

上一节我们看到L1和L2各有特点。本节中我们来看看如何结合二者之长。

弹性网正则化通过在目标函数中同时加入L1和L2惩罚项来结合两者的优点:
目标函数 = 平均平方损失 + λ₁ * ||W||₁ + λ₂ * ||W||₂²

这种方法旨在:

  1. 保留L1正则化产生稀疏解的能力,有助于特征选择。
  2. 引入L2正则化促使高度相关特征的权重趋于相等,提高模型的稳定性和预测能力。

实验表明,在面对一组相关特征时,弹性网能够使它们的系数值保持接近,同时仍能将无关特征的系数压缩至零,从而获得更稳健的预测模型。


总结

本节课中我们一起学习了以下核心内容:

  1. Lasso优化:通过正负部分分解将不可微的L1范数转化为带约束的可微问题,并可用投影随机梯度下降求解。坐标下降法因其子问题有闭式解,也是求解Lasso的高效方法。
  2. 正则化对比:通过思想实验,我们深入理解了Lasso (L1)Ridge (L2) 正则化的根本区别。L1对相关特征的权重分配不敏感,可能导致稀疏但可能不稳定的解;L2则倾向于在相关特征间均匀分配权重,提升稳健性。
  3. 弹性网:结合L1和L2惩罚的弹性网正则化,能够同时进行特征选择和提升模型在相关特征组上的稳定性,是一种实用的折中方案。

理解这些优化方法和正则化特性的差异,将帮助我们在实际建模中根据数据特点和业务目标(如追求可解释性、稀疏性或预测稳健性)选择最合适的模型。

机器学习课程 P5:支持向量机与凸优化入门 🧠

在本节课中,我们将要学习支持向量机(SVM)的核心思想。我们将从损失函数开始,讨论分类与回归中不同的损失选择及其特性。接着,我们会进入一个关于凸优化和拉格朗日对偶性的独立单元,这些工具对于理解SVM至关重要。最后,我们将把这些理论应用到SVM上,推导其原始形式和对偶形式,并解释支持向量等关键概念。


1. 损失函数探讨 📉

在机器学习中,损失函数用于衡量模型预测值与真实值之间的差异。我们首先讨论回归问题中的损失函数。

1.1 回归损失函数

在回归中,我们预测实数值。损失函数通常依赖于残差,即真实值 y 与预测值 ŷ 之间的差异:r = y - ŷ

大多数回归损失函数可以表示为残差的函数。然而,在某些场景下,比例的误差(如预测值是真实值的两倍)可能比绝对差值更重要。这时,通常可以对目标变量进行变换(如对数变换),使损失函数再次依赖于差值。

以下是几种常见的回归损失函数:

  • 平方损失(L2损失)L(ŷ, y) = (y - ŷ)²。这是最常用的损失,但对异常值不鲁棒,因为它会放大大的误差。
  • 绝对损失(L1损失)L(ŷ, y) = |y - ŷ|。比平方损失更鲁棒,因为它对异常值的惩罚增长是线性的而非二次的。但它不可微。
  • Huber损失:在残差较小时使用二次惩罚,在残差较大时使用线性惩罚。它是平滑且可微的,是鲁棒性与可优化性的一个折衷。

在实践中,平方损失和绝对损失最为常用。

1.2 分类损失函数

在二分类问题中,我们通常将类别标记为 -1+1。我们允许模型预测一个实数值 f(x),称为分数。预测类别由分数的符号决定。

一个关键概念是间隔margin = y * f(x)

  • 正间隔表示预测正确,且值越大表示置信度越高。
  • 负间隔表示预测错误,且值越小(负得越多)表示错误越严重。

大多数分类损失可以用间隔来表示。以下是几种重要的分类损失函数:

  • 0-1损失L(f(x), y) = 0 如果 y*f(x) > 0,否则为 1。它直接衡量分类错误,但非凸、不可微,优化是NP难问题。
  • 铰链损失(Hinge Loss / SVM损失)L(f(x), y) = max(0, 1 - y*f(x))。它是0-1损失的一个凸上界,在间隔大于1时惩罚为0。它是支持向量机使用的损失。
  • 逻辑损失(Logistic Loss)L(f(x), y) = log(1 + exp(-y*f(x)))。它处处可微,并且其分数可以解释为概率。它是逻辑回归使用的损失。
  • 平方损失(用于分类)L(f(x), y) = (1 - y*f(x))²。它对于分类任务通常不鲁棒,因为即使间隔很大(预测很自信且正确),它也会施加惩罚,并且对标签噪声敏感。

对于分类,铰链损失和逻辑损失是主要的选择。


上一节我们介绍了用于分类和回归的各种损失函数。本节中,我们将深入探讨优化这些损失函数所需的数学工具——凸优化。

2. 凸优化与拉格朗日对偶性 ⚙️

许多机器学习问题可以归结为最小化一个目标函数(如经验风险)。凸优化为我们提供了解决一大类问题的高效且理论保证良好的框架。

2.1 凸集与凸函数

  • 凸集:集合中任意两点之间的线段仍然包含在该集合内。
  • 凸函数:定义在凸集上的函数,其图像上任意两点之间的线段位于图像上方(或重合)。数学定义为:对于任意 θ ∈ [0,1],有 f(θx + (1-θ)y) ≤ θf(x) + (1-θ)f(y)

凸函数的关键性质是:任何局部最小值都是全局最小值。这确保了像梯度下降这样的算法不会陷入非全局最优的局部最小点。

2.2 一般优化问题形式

一个一般的约束优化问题可以写成:

最小化 f₀(x)
满足约束 fᵢ(x) ≤ 0, i = 1, ..., m
         hᵢ(x) = 0, i = 1, ..., p

其中 x 是优化变量,f₀ 是目标函数,fᵢ 是不等式约束,hᵢ 是等式约束。满足所有约束的 x 的集合称为可行集

2.3 拉格朗日函数与对偶性

为了处理约束,我们引入拉格朗日函数

L(x, λ, ν) = f₀(x) + Σᵢ λᵢ fᵢ(x) + Σᵢ νᵢ hᵢ(x)

其中 λᵢ ≥ 0νᵢ 称为拉格朗日乘子(或对偶变量)。

原始问题的最优值 p* 可以重新表述为:

p* = infₓ [ sup_{λ≥0, ν} L(x, λ, ν) ]

拉格朗日对偶函数定义为拉格朗日函数关于原始变量的下确界:

g(λ, ν) = infₓ L(x, λ, ν)

对偶问题则是最大化这个对偶函数:

d* = sup_{λ≥0, ν} g(λ, ν)

根据弱对偶性,恒有 d* ≤ p*。对偶问题总是凹的(最大化问题),可能比原始问题更容易求解。

2.4 强对偶性与互补松弛性

对于凸优化问题(即 f₀fᵢ 是凸函数,hᵢ 是仿射函数),在满足某些约束资格(如Slater条件:存在一个严格满足所有不等式约束的点)时,我们有强对偶性,即 p* = d*

当强对偶性成立时,设 x*λ* 分别是原始和对偶问题的最优解,则满足互补松弛性

λᵢ* · fᵢ(x*) = 0, 对于所有 i

这意味着对于每个不等式约束,要么拉格朗日乘子 λᵢ* 为零,要么约束在最优解处是紧的(即 fᵢ(x*) = 0)。这一性质将帮助我们分析支持向量机的解。


掌握了凸优化和对偶性的基本工具后,我们现在可以将其应用于本节课的核心——支持向量机。

3. 支持向量机(SVM)推导与应用 🛡️

支持向量机是一种强大的分类器,其目标是找到一个最大间隔的决策边界。

3.1 SVM的原始形式

对于线性模型 f(x) = wᵀx + b,使用铰链损失并加上L2正则化,SVM的优化问题(原始形式)为:

最小化 (1/2)||w||² + (C/n) Σᵢ max(0, 1 - yᵢ(wᵀxᵢ + b))

其中 C 是控制正则化强度与损失权重之间平衡的超参数。

为了应用凸优化理论,我们引入松弛变量 ξᵢ ≥ 0,将问题重写为标准的凸二次规划形式:

最小化 (1/2)||w||² + (C/n) Σᵢ ξᵢ
满足约束 yᵢ(wᵀxᵢ + b) ≥ 1 - ξᵢ, 对于所有 i
         ξᵢ ≥ 0, 对于所有 i

这是一个具有凸二次目标和线性约束的问题,满足强对偶性条件。

3.2 SVM的对偶形式

通过构造上述问题的拉格朗日函数,并利用强对偶性,我们可以推导出SVM的对偶问题

最大化 Σᵢ αᵢ - (1/2) Σᵢ Σⱼ αᵢ αⱼ yᵢ yⱼ (xᵢᵀ xⱼ)
满足约束 0 ≤ αᵢ ≤ C/n, 对于所有 i
         Σᵢ αᵢ yᵢ = 0

这里 αᵢ 是对偶变量,每个对应一个训练样本。

从对偶问题的解 α*,我们可以恢复原始最优解:

  • 权重向量w* = Σᵢ αᵢ* yᵢ xᵢ
  • 偏置项:选择任意一个满足 0 < αᵢ* < C/n 的样本 j,计算 b* = yⱼ - Σᵢ αᵢ* yᵢ (xᵢᵀ xⱼ)。实践中常对所有满足该条件的样本计算结果并取平均以提高稳健性。

3.3 支持向量与解的洞察

从对偶形式和互补松弛性,我们可以获得关于SVM解的重要洞察:

  • 支持向量:只有那些 αᵢ* > 0 对应的训练样本 xᵢ 才会出现在 w* 的表达式中,这些样本被称为支持向量。它们决定了最终的决策边界。
  • 间隔与系数的关系
    • αᵢ* = 0,则样本位于间隔正确的一侧(yᵢ f*(xᵢ) ≥ 1),且对模型没有贡献。
    • 0 < αᵢ* < C/n,则样本正好位于间隔边界上(yᵢ f*(xᵢ) = 1)。
    • αᵢ* = C/n,则样本位于间隔内部或错误一侧(yᵢ f*(xᵢ) ≤ 1),可能是异常点或难以分类的点。
  • 核技巧的启示:在对偶问题的目标函数中,输入特征 x 仅以内积 xᵢᵀ xⱼ 的形式出现。这允许我们使用“核函数” K(xᵢ, xⱼ) 隐式地将数据映射到高维空间进行计算,而无需知道映射函数的具体形式,这是SVM能够处理非线性问题的关键。

总结 📚

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

  1. 损失函数:回顾了回归中的平方损失、绝对损失和Huber损失,以及分类中的0-1损失、铰链损失和逻辑损失,理解了它们的特性和适用场景。
  2. 凸优化基础:学习了凸集、凸函数的定义,以及一般约束优化问题的拉格朗日对偶框架。我们理解了弱对偶性、强对偶性以及互补松弛性这些核心概念。
  3. 支持向量机:将SVM的原始优化问题形式化为一个凸二次规划问题。通过拉格朗日对偶性,我们推导出了SVM的对偶形式,并从中获得了关于解的结构的重要洞察,包括权重向量的表示、支持向量的概念以及间隔与对偶变量之间的关系。

这些知识为我们理解SVM的工作原理及其高效优化方法奠定了坚实的基础。在下节课中,我们将探讨如何利用对偶形式中出现的内积,通过核方法使SVM能够解决非线性分类问题。

课程 P6:从零构建支持向量机目标函数 🧠

在本节课中,我们将从零开始,一步步推导出支持向量机的目标函数。我们将从基本概念出发,理解什么是“好的”分类器,如何用数学语言描述它,并最终构建出支持向量机的核心优化问题。通过这个过程,你将深刻理解支持向量机背后的原理,并能自己设计出类似的损失函数。

什么是“好的”分类器? 🤔

上一节我们提到了分类问题,本节中我们来看看如何量化一个分类器的好坏。

当我们有一堆数据点,并希望用一个“分离器”(即决策边界)将它们分成不同类别时,我们会发现存在无数个可能的分离器。那么,如何判断哪个分离器更好呢?

一个好的分离器应该能清晰地区分不同类别的数据点。一个直观的想法是,它应该让不同类别的点尽可能远离决策边界。这个“远离”的程度,就是我们接下来要定义的“间隔”。

以下是判断分离器好坏的一些思路:

  • 损失函数:通过一个函数来衡量分类错误的代价,目标是最小化这个代价。
  • 决策边界:如果数据是线性可分的(即不同类别的数据点可以被一个超平面完美分开),那么我们可以找到一个超平面作为决策边界。
  • 凸包:包含一组数据点的最小凸体。如果两个类别的凸包不相交,则数据是线性可分的。

定义间隔与超平面 📏

上一节我们讨论了好的分类器的概念,本节中我们来看看如何用数学来定义“间隔”和“分离器”——即超平面。

我们定义间隔为 间隔 = y * f(x)

  • y 是数据点的真实标签,通常取值为 +1-1
  • f(x) 是我们的分类器函数在数据点 x 上的输出值。

我们的目标是最大化这个间隔。直观上,最大化两个类别最近点之间的距离,其“中点”所在的超平面就是能最大化间隔的决策边界。

那么,如何表示一个超平面呢?在二维空间中,一条直线可以表示为:

y = m*x + b

为了推广到更高维度(超平面),我们使用线性代数的形式。一个超平面可以由以下方程定义的所有点 x 的集合来描述:

w · x + b = 0

其中:

  • w 是一个向量,决定了超平面的方向。
  • b 是一个标量,决定了超平面的偏移。
  • · 表示点积。

这个方程 L(x) = w · x + b 本身是一个线性函数。它的零点集合 {x | L(x)=0} 构成了超平面。对于超平面一侧的点,L(x) > 0;对于另一侧的点,L(x) < 0

构建完美可分情况下的目标函数 🎯

上一节我们定义了超平面,本节中我们基于数据完美线性可分的理想情况,来构建最初的目标函数。

假设我们的数据点 (x_i, y_i) 可以被一个超平面完美分开。这意味着对于所有数据点,分类函数 L(x_i) = w · x_i + b 的符号与标签 y_i 一致。因此,对于所有点,有:

y_i * L(x_i) > 0

我们不仅希望它们同号,还希望它们远离决策边界。设 M 为所有数据点中,y_i * L(x_i) 的最小值,这个 M 就被定义为“间隔”。我们希望最大化这个间隔 M

同时,向量 w 可以任意缩放(因为同时缩放 wb 不会改变超平面)。为了方便,我们可以对 w 增加一个约束,例如令 ||w|| = 1w 的范数为1)。

于是,我们的优化问题可以写为:

  1. 最大化 间隔 M
  2. 满足约束y_i * (w · x_i + b) >= M,对于所有数据点 i
  3. 满足约束||w|| = 1

问题转化:从最大化间隔到最小化范数 🔄

上一节我们得到了一个带约束的最大化问题,本节中我们通过一个巧妙的缩放技巧,将其转化为一个更易求解的等价问题。

由于 w 可以自由缩放,我们令 w' = w / Mb' = b / M。将这个缩放关系代入原来的约束 y_i * (w · x_i + b) >= M,两边同时除以 M,得到新的约束:

y_i * (w' · x_i + b') >= 1

同时,原来的约束 ||w|| = 1 意味着 ||w'|| = 1 / M。因此,最大化间隔 M 等价于最小化 ||w'||

于是,优化问题被转化为:

  1. 最小化 (1/2) * ||w'||^2(乘以1/2是为了后续求导方便,不影响最优解)。
  2. 满足约束y_i * (w' · x_i + b') >= 1,对于所有数据点 i

这是一个带有线性不等式约束的凸二次规划问题,求解起来更加标准和方便。

引入松弛变量:处理不可分数据 🛡️

上一节我们处理了理想的可分情况,本节中我们面对现实——数据往往不是完美线性可分的。我们需要修改目标函数以容忍一些错误。

我们引入“松弛变量” ξ_i(读作“xi i”)来度量每个数据点允许违反间隔约束的程度。修改后的约束条件变为:

y_i * (w · x_i + b) >= 1 - ξ_i

其中 ξ_i >= 0ξ_i = 0 表示该点满足原始约束;ξ_i > 0 表示该点进入了间隔区域或分类错误。

我们不希望松弛变量过大,否则分类器会过于容忍错误。因此,在目标函数中,我们加入对松弛变量总和的惩罚。新的优化问题变为:

  1. 最小化 (1/2) * ||w||^2 + C * (∑ ξ_i)
  2. 满足约束y_i * (w · x_i + b) >= 1 - ξ_i,对于所有数据点 i
  3. 满足约束ξ_i >= 0,对于所有数据点 i

这里,C 是一个大于0的超参数,它控制了我们对分类错误的容忍程度:

  • C 越大,对错误的惩罚越大,间隔可能变窄,倾向于在训练集上做到更少的错误(可能过拟合)。
  • C 越小,对错误的惩罚越小,间隔可能变宽,模型更简单(可能欠拟合)。

总结 📝

本节课中,我们一起学习了支持向量机核心目标函数的构建过程。

我们从寻找“好的”分类器出发,定义了间隔的概念。然后,我们用数学语言超平面来描述决策边界。在数据完美可分的理想情况下,我们构建了最大化间隔的原始问题。通过巧妙的缩放,我们将其转化为一个等价的、更易求解的最小化权重范数的凸优化问题。

最后,为了处理现实中常见的不可分数据,我们引入了松弛变量 ξ_i 和惩罚参数 C,得到了支持向量机最终的标准形式优化问题:在最小化权重范数(控制模型复杂度)和最小化分类错误之间取得平衡。

这个推导过程揭示了支持向量机不仅追求分类正确,更追求决策边界的稳健性(最大间隔),这也是其名称“支持向量”的由来——最终的解仅由那些位于间隔边界上(y_i * (w · x_i + b) = 1)或内部的“支持向量”所决定。

机器学习优化与特征工程教程 📚

在本节课中,我们将学习机器学习中的核心优化方法,包括梯度下降、随机梯度下降以及次梯度下降的原理与应用。同时,我们也将探讨特征工程的基本概念,了解如何通过特征提取和变换来提升模型的表达能力。


1. 优化方法概述 🔍

上一节我们介绍了机器学习的基本框架,本节中我们来看看如何通过优化算法来找到模型的最佳参数。

优化方法的一般形式是:在参数空间中找到一个起始点 ( x_0 ),然后通过迭代逐步更新参数。每次迭代时,我们选择一个搜索方向 ( v_k ) 和一个步长 ( t_k ),然后按照以下公式更新参数:

[
x_{k+1} = x_k + t_k \cdot v_k
]

需要注意的是,( v_k ) 不一定是单位向量,而 ( t_k ) 通常被称为步长因子,它表示在搜索方向上的缩放倍数,而不是实际移动的距离。


2. 方向导数与下降方向 📉

在优化过程中,我们经常需要判断某个方向是否是“下降方向”。方向导数的定义如下:

[
\nabla_v f(x) = \lim_{h \to 0} \frac{f(x + h v) - f(x)}{h}
]

如果方向导数小于零,即 ( \nabla_v f(x) < 0 ),那么方向 ( v ) 就是下降方向。这意味着沿着该方向移动一小步,函数值会减小。

对于可微函数,方向导数可以表示为梯度与方向的内积:

[
\nabla_v f(x) = \nabla f(x)^T v
]

因此,任意方向 ( v ) 是下降方向的条件是:

[
\nabla f(x)^T v < 0
]


3. 梯度下降法 📈

梯度下降法是一种常用的优化方法,其核心思想是沿着负梯度方向更新参数。更新公式如下:

[
x_{k+1} = x_k - t \cdot \nabla f(x_k)
]

其中,( t ) 是步长。梯度下降法要求函数是可微的,并且步长需要适当选择,以确保收敛。

以下是梯度下降法的基本步骤:

  1. 初始化参数 ( x_0 )。
  2. 计算当前点的梯度 ( \nabla f(x_k) )。
  3. 沿着负梯度方向更新参数:( x_{k+1} = x_k - t \cdot \nabla f(x_k) )。
  4. 重复步骤2和3,直到满足停止条件。

4. 随机梯度下降法 🔄

随机梯度下降法是梯度下降法的一种变体,适用于大规模数据集。其核心思想是每次迭代时随机选择一个样本(或一小批样本)来估计梯度,从而加速计算。

假设我们的目标函数是正则化的经验风险:

[
J(w) = \frac{1}{n} \sum_{i=1}^n L(w, x_i, y_i) + \lambda \Omega(w)
]

我们可以将其重写为:

[
J(w) = \frac{1}{n} \sum_{i=1}^n h_i(w)
]

其中,( h_i(w) = L(w, x_i, y_i) + \lambda \Omega(w) )。在随机梯度下降中,我们随机选择一个样本 ( i ),并用 ( \nabla h_i(w) ) 来近似 ( \nabla J(w) )。

更新公式为:

[
w_{k+1} = w_k - t \cdot \nabla h_i(w_k)
]

随机梯度下降的优点是计算效率高,但收敛速度可能较慢。


5. 次梯度下降法 📉

对于不可微的函数(如绝对值函数),我们无法直接使用梯度下降法。这时,次梯度下降法成为一种有效的替代方法。

次梯度 ( g ) 的定义是:对于凸函数 ( f ),如果向量 ( g ) 满足以下条件,则称 ( g ) 是 ( f ) 在点 ( x ) 的次梯度:

[
f(y) \geq f(x) + g^T (y - x), \quad \forall y
]

次梯度下降法的更新公式为:

[
x_{k+1} = x_k - t \cdot g
]

其中,( g ) 是 ( f ) 在 ( x_k ) 处的次梯度。需要注意的是,负次梯度方向不一定是下降方向,但通过适当选择步长,次梯度下降法仍然可以收敛到全局最小值。


6. 特征工程基础 🛠️

特征工程是机器学习中至关重要的一环,它通过提取和变换特征来提升模型的表达能力。特征工程的核心任务是将原始输入空间映射到实值特征空间。

以下是特征工程的几个关键概念:

  1. 特征提取:将原始输入(如文本、图像)转换为实值特征向量。
  2. 特征模板:通过一组规则自动生成大量特征,减少人工设计的工作量。
  3. 稀疏表示:对于大多数特征值为零的情况,只存储非零特征及其值,以节省空间。

7. 非线性特征编码 🌟

线性模型的表达能力有限,但通过非线性特征编码,我们可以捕捉数据中的复杂模式。以下是几种常见的非线性编码方法:

  1. 非单调性:通过添加平方项或其他变换,使模型能够拟合非单调关系。
  2. 饱和度:通过对数变换或分桶方法,处理特征值的尺度差异。
  3. 特征交互:通过引入特征之间的乘积项,捕捉特征之间的相互作用。

例如,对于身高和体重的关系,我们可以添加以下特征:

[
\phi(x) = [1, h, w, h^2, w^2, h \cdot w]
]

这样,线性模型可以拟合更复杂的决策边界。


8. 核方法简介 🔗

核方法是一种通过核函数在高维特征空间中计算内积的技巧,从而避免显式构造高维特征。核函数的定义如下:

[
K(x, y) = \langle \phi(x), \phi(y) \rangle
]

其中,( \phi ) 是特征映射。通过核方法,我们可以在低维空间中高效计算高维特征的内积,从而提升计算效率。

例如,对于二次特征映射,核函数可以表示为:

[
K(x, y) = (x^T y + 1)^2
]

这样,我们无需显式构造二次特征,就能在二次特征空间中计算内积。


总结 📝

本节课中我们一起学习了机器学习中的优化方法,包括梯度下降、随机梯度下降和次梯度下降的原理与应用。同时,我们也探讨了特征工程的基本概念,了解了如何通过特征提取、非线性编码和核方法提升模型的表达能力。这些知识将为后续的机器学习实践打下坚实的基础。

课程 P8:梯度下降、正则化与核方法基础 🧠

在本节课中,我们将回顾梯度下降与随机梯度下降的核心概念,探讨损失函数平均化的重要性,并初步了解核方法的基本思想。我们将通过公式和代码来阐明核心概念,确保内容简单易懂。

概述 📋

本节课将涵盖以下内容:

  1. 梯度下降与随机梯度下降的对比。
  2. 平均损失与总损失的区别及其影响。
  3. 正则化参数的作用与调整策略。
  4. 核方法的基本概念及其在文本比较中的应用。

梯度下降与随机梯度下降回顾 🔄

上一节我们介绍了优化算法的基本目标。本节中,我们来看看两种核心优化方法:梯度下降和随机梯度下降。

梯度下降通过计算整个数据集的平均梯度来更新参数。其更新公式为:
w = w - η * ∇J(w)
其中,η 是学习率,∇J(w) 是损失函数 J 关于参数 w 的梯度。

随机梯度下降则每次只使用一个(或一小批)样本来估计梯度,更新公式为:
w = w - η * ∇J_i(w)
其中,∇J_i(w) 是单个样本 i 的损失梯度。

以下是两种方法的关键区别:

  • 计算效率:SGD 的计算成本远低于 GD,尤其在大数据集上。
  • 更新噪声:SGD 的更新方向有噪声,可能导致收敛路径不稳定。
  • 收敛速度:SGD 通常能更快地接近最小值区域,但可能在最优点附近震荡。

平均损失与总损失 📊

上一节我们比较了两种优化策略。本节中我们来看看损失函数的不同形式如何影响优化过程。

使用总损失时,梯度步长是每个样本梯度之和。使用平均损失时,梯度步长是每个样本梯度的平均值。两者关系为:
∇J_total(w) = n * ∇J_avg(w)
其中 n 是样本总数。

这意味着,如果不进行平均化,梯度下降的步长大小约是随机梯度下降步长的 n 倍。为了使 SGD 和 GD 的更新步长尺度可比,通常建议使用平均损失。

使用平均损失还有另一个重要优势:如果数据中存在冗余,小批量 SGD 的梯度方向可以很好地近似整个数据集的梯度方向,从而在节省计算时间的同时,保持接近 GD 的优化效果。

正则化参数调整 ⚖️

上一节我们讨论了损失函数的形式。本节中我们来看看如何通过正则化来控制模型复杂度。

正则化通过在损失函数中添加一个惩罚项来防止过拟合。常见的 L2 正则化损失函数为:
J_reg(w) = J(w) + λ * ||w||^2
其中,λ 是正则化强度参数。

正则化参数 λ 的调整策略如下:

  • λ 过大:模型会过度惩罚权重,导致所有参数趋近于零,模型过于简单,可能欠拟合。
  • λ 过小:正则化效果微弱,模型可能倾向于拟合训练数据中的噪声,导致过拟合。
  • 调整方法:通常从一个较大的 λ 值开始,逐步减小,观察模型在验证集上的性能,找到平衡点。

需要注意的是,当使用总损失和平均损失时,即使 λ 值相同,其对应的实际正则化强度也不同。若要使两者最小化后得到相同复杂度的模型,需要对 λ 进行相应缩放(例如,在平均损失中使用的 λ 应约为总损失中的 λ/n)。

核方法初步:文本相似性比较 📖

上一节我们探讨了模型内部的优化与正则化。本节中我们将视角转向模型如何衡量输入数据之间的相似性,即核方法的基础。

核函数 K(x, z) 是一个接收两个输入并返回一个实数的函数,用于衡量 xz 之间的相似性。一个简单的核函数是向量内积。

例如,在比较两段文本时:

  1. 首先进行特征提取,将每段文本转化为特征向量(如词频向量)。
  2. 然后对向量进行归一化处理,使其范数为1。
  3. 最后计算两个归一化向量的内积作为相似度得分。

内积之所以能作为核函数,是因为它诱导了一个具有角度概念的空间。两个向量 vx 的内积与其夹角 θ 的余弦相关:
v·x = ||v|| * ||x|| * cosθ
当向量被归一化后,内积直接等于 cosθ,其值越接近1,表示两个向量方向越相似。

内积空间是一种特殊的度量空间,它不仅定义了距离(范数),还定义了角度,这使其成为定义核函数的理想选择。


总结 🎯

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

  1. 梯度下降与随机梯度下降:GD 准确但计算成本高;SGD 高效但带有噪声,适合大数据集。
  2. 损失函数的选择:使用平均损失可以使 GD 和 SGD 的更新步长尺度一致,并利用数据冗余提升 SGD 效率。
  3. 正则化:通过 λ 参数控制模型复杂度,防止过拟合,调整时需要权衡偏差与方差。
  4. 核方法基础:核函数用于度量数据间的相似性,内积是一个基本的核函数,它在归一化后可以反映向量间的角度相似性。

理解这些基础概念,是掌握更复杂机器学习模型和优化技术的关键。

课程 P9:核方法入门 🧠

在本节课中,我们将学习核方法的核心概念。我们将从回顾内积空间和希尔伯特空间的基础知识开始,然后深入探讨核方法的动机、代表性定理,以及如何将线性模型“核化”以处理高维甚至无限维特征空间。最后,我们会介绍一些常见的核函数。


回顾:内积空间与希尔伯特空间

上一节我们讨论了线性模型的基础。本节中,我们来看看支撑核方法的数学基础:内积空间和希尔伯特空间。

一个内积空间是一个向量空间,并配备了一个内积运算。内积可以诱导出一个范数。例如,常见的 L2 范数就可以写成向量与自身内积的平方根:||x|| = sqrt(<x, x>)。然而,并非所有范数都能这样表示,例如 L1 范数就不能写成某个内积诱导的形式。

正交性是内积空间中的一个关键概念。如果两个向量 xy 的内积为零,则称它们正交,记作 x ⟂ y。正交性引出了著名的毕达哥拉斯定理:如果 x ⟂ y,那么 ||x + y||² = ||x||² + ||y||²

在机器学习中,我们经常需要将一个向量投影到一个子空间上,以找到“最近”的点。在希尔伯特空间(即完备的内积空间)中,这种投影总是存在且唯一的,这由投影定理保证。


核方法的动机 🎯

我们已经学习了许多学习方法,如线性回归、岭回归、LASSO、支持向量机和感知器。它们有一个共同点:其假设空间都是由输入特征的线性函数构成的。

具体来说,我们有一个从原始抽象输入空间 X 到特征空间 H(例如 R^d)的映射 ψ。我们的模型是特征空间中向量的线性函数:f(x) = <w, ψ(x)>

为了获得更具表现力的模型,我们需要使用高维甚至无限维的特征空间。但这带来了两个问题:

  1. 过拟合风险。
  2. 计算和内存成本高昂。

正则化(如岭回归)可以解决第一个问题。而核方法正是为了解决第二个问题而设计的,特别是在使用 L2 正则化时。


核函数与核技巧

观察许多线性模型(如 SVM)的目标函数和预测公式,我们发现对输入数据 x 的引用总是以内积 <ψ(x_i), ψ(x_j)> 的形式出现。

我们定义核函数 K,它直接计算两个原始输入之间的这个内积:
K(x, z) = <ψ(x), ψ(z)>

核函数可以理解为衡量两个输入相似度的分数。核技巧的精髓在于,我们无需显式计算高维特征映射 ψ(x),只需直接计算核函数 K(x, z)。有时,计算核函数比先映射再求内积要高效得多。

例如,在支持向量机的对偶问题中,所有数据点都以 K(x_i, x_j) 的形式出现,这自然就是核化的形式。


代表性定理 📜

上一节我们看到了核函数的形式。本节中,我们通过一个强大的定理来理解为何许多模型的解都具有特定的形式。

考虑一个广义的优化问题,其目标函数 J(w) 包含一个关于 w 的范数的非递减正则项 R(||w||),和一个关于内积 <w, ψ(x_i)> 的损失函数 L

代表性定理指出,上述优化问题的任意解 w* 都可以表示为训练数据特征向量的线性组合:
w* = Σ_{i=1}^n α_i * ψ(x_i)

这意味着最优解位于训练数据特征向量张成的子空间中。这个定理适用于岭回归、支持向量机等使用 L2 正则化的模型。

证明思路

  1. M 为所有 ψ(x_i) 张成的子空间。
  2. 将任意解 w* 正交投影到 M 上,得到 w
  3. 根据投影定理,||w|| ≤ ||w*||,因此 R(||w||) ≤ R(||w*||)
  4. 由于 w* - wM 正交,可以证明对于所有数据点,有 <w*, ψ(x_i)> = <w, ψ(x_i)>。因此损失项 L 的值不变。
  5. 综合起来,J(w) ≤ J(w*)。由于 w* 是最小值,所以 w 也是一个最小值,且具有 w = Σ α_i ψ(x_i) 的形式。

模型的核化

根据代表性定理,我们可以将解 w* 代入模型,从而得到完全用核函数表示的核化模型

  • 预测函数:对于新输入 x,预测值为
    f(x) = <w*, ψ(x)> = Σ_{i=1}^n α_i * <ψ(x_i), ψ(x)> = Σ_{i=1}^n α_i * K(x_i, x)
  • 正则项||w*||² = <w*, w*> = Σ_{i=1}^n Σ_{j=1}^n α_i α_j K(x_i, x_j)
  • 优化问题:将上述形式代入原目标函数 J(w),我们可以得到一个新的优化问题,其优化变量是系数 α = (α_1, ..., α_n),而不是原始的特征空间权重 w。优化通常在 R^n 中进行,而不是在高维特征空间 H 中,当 n(样本数)远小于 d(特征维数)时,这带来了计算优势。

常见核函数示例

以下是一些常用的核函数:

  • 线性核K(x, z) = x^T z

    • 对应于恒等特征映射 ψ(x) = x,即原始空间的内积。
  • 多项式核K(x, z) = (x^T z + c)^d

    • 对应于所有阶数不超过 d 的单项式组合构成的特征空间。即使这个特征空间维数很高,核函数计算依然简单。
  • 高斯核(RBF核)K(x, z) = exp(-γ * ||x - z||²)

    • 这是一个最常用的非线性核。它对应于一个无限维的特征空间。函数值随两点距离增大而指数衰减,完美体现了“相似度”的概念。使用该核的模型预测函数是多个以训练样本为中心的高斯函数的线性组合,可以拟合非常复杂的形状。

如何验证一个函数是有效的核函数?
一个对称函数 K(x, z) 是有效核函数的充要条件是:对于任意有限个输入点 {x_1, ..., x_m},对应的核矩阵 [K(x_i, x_j)] 是半正定的。此外,核函数在正数乘、相加和相乘运算下仍然是核函数。


总结

本节课中我们一起学习了核方法的核心思想。我们从内积空间和投影定理的数学基础出发,探讨了为提升模型表现力而使用高维特征空间所带来的计算挑战。核方法通过核技巧巧妙地规避了显式计算高维特征向量的开销。代表性定理从理论上解释了为何像SVM、岭回归等模型的解可以表示为训练数据的线性组合,从而自然导出模型的核化形式。最后,我们介绍了几种常见的核函数,并了解了判定有效核函数的条件。核方法是机器学习中连接线性模型与非线性能力的重要桥梁。

posted @ 2026-02-04 18:20  绝不原创的飞龙  阅读(0)  评论(0)    收藏  举报