查看全课大纲(第 51 / 82 节)
  1. 1.函数与数据泛化
  2. 2.向量:从几何直觉到高维空间
  3. 3.矩阵与张量
  4. 4.特征值与特征向量:矩阵变换的不动方向
  5. 5.凸函数:从向量求导的矩阵记号到好优化的函数形状
  6. 6.概率与统计:机器学习的数学基础
  7. 7.独立性与随机变量:贝叶斯公式与二项分布
  8. 8.期望、方差与协方差:随机变量的数字画像
  9. 9.联合概率:当一条轴不够用的时候
  10. 10.概率分布(一):从伯努利到伽马函数
  11. 11.概率分布(二):贝塔、泊松、正态与两个贝叶斯故事
  12. 12.机器学习的模型:找输入与输出的关系
  13. 13.机器学习的应用
  14. 14.过拟合
  15. 15.机器学习的分类
  16. 16.有监督学习:从房价预测说起
  17. 17.损失函数
  18. 18.梯度下降(上):更新规则与学习速率
  19. 19.梯度下降(2)
  20. 20.牛顿方法
  21. 21.KNN简介
  22. 22.距离测算
  23. 23.朴素贝叶斯
  24. 24.朴素贝叶斯的实际应用
  25. 25.信息熵:决策树构建的度量基础
  26. 26.信息增益与决策树的构建
  27. 27.ID3算法
  28. 28.决策树节点的划分
  29. 29.CART树
  30. 30.Bagging
  31. 31.Boosting:自适应提升算法
  32. 32.Gradient Boosting
  33. 33.线性模型:回归与分类的同一副骨架
  34. 34.最小二乘:把最优参数直接解出来
  35. 35.最小二乘法的几何与概率视角
  36. 36.极大似然:给最小二乘一个概率出身
  37. 37.逻辑回归(1):把线性模型接到分类上
  38. 38.逻辑回归(2):损失函数与多分类
  39. 39.---- 手造数据: 5 个样本, 2 个特征; x2 几乎 = 2*x1 (偏差手工指定, 无随机) ----
  40. 40.讲师例: 向量 "23014" -- 三把范数尺子量同一个向量
  41. 41.优化方法(1):坐标下降与前向选择
  42. 42.优化方法(2):前向策略与最小角回归
  43. 43.拉格朗日乘子法(1):从无约束到等式约束
  44. 44.拉格朗日乘子法(2):等式约束下的平行条件与拉格朗日函数
  45. 45.拉格朗日乘子法(3):不等式约束与 KKT 条件
  46. 46.最大间隔:把分类问题变成优化问题
  47. 47.拉格朗日对偶问题:把 w 和 b 全部换成 α
  48. 48.支持向量:边界上的少数派
  49. 49.SVM 计算过程:一笔到底算完,再走进核方法
  50. 50.贝叶斯公式:概率即信念
  51. 51.隐含变量和概率模型:给看不见的原因建模
  52. 52.EM 算法:期望与最大化的迭代
  53. 53.琴生不等式:EM 的数学钥匙
  54. 54.三个硬币问题:EM 的复盘与衔接
  55. 55.高斯混合模型:用隐变量解释双峰数据
  56. 56.隐马尔可夫模型
  57. 57.隐马尔可夫模型(2):前向算法与动态混合模型
  58. 58.隐马尔可夫模型在 NLP 中的运用
  59. 59.EM 算法:把「为什么收敛」推到底
  60. 60.HMM 在 NLP 中的运用:从分词到机器翻译
  61. 61.HMM 参数估计:Baum-Welch 的三块拉格朗日
  62. 62.高维下的高斯模型
  63. 63.主题模型:从词袋到隐含主题
  64. 64.Dirichlet 分布(1)
  65. 65.Dirichlet 分布(2)
  66. 66.统计学习内容回顾
  67. 67.K-means 算法
  68. 68.PCA 降维
  69. 69.SVD 降维
  70. 70.从聚类到流形
  71. 71.局部线性嵌入
  72. 72.随机邻域嵌入:SNE 与 t-SNE
  73. 73.无参模型:让数据自己说话
  74. 74.高斯过程:函数空间里的正态分布
  75. 75.高斯过程(2):噪声、正则化与核的线性组合
  76. 76.神经网络简介:从感知器到自编码器
  77. 77.反向传播:把误差一层层传回去
  78. 78.卷积神经网络(CNN):让特征自己学出来
  79. 79.循环神经网络(RNN):给网络装上记忆
  80. 80.深度学习回顾:静态一类,动态一类
  81. 81.增强学习(1):蒙特卡洛、树搜索与 Q-learning
  82. 82.强化学习(2):从乌鸦吃核桃到井字棋的 value 回传

