CMU-10-715-高级机器学习笔记-全-

CMU 10-715 高级机器学习笔记(全)

001:最大后验估计与贝叶斯方法

在本节课中,我们将继续讨论参数估计方法。上一节我们介绍了最大似然估计,本节中我们来看看如何将先验知识融入估计过程,即最大后验估计。

课程概述

本课程为研究生级别课程。课堂讲解会较为快速,旨在概述核心概念。详细理解需要课后通过幻灯片和练习完成。如有疑问,欢迎向讲师和助教提问。

从最大似然估计到引入先验知识

上一节我们讨论了伯努利分布和高斯分布参数的最大似然估计。我们提到,高斯分布中方差的最大似然估计是有偏的。最大似然估计完全依赖于数据,不利用任何先验知识。那么,如果我们拥有关于参数的先验知识,该如何将其融入估计过程呢?这就是本节要探讨的问题,而最大后验估计正是解决该问题的一种方法。

最大后验估计的基本思想

我们的目标是:在获得任何数据之前,我们拥有关于估计问题的一些先验知识。例如,在抛硬币问题中,我们想估计硬币正面朝上的概率 θ。假设我们对此参数有一个先验的概率分布。当我们收集到越来越多的数据后,我们希望更新对参数 θ 的概率分布估计。

初始分布称为先验分布。收集数据后,我们得到更新后的分布,称为后验分布。通常,随着数据量增加,后验分布会变得越来越集中。

先验分布的类型

我们假设参数存在某种先验分布。有一类有趣的先验分布称为无信息先验,即当我们对分布没有任何先验假设时使用。例如,对 θ 使用均匀分布,意味着我们不偏好任何参数值。

另一类非常重要且实用的先验是共轭先验。它们有一个很好的性质:如果你从特定形式的先验分布开始,在收集数据后,其后验分布与先验分布具有相同的形式。例如,如果先验是高斯分布,而后验也是高斯分布,那么该先验就是这个问题的共轭先验。这样做计算效率高,因为只需更新分布参数即可。后续我们将看到共轭先验的例子。

贝叶斯规则与后验计算

为了计算后验分布,我们需要使用贝叶斯规则。该规则可由概率的链式法则推导得出:联合概率 P(x, y) 等于条件概率 P(x|y) 乘以 P(y)。贝叶斯规则如下:

P(x|y) = P(y|x) * P(x) / P(y)

在我们的参数估计问题中,目标是计算 P(θ|D),即在给定数据 D 的条件下参数 θ 的概率分布。应用贝叶斯规则:

P(θ|D) = P(D|θ) * P(θ) / P(D)

其中:

  • P(D|θ)似然函数
  • P(θ) 是参数的先验分布
  • P(D) 是数据的边缘概率,对于给定的数据集,它是一个与 θ 无关的常数。

最大后验估计的目标是找到使后验概率 P(θ|D) 最大的 θ 值。由于分母 P(D) 不依赖于 θ,我们只需最大化分子部分:

θ_MAP = argmax_θ [ P(D|θ) * P(θ) ]

因此,在最大后验估计中,我们最大化似然函数与先验分布的乘积

与最大似然估计的比较

最大似然估计的公式为:

θ_MLE = argmax_θ P(D|θ)

相比之下,最大后验估计的公式为:

θ_MAP = argmax_θ [ P(D|θ) * P(θ) ]

当先验分布 P(θ) 是均匀分布时,最大后验估计就退化为了最大似然估计。因此,最大后验估计是比最大似然估计更一般化的方法,它提供了一种将先验知识融入估计过程的自然框架。

实例:抛硬币问题

让我们看一个具体例子。再次考虑抛硬币问题:抛掷硬币 n 次,其中 α_h 次正面,α_t 次反面。

给定参数 θ(正面概率),观察到数据的似然函数服从二项分布:

P(D|θ) = C(n, α_h) * θ^{α_h} * (1-θ)^{α_t}

其中 C(n, α_h) 是二项式系数。

现在,假设我们对参数 θ 有先验知识。一种特定的先验是假设 P(θ) 服从贝塔分布。贝塔分布是二项分布似然的共轭先验,这意味着当我们用贝塔分布作为先验时,计算出的后验分布也将是贝塔分布,这使得计算非常方便。

以下是贝塔分布概率密度函数的形式:

P(θ; α, β) ∝ θ^{α-1} * (1-θ)^{β-1}

(注:原视频此处为互动,未给出完整公式推导,但指出了贝塔分布是共轭先验这一关键点。在完整教程中,通常会接着展示如何将贝塔先验与二项似然结合,推导出后验分布仍然是贝塔分布,并给出其参数更新规则。)

总结

本节课我们一起学习了最大后验估计。我们从最大似然估计的局限性出发,引入了先验知识的概念。通过贝叶斯规则,我们推导出后验分布的计算方法,并定义了最大后验估计为最大化似然与先验乘积的参数值。我们比较了最大后验估计与最大似然估计,指出前者是更一般化的形式。最后,我们以抛硬币问题为例,介绍了共轭先验(特别是贝塔分布)的概念,它能在数学上简化后验分布的计算。理解如何将先验知识与数据结合,是贝叶斯机器学习方法的核心基础。

002:感知机与深度学习基础

在本节课中,我们将要学习感知机的基本原理及其在深度学习中的基础地位,并了解学习本课程所需的计算资源与工具。

计算资源与工具准备

上一节我们介绍了课程的整体安排,本节中我们来看看学习深度学习需要哪些准备。

进行深度学习需要充足的计算能力。GPU是必要的硬件。市面上有价格合理的GPU可供选择。

以下是具体建议:

  • Nvidia的GTX 750显卡价格大约在100至150美元。
  • 你可能需要一个合适的电源,但GTX 750通常能在现有电源配置下工作。
  • 如果无法获取GPU,可以寻求他人帮助或联系助教。

不应从零开始实现所有算法,因为这会耗费过多时间。应使用现有的工具包。

以下是关于工具包的建议:

  • 课程后期将介绍四到五个优秀的工具包。
  • 不使用这些工具包可能导致学习进度缓慢。

请随时在课堂上提问。下课后我也会留下解答疑问,如果人数过多,可以到办公室继续讨论。

课程内容概述

接下来三讲的内容将分为三个部分。

第一部分是基础知识。我们将学习感知机、随机梯度下降及其收敛性证明。这个证明是理解随机梯度下降算法最简单直观的入口,也是本课程中理论证明深度的上限。感知机是通向核方法(后续课程)或深度网络的绝佳起点,不同的推广方向将引向这两大领域。

第二部分是深度网络。我们将研究网络的不同层结构、不变性类型,并会简要涉及群论以帮助理解不变性并推导新的网络层。然后,我们将探讨目前最令人兴奋的部分之一:不同的目标函数。通过设计目标函数,可以解决大量不同类型的问题。

第三部分是优化与模型。我们将讨论优化方法和容量控制,并可能涉及大量隐状态模型,这部分内容将取决于剩余时间。对于后续内容,我会提供学习指引。

深度学习的许多论文在技术上并不难以阅读,这通常意味着该领域正处于概念快速发展的阶段。这些论文在创意上非常丰富。阅读它们,并可能进行更深层次的理论分析。

最后,我将介绍一些工具包。

感知机的生物动机与数学模型

上一节我们概述了课程结构,本节中我们来看看感知机的起源与基本形式。

感知机由Rosenblatt等人提出。我们不会探讨150年前人们对大脑工作原理的猜想,但会从一点生物学动机开始,因为“神经”网络的名字正来源于此。不过时至今日,“神经”和“深度”已成为任何非线性和非凸方法的代名词。

其基本思想是:好的行为应得到奖励,坏的行为应受到惩罚或不被奖励。一个更实际的例子是巴甫洛夫的狗。巴甫洛夫在喂食前摇铃,狗学会了将铃声与食物关联起来,因此仅听到铃声也会分泌唾液。

这种行为可以通过几种机制编码:一是在进化框架中调整基因(这通常需要很长时间);二是通过行为修正和学习,这正是教学的目的。

这是一个神经元的图片。细胞体像CPU一样整合所有信号。树突是输入部分,接收数据。突触是神经元之间的接口,负责传递信号,也是权重调整发生的地方。轴突则像一根长电缆,用于远距离传递信号。

现在让我们进行一个极度简化的数学建模。这是一个数学意义上的神经元。我们有一些输入 x1xn,以及突触权重 W1WN,然后得到一个输出。在最简单的情况下,输出可能是线性的,即 f(x) = Σ Wi * Xi

但这可能不够有趣,因为如果组合多个线性函数,最终得到的仍然是线性函数。我们人类显然不仅仅是线性的。引入非线性的一种方法是在每个线性组合之后添加一个非线性函数,然后将它们级联起来。这种方法效果出奇地好,许多分类问题(如垃圾邮件过滤、广告点击预测)都以此为基础。例如,谷歌搜索中的赞助商关键词排名,很可能就是由一个非常高维(如1010或1011维)的线性模型驱动的,本质上它是在那个高维空间中的一个神经元模型。

我们的目标就是学习一个分离超平面或线性函数,即估计参数 WB

假设我们有一个区分垃圾邮件(spam)和正常邮件(ham)的任务。可以推断,图中任何一个超平面都能做得不错。快速提问:展望一下后续内容,图中有几个超平面。谁认为红色超平面特别好?谁认为洋红色好?谁认为绿色好?谁认为黑色好?大多数人选择了绿色。为什么?因为它似乎有更大的分离间隔。后续课程中,我们将学习如何找到这种大间隔分离器。

本节课中我们一起学习了进行深度学习所需的计算资源与工具准备,了解了课程的核心内容脉络,并深入探讨了感知机的生物起源及其最基本的数学模型,为后续学习深度网络奠定了基础。

003:深度学习与目标函数 🎯

在本节课中,我们将学习机器学习中的核心组成部分之一:目标函数。我们将从最简单的线性模型开始,探讨几种不同的目标函数,理解它们的设计动机、数学特性及其在实际问题中的应用。通过对比分析,您将了解如何根据具体任务选择合适的损失函数。


线性模型回顾 📈

上一节我们介绍了线性函数作为模型的基本形式,即 f(x) = Wx + b。本节中,我们来看看如何为这个模型定义“好坏”的标准,即目标函数。

我们的目标是让模型的预测值 f(x) 尽可能接近真实观测值 y。为了量化“接近”的程度,我们需要定义一种度量方式,这就是目标函数(或损失函数)的作用。


常见目标函数对比 📊

以下是几种常用的目标函数,它们各自适用于不同的场景。

绝对偏差损失

当误差的代价与偏差的绝对值成正比时,可以使用绝对偏差损失。例如,在金融预测中,低估股价可能造成线性比例的损失。

公式
L(y, f(x)) = |y - f(x)|

该函数在零点不可导,其导数在零点是一个“次微分”集合,即区间 [-1, 1]

平方损失(最小二乘法)

平方损失对较大的误差给予更重的惩罚,并且因其处处可导的特性而广受欢迎。

公式
L(y, f(x)) = ½ (y - f(x))²

ε-不敏感损失

该函数在误差小于阈值 ε 时完全忽略,仅对超出部分的绝对值进行惩罚。这常用于支持向量回归(SVR)。

公式
L(y, f(x)) = max(0, |y - f(x)| - ε)

Huber 稳健损失

Huber 损失是平方损失和绝对损失的综合体。它在误差较小时表现为二次函数,在误差较大时表现为线性函数,从而对异常值不敏感。

公式(参数为 δ):
L(y, f(x)) = { ½ (y - f(x))², if |y-f(x)| ≤ δ; δ|y-f(x)| - ½δ², otherwise }


目标函数的直观理解 🖼️

为了更直观地理解这些函数的区别,我们可以观察它们的形状:

  • 绝对偏差损失 是一个“V”字形折线。
  • 平方损失 是一个平滑的抛物线。
  • ε-不敏感损失 在零点附近有一个平坦的“隧道”,隧道宽度为
  • Huber 稳健损失 在中心区域像抛物线,在两侧像倾斜的直线。

稳健性:历史与概念 🛡️

“稳健性”的概念历史悠久,其核心是确保少数异常观测不会严重扭曲整体估计。

一个著名的历史例子是中世纪确定“一英尺”长度的方式:召集12名成年男子,去掉脚最长和最短的各两人,将剩余八人的脚长总和除以八。这种方法自动排除了极端值(如残疾者)的影响。

Huber 稳健损失函数的设计思想与此类似。通过设定一个阈值,它对中心区域的数据使用平方损失进行精细拟合,而对远离中心的异常值使用线性损失,从而抑制其影响。