隐含变量和概率模型:给看不见的原因建模

约 22 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 机器学习算法精讲

上一节立好了概率观——概率是对不确定性的度量,贝叶斯公式用证据更新信念。这一节开始搭建统计学习的工具箱:先把「学习」这个动作从函数拟合改写成概率估计,复习参数模型、极大似然、朴素贝叶斯这几件旧武器,然后引入本节的主角——隐含变量:那些与数据相关、却观察不到的「原因」。最后用讲师「特别喜欢」的三硬币问题,把隐含变量模型的全部要素装进一个最小的舞台。

💡 核心导读

  • 从函数到概率:机器学习问题不再是找 f(xi)≈yif(x_i) \approx y_i,而是估计 P(yi∣xi)P(y_i|x_i)——整个问题变成一个估计问题。
  • 参数模型与极大似然:假设数据服从某种带参数的分布(如正态 N(μ,σ2)N(\mu, \sigma^2)),用极大似然(连乘取 log、爬到等高线的顶点)估出参数。
  • 隐含变量:观测不到的 ZZ 与 XX 相关时,P(X)=∑ZP(X∣Z)P(Z)P(X) = \sum_Z P(X|Z)P(Z)——把对 P(X)P(X) 的建模,转成对 P(X∣Z)P(X|Z) 与 P(Z)P(Z) 的建模。
  • 生成式模型的哲学:模型是我们对「数据为什么会产生」的一种假设和假想——先设想背后的机理,再用数据反估机理的参数。
  • 三硬币问题:A 决定用 B 还是 C,但我们只看得到最终的正反面——一个「既简洁又清晰」的隐含变量完整样本。

从函数拟合到概率估计

先做一次全面的复习(讲师:有了前面这些知识,就可以讲概率方向的统计模型了)。