从目标函数到最优解 🔍

目标函数定义了优化方向。以最简单的平方损失求平均值为例:

假设我们有观测值 y₁, y₂, ..., yₘ,我们希望找到一个常数 C 来最小化平方误差和。

优化问题
minimize Σᵢ [ ½ (yᵢ - C)² ]

求解过程

  1. C 求导:d/dC [ Σᵢ ½ (yᵢ - C)² ] = Σᵢ (C - yᵢ) = mC - Σᵢ yᵢ
  2. 令导数为零:mC - Σᵢ yᵢ = 0
  3. 得到最优解:C = (1/m) Σᵢ yᵢ

这正是算术平均值的计算公式。这个简单的例子展示了如何通过优化目标函数得到我们想要的统计量。


总结 ✨

本节课中我们一起学习了机器学习中目标函数的关键作用。我们回顾了线性模型,并深入探讨了四种经典的目标函数:绝对偏差损失平方损失ε-不敏感损失Huber 稳健损失。每种函数都有其独特的数学特性和适用场景,例如平方损失便于优化,而 Huber 损失则能提供更好的稳健性。

我们还了解了“稳健性”这一重要概念的起源和意义,即如何使模型免受少数异常数据的过度影响。最后,我们通过求解平方损失下的平均值问题,演示了如何从定义目标函数出发,通过优化得到最终模型参数。理解这些基础目标函数,是构建和选择更复杂模型的重要基石。

004:深度学习中的不变性与卷积神经网络

在本节课中,我们将要学习如何利用先验知识来改进深度学习模型,特别是通过引入不变性来减少参数数量并加速学习。我们将重点探讨卷积神经网络背后的核心思想,即局部连接平移不变性

上一节我们介绍了通过反向传播更新深度网络参数的基本方法。本节中我们来看看如何利用关于问题的先验知识来设计更高效的网络结构。

不变性的概念

如果我们需要学习一个“威利在哪里”的检测器,问题在于威利可能出现在图像的任何位置。如果为每个可能的位置都学习一套独立的检测参数,我们将需要海量的训练数据。

然而,我们拥有一个关键的先验知识:一旦我们知道威利长什么样,无论他在图像中的哪个位置,我们都能认出他。换句话说,物体的位置对于识别它来说并不关键。这意味着,检测器的参数应该是位置无关的。因此,我们可以将不同位置上的物体检测器参数绑定在一起。

解决方案:卷积神经网络

这个思想的经典实现是Yann LeCun在1990年代提出的LeNet网络,主要用于光学字符识别。它的结构如下:

  1. 输入图像。
  2. 进行卷积操作。
  3. 进行下采样(池化)。
  4. 重复卷积和下采样。
  5. 连接几个全连接层。
  6. 最终输出字符分类结果。

这种结构利用了图像的两个关键属性。