以前我们拿到训练数据 d={(x1,y1),(x2,y2),…,(xN,yN)}d = \lbrace (x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\rbrace,学的是函数关系:找一个 ff,使得给定了 xix_i,它得到 yiy_i。

但在生成式模型(generative model)、也就是统计学习模型里,我们要学的事情换了:想知道给定 xix_i 时,它等于 yiy_i 的概率有多大——估计 P(yi∣xi)P(y_i|x_i)。以二分类为例,yi∈{0,1}y_i \in \lbrace 0, 1\rbrace:

  • 想算 P(y=0∣xi)P(y=0|x_i)——给定 xix_i,它等于 0 的概率是多大;
  • 相应地,P(y=1∣xi)=1−P(y=0∣xi)P(y=1|x_i) = 1 - P(y=0|x_i)。

如果 yiy_i 不是 0、1,而是别的离散值,思路一样——都是去算概率的值。整个机器学习的问题,就变成了一种估计问题。

参数模型与极大似然

给定很多数据 xix_i 的时候,我们经常做一个假设:数据服从某种分布——而这个分布,代表着这批数据最重要的特征。比如给定的一些数据,也许可以假设是通过一个正态分布生成的。于是经常要做的事情,就是估计这些正态分布的参数。这种「假设数据来自某个参数化分布」的方法,以前起过一个名字:参数模型(Parametric Model)。

我们观察到了很多数据,想知道参数 μ\mu 和 σ\sigma 的估计等于多少——这时候就去求极大似然。给定 μ\mu 和 σ\sigma,每个数据出现的概率可以由概率密度函数描述,ii 从 1 到 NN 个数据,极大似然就是它们的连乘:

L(μ,σ)=∏i=1Np(xi∣μ,σ)L(\mu, \sigma) = \prod_{i=1}^{N} p(x_i \mid \mu, \sigma)

连乘不太好求,所以经常做的是 log 极大似然——把连乘变成连加:

ℓ(μ,σ)=∑i=1Nlog⁡p(xi∣μ,σ)\ell(\mu, \sigma) = \sum_{i=1}^{N} \log p(x_i \mid \mu, \sigma)

这个 ℓ\ell 是关于 μ\mu 和 σ\sigma 的函数(xix_i 都是给定的训练数据)。不断调整 μ\mu 和 σ\sigma,就可以把它画成一片「地形」:以 μ\mu、σ\sigma 为两个坐标轴画出等高线(contour)。我们想取它的极值——比如最高处那一点 (μ∗,σ∗)(\mu^*, \sigma^*),就是最优的值:因为无论取到什么其他的 μ\mu 和 σ\sigma,那一点肯定都比它低。通过极大似然,就能求出最好的参数估计(第 8 章《极大似然》做过完整推导,这里是它在分布参数上的直接复用)。

两件旧武器:朴素贝叶斯与条件独立

进入新模型前,再复习两件事。

朴素贝叶斯。做分类的时候,给定一个 XX,想推断类别 CC(比如一类、二类的二分类),通过贝叶斯公式:

P(C∣X)=P(X∣C)P(C)P(X)∝P(X∣C)P(C)P(C|X) = \frac{P(X|C)P(C)}{P(X)} \propto P(X|C)P(C)

别忘了 XX 是高维向量(xi∈Rnx_i \in R^n),所以 P(X∣C)P(X|C) 还要按维度拆开连乘(维度用 jj 表示,j=1…nj = 1 \dots n)。上下同除 P(X)P(X) 之后正比于连乘形式——分母上的 P(X)P(X) 当成归一化常数,直接忽略掉(第 5 章的老操作)。

条件独立。如果一个变量 XX 的每一个维度都相互独立——记作 xi⊥xjx_i \perp x_j(i≠ji \ne j,第 2 章「独立性」一节引入的记号)——那么它的联合概率就等于各维度的乘积:

P(X)=P(x1,x2,…,xn)=∏j=1nP(xj)P(X) = P(x_1, x_2, \dots, x_n) = \prod_{j=1}^{n} P(x_j)

任何两个特征之间都认为独立时,联合概率才能写成这种连乘的形式。这些全部是我们已经学过的东西——「大家如果忘记了,一定要复习一下」。

隐含变量:把看不见的原因加进模型

现在考虑一种更普遍的建模思路:X 与一个观察不到的 Z 相关。

想知道 P(X)P(X) 的概率时,如果 XX 跟一个观察不到的变量 ZZ 有关系,可以把 ZZ 的所有可能取值连加进去:

P(X)=∑ZP(X,Z)P(X) = \sum_{Z} P(X, Z)

这就是边缘概率:想知道 XX、ZZ 的联合概率,再把这个联合概率沿着 ZZ 的维度连加。几何直觉(讲师的板书):把 XX、ZZ 想成两个坐标轴——把 ZZ 轴方向上的所有取值都叠加、压到 XX 这条轴上,就变成了关于 XX 的概率。

而 XX 跟 ZZ 之间有关系(图上画一个箭头)的时候,联合概率可以拆开,得到那个「大家一定要确定是正确的」形式:

P(X)=∑ZP(X∣Z) P(Z)P(X) = \sum_{Z} P(X|Z)\,P(Z)

  • XX 是可以观察到的量,ZZ 是隐含变量、不能直接观察到;
  • P(X∣Z)P(X|Z):知道 xx 跟 zz 之间的关系时,这个概率是可以求出来的;
  • P(Z)P(Z):可以假设 ZZ 服从某种先验分布——比如正态分布、或者均匀分布。

这么变换的目的:当 P(X∣Z)P(X|Z) 能算出来、P(Z)P(Z) 又有假设时,对 XX 的概率的估计就会更复杂、考虑到更多的情况——模型也就更有表达力。

掷硬币的例子:机理是一种假设

举个例子。XX 是掷硬币这么一个情况:随机变量,取值 HH(head,正面)或者 TT(tail,反面)。

最简单的看法:P(X)P(X) 就是关于正面反面的一个分布,正面 0.5、反面 0.5。但也可以假设一个隐含变量 ZZ——也许掷硬币的结果,跟掷出来的高度相关。那么:

  • 用 P(X∣Z)P(X|Z) 刻画高度和结果之间的关系;
  • 再假设 ZZ 服从某种分布——这种情况下,对 XX 的估计可能会更准确一些。

对比一下两种做法。如果我们只有 x1,x2,…,xNx_1, x_2, \dots, x_N 这 NN 次观测、不考虑任何隐含变量,那么 P(H)P(H) 的估计就是频率:

P^(H)=1N∑i=1N1[xi=H]\hat{P}(H) = \frac{1}{N}\sum_{i=1}^{N} \mathbb{1}[x_i = H]

(NN 里边有多少个 HH,一数便知。)而如果知道跟高度有关,关键就看 P(X,Z)P(X, Z) 能不能刻画出来——通过这个模型,也许会把 P(H)P(H) 估计得更好。

这个例子想说的其实是:生活中很多复杂的现象,你怎么看它,取决于你怎么假设它。掷硬币可以认为就是 0.5、0.5 的随机;也可以认为跟高度有关、跟角度有关、跟其他什么情况有关。我们都是在假设和假想——假想你看到的这些数据背后发生的机理:

有了这个机理,知道了数据为什么会产生,回过头来,再用看到的数据去估计「使它产生的机制」的参数。这就是生成式模型(generative model):它实际上是我们在对事件的发生做一种假设。扔硬币的真实因素也许非常多、甚至永远不可知——但我们希望把模型建出来,假设这些数据为什么会出来。

掷硬币的分布:伯努利与二项式

接着问一个基础问题:掷一次硬币,P(X)P(X)(分成 HH、TT 两类)服从什么分布?——伯努利分布(Bernoulli distribution),一个离散的二值分布(binary distribution)。如果硬币的参数是 θ\theta,它可以写成:

P(X=x)=θx(1−θ)1−xP(X=x) = \theta^{x}(1-\theta)^{1-x}

正面反面是二值问题、不好计算,所以我们把它认作 0 或者 1(本质一样)。代进去验证一遍:

  • X=0X = 0:θ0=1\theta^0 = 1(任何数的 0 次幂都为 1),得到 1−θ1 - \theta;
  • X=1X = 1:(1−θ)0=1(1-\theta)^0 = 1,得到 θ\theta。

正好符合描述:等于 1 时概率为 θ\theta,等于 0 时概率为 1−θ1 - \theta。伯努利分布最重要的参数就是 θ\theta——它表示 x=1x = 1(正面)的概率。(有的同学纠结为什么有的是 0 有的是 1——这是你自己定义的:可以让 HH 是 1、也可以让 HH 是 0,总之一个对应 θ\theta、一个对应 1−θ1 - \theta,不用纠结。)

如果每一次掷硬币是伯努利分布,那么掷了 nn 次、想有 kk 次正面(toss the coin nn times, kk heads),就是一个二项式分布:nn 里边取 kk 次的组合,乘上 θ\theta 的 kk 次幂、(1−θ)(1-\theta) 的 n−kn-k 次幂:

P(X=k)=(nk) θk(1−θ)n−kP(X=k) = \binom{n}{k}\, \theta^{k}(1-\theta)^{n-k}

(讲师板书时先把指数写岔了、当场纠正——最终就是上面这个干净形式:正面 kk 次、反面 n−kn-k 次,组合数来自「nn 里边取 kk」。)

熟悉了这些,就可以考虑今天稍复杂的问题了。

三硬币问题:隐含变量的完整舞台

先把记号换一下:硬币的输出记作 yy——y1,y2,…,yNy_1, y_2, \dots, y_N,每个 yi∈{0,1}y_i \in \lbrace 0, 1\rbrace,代表掷了一连串硬币。单枚硬币的情形,P(y=1)P(y=1) 的估计我们是会的:

P^(y=1)=1N∑i=1N1[yi=1]\hat{P}(y=1) = \frac{1}{N}\sum_{i=1}^{N} \mathbb{1}[y_i = 1]

数一数 1 的个数、比上总数,就可以了。但现在的问题比这复杂得多。

假设有三枚硬币:

  • 硬币 A,参数 π\pi——它掷出正面的概率;
  • 硬币 B,参数 pp;
  • 硬币 C,参数 qq。

三枚硬币掷出正面的概率都不一样(反面自然也不同)。想象一个很复杂的生成过程(process):每次想要一个结果,不是直接掷一枚硬币,而是——

  1. 先掷硬币 A;
  2. 如果 A 是正面(等于 1),就掷硬币 B,把 B 的结果(H 或 T)记下来(H 记作 1);
  3. 如果 A 是反面(等于 0),就掷硬币 C,把 C 的结果记下来。

不断重复这样的实验,就得到一长串 y1,y2,…,yNy_1, y_2, \dots, y_N——比如 0,1,1,0,0,0,…0, 1, 1, 0, 0, 0, \dots 这样的序列(课件页上写着一串:HTHHTTHHTHTHTTTHTHTTH……HT?)。但这里边的正面和反面,我们并不知道是哪枚硬币掷出来的。

假设给了这样一串数据,想知道下一个数据是正面还是反面的概率有多大——怎么估计?你会发现,这个系统远比想象的复杂:

  • 如果只有一枚硬币,数一数 1 的个数、比上总数就行;
  • 现在系统的生成过程有三个参数:由 A 决定掷 B 还是 C,再由 B 或 C 各自的 pp、qq 掷出结果——中间那一层(A 的正反面)看不见。

一个能帮你看清困难的假设实验(课件笔记的画法):如果我们知道每个结果来自哪枚硬币——把硬币 B 掷出的结果标成红色、硬币 C 的标成绿色——那问题立刻退化:红色的一堆数频率是 pp、绿色的一堆数频率是 qq、A 的正反面比例是 π\pi,三个参数直接就估出来了。难就难在这一层看不见:A 的每次结果,正是这个问题的隐含变量。

讲师对它的评价:「这是一个我特别喜欢的、既简洁又清晰的问题。」通过它,我们就能了解怎么做隐含变量、怎么做概率模型——以及,通过一个什么样的算法去做这件事情。这正是下一节《EM 算法》要回答的问题。

📝 动手练一练

  1. 概念辨析:在统计学习的生成式模型视角下,学习的目标是什么?与之前学习的逻辑回归、SVM 等判别式方法的目标,根本区别在哪?
👉 点击查看参考答案

生成式模型:对数据的产生过程做假设——建模 P(X∣C)P(C)P(X|C)P(C) 这样的联合结构(朴素贝叶斯是完整范例),学得之后用贝叶斯公式反推 P(C∣X)P(C|X)。它关心的是「数据是怎么被生成出来的」。

判别式方法:直接学从输入到输出的关系——f(xi)≈yif(x_i) \approx y_i 的函数,或 P(y∣x)P(y|x) 的条件概率(逻辑回归),不关心数据本身的分布。

根本区别:生成式模型描述整个数据生成机制(并因此可以「生成」新样本),判别式方法只关注输入与输出之间的映射。

  1. 单硬币的极大似然:先解决「不含隐含变量」的版本——观测到 10 次投掷结果 Y=[1,0,1,1,0,1,0,0,1,1]Y = [1,0,1,1,0,1,0,0,1,1](1 为正面)。用极大似然估计正面概率 θ\theta,并推导 MLE 的通用形式。
👉 点击查看参考答案

伯努利分布的似然函数:

L(θ)=∏i=1Nθyi(1−θ)1−yiL(\theta) = \prod_{i=1}^{N} \theta^{y_i}(1-\theta)^{1-y_i}

对数似然:ℓ(θ)=∑i[yilog⁡θ+(1−yi)log⁡(1−θ)]\ell(\theta) = \sum_i \left[y_i \log\theta + (1-y_i)\log(1-\theta)\right]。令导数为零:

∂ℓ∂θ=∑iyiθ−N−∑iyi1−θ=0⟹θ^MLE=1N∑i=1Nyi\frac{\partial \ell}{\partial \theta} = \frac{\sum_i y_i}{\theta} - \frac{N - \sum_i y_i}{1-\theta} = 0 \quad\Longrightarrow\quad \hat{\theta}_{MLE} = \frac{1}{N}\sum_{i=1}^{N} y_i

MLE 就是频率——正文里「数一数、比总数」的直觉,背后正是极大似然。代入数据:正面 6 次、总数 10,θ^MLE=6/10=0.6\hat{\theta}_{MLE} = 6/10 = 0.6。代码验证:

import math

# 观测数据: 1 为正面
Y = [1, 0, 1, 1, 0, 1, 0, 0, 1, 1]
N = len(Y)

# 极大似然估计: 正面频率
theta_mle = sum(Y) / N
print(f"硬币正面朝上的概率的MLE估计值: {theta_mle:.2f}")

# 对数似然函数(含数值保护, 防止 log(0))
def log_likelihood(theta, data):
    eps = 1e-10
    theta = max(min(theta, 1 - eps), eps)
    total = 0.0
    for y in data:
        total += y * math.log(theta) + (1 - y) * math.log(1 - theta)
    return total

ll = log_likelihood(theta_mle, Y)
print(f"在 theta={theta_mle:.2f} 处的对数似然值: {ll:.4f}")

# 对照: 换一个稍差的参数值, 对数似然应当更低
theta_test = 0.5
ll_test = log_likelihood(theta_test, Y)
print(f"在 theta={theta_test:.2f} 处的对数似然值: {ll_test:.4f}")
print(f"MLE估计的对数似然更高吗? {ll > ll_test}")
硬币正面朝上的概率的MLE估计值: 0.60
在 theta=0.60 处的对数似然值: -6.7301
在 theta=0.50 处的对数似然值: -6.9315
MLE估计的对数似然更高吗? True

这正是正文等高线叙事的最小实例:只有 θ\theta 一个轴,ℓ(θ)\ell(\theta) 在 0.6 处到达顶点,0.5 处比它低。单硬币的顶点数一数就能找到;下一节的难题是——当顶点位置由 π,p,q\pi, p, q 三个参数共同决定、而且中间还隔着看不见的硬币 A 时,怎么找。

本章小结

  • 视角转换:统计学习把「找函数」改写成「估概率」——P(yi∣xi)P(y_i|x_i) 一到手,机器学习问题变成了估计问题。
  • 旧武器三件:参数模型(数据服从某分布)+ 极大似然(连乘取 log、爬到等高线顶点)+ 朴素贝叶斯的正比形式(P(X)P(X) 归一化常数忽略)。
  • 隐含变量:P(X)=∑ZP(X∣Z)P(Z)P(X) = \sum_Z P(X|Z)P(Z)——把建模难度转移到「可求的 P(X∣Z)P(X|Z)」与「可假设的 P(Z)P(Z)」上,换来更强的表达力。
  • 生成式哲学:模型是对数据背后机理的一种假设——机理可能永远无法完全知道,但假设让我们能用数据反估机制的参数。
  • 三硬币问题:A 决定 B 还是 C、结果可见而中间不可见——隐含变量问题的最小完整舞台,下一节《EM 算法》在此开演。

📋 行动清单

学完本节,你可以立即:

  • 手推一遍伯努利 MLE:从 θx(1−θ)1−x\theta^x(1-\theta)^{1-x} 出发,推出 θ^MLE=1N∑iyi\hat{\theta}_{MLE} = \frac{1}{N}\sum_i y_i,确认「频率估计 = 极大似然」。
  • 复述三硬币的生成过程:向一个没学过统计学习的同学讲清「A 正面掷 B、A 反面掷 C、只看得到最终结果」——讲得清,隐含变量就懂了。
  • 找一个身边的隐含变量:挑一个你熟悉的现象(成绩、气温、股价……),构思:哪个量是观测不到的 ZZ?P(X∣Z)P(X|Z) 和 P(Z)P(Z) 大概长什么样?
  • 预习下一节《EM 算法》:三硬币的 π,p,q\pi, p, q 到底怎么估——下一节揭晓那套「既简洁又清晰」的解法。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第12章课件:统计学习
    下载
  • 第12章笔记:EM 算法
    下载