以下是卷积神经网络利用的两个核心属性:

  1. 特征局部性:我们通常只关心图像的一个局部区域(例如,威利很小),因此不需要用整个图像来计算每个特征。权重可以只在局部区域起作用。

    • 全连接网络公式:output[i, j] = sum_over_a,b( W[i, j, a, b] * X[i+a, j+b] )
    • 局部连接网络公式:output[i, j] = sum_over_a,b( W[a, b] * X[i+a, j+b] ) (移除了权重W对位置[i, j]的依赖)
  2. 平移不变性:无论物体在图像的哪个位置,我们都使用同一套参数(同一组权重W[a, b])来检测它。这极大地减少了参数量。

    • 平移不变操作公式:output[i, j] = sum_over_a,b( W[a, b] * X[i+a, j+b] ) (对图像所有位置[i, j]使用相同的W
    • 这正是卷积操作的定义:对图像局部块进行加权平均。

卷积神经网络本质上就是利用了局部性平移不变性这两个属性。

讨论与扩展

问:为什么可以去掉权重W中的位置索引[i, j]
答:这正是平移不变性的体现。最通用的假设是为每个位置[i, j]都设置一套不同的参数。但这会导致参数量巨大(例如,一个5x5的卷积核会变成5x5x图像像素数)。平移不变性假设同一套滤波器对整个图像有效,从而大幅减少参数。一个近期的例子是Inception架构,其参数量不到密集连接层的十分之一,但性能更好。

问:这是否假设我们已知物体的尺度?
答:完全正确。当前的讨论假设了尺度已知。可以通过一些工程技巧来缓解,例如设计跨尺度共享参数的滤波器(无论物体多大,都使用同一套滤波器系数)。去年有一篇相关论文(作者来自香港大学)对此进行了很好的建模。

问:在训练时,如何对所有位置的误差进行平均?
答:这正是反向传播在卷积网络中的工作方式。误差会从输出层反向传播,并平均分配到共享同一套权重的所有空间位置上,从而更新这些共享的卷积核参数。

总结

本节课中我们一起学习了如何将先验知识(特别是平移不变性)融入深度学习模型设计。通过引入卷积操作,我们构建了卷积神经网络,它利用局部连接参数共享,显著减少了模型参数量,降低了过拟合风险,并提高了学习效率。这是处理图像等具有空间结构数据的基础且强大的方法。

005:聚类与期望最大化

在本节课中,我们将要学习机器学习中的一个新主题:无监督学习。我们将从聚类问题开始,介绍两种经典的聚类算法——K均值聚类高斯混合模型。随后,我们会发现这两种算法实际上是一个更通用框架——期望最大化——的特例。最后,我们将简要探讨期望最大化的一种推广方法:变分方法。本节课的目标是理解这些方法的核心思想及其适用场景。


什么是聚类?🤔

上一节我们介绍了有监督学习,其特点是已知输入和输出,目标是学习两者之间的映射函数。

本节中我们来看看无监督学习。在无监督学习中,我们只有一系列输入数据,目标是发现这些输入向量内部的结构。聚类是最流行的无监督学习主题之一。

聚类是将一组对象分组到相似对象类别的过程。其难点在于,即使在训练集中,我们也没有类别标签。如果有标签,我们称之为分类;如果没有标签但仍想进行分组,则称之为聚类。我们希望在同一簇内的对象具有较高的类内相似性,而不同簇间的对象则具有较低的相似性。

聚类是主观的。例如,给定一组角色,我们可以按家庭、职业或性别等不同方式进行聚类。因此,“对数据集进行聚类”本身不是一个定义明确的问题,因为聚类的定义取决于你所提供的相似性度量。我们通常假设已经给定了一个相似性函数或距离函数,并在聚类问题中直接使用它。


K均值聚类问题 📊

现在,让我们开始讨论第一个具体的聚类问题:K均值聚类。请注意,这里首先定义的是一个优化问题,而非算法。

给定一组观测值或特征向量 x₁, x₂, ..., xₙ(均为d维向量),我们希望将这n个观测值划分为k个集合,记为 S₁, S₂, ..., Sₖ

我们的目标是最小化以下簇内平方和

J = Σ_{i=1}^{k} Σ_{x ∈ S_i} ||x - μ_i||²

其中,μ_i 是集合 S_i 中所有点的均值向量。

这个目标函数的直观意义是:我们希望每个数据点与其所属簇的中心(均值)尽可能接近。通过最小化所有点到其簇中心的距离平方和,我们可以得到紧凑的簇。

那么,解决这个问题的难度如何?一个朴素的想法是枚举所有可能的划分方式,然后找出使目标函数最小的划分。然而,可能的划分数量随着实例数n呈指数级增长,这使得该问题在计算上是NP难的。NP难意味着存在一些困难的实例,我们无法在多项式时间内找到全局最优解。但在实践中,我们通常不要求找到全局最优解,找到一个足够好的近似解就令人满意了。


K均值算法 🔄

既然K均值问题本身是NP难的,我们需要一种高效的算法来寻找一个近似解。这就是K均值算法

K均值算法是一种迭代优化算法,它交替执行以下两个步骤,直至收敛:

  1. 分配步骤:将每个数据点分配到距离其最近的簇中心(均值)所属的簇。

    对于每个数据点 x_j:
       将其分配到簇 i,其中 i = argmin_i ||x_j - μ_i||²
    
  2. 更新步骤:根据新分配好的簇,重新计算每个簇的均值。

    对于每个簇 S_i:
       计算新的均值 μ_i = (1/|S_i|) Σ_{x ∈ S_i} x
    

以下是该算法的简要步骤:

  1. 随机初始化k个簇中心 μ₁, μ₂, ..., μ_k
  2. 重复执行分配步骤和更新步骤,直到簇的分配不再发生变化(或变化很小)。

K均值算法简单高效,但它对初始簇中心的选择敏感,并且可能收敛到局部最优解而非全局最优解。


高斯混合模型与期望最大化 🧩

K均值算法假设每个簇是“硬”分配的,即一个点只属于一个簇。现在,我们来看一种更软、更概率化的方法:高斯混合模型

高斯混合模型假设所有数据点是由k个高斯分布混合生成的。每个高斯分布代表一个簇,有其自己的均值 μ 和协方差矩阵 Σ。一个数据点可以以一定的概率属于任何一个簇。

我们的目标是找到一组模型参数 θ(包括所有高斯分布的均值、协方差和混合权重),使得观测到所有数据点的似然函数最大。这称为最大似然估计

直接最大化高斯混合模型的似然函数非常困难。这时,期望最大化算法提供了一个强大的框架。

EM算法通过迭代以下两步来解决含有隐变量的最大似然估计问题:

  1. 期望步骤:基于当前参数估计,计算每个数据点属于每个簇的后验概率(责任值)。

    γ_{ij} = P(点 j 属于簇 i | x_j, 当前参数 θ)
    
  2. 最大化步骤:基于E步计算出的责任值,更新模型参数以最大化期望似然。

    更新 μ_i, Σ_i, 混合权重 π_i
    

有趣的是,K均值算法可以被视为EM算法应用于高斯混合模型的一个特例,其中我们假设每个高斯分布的协方差矩阵是各向同性的且固定,并且在E步中进行“硬”分配(将点完全分配给概率最高的簇)。


变分方法:超越EM 🌉

期望最大化算法虽然强大,但它要求能够精确计算后验分布 P(隐变量 | 数据, 参数)。对于许多复杂模型,这个后验分布难以精确计算。

这时,变分方法作为一种推广出现了。变分方法的核心思想是:用一个简单的、易于处理的分布 q(隐变量) 来近似真实但复杂的后验分布 P(隐变量 | 数据)

我们通过最小化 q 分布与真实后验分布之间的差异(通常用KL散度度量)来找到最好的近似。这样,我们就把一个复杂的推断问题转化为了一个优化问题。当精确的EM不可行时,变分方法提供了一个有效的替代方案。


总结 📝

本节课中我们一起学习了无监督学习中的核心主题——聚类。

  • 我们首先定义了聚类问题,其目标是在无标签数据中发现相似对象的分组。
  • 接着,我们探讨了K均值聚类这一具体问题及其NP难的性质,并介绍了高效的K均值迭代算法
  • 然后,我们引入了更概率化的高斯混合模型,并展示了如何用期望最大化这一通用框架来估计其参数,同时指出K均值是EM的一个特例。
  • 最后,我们简要了解了当精确后验推断困难时,变分方法如何作为EM的一种推广来近似求解。

总而言之,这些方法都是用于特定模型中进行最大似然估计的强大工具,理解它们各自的假设和适用场景对于解决实际问题至关重要。

006:聚类与高斯混合模型

在本节课中,我们将要学习聚类分析的核心概念,特别是高斯混合模型。我们将从生成模型的基本思想开始,逐步推导出其数学形式,并探讨如何通过最大似然估计来求解模型参数。最后,我们会看到K-Means算法其实是高斯混合模型在特定条件下的一个特例。


生成模型与高斯混合

上一节我们介绍了聚类的基本思想,本节中我们来看看如何用概率生成模型来描述数据。

一个高斯混合模型假设数据是由多个高斯分布生成的。其概率密度函数是多个高斯分量的加权和:

p(x) = Σ_{i=1}^{K} π_i * N(x | μ_i, Σ_i)

其中:

  • K 是混合成分的数量。
  • π_i 是第 i 个高斯分量的先验概率,满足 Σ π_i = 1π_i ≥ 0
  • N(x | μ_i, Σ_i) 是以 μ_i 为均值、Σ_i 为协方差矩阵的高斯分布。

数据的生成过程可以描述如下:

以下是数据点的生成步骤:

  1. 首先,根据先验概率 π_i 选择一个高斯分量。假设选择的是第 i 个分量。
  2. 接着,从被选中的高斯分布 N(x | μ_i, Σ_i) 中采样出一个数据点 x
  3. 重复以上过程 N 次,即可得到整个数据集。

例如,一个由三个高斯分布混合而成的模型,其概率密度由各分量的加权和构成,决策边界可能呈现复杂的形状。


决策边界与参数估计

当各高斯分量具有相同的协方差矩阵时,计算数据点属于某个分量的后验概率(即似然比)的函数是线性的。这意味着决策边界是超平面。

如果存在三个聚类,这些线性的决策边界可能会交汇于一点。

那么,如果我们不知道模型参数(即 π_i, μ_i, Σ_i)该怎么办?接下来我们将讨论如何从数据中估计这些参数。


最大似然估计

面对未知参数,一种自然的方法是采用最大似然估计。我们需要最大化数据的对数似然函数。

给定数据集 X = {x_1, ..., x_N},并假设数据点独立同分布,对数似然函数为:

L(θ) = Σ_{j=1}^{N} log( Σ_{i=1}^{K} π_i * N(x_j | μ_i, Σ_i) )

我们的目标是找到参数 θ = {π_i, μ_i, Σ_i} 来最大化 L(θ)。然而,由于对数内部存在求和,直接优化这个函数非常困难。


从软分配到硬分配:与K-Means的联系

让我们考虑一种特殊情况:假设每个高斯分量的协方差矩阵都是 σ^2 * I(各向同性且相等),并且 σ^2 是一个已知的固定值。

此时,我们可以观察一个有趣的现象。在似然函数中,数据点 j 属于聚类 i 的“责任” γ_{ji} 是一个介于0和1之间的软分配概率:

γ_{ji} = p(z_j = i | x_j)

如果我们进行硬分配,即规定每个数据点只完全属于一个聚类,那么 γ_{ji} 将退化为一个指示函数:对于点 j 所属的聚类 i,其值为1,对于其他聚类则为0。

在这种情况下,最大化对数似然函数等价于最小化以下目标函数:

J = Σ_{j=1}^{N} Σ_{i=1}^{K} γ_{ji} * || x_j - μ_i ||^2

这正是K-Means算法的目标函数。因此,K-Means可以看作是各向同性协方差高斯混合模型在已知方差、并进行硬分配近似下的最大似然估计。

需要指出的是,对于更一般的指数族分布,我们会得到类似的形式,但欧氏距离 || x_j - μ_i ||^2 会被该分布对应的自然距离(如KL散度)所取代。


总结

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

  1. 高斯混合模型作为一种概率生成模型,如何描述数据来自多个子分布(聚类)的假设。
  2. 模型的生成过程和其数学表示形式。
  3. 使用最大似然估计来求解模型参数的基本思路及其复杂性。
  4. 在特定条件(各向同性固定方差、硬分配)下,高斯混合模型的最大似然估计如何简化为我们熟悉的K-Means算法的目标函数,从而揭示了两者之间的深刻联系。

007:EM算法与PCA应用

在本节课中,我们将学习期望最大化(EM)算法在混合高斯模型参数估计中的应用,并介绍另一种无监督学习算法——主成分分析(PCA)。

概述

上一节我们介绍了EM算法的基本原理和推导过程。本节中,我们将具体探讨如何应用EM算法来估计混合高斯模型的参数,并初步了解主成分分析算法。

EM算法回顾

EM算法不会降低似然函数的值。它要么增加似然函数的值,要么保持不变。

我们有一个数据集 x₁, x₂, ..., xₙ,以及一些未知变量。例如,在聚类问题中,这些未知变量是 y₁, y₂, ..., yₙ,它们表示簇的标签。在混合高斯模型中,我们有参数 μ₁, μ₂, ..., μₖ(簇的均值)、π₁, π₂, ..., πₖ(簇的先验概率分布)和 Σ₁, Σ₂, ..., Σₖ(高斯分布的协方差矩阵)。我们的目标是设计一个算法,在该模型中进行最大似然估计,即我们希望最大化关于θ的对数似然。如果我们有n个实例,那么我们的估计是 θ̂ₙ

EM算法的工作原理如下:首先,创建一个具有两个参数 θₜ₋₁θₜ 的Q函数。具体操作是,取隐藏随机变量(在我们的例子中是簇标签)和数据(即x)的联合密度的对数,给定时间步T的参数。然后,我们取这个对数似然的期望值,关于y的后验分布。在这个后验分布中,我们使用时间步T-1的参数。这样就创建了Q函数,它依赖于 θₜ₋₁θₜ。这就是E步。

在M步中,我们使用这个Q函数,并在第一个参数中最大化它。即 Q(θ, θₜ₋₁),我们在θ中最大化它,得到 θₜ。然后在下一次迭代中,将 θₜ 放入第二个参数,并继续这个迭代过程。

我们讨论过(或证明过),如果执行这些步骤,那么在下一步中,似然函数要么更大,要么与时间步T的似然函数相同。我们还讨论了EM算法背后的直观理解:你有一个似然函数(黑色曲线),x轴是θ。EM算法所做的是用一个称为自由能函数的函数来下界这个函数。在E步中,你尝试最小化这个自由能函数与似然函数之间的差距,即将自由能曲线向上移动,直到它接触到似然函数(它总是小于或等于似然函数)。然后,你最大化自由能函数。在这个最大值点,你再次拟合一个新的自由能函数,将其向上推直到达到似然函数,然后进行迭代。这就是EM算法。

在变分方法中,你甚至可以进一步推广这个框架,只执行部分步骤,即你的自由能函数不一定真正接触到似然函数,你只是尝试优化它直到接近,然后在优化中执行这个优化。你总是假设我们使用的Q分布函数处于可处理的形式。有时,根据模型,在EM函数中,我们优化的这个Q函数(即给定数据和 θₜ₋₁P(y))可能是难以处理的。在变分方法中,你用另一个足够接近但形式可接受的函数来替换它。

这些是主要思想,现在让我们看一个该模型的应用。

EM算法在混合高斯模型中的应用

好的,让我们回到混合高斯模型的情况。我们有无标签数据 x₁, x₂, ..., xₙ。我们知道有K个类别。为简单起见,我们假设我们知道这个先验分布 π₁, π₂, ..., πₖ。并且我们知道高斯分布有一个共同的方差 σ²。我们不知道的是这些高斯分布的均值向量,我们只想估计它们。

好的,这只是第一步。我们想要的是,在解决这个问题之后,我们将讨论如何进一步推广,即当你不知道π,甚至假设每个高斯分布都有一个协方差矩阵 Σᵢ,并且它们可以不同。但现在,我们只是从这个简单的问题开始。

好的,所以我们想解决这个参数估计问题,即我们想使用EM算法估计 μ₁, μ₂, ..., μₖ

你已经知道似然函数,即给定参数下 x₁, x₂, ..., xₙ 的概率。我们有独立同分布观测,所以它是从j=1到N的乘积。如果你应用贝叶斯规则,那么我们会看到这个概率无非是与这个和成正比。对于每个簇从1到K求和,这是高斯分布,这只是高斯分量的概率。好的,我们计算过很多次了。所以这只是似然函数。我们的目标是在 μ₁, μ₂, ..., μₖ 中最大化这个函数。

关于这个有什么问题吗?好的,这就是我们想做的。

我们想用EM解决这个问题。所以首先,我们创建一个Q函数。

那么那个Q函数是什么?你记得,我们需要……让我回到那里。在E步中,我们需要创建一个Q函数 Q(θ, θₜ),这只是关于这个后验分布的期望。所以这是p的后验,我想计算给定参数下log P(y, 数据)的期望。就是这样。所以这是Q函数。所以这是E步。

让我们看看对于混合高斯情况,这个Q函数是什么样子。

好的,所以在我们的情况下,Q(θ, θₜ, θₜ₋₁)

我们需要计算这个期望,这个期望无非是和,因为我们有独立同分布样本 x₁, x₂, ..., xₙ,所以从i=1到n求和。

总结

本节课中,我们一起学习了如何将EM算法应用于混合高斯模型的参数估计问题。我们回顾了EM算法的E步和M步,并开始推导其在具体模型中的计算形式。下一节,我们将继续完成混合高斯模型的EM算法推导,并深入介绍主成分分析算法。

008:主成分分析的应用

在本节课中,我们将学习主成分分析(PCA)的具体应用,特别是在人脸识别和面部表情识别领域的实践。我们将回顾PCA的三种算法,并探讨如何利用PCA处理高维数据,如图像数据。


上一节我们介绍了PCA的三种计算方法,本节中我们来看看PCA在实际问题中的应用。

PCA算法回顾

以下是PCA的三种核心算法:

  1. 基于定义的迭代算法:对于中心化的数据集 X₁, X₂, ..., Xₘ(其中 Xᵢ 是一个 d 维向量),第一主成分是最大化数据投影方差的单位向量 w。其目标函数为:

    max (1/m) Σ (wᵀXᵢ)², s.t. ||w|| = 1
    随后的第 k 个主成分 wₖ 在减去前 k-1 个主成分重构的数据后,在残差空间中重复此过程得到。

  2. 基于协方差矩阵的特征分解:计算数据的经验协方差矩阵 Σ = (1/m) Σ XᵢXᵢᵀ,其前 K 个最大特征值对应的特征向量即为主成分。

  3. 基于数据矩阵的奇异值分解(SVD):对数据矩阵 X 直接进行奇异值分解,其右奇异向量即为主成分。

人脸识别应用

我们面临一个任务:给定一个由 226×226 像素人脸图像组成的数据集,当输入一张新图像时,需要识别出它属于哪个人。

我们讨论了两种基于PCA的方法:

  • 方法A:为数据集中的每个人分别构建一个PCA子空间。对于新图像,检查哪个人的子空间能最好地重构该图像,重构误差最小的即为识别结果。
  • 方法B:为整个数据集构建一个统一的PCA子空间。将所有图像(包括新图像)投影到这个子空间中,得到一组降维后的新特征向量(坐标)。然后基于这些新特征训练一个分类器(如最近邻分类器)进行识别。

处理高维数据的技巧

直接处理 226×226(即51076维)的图像向量会导致协方差矩阵 Σ 过大,无法高效计算其特征向量。因此,我们采用一个技巧:转而计算矩阵 XᵀX(如果数据集中有100张图,此矩阵仅为100×100)。可以证明,XᵀX 的特征值与 XXᵀ 的非零特征值相同,且其特征向量与 XXᵀ 的特征向量存在明确转换关系,从而可以高效地得到主成分。

特征脸可视化

在方法B中,为整个数据集计算出的主成分向量被称为“特征脸”。下图展示了一些最重要的特征脸:

(此处原视频展示了特征脸图像)

可以看到,这些特征脸保留了人脸的主要结构。利用这些基向量,我们仅需少数几个就能很好地重构一张人脸图像,实现了有效的数据压缩。

PCA方法的局限性

该PCA框架存在一些缺点:

  • 所有人脸必须在图像中居中且对齐(如鼻子、眼睛位置相同)。
  • 所有人脸必须具有相同的尺寸。
  • 对人脸角度变化敏感。
  • 未融入任何关于人脸结构的先验知识(例如,人脸应有两只眼睛)。

面部表情识别应用

接下来,我们探讨PCA在面部表情识别中的应用。任务是判断一张输入图像的表情是快乐、厌恶、愤怒还是惊讶等。

我们采用与方法A类似的思路:

  1. 在训练数据中,为每一种表情类别(如“快乐”)单独构建一个PCA子空间。
  2. 下图展示了从“快乐”表情图像中计算出的主成分(特征脸):
    (此处原视频展示了快乐表情的特征脸)
    可以看到,这些特征脸都带有笑容,但原始人物的身份信息已被模糊。
  3. 同样,从“厌恶”表情图像中也能得到一组体现厌恶特征的成分:
    (此处原视频展示了厌恶表情的特征脸)
  4. 识别时,将新图像分别用每个表情子空间进行重构,选择重构误差最小的子空间所对应的表情作为识别结果。

在实际处理中,通常会对原始图像进行预处理(例如遮盖头发部分),以排除无关特征的干扰,得到更标准化的输入。


本节课中我们一起学习了主成分分析(PCA)在人脸识别和面部表情识别中的实际应用。我们回顾了PCA的算法,学习了如何处理图像等高维数据,并通过“特征脸”可视化了PCA的主成分。同时,我们也了解了PCA方法的优势与局限性。通过构建不同类别的PCA子空间,我们可以有效地进行人脸身份和表情的识别。

009:无约束优化

在本节课中,我们将学习机器学习中至关重要的数学工具——优化,特别是凸优化。我们将从最基础的无约束优化问题开始,理解凸性的概念及其重要性,为后续学习支持向量机和核方法打下坚实的数学基础。

凸集与凸函数

上一节我们介绍了优化在机器学习中的核心地位,本节中我们来看看优化问题中一个能极大简化求解过程的性质——凸性。理解凸集和凸函数是理解凸优化的第一步。

一个凸集是指这样的集合:如果你在集合内任意取两点,连接这两点的线段上的所有点也必须在这个集合内。用数学语言描述,对于集合 C 和任意 x, y ∈ C,以及任意标量 λ ∈ [0, 1],都有:
λx + (1-λ)y ∈ C

一个凸函数是指其图像上方的区域(称为上镜图)是凸集的函数。更直观地说,函数图像上任意两点间的线段总是位于函数图像的上方或与之重合。其数学定义为,对于函数 f 定义域内的任意 x, y 和任意 λ ∈ [0, 1],都有:
f(λx + (1-λ)y) ≤ λf(x) + (1-λ)f(y)

记住这些图像,你总是可以自己推导出对应的方程。

凸性的重要性

了解了凸集和凸函数的定义后,我们来看看为什么凸性在优化中如此受欢迎。凸性之所以重要,是因为它使得许多原本困难的问题变得相对“容易”处理。

这里的“容易”是相对的。例如,在图模型中,即使问题是凸的,求和项也可能是指数级的,计算依然复杂。但凸性至少保证了一个关键性质:最小值(最优值)是唯一的。注意,这里指的是目标函数值唯一,而达到这个最小值的点(最小化器)可能不唯一。

我们可以用反证法来理解:如果一个函数有两个局部最小值,那么它就不可能是凸的。因为在这两点之间画一条线,函数图像必须在这条线之下,但两个极小值点之间的函数值必然会高于其中至少一个点,这就违反了凸函数的定义。

以下是关于凸函数极值点的一些思考:

  • 具有多个全局最小值的凸函数:最简单的例子是常数函数 f(x) = 0。一个更“有趣”的非平凡例子是像“浴缸”底部那样的函数,它有一个平坦的全局最小值区域,因此有无数个最小化器。
  • 没有最小化器的凸函数:例如指数函数 f(x) = e^x。这个函数在下方有界(趋近于0),但其最小值在负无穷处取得,因此在实数域内没有具体的最小化器点。我们经常用到的逻辑函数 f(x) = log(1 + e^{-x}) 也有类似的性质。

凸集的顶点与凸包

在深入优化算法之前,我们需要理解凸集的另外两个关键概念:顶点和凸包。这些概念在特定类型的优化问题中非常有用。

一个凸集的顶点是指这样的点:你无法用集合内其他点的凸组合(即线段连接)将其表示出来。换句话说,任何包含该点和其他点的线段,如果试图延伸出该点,就会跑出集合外。例如,一个椭球体没有顶点,而一个多边形有多个顶点。

凸包是一组点的最小凸集。给定一组点,它们的凸包就是能包含所有这些点的最小凸多边形。凸包有一个很好的性质:集合内额外的点不会改变凸包的形状。

一个非常有用的结论是:在一个凸集上求一个凸函数的最大值,这个最大值一定在凸集的某个顶点上取得。因此,如果我们想在一个多面体(由多个平面围成的凸集)上最大化一个凸函数,算法可以非常简单。

以下是最大化凸函数的一种基础算法:

  1. 找出该凸多面体的所有顶点。
  2. 计算目标函数在每个顶点处的值。
  3. 选择函数值最大的那个顶点。

这个算法非常原始。坏消息是,如果顶点数量非常多,这个算法会低效得可怕,而且没有更好的通用办法。但是,如果顶点数量可控,这就是一个非常高效的算法。如果顶点数量爆炸,你可能需要重新考虑你所提出的问题是否合适。

总结

本节课中我们一起学习了凸优化的基础知识。我们首先定义了凸集凸函数,理解了它们的几何与代数含义。接着,我们探讨了凸性的重要性,它保证了优化问题最优值的唯一性,并举例说明了凸函数极值点的各种情况。最后,我们介绍了顶点凸包的概念,并了解到在凸集上最大化凸函数时,最优解必然出现在顶点上,这为某些特定类型的优化问题提供了简单的求解思路。这些是凸优化中最基础也最核心的概念,务必牢记。

010:约束优化与凸性

在本节课中,我们将学习约束凸优化。这是解决许多实际问题的关键数学工具,例如支持向量机、规划与控制问题。我们将从基本概念入手,逐步深入其数学原理。

上一节我们介绍了无约束优化和凸性。本节中,我们来看看当优化问题存在约束时,应如何处理。

约束优化问题

许多现实问题都包含约束。例如,你希望在有限的时间内获得最佳的研究成果,这便是一个约束优化问题。同样,在机器学习中,我们经常需要在满足特定条件的前提下,寻找最优模型参数。

处理非凸约束

一个自然的问题是:如果约束本身是非凸的,该怎么办?以下是处理非凸约束的一种通用技巧。

其核心思想是,通过一系列凸优化问题来逼近原始的非凸问题。具体做法是,在每一步迭代中,对非凸约束函数进行线性近似(即一阶泰勒展开),从而在当前可行点附近构造一个更紧致的凸约束集。

以下是该过程的步骤描述:

  1. 从某个可行点开始。
  2. 在该点对每个非凸约束函数 C_i(x) 进行线性近似:C_i(x) ≈ C_i(x_0) + ∇C_i(x_0)^T (x - x_0)
  3. 用这些线性不等式约束替换原非凸约束,形成一个凸优化问题(通常是线性规划或二次规划)。
  4. 求解这个凸问题,得到一个新的解 x_new
  5. x_new 为新的基点,重复步骤2-4,直至收敛。

这种方法本质上是为原始的非凸可行域构造了一个不断改进的内接凸多面体,并通过在其内部求解凸问题来逐步逼近原问题的最优解。

与相关算法的联系

这种“用凸问题序列逼近非凸问题”的思想在优化领域多次独立出现,拥有多个名称。

以下是几种本质相同的算法:

  • DC规划:最早出现于20世纪50-60年代。
  • MM算法:Stephen Boyd等人使用的名称。
  • EM算法:在期望最大化中用于处理隐变量,其“M步”也蕴含此思想。
  • 凹凸过程:另一种重新发现。

记住背后的核心图景比记住名字更重要:通过构造凸上界或线性内界,迭代地求解非凸问题

算法变体与代价

当然,这种近似方法需要付出代价。每一步迭代都需要完整求解一个凸优化子问题。为了提高效率,可以采取“近似更新”策略,即每次只沿下降方向移动一小步,而不是完全求解子问题,这类似于随机EM算法的思想,能带来更快的计算速度。

本节课中我们一起学习了约束凸优化的基本思想,特别是如何处理非凸约束。我们介绍了通过线性近似构造内接凸集并迭代求解的方法,并了解了这一思想与DC规划、MM算法、EM算法等的内在联系。掌握这一图景,有助于理解许多复杂优化问题的求解思路。

011:高斯过程回归

在本节课中,我们将学习一种新的回归算法——高斯过程。与之前学过的线性回归、支持向量回归等方法不同,高斯过程回归不仅能提供预测值,还能给出预测的不确定性(即置信区间)。我们将从回归问题的目标出发,回顾多元高斯分布和岭回归的必要性质,最终推导出高斯过程回归的贝叶斯视角。

课程安排与作业

我们已经批改完第一次作业。请在课后领取作业,不要在课前领取。如果课前领取,可能会出现我讲课而你们只顾着看作业解答的情况,这样效果不好。课后领取时,如果有任何关于成绩的问题或异议,可以在助教的办公时间与他们讨论。

今日课程计划

今天的计划是讨论高斯过程。具体来说,我们将专注于用于回归的高斯过程。我们将主要参考指定教材的内容。如果你访问相关网站,可以下载该教材的PDF版本。今天我们将讨论其第一章或第二章的内容。

今天的课程会涉及大量推导。建议你打印出幻灯片,这样更方便做笔记。我会尽量放慢速度讲解。如果你在复杂的公式推导中感到困惑,请随时提问。核心思想其实很简单,但具体的计算细节会比较复杂。有些计算细节将作为课后作业,由你们自行验证,否则仅讲解这些细节就可能需要三节课的时间。

回归问题回顾

到目前为止,我们学过哪些回归方法?我们学过线性回归、逻辑回归,最近还学了支持向量回归。我们还知道K近邻回归吗?了解K近邻回归的同学请举手。大约有5%的同学知道。这是另一种非常简单的回归方法。

例如,在一个二维输入空间中,有一些输入点。每个输入点都有一个输出值。我想进行二维回归。假设我不知道这个点的输出值是5,而其他点的输出值是0、1、2、3。我想进行二维回归,即对于一个查询点,我想预测回归函数在该点的估计值。具体做法是:固定一个K值,比如K=3。计算查询点的三个最近邻,然后对这三个邻居的输出值取平均。因此,这个查询点的估计值就是 (0 + 3 + 1) / 3。

为什么这是回归?回归是指你拥有输入-输出对。对于一个新查询点,你想要预测其输出。所以,一个二维回归问题就是:你拥有二维输入点和一维输出值作为训练集,然后有人提供一个像这样的查询点,你想预测该点的值。这说得通吗?

在回归中,通常你有一些输入点和一些输出值,这是你的训练集。如果有人提供一个新的查询点,你想预测该点的输出值。在一维情况下,你可以做同样的事情:固定K=3,计算查询点的三个最近邻,然后计算这些点的经验平均值。

现有方法的局限性与新目标

我们已知的所有这些回归方法,都为我们提供了一个“点估计”。也就是说,算法会告诉你:“我认为在这个查询点,函数值是这个表达式”,或者“在这个点,函数值是 (0+3+1)/3”。

我们想要设计一种回归方法,它不仅能给出预测值,还能给出“置信度”。也就是说,算法会说:“我认为以这个概率,输出值是这个;以那个概率,输出值是那个。” 我们不只是想预测一个单一的值,而是想预测一个分布。这通常更有意义,因为相比于仅仅说“输出值是0.2”,预测一个输出值的分布能提供更多信息。

但我们目前学过的算法无法做到这一点。

我们想要的是类似这样的效果:你有一些输入-输出对(这是一个一维回归的例子)。对于任何一个查询点,我还想预测该点的置信区间。例如,我会说,我有95%的把握认为真实值落在这个区间内。

你可能会想到在线性回归中,我们假设误差项ε是独立同分布的正态噪声。你有一个关于噪声的概率模型。但是,这并不意味着你能为每一个查询点x都提供一个输出值的概率模型。在一个查询点X,我想要预测输出值的分布。你有一个关于噪声的模型,但我们需要一个关于所有(X,Y)的模型来回答这个问题。这是一个很好的观点。

所以,我们想要的是:在每个查询点x,我们不仅要预测一个值,还要预测一个置信区间。如果我给你一个点,以及可能的输入-输出对,你能告诉我正确的分布是什么吗?是的,如果你给我一个点,我的预测将是一个具有某个均值和某个协方差的高斯分布。

核心概念与预备知识

为了实现上述目标,我们需要掌握几个核心概念。上一节我们明确了高斯过程回归的目标,本节中我们来看看实现它所需的数学基础。

以下是实现高斯过程回归需要了解的关键性质:

  1. 多元高斯分布的性质:高斯过程的核心是多元高斯分布。我们需要理解其边缘分布、条件分布以及如何从联合分布中推导它们。
  2. 岭回归的贝叶斯视角:我们将从贝叶斯的角度重新审视岭回归,这将是连接传统回归与高斯过程的重要桥梁。

课程内容路线图

基于以上预备知识,我们将通过以下两种视角之一来引入高斯过程回归:

  • 贝叶斯视角:这本质上是贝叶斯岭回归加上核技巧。我们将详细讨论这个视角,这也是本节课的重点。
  • 函数空间视角:在幻灯片和教材中,你还可以看到另一种引入高斯过程的方式,即所谓的“函数空间视角”。我们本节课不会详细讨论这个视角,但幻灯片中包含了相关内容。如果你课后查看幻灯片并有疑问,我们可以进一步探讨。

因此,今天我们将讨论带核技巧的贝叶斯岭回归,并由此引出高斯过程。

总结

本节课中,我们一起学习了高斯过程回归的动机和目标。我们认识到,相比于传统回归方法只提供点估计,能够输出预测分布(包括均值和不确定性)的模型更具信息量。为了构建这样的模型,我们需要依赖多元高斯分布的性质,并从贝叶斯岭回归出发,结合核技巧,最终推导出高斯过程回归框架。在接下来的章节中,我们将深入这些数学基础,并逐步构建出高斯过程回归算法。

012:潜在空间模型与独立成分分析

在本节课中,我们将学习如何利用数据来更新高斯过程的参数。我们将尝试实现这一目标,并从一个熟悉的起点——线性回归——开始。

从线性回归到贝叶斯视角

上一节我们介绍了课程目标,本节中我们来看看线性回归的数学框架。这是我们的符号系统。

我们有一个训练集 D,其中包含 N 个输入-输出对 (X_i, Y_i)。如果我们在一个特征映射 φ 之后进行线性回归,那么线性回归的方程是:

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

在线性回归中,我们的目标是找到一个权重向量 ,使其最小化以下成本函数:

J(w) = Σ_{i=1}^{N} (y_i - w^T φ(x_i))^2

通常,我们不会仅仅这样做。我们希望对模型进行正则化。以下是常见的做法。

  • 我们在成本函数中加入一个所谓的“岭”项(L2正则化项)。
  • 然后我们称之为岭回归。

事实证明,我们稍后会看到,高斯过程正是这个框架的一个“核化”版本。接下来,让我们看看如何推导到那一步。

数据表示与模型假设

再次说明,符号 D 是我们的训练集。我们有 N 个输入-输出对,X 是输入,Y 是输出。我们进行如下组织。

  • 将输入收集到一个设计矩阵中。输入的集合被称为设计矩阵。因此,X 是一个 D × N 的矩阵,由 x_1x_N 组成。
  • 输出 y 是一个由 y_1y_N 组成的向量。

这是我们的训练数据。如果我们进行线性回归,那么 f(x) = x^T w 将是我们的回归函数。我们假设观测值是带有噪声的。即:

y = f(x) + ε = x^T w + ε

对于这个噪声 ε,我们假设它服从高斯分布,它来自一个方差为 σ^2 的高斯分布。

我们的目标是:给定这些输入-输出对,我们希望找到最佳的 w。如果我们使用最大似然估计,那么似然函数,即在给定 xwy 的概率,将是(因为我们假设输入-输出对彼此独立,即数据是独立同分布的)这些项的乘积。然后,这就是最大似然估计。

引入权重先验:贝叶斯线性回归

现在,我们做一个额外的假设。我们不仅做最大似然估计,我们还假设在 w 上有一个先验分布。我们将假设 w 服从一个高斯分布,并希望在观测到数据后计算 w 的后验分布。

我们从 w 的这个先验分布开始,观测数据 Xy,然后我们想要计算 w 的后验分布。那么,后验分布将是似然与先验的乘积,再除以一个归一化常数。这个常数中不包含 w,因此我们可以说,给定 xyw 的概率与这个项和那个项的乘积成正比。

我们已经计算了似然项,即这个高斯分布。对于先验项,我们假设 w 服从一个均值为 0、协方差矩阵为 Σ_p 的高斯分布(我们在一个 P 维空间中)。

推导后验分布

现在让我们计算观测数据后 w 的后验分布。后验分布就是刚刚计算的似然与先验的乘积,再除以归一化项。这个项中没有 w,所以我们可以说 p(w|X, y) 与这个项和这个项的乘积成正比。

我们推导了这个项,即这个高斯分布(似然)。而在这个项(先验)上,我们假设它是一个高斯分布,协方差矩阵为 Σ_p。这里有一个问题:如果你看这个关于 w 的分布,它会是什么类型的分布?我们可以看到它是两个高斯分布的乘积。关于 w,它会是什么类型的分布?答案是:它仍然是高斯分布。为什么?因为指数函数内部这里有一个二次函数,那里有另一个二次函数。如果我将这两个相乘,那么指数函数内部将是二次函数加二次函数,而二次函数加二次函数仍然是一个二次函数。

让我们看看这个推导的细节。这就是后验分布,如前所述,与这个高斯分布(似然)和先验的乘积成正比。第一个高斯分布是这个(似然)。第二个高斯分布是这个(先验)。现在,事实证明你可以将这个表达式重写为这个二次表达式。这是一个关于 w 的二次型,其中我引入了两个新的符号:A 由这个表达式定义,A 由这个表达式定义。然后我们可以看到,这个后验分布将是一个高斯分布,其均值为 ,协方差矩阵为 A^{-1}

总结

本节课中,我们一起学习了从基础的线性回归出发,通过引入高斯噪声假设和权重的高斯先验分布,逐步推导出贝叶斯线性回归框架。我们看到了后验分布如何通过似然与先验的乘积得到,并且由于两者均为高斯形式,后验分布也保持高斯特性,其均值和协方差可以通过特定的公式(A)计算。这为理解更复杂的高斯过程模型奠定了重要的基础。

013:独立成分分析与流形学习

在本节课中,我们将要学习独立成分分析(ICA)与主成分分析(PCA)的核心区别,理解ICA如何通过移除高阶依赖来分离混合信号源,并探讨其几何解释与实际应用。

上一节我们介绍了PCA的基本原理,本节中我们来看看ICA是如何工作的。

PCA与ICA的核心区别

PCA的目标是通过矩阵分解来降低数据维度并移除相关性。其公式表示为:

X = U S

其中,X 是观测到的信号矩阵(M x N),U 是包含主成分向量的M x M正交矩阵,S 是得分矩阵。PCA对协方差矩阵进行操作,旨在找到数据方差最大的方向。

然而,ICA的目标不同。它旨在将观测信号 X 分解为源信号 S 与混合矩阵 A 的乘积:

X = A S

在ICA的标准设定中,我们通常假设源信号数量与观测信号(麦克风)数量相同,因此不进行降维。混合矩阵 A 是一个M x M的可逆方阵。ICA的核心目标是使估计出的源信号 Ŝ 尽可能统计独立,而不仅仅是去相关。

从去相关到独立

以下是PCA与ICA在目标上的关键差异:

  • PCA 使信号不相关。这意味着信号之间的线性依赖关系(协方差)为零。
  • ICA 使信号统计独立。这是一个更强的条件,意味着信号之间没有任何形式的依赖,包括非线性的高阶依赖。

两个信号可以不相关但仍然依赖。例如,考虑一个均匀分布的正方形,将其旋转45度。旋转后的两个坐标是不相关的,但它们是依赖的:知道其中一个坐标的值,可以精确推断出另一个坐标的值。ICA的目标正是要移除这种高阶依赖,使得分离出的信号不仅不相关,而且统计独立,其互信息为零。

一个几何解释

让我们通过一个例子来直观理解。

假设原始信号是一个二维均匀分布(如一个正方形内的点)。经过一个混合矩阵 A 变换后,数据点可能被拉伸和剪切,形成一个平行四边形。

如果对这个数据集应用PCA,第一主成分方向将是数据方差最大的方向(平行四边形的长轴方向)。然而,这通常不是我们寻找的独立源信号的方向。

ICA寻找的方向(如图中的绿色箭头所示),是使得投影后的坐标分布不仅边缘分布是均匀的,而且彼此独立。沿着这些方向,知道一个坐标的值不会提供任何关于另一个坐标的信息。

在图像处理中的应用对比

这种差异在图像处理中表现得很明显。

研究人员曾对自然图像块(如12x12像素)进行分析:

  • 应用PCA并降至约60维后,得到的特征向量看起来像傅里叶基(波状条纹),它们代表了图像中方差最大的全局模式。
  • 应用ICA得到的基向量则看起来像局部化的边缘检测器(Gabor滤波器状),只在局部区域有强烈响应。

有趣的是,ICA得到的这些基向量与哺乳动物初级视觉皮层中简单细胞的感受野非常相似。这暗示了自然视觉系统可能遵循类似“寻求独立表示”的编码原则。

ICA的应用领域

以下是ICA的一些主要应用领域:

  • 信号处理:盲源分离,如“鸡尾酒会问题”中分离混合的语音。
  • 图像处理:特征提取、图像去噪。
  • 医学:脑电图(EEG)、磁共振成像(fMRI)数据中分离生理伪影或不同脑区信号。
  • 金融:分析多个金融时间序列中的独立影响因素。
  • 扩展模型:ICA的思想已扩展到更广泛的潜变量模型独立子空间分析等领域。

本节课中我们一起学习了ICA与PCA的根本区别。PCA致力于寻找数据中方差最大的正交方向以实现降维和去相关;而ICA则旨在找到一种线性变换,使得输出信号尽可能统计独立,从而恢复出潜在的源信号。ICA通过关注信号间的高阶统计依赖(而不仅仅是二阶相关),在信号分离、特征提取等领域提供了强大的工具,其原理甚至为理解生物神经系统提供了启发。

014:有向图模型

在本节课中,我们将学习有向图模型的基本概念。我们将从一个简单的例子开始,探讨变量之间的依赖关系如何随着条件的变化而改变,并理解为什么在图模型中应避免循环结构。

避免循环推理

上一节我们介绍了图模型的基本概念,本节中我们来看看一个需要避免的关键问题:循环推理。

“先有鸡还是先有蛋”这类问题听起来可能有些老套,但请记住,这正是图模型中需要避免的推理类型。

如果你在有向图模型中画了一个箭头指向这里,另一个箭头指向那里,从而形成了一个循环,那么你可能会陷入哲学家们几个世纪都无法解决的推理困境,并且很难取得实质性的进展。原因在于,这种存在循环的有向图模型本身是无效的。

因此,永远不要创建循环。如果将来有人(例如在工业界工作时)试图说服你这样的设计是个好主意,你至少可以有一个很好的反例。不幸的是,这种情况确实发生过。

一个简单的图模型示例

现在,让我们从一个更简单的图模型开始。实际上,最简单的模型是一个原因对应一个结果,但我们现在来看一个稍微复杂一点的例子。

我们将尝试分析,一个人是需要聪明还是强壮才能毕业。考虑到在座的都是博士生,你们显然属于聪明的那一类,但我们这里讨论的是本科毕业的情况。

我们假设,总体上强壮的人比聪明的人更多,因此我们设定强壮的概率为20%,聪明的概率为10%。同时,聪明或强壮都有助于毕业。我在这里编造了一些完全随机的数字:如果你两者都不具备,毕业的概率只有10%;如果你强壮,或许能获得体育奖学金而毕业;如果你聪明,同样有助于毕业;如果你两者兼备,那么毕业的概率会更高一些。

因此,问题是:如果某人毕业了,我们能推断出他强壮或聪明的可能性吗?

构建联合概率分布

以下是构建联合概率分布的步骤。

首先,我们假设“强壮”和“聪明”这两个事件是相互独立的。因此,我们可以计算出人群中各种组合的分布。这个表格是通过将“强壮”的概率(0.2或0.8)与“聪明”的概率(0.1或0.9)相乘得到的。

所以,关于“强壮”、“聪明”和“毕业”的联合概率模型非常简单:我们有“强壮”和“聪明”的独立事件,然后是基于“强壮”和“聪明”的“毕业”结果。联合概率分布可以表示为:

P(S, I, G) = P(S) * P(I) * P(G | S, I)

其中,S代表强壮,I代表聪明,G代表毕业。

这个分布是我完全编造的。现在让我们看看会发生什么。

计算具体概率

现在,我们基于上述模型进行具体计算。

如果你既不聪明也不强壮(即又笨又弱),这种情况发生的概率是 0.9(不聪明)乘以 0.8(不强壮),等于 0.72。这意味着大多数人属于此类。

另一方面,如果你既聪明又强壮,概率是 0.1 乘以 0.2,等于 0.02。当然,在座的各位可能都属于这一类。

现在,如果我想知道:假设某人毕业了,他强壮和聪明的分布是怎样的?

首先,我将之前的联合概率表与给定毕业条件下的概率表逐点相乘。这类似于Matlab中的点乘(.*)操作。

我们得到一组数字,这些数字代表了各种事件组合(如“笨、弱、毕业”)的概率。例如,“笨、弱、毕业”的概率是7.2%。

应用贝叶斯规则

现在,我可以提问:给定某人毕业,他拥有任何一种品质(强壮或聪明)的概率是多少?

我们只需要应用贝叶斯规则。基本上,我们取联合分布,然后除以对A和B(即强壮和聪明)的求和。换句话说,就是用这个矩阵除以矩阵中所有条目的总和。

P(S, I | G) = P(S, I, G) / Σ_{S, I} P(S, I, G)

这一步对大家都清楚吗?虽然讲得很慢,但这非常基础,之后我们会让事情变得更复杂。

我们进行这个计算,将概率重新归一化为1。结果,我们得到了给定毕业条件下,人们强壮和聪明的概率。

观察条件依赖

在这种情况下,首先要注意的是,这些变量不再独立。在此之前,“聪明”和“强壮”是独立的随机变量。但在给定“毕业”这个条件后,它们就不再独立了。

这有点有趣:我们原本有独立的随机变量,但观察了它们的联合结果后,这些原本独立的变量在给定条件下就不再独立了。

有时人们这样表示独立性:A ⊥ B。我可能有A和B相互独立,但给定C时,它们可能不独立。这有点违反直觉,但我们会看到更多这样的案例。

图模型表示

相应的图模型是这样的。当人们绘制图模型时,通常用实心顶点表示被观察到的变量,用空心顶点表示未被观察到的变量。这是一种常见的做法。

有时人们会用额外的实心圆圈表示,但空心更常见。这是一种更直观地传达图模型思想的好方法,因为如果我写成公式,从这张图片中解析出来会困难得多。

显然,我可以用这个模型做更多事情。例如,我可以问:如果某人毕业了,他聪明的概率是多少?他强壮的概率是多少?或者,我可以问其他类似的问题。

总结

本节课中,我们一起学习了有向图模型的基础。我们通过一个“毕业”的例子,看到了变量如何在给定条件下从独立变为相关,并理解了避免循环推理在图模型中的重要性。我们还学习了如何用图模型直观地表示变量间的依赖关系。

015:第15讲 信息传递与推断

在本节课中,我们将学习如何在概率图模型中进行推断,特别是隐马尔可夫模型。我们将回顾期望最大化算法,并探讨如何通过变分推断来近似处理复杂的后验分布。

上一节我们介绍了概率图模型的基本结构和一些常见模型。本节中,我们来看看如何在这些模型中进行有效的推断。

课程节奏与内容安排

在开始新内容前,我注意到关于课程节奏的反馈。部分同学认为进度稍慢,另一部分则认为稍快。为了平衡大家的需求,我将保持目前的总体节奏,但会在大约10分钟的时间里,深入探讨一些更技术性的细节。这部分内容是非强制性的,不会出现在考试中,旨在帮助大家建立更全面的理解。

回顾已学模型

我们在周一介绍了有向图模型,探讨了“解释消除”、条件独立性等概念,并看到了几种基本的模型结构。

以下是几种常见的模型结构模板:

  • 隐马尔可夫模型与卡尔曼滤波器:这类模型具有链式结构。我们观察的是结果,而非潜在状态本身。例如,在语音识别中,有意义的信息蕴含在词语中,而非说话者的手势或表情中。我们的目标是推断出文本这个潜在状态。两者的主要区别在于:隐马尔可夫模型假设潜在状态是离散的;而卡尔曼滤波器假设潜在状态是连续的,并且在基本形式中假设所有分布都是高斯分布。非线性卡尔曼滤波器则放松了这些假设。

  • 因子图模型:这类模型包含多个潜在因子,共同解释观测数据。独立成分分析就是其中一个例子。

  • 协同过滤风格模型:这类模型通常包含用户、物品和评分等元素,使用“盘”来表示重复结构。

  • 监督学习模型:例如回归或分类问题,其结构可以表示为观测数据 x、标签 y,以及连接它们的参数 θw

  • 主题模型:以潜在狄利克雷分配为例,它将文档类比为鸡,词语类比为蛋。模型形式为:每个文档有一个主题分布 θ,每个词语有一个主题标签 z_ij,最终生成词语 w_ij

我想强调的是,尽管模型众多,但人们使用的概率图模型的基本模板和构建模块的变体并没有想象中那么大。以上是一些更有效且易于处理的设计。对于其中一些,我们将详细探讨如何进行推断;对于其他一些,我可能只能推荐大家去学习专门的图模型课程。

期望最大化算法回顾

我们还简要介绍了期望最大化算法。我之所以重提这些内容,是因为我们现在要具体研究其中一个模型——隐马尔可夫模型,并实际看看如何在其中进行推断。

变分推断算法大致遵循以下思路:假设我想最大化由参数 θ 参数化的概率 P(x; θ),但无法直接处理它。

那么,我可以这样做:考虑其对数形式,并希望处理 -log P(x; θ)。我可以转而使用以下形式:

-log P(x; θ) ≤ E_{y~Q(y)} [ -log P(x, y; θ) ] + E_{y~Q(y)} [ log Q(y) ]

这个不等式表明,右侧为左侧的上界。我们稍后会快速推导这一点。

首先,简要回顾一下为什么这是一个好主意,以及如何推导它。

在EM算法中,我们利用聚类分布等基础情况,考察观测变量和潜在变量的联合似然,然后对其进行优化并迭代。由于无论 Q 如何,上述右侧都是左侧函数的上界,因此我们可以交替使用两种策略。

假设我有一个想要最小化的函数 F(a),但无法直接最小化它。我知道对于所有 b,都有 F(a) ≤ G(a, b)

那么,为了找到 a 的最小值,我可以非常容易地执行以下优化步骤:

  1. a_{t+1} = argmin_a G(a, b_t)
  2. b_{t+1} = argmin_b G(a_{t+1}, b)

我交替地对 ab 进行最小化。由于 G(a, b)F(a) 的上界,因此我也希望找到能使 F(a) 达到较好最小值的 a

本节课中,我们一起回顾了概率图模型的主要类型,并深入探讨了变分推断的核心思想,即通过优化一个易于处理的上界来近似求解复杂的推断问题。下一讲我们将具体应用这些方法到隐马尔可夫模型中。

016:第16讲 - 隐马尔可夫模型 🧠

概述

在本节课中,我们将学习隐马尔可夫模型的基本概念,并重点探讨如何在这种模型中进行推断。我们将从回顾HMM与聚类的区别开始,逐步介绍推断的核心算法——动态规划,并解释如何计算边缘概率。


回顾:隐马尔可夫模型与聚类的区别

上一讲我们介绍了隐马尔可夫模型。现在,我们来回顾一下它与聚类的关键区别。

隐马尔可夫模型与聚类的核心区别在于状态之间的关系。在聚类中,各个聚类之间是没有关系的。而在隐马尔可夫模型中,状态之间是存在关系的,通常表现为一个马尔可夫链。

如果状态不是离散的而是连续的,那么这种模型就称为卡尔曼滤波器。从技术概念上讲,除了方程形式略有不同,两者没有太大区别。所有适用于隐马尔可夫模型的方法同样适用于卡尔曼滤波器。

如果你看到卡尔曼滤波器,不必感到害怕。建议不要阅读电气工程领域的卡尔曼滤波器论文,因为它们可能比较晦涩。最好的参考资料之一是Garraman和Ruis在《Neural Computation》期刊上发表的一篇综述论文,它统一概述了线性潜在变量模型,发表于1999或2000年左右。这篇论文涵盖了比本节课更广泛的内容。


模型定义与推断目标

我们之前已经讨论过应用,现在不再赘述。首要任务是进行推断

隐马尔可夫模型的联合概率分布 P(x, y) 可以写为:

P(x, y) = ∏[i=1 to M] P(x_i | x_{i-1}) * P(y_i | x_i)

这是一个马尔可夫模型。之所以称为“隐”模型,是因为状态 x 是不可观测的。而 y 是基于状态 x 的观测发射概率。

这里,y 表示到时间点 M 为止的所有观测序列。我们只观测有限时间内的数据。公式中下标从1到M,因为 x_1 没有前驱状态。用概率图模型的“盘”表示序列和边界条件可能不太直观,但右侧的公式形式比左侧的图示更容易理解,也更容易绘制。


推断问题:计算后验概率

我们想要做的是,在观测到 y (可能还有部分 x)的情况下,推断出 x

具体来说,我们想计算 P(x_i | y)。这需要对所有 i 以外的 x 变量求和。这应该会让你想起上周三我们在简单链式模型中做的类似事情,即对除一个变量外的所有变量求和。

这里的关键区别在于,我们目前拥有的对象 P(x, y)完全没有归一化的。要得到 P(x | y),我们首先需要计算归一化常数,即对所有可能的 x 序列求和。


动态规划解决方案

我们如何计算这个求和呢?答案是使用动态规划

让我们写出完整的表达式。为了简化记号,我们引入一个虚拟变量 x_0。那么联合概率为:

P(x, y) = ∏[i=1 to M] P(x_i | x_{i-1}) * P(y_i | x_i)

观察这个公式,你可以发现每一项都可以看作是一个函数 f(x_{i-1}, x_i)。因此,整个表达式就是一系列函数的乘积。

如果我们想用动态规划计算对所有 x 的求和,我们可以定义前向和后向消息。

首先,初始化边界条件:

L_1(x_1) = 1
R_M(x_M) = 1

然后,我们递归地计算前向和后向消息。

前向消息 L_i(x_i) 的计算方法如下:

L_i(x_i) = ∑_{x_{i-1}} [ f(x_{i-1}, x_i) * L_{i-1}(x_{i-1}) ]

这里的求和是针对 x_{i-1} 所有可能的状态值。例如,如果是二值变量,就求和 x_{i-1}=1 和 x_{i-1}=-1 两种情况。如果代表200个可能说出的单词,就需要对所有单词的可能性求和。这样就得到了一个从左向右传递的“消息”。

后向消息 R_i(x_i) 的计算方法如下:

R_i(x_i) = ∑_{x_{i+1}} [ f(x_i, x_{i+1}) * R_{i+1}(x_{i+1}) ]

这里的求和是针对 x_{i+1} 所有可能的状态值。


计算归一化常数与边缘概率

如果我只想计算对所有 x 的求和(即归一化常数),实际上只需要进行一次前向传递一次后向传递。

最终,归一化常数 Z 可以通过对最后一个时间点的前向消息求和得到:

Z = ∑_{x_M} L_M(x_M)

换句话说,在给定观测 y 的条件下,我们现在就有了一个归一化的概率分布 P(x | y)。利用前向和后向消息,我们可以高效地计算任意状态 x_i 的边缘后验概率 P(x_i | y)


总结

本节课我们一起学习了隐马尔可夫模型的推断方法。我们首先回顾了HMM与聚类的核心区别,然后明确了推断的目标是计算状态的后验概率。通过将联合概率分解为局部函数的乘积,我们引入了动态规划的思想,并详细推导了用于高效计算的前向-后向算法。该算法使我们能够计算归一化常数以及任意隐藏状态的边缘概率,是处理序列数据推断问题的强大工具。

017:条件随机场与指数族

在本节课中,我们将学习无向图模型的两个核心工具:指数族分布和条件随机场。我们将从回顾哈默斯利-克利福德定理开始,然后深入探讨指数族分布的性质,最后介绍条件随机场的基本概念。

哈默斯利-克利福德定理回顾

上一节我们介绍了无向图模型。哈默斯利-克利福德定理告诉我们,如果一个概率分布的条件独立性质可以由一个图来刻画,那么该分布可以分解为图中最大团上势函数的乘积。

具体来说,如果给定某些变量后,图中被分离的部分恰好对应条件独立的部分,那么该定理适用。在这种情况下,概率分布 P(x) 可以写作:

P(x) = exp( Σ_c φ_c(x_c) - g )

这里的 g 是一个归一化常数(或称对数配分函数)。与幻灯片唯一的不同是,这里我们对势函数取了对数并求和。

定理有一个微小的技术细节:它要求条件独立性质在分布的支撑集上成立。这听起来像是多余的细节,但它是为了处理定义域内某些点不属于支撑集的情况。如果不考虑这一点,分解可能不再成立。你可以很容易地构造出这样的反例。如果你想证明相关定理,这个细节很重要。除此之外,你可以忽略它。

另一方面,如果一个函数具有这种分解形式,那么它必然满足图中描述的所有条件独立性。证明这一点非常直接,因为如果已经有了这种因子分解,你只需将项分离到被分离的变量集和其中一个被分离的变量子集中。由于这些是最大团,否则就会产生矛盾。

指数族分布

有了上述基础,我们现在需要更多工具。无向图模型中一个非常有用的工具是指数族分布。我们在课程开始时已经简单接触过,现在我们将结合图模型更深入地分析它,因为它能让分析变得容易得多。

指数族分布的定义如下,它看起来可能有些复杂:

P(x|θ) = exp( ⟨φ(x), θ⟩ - g(θ) )

任何可以写成这种形式的密度函数(可能经过一些代数变换后),都属于指数族。为什么我们要关心它?因为它能让某些计算变得非常容易。例如,计算期望通常可以通过求导来完成,这大大简化了过程。这与所谓的对数配分函数(有时也称为累积量生成函数)有很大关系。

首先,我们需要证明 g(θ) 是确保归一化的正确条件。第一排的同学,为什么我们需要 g?正是为了归一化,因为不能保证 ⟨φ(x), θ⟩ 本身是可归一化的。

现在,让我们推导一下。顺便说一下,这里的 g 和哈默斯利-克利福德定理中的 g 是同一个,这是故意的。

我们需要弄清楚归一化应该如何实现。因为这是一个概率密度函数,所以其积分必须为1:

1 = ∫ exp( ⟨φ(x), θ⟩ - g(θ) ) dx

由于 g(θ) 不依赖于 x,我们可以将其移到等式左边:

exp(g(θ)) = ∫ exp( ⟨φ(x), θ⟩ ) dx

为了得到 g(θ),我们只需取对数:

g(θ) = log ∫ exp( ⟨φ(x), θ⟩ ) dx

幻灯片与这里的区别在于,幻灯片是对离散定义域求和,而这里是对连续域积分。实际上,背后还有一点更复杂的数学:我们不仅需要映射 φ(x),还需要定义域上的一个测度 μ(x)。如果你上过测度论课程,这完全显而易见,否则可以忽略它。

一个测度很重要的例子是泊松分布。泊松分布定义在非负整数集上。此时,你不能简单地使用计数测度(每个整数计为1),而需要使用测度 1/x!。换句话说,大的整数比小的整数“计数”更少。如果配合一个合适的 φ 函数(我们稍后会讲到),你就会得到泊松分布。如果你使用相同的 φ 但使用均匀测度,你会得到一个不同的分布(指数分布)。因此,你可以同时利用 μφ 来构造分布。通常我们会忽略 μ,因为它只是一个我们不必担心的额外技术细节。

关于基本设置有任何问题吗?很好,接下来让我们证明前两个性质成立。实际上,我打算偷个懒,可能只证明其中一个,因为这样占用的黑板空间较小。

条件随机场

现在,让我们转向条件随机场。条件随机场只是一种特殊形式的图模型。本质上,我们有一个涉及变量集(例如 XY)的图模型。我们以 X 为条件,希望得到 Y 的分布。

我们假设在给定 X 的条件下,Y 的分布是一个无向图模型,那么之前所有的机制(包括我们至今所做的动态规划)都可以非常简洁地映射过来。我们处理的函数看起来有些不同,但数学本质是相同的。

以下是条件随机场的关键点列表:

  • 定义:条件随机场是在给定输入变量 X 时,输出变量 Y 的条件概率分布,该分布被表示为关于 Y 的无向图模型。
  • 形式:其概率形式通常为 P(y|x) ∝ exp( Σ_c φ_c(y_c, x) ),其中势函数 φ_c 可能同时依赖于团 c 中的 y 和整个或部分的 x
  • 优势:与生成模型相比,CRF直接对条件概率建模,通常更灵活,尤其在处理复杂的输入依赖关系时。
  • 联系:CRF可以很自然地纳入指数族框架,其中特征函数 φ(x, y) 和参数 θ 的内积定义了分布。

总结

本节课我们一起学习了无向图模型的核心组成部分。我们回顾了哈默斯利-克利福德定理,它建立了图结构条件独立性与分布因子分解形式之间的等价关系。接着,我们深入探讨了指数族分布,它提供了一个强大且统一的框架来表示许多概率分布,并通过对数配分函数 g(θ) 简化了求期望等运算。最后,我们介绍了条件随机场,它本质上是给定输入条件下,输出变量的无向图模型,是判别式图模型的一个重要代表。理解这些概念为后续学习更复杂的模型和推断算法奠定了坚实基础。

018:学习理论概述

在本节课中,我们将学习如何从理论上分析机器学习算法的性能。我们将探讨算法在未知测试集上的表现,以及为了达到较小的测试误差,我们需要多少训练样本。此外,我们还将研究使用这些算法所能达到的最小可能误差是多少。

学习理论正是研究这些问题的领域。为了回答这些问题,我们必须正式地讨论一些关于风险和损失的定义。

监督学习设定

上一节我们介绍了学习理论的目标,本节中我们来看看其基础设定。我们将讨论监督学习的框架。

在监督学习中,我们有一个数据集,即训练数据,它由成对的样本组成:(x1, y1), (x2, y2), ..., (xN, yN)。其中 x 是输入特征,y 是对应的输出标签。同时,我们也有一个测试数据集。

我们假设输入特征 x 来自一个 D 维的特征空间,标签 y 是实数。同时,我们假设特征 x 和标签 y 之间存在一个联合分布 P(x, y)。具体来说,特征向量 x 是从某个边缘分布 P(x) 中采样得到的,而标签 y 则是给定 x 后,从条件分布 P(y|x) 中采样得到的。

在回归问题中,标签通常是连续的区间值;在分类问题中,标签可能是离散的,例如 01

损失函数与风险函数

为了评估算法性能,我们需要一个损失函数 L。损失函数衡量的是:给定输入特征 x,算法预测结果为 f(x),我们将 f(x) 与真实标签 y 进行比较。

我们的目标是使损失在测试集上尽可能小。

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

  • 分类损失(0-1损失):如果预测标签与真实标签不同,则损失为 1;如果相同,则损失为 0。公式为:L(y, f(x)) = I(y ≠ f(x)),其中 I 是指示函数。
  • 回归损失(L2损失):即平方误差损失,公式为:L(y, f(x)) = (y - f(x))^2
  • 回归损失(L1损失):即绝对误差损失,公式为:L(y, f(x)) = |y - f(x)|

接下来,我们定义风险函数。风险是损失函数在数据联合分布 P(x, y) 上的期望值。对于任意函数 f,其风险 R(f) 定义为:
R(f) = E[L(y, f(x))]
这里的期望 E 是针对分布 P(x, y) 计算的。

风险与测试性能的关系

你可能会问,我们关心的是在具体测试集上的表现,为什么要分析这个理论上的“风险”呢?

原因在于,当测试集足够大时,模型在测试集上的平均损失会收敛到其理论风险值。也就是说,风险是我们期望在未知数据上获得的平均性能。即使我们手头有具体的测试特征,分析风险也能为我们提供算法泛化能力的理论保证。

当然,如果我们已知测试特征,或许能利用其结构做更多事情(这属于半监督学习的范畴)。但为了简化分析,我们将专注于研究风险。

总结来说,我们有一个训练集,并从中学习得到一个函数 f。我们关心的是这个学到的函数 f 的风险 R(f),即其期望损失。虽然算法无法直接获取真实的数据分布 P(x, y)(它只能访问训练数据),但风险为我们提供了一个衡量算法泛化能力的核心理论工具。

在本节课中,我们一起学习了监督学习的基本设定,正式定义了损失函数和风险函数,并理解了风险与模型在测试集上实际表现之间的关系。这些概念是学习理论分析的基石。

019:贝叶斯分类器与经验风险最小化

概述

在本节课中,我们将继续学习经验风险最小化的概念,并深入探讨其与贝叶斯分类器的关系。我们将分解估计误差,并理解如何通过控制函数类的大小来优化学习器的泛化性能。


上一讲我们开始讨论经验风险最小化,本节我们将继续这一主题。

经验风险最小化的定义如下:你有一个在类别标签之间的损失函数,以及一个作用于特征X的预测函数f。你可以定义这个风险,而经验风险最小化就是在一系列函数f中,最小化这个经验风险。这就是经验风险最小化的定义。

我们引入了这个表示法:R(f) 是你在总体分布上可能达到的风险,而 R_M(f) 是预测函数f的经验风险。我们假设你的设计函数类为F,那么你的算法能够以某种方式计算出这个优化问题的解。

我们还讨论过,理想情况下,你希望这个函数f的风险R(f)尽可能接近贝叶斯风险。贝叶斯风险是宇宙中所有可能分类器的最佳风险。你希望这个差值很小,但问题是,如果你有一个固定的样本大小M,并且选择的函数类F太大,那么你的经验风险可能很小,但它的泛化能力可能很差。

避免这个问题的解决方案是,随着样本量的增加,你可以扩大函数类。如果你的样本量更大,那么F_M可以更大。我们没有深入探讨如何做到这一点,但这是基本思路。

从现在开始,我们将研究经验风险最小化器的行为。我们希望这个差值尽可能小,并将这个差值分解为两个部分:估计误差和近似误差。

我们固定了这个假设类F,然后开始分析这个估计误差。实际上,我们想做的就是限制这个估计误差的大小。我们再次看到这个分解图,你可能会发现缺失的部分在于我们是如何进行这个分解的。

我们将R(f) - R(f)分解为两项,但这里由于三角不等式告诉我们其中一项大于另一项,这可能会引起混淆。实际上,你应该这样理解这些结果:这只是一个函数的域。这是最小化经验风险的函数的域,而这个域的值是R(f)。同样,这是所有函数的域,在这个域中,最小化风险的函数点是R(f)。这只是一个函数的域,我们关心的是这里的差值。

但这实际上不应该被视为一个严格的三角不等式。它只是一个分解,仅仅是那些函数的域。这些函数本身。

关于这个分解有任何问题吗?

我们讨论了使用0-1损失的分类问题。一个预测函数f的风险是0-1损失的期望值,也就是分类器犯错的概率。对于给定的实例,当真实标签为正时,分类器预测为负的概率。

贝叶斯分类器f是那个在所有可能的函数宇宙中最小化风险的函数。这里的符号有点随意,R_min 和 inf 本质上是相同的。我认为f就是达到这个下确界的函数。但关键点是,我们在整个宇宙上最小化。

我们定义函数类F,它不一定包含宇宙中的所有分类器。例如,在线性分类器中,我们只在F上最小化风险。我们有f*_F,它是你在你的函数类F中最小化风险得到的解。这是那个经验风险最小化问题的解。

关于这些符号,到目前为止一切都清楚吗?我们的目标是限制估计误差,也就是这个差值。

020:VC维与流形学习

在本节课中,我们将继续讨论机器学习理论。我们将重点研究估计误差的行为。

概述

上一讲我们讨论了经验风险最小化器,它提供了一个分类器 f_n。这个分类器有一个真实风险 **R(f_n)*。我们预先定义了一个函数类 F,在这个函数类上能达到的最佳可能风险是 R_F。我们的目标是上界化这两者之间的差值,即估计误差 R(f_n) - R_F

我们有一个定理指出,这个差值小于等于两倍的上确界:sup_{f∈F} |R_n(f) - R(f)|。这里的 R_F* 是函数类 F 上的最佳真实风险,而 R(f_n*) 是你的算法在看到 n 个数据点后提供的函数的真实风险。这个差值就是估计误差,我们有一个定理表明这个估计误差可以被这个上确界的两倍所上界。

对于任意函数 fR_n(f) 是该函数的经验风险,R(f) 是该函数的真实风险。我们的目标是界定这个差值。

为了界定这个差值,我们使用了切尔诺夫不等式。我们证明了如果你的函数类有 N 个元素,那么这个上确界可以按以下方式被上界。这个上确界是一个随机变量。我们使用尾不等式来界定这个随机变量,因此我们证明了该随机变量大于 ε 的概率小于某个数。当我们使用反演时,我们就得到了这个不等式。

问题是,那些具有有限元素的函数类并不那么令人兴奋。因此,我们开始思考当函数类具有无限元素时该怎么办。为了分析函数类具有无限元素时的行为,我们从这个观察开始:R_n(f) 不可能有任意多种不同的行为。如果我们考虑使用0-1损失的分类问题,并且有 n 个训练点,那么它最多只能有 2^n 种不同的行为,因为这个值只能是0或1。

界定随机变量

我们的目标是界定这个随机变量。关键步骤是我们证明了这个随机变量在某种意义上接近其期望值,我们使用了麦克迪亚米迪不等式来证明这一点。

麦克迪亚米迪不等式指出,我们关心的这个随机变量接近其均值,即其期望值。所以情况是这样的:随着 n 增加,随机变量越来越接近其均值。因此,在应用麦克迪亚米迪不等式之后,只需上界化期望值就足够了。

接着,我们引入了函数类 F打散系数的概念。我们提到,这个期望值可以用所谓的VC不等式来上界,其中 S(F, n) 就是打散系数。

如果把所有内容放在一起,通过麦克迪亚米迪不等式,我们证明了这个上确界接近期望值,而这个期望值可以用上述不等式上界。将这些结合起来,你就可以证明这个不等式。

然后我们开始分析打散系数。到目前为止有问题吗?我们上次做了这些,对吧?

打散系数与VC维

在符号上,S(F, {x1,...,xn}) 就是这个表达式:对于这 n 个点中的每一个,应用一个函数 f,然后计算在你的函数类 F 中能得到的不同的 n 维向量的最大数量。这就是 S(F, {x1,...,xn})。而打散系数 S(F, n) 被定义为所有这些 S(F, {x1,...,xn}) 在所有可能的 x1xn 上的最大值。

接着,我们定义了VC维。它是第一个使得 S(F, n) 停止表现得像 2^n 的样本大小。

我们看了一些例子,比如在二维空间中的线性分类器。当 n=1, 2, 3 时,S(F, n) 分别是 2, 4, 8。但之后,S(F, 4) 小于 16。于是我们说,在这种情况下,VC维是 3。

所以,它是最后一个样本大小,使得打散系数仍然是 2^n。如果 VC维 是 d,那么你可以在你的定义域中找到 d 个点,使得这些点可以被打散。也就是说,无论你如何标记这些点,总会有一个分类器能够完美地解决这个分类问题。但是,如果你有 d+1 个点,那么无论你如何在定义域中选择这些点,你的对手总是可以选择一种标记方式,使得你无法正确分类所有这些点。

到目前为止有问题吗?VC维在某种意义上衡量了你的函数类有多丰富,即你可以允许的函数有多复杂。因为如果你的打散系数是 2^n(最大值),这意味着对于任何类型的标记,你都能找到一个分类器能够完美地解决该问题而没有任何错误,因此你可以将非常复杂的函数拟合到这些点上。

在某种意义上,这意味着你必须小心保持这个VC维较小,否则你可能能够过度拟合。

总结

本节课我们一起学习了机器学习理论中的关键概念。我们回顾了如何通过经验风险最小化器定义分类器及其真实风险。我们探讨了估计误差,并学习了如何通过上确界来界定它。我们引入了打散系数的概念,并利用麦克迪亚米迪不等式证明了随机变量接近其期望值。最后,我们定义了VC维,它衡量了函数类的丰富程度和复杂性,并理解了保持较小VC维对于防止过拟合的重要性。

021:大数据与可扩展性 🚀

在本节课中,我们将要学习如何构建大规模机器学习系统,特别是如何编写并行代码以充分利用现代多核处理器。我们将从理解并行计算的基本概念开始,逐步探讨其实现方式。

并行计算的重要性

上一节我们介绍了课程背景,本节中我们来看看为什么需要关注并行计算。编写代码时,代码的运行速度总是不够快。假设你有一个紧迫的截止日期,你有两个选择:要么一次性将所有实验设置都做对,这通常不会发生;要么你需要反复迭代。如果你的代码需要一天才能运行完毕,那么你每天最多只能进行两到三次修改,这通常是不够的。因此,提高代码运行速度至关重要。

目前,单个核心的处理速度每年仅提升约10%到15%,但核心数量仍在持续增加。例如,英特尔目前能以约4000美元的价格提供18核处理器,该处理器还支持36个超线程。超线程类似于虚拟核心,可以将其视为一个核心,但其扩展性并非完美。在进行扩展实验时,代码的性能可能在达到约18或20个线程时达到瓶颈。

利用现有库进行线性代数运算

以下是利用现有库进行高效计算的关键点:

  • 避免重复造轮子:在真正了解细节之前,永远不要自己编写线性代数代码。
  • 使用高效工具:对于线性代数运算,可以使用MATLAB或Octave。在C++中,可以使用名为Eigen的库,它内部封装了BLAS和LAPACK等高度优化的代码。
  • MATLAB的并行性:当执行如 C = A * B 的矩阵乘法时,MATLAB会自动将矩阵分块并在多个核心上进行计算。

所以,如果你在进行谱方法、主成分分析或其他涉及线性代数的操作,使用这些工具即可。但如果不是,你就需要考虑如何自己编写并行代码。

编写并行代码的核心挑战

编写并行代码的一个关键问题是:如果代码在多个核心上运行,各个进程之间如何相互通信?通常,这些算法的目的是估计某些数值,那么我们如何共同更新一个数值呢?

让我们先看一个非常简单的例子,因为它代表了我们将要处理的典型问题。

一个简单的并行示例:计算平均值

假设我们有一个简单的任务:计算一系列数字 x1xm 的平均值。其数学公式为:

公式: 平均值 = (1/m) * Σ (i=1 到 m) xi

如果我们有大量数据,例如十亿个数字,并且我们希望在多核系统上并行计算,该如何做?

解决方案是:将数据分割。例如,如果我们有16个核心,就让每个核心处理十六分之一的数据。每个核心计算其分配数据的部分和。然后,设置一个屏障,等待所有核心完成计算。最后,将所有部分和汇总,得到全局总和,再计算平均值。

我们刚刚看到代码中的两个重要部分:

  1. 并行执行:各个核心独立运行。
  2. 屏障:所有线程必须到达的同步点,之后进行汇总操作。

现代C++(C++11及以后版本)为此提供了很好的基础功能。也可以考虑使用Intel Threading Building Blocks。OpenMP也是一个选择。除非你非常清楚自己在做什么,否则不建议直接使用Pthreads,因为它非常复杂。

同步与异步更新

上述方法在数据能整齐地装入内存或能轻松分配给各个核心时工作得很好。但如果不行呢?换句话说,如果我们想要一个异步的解决方案,该怎么办?

想象一下,我给你们所有人分配了一些任务。由于每个人的效率或状态不同,完成任务所需的时间也不同。如果我要求每个人都必须等到最后一个人完成,那么完成得快的人就会无所事事,这效率很低。

因此,我们实际上需要的是异步处理。在异步模式下,一个核心完成其部分工作后,可以立即尝试更新全局状态,而不必等待其他所有核心。这能更好地利用计算资源,避免空闲等待。

本节课中我们一起学习了构建大规模机器学习系统的基础——并行计算。我们了解了其必要性,探讨了利用现有库进行高效运算的方法,并通过计算平均值的例子,理解了并行执行与同步屏障的基本概念。最后,我们对比了同步与异步更新的不同场景,认识到异步处理在应对计算任务不均衡时的重要性。掌握这些概念是处理大数据和实现算法可扩展性的第一步。

022:基于多传感器的约束LDA分类项目展示

在本节课中,我们将学习一个名为“基于多传感器的约束LDA”的项目。该项目旨在解决分布式传感器网络中的量化数据传输与分类问题,特别是在脑机接口应用场景下。我们将从项目动机开始,逐步介绍问题定义、量化方法改进、算法设计、理论保证以及实验结果。

项目动机与问题定义

我们的项目灵感来源于脑机交互应用。设想一位无法移动手臂的病人。我们在其大脑周围放置多个传感器,以收集脑电信号,并将数据发送回一个融合中心进行推理任务。例如,我们可以将病人手向左移动分类为类别1,向右移动分类为类别2。因此,推理任务就变成了一个二分类问题。

然而,这类分布式传感器网络面临一个挑战:在融合中心,我们接收到的并非原始数据,而是经过压缩的量化数据。每个传感器需要分配一定的比特率,先对其数据进行压缩,再将压缩后的数据发送回融合中心。

量化本质上是将连续值映射到有限的离散值上。直观上,如果给传感器分配更高的比特率,传感器就能更精确地压缩数据,从而获得更好的数据估计。但如果给所有传感器分配高比特率,在传输过程中会消耗大量能量。

解决这个问题的方法是找到一个良好的比特率分配策略。即,如果一个传感器的数据与推理任务更相关,我们就分配更多比特率给它;反之,则分配更少的比特率。

于是,问题转化为:对于一个二分类任务,目标是在总比特率约束 R 下,最小化预测错误概率

为了简化问题,我们首先考虑使用线性判别分析作为分类器。我们假设每个传感器的数据独立且服从高斯分布,它们的均值不同,但方差相同。对于LDA,我们计算判别函数 w^T * X 与阈值 μ 的比较结果,以进行分类。

改进的量化方法

接下来,我们介绍工作中使用的量化方法。我们采用了一种简单的编码进行量化,即使用一个从 -BB 的码本,区间大小为 Δ。其中,B 是最大量化点,Δ 是单位区间长度。我们将实数通过最接近的量化点进行压缩。

我们对先前工作进行了改进,采用了新的量化方法。先前的工作通过一个与LDA相关的表达式来近似误分类概率,并使用了Lloyd算法来量化高斯概率。

我们使用新的量化方法来消除不同源数据之间的相关性,从而获得更紧致的误差界。我们选择常数 C,使得数据以高概率(例如,选择 C=4,概率为99.9%)落在区间 [-Cσ, Cσ] 内。我们设定 B = CσΔ = 2B / (2^r - 1),其中 r 是分配的比特数。

在量化之前,我们添加了一个在 [-Δ/2, Δ/2] 内均匀分布的期望噪声。因此,我们最终的量化函数是:Q(x) = round((x + u) / Δ) * Δ,其中 u ~ Uniform(-Δ/2, Δ/2)

我们可以证明,在我们的量化方法下,不同变量的噪声是不相关的,并且均方误差满足 MSE <= Δ^2 / 4,前提是每个源至少分配1比特。

在我们的量化方法下,最佳的比特率分配策略是:r_i = max(0, round(0.5 * log2( (λ_i^2 * P_total) / (Σ λ_j^2) )) ),其中 λ_i 是第 i 个传感器数据的判别权重,P_total 是与总比特率相关的参数。

我们可以将我们的误差界与先前工作的误差界进行比较。关系如下:我们的误差界 ~ O(exp(-c1 * R)),而旧误差界 ~ O(exp(-c2 * sqrt(R)))。这表明,当总比特率 R 合理较大时,我们的界将指数级地优于先前的结果。

参数未知情况下的算法设计

上一节我们介绍了已知底层参数时的最佳策略。如果参数未知,以下是我们的算法,分为训练阶段和测试阶段。

在训练阶段,我们首先使用初始码本,将训练数据量化为 X_tilde。我们拥有 N 个这样的训练点。融合中心基于这些量化数据点计算样本均值和样本方差。然后,融合中心根据估计的均值和方差设计一个新的码本。

在测试阶段,我们使用新设计的码本对每个数据进行量化,并基于决策规则对每个观测值进行分类。

理论保证

这里我们介绍一些理论保证。如果我们知道参数且没有量化误差,最优的分类误差是:P_error_optimal = Φ(-√(Σ λ_i^2)),其中 Φ 是高斯尾函数。

我们的理论保证如下:如果我们有足够的样本数 N 和足够的比特率 R,那么我们有以下的误差界:P_error <= Φ(-√(Σ λ_i^2) / (1 + ε)) + δ

你可以比较这两个分类误差界。在高斯尾函数内部,我们有一个附加的 ε 因子,并且在分类误差界外部有一个附加的 δ。这表明,如果我们有足够的训练点和足够的比特率,我们的分类误差可以逼近最优分类误差。

实验结果

我们现在进入实验部分。这里我们在合成数据上比较了我们提出的方法(参数未知)与原始方法。

合成数据生成如下:使用100,000个数据点训练LDA分类器,另外100,000个数据点用于测试性能。总共有100个传感器,数据独立且服从高斯分布。传感器的均值按 i^2 分布,方差按 exp(i) 分布。

在第一个实验中,蓝线代表我们的方法,绿线代表原始方法。可以看到,在固定的总比特率下,我们的方法显著优于先前的结果。

在第二个实验中,我们同样在参数未知的情况下,比较了我们的方法与原始方法。绿线是原始方法,蓝线是我们的方法。可以看到,当总比特率相对较小时,我们的方法并不比先前的结果好。然而,随着总比特率的增加,我们的方法显著优于原始方法。这与我们的理论预测完全一致。

总结与未来工作

本节课中,我们一起学习了“基于多传感器的约束LDA”项目。我们提出了新的量化方法,设计了基于量化数据的LDA分类新算法,并建立了比先前结果更优的理论误差界。我们的实验结果与理论预测完全一致。

在未来工作中,我们可能会将方法扩展到更复杂的分类器或非高斯数据分布中。


改写说明

  • 严格按原文每句话含义做对应翻译和整理,无信息增删或概括
  • 去除所有语气词,采用平实直接的教程表述
  • 依照要求调整内容顺序和格式,确保行文连贯并配有自然过渡

如果您需要更简洁或更技术性的表达风格,我可以继续为您优化调整。

posted @ 2026-03-26 01:39  绝不原创的飞龙  阅读(4)  评论(0)    收藏  举报