查看全课大纲(第 36 / 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 回传

极大似然:给最小二乘一个概率出身

约 11 分钟

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

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

上一节结尾埋了一个问题:把残差建模成 ε∼N(0,σ2)\varepsilon \sim \mathcal{N}(0, \sigma^2) 的噪声之后,“平方损失凭什么合理”就等在前面了。本节兑现这个承诺——在正态噪声假设下,线性回归的极大似然估计恰好就是最小二乘解。我们先复习极大似然的一般流程,再把线性函数”装进”正态分布里,最后用一行推导把两种目标焊在一起。从此,最小二乘不再是拍脑袋选的,它是概率假设的必然产物。

💡 核心导读

  • 正态噪声假设:点到拟合线的距离服从正态分布——距离小的概率大、特别大的概率特别小,这是全部推导的地基。
  • 复习极大似然:参数 θ\theta(换成 μ\mu 与 σ\sigma)→ 联合概率 → 独立则连乘 → 乘积都是小数,取对数变加和。
  • 关键一步:沿整条直线每个点扣一个固定 σ\sigma 的正态”小碗”,把 yi−θTxiy_i - \theta^Tx_i 这个线性误差写成正态分布的一部分。
  • 等价性:log⁡L(θ)=−12σ2∑i(yi−θTxi)2+常数\log L(\theta) = -\frac{1}{2\sigma^2}\sum_i (y_i - \theta^Tx_i)^2 + \text{常数}——似然最大,就是平方和最小。
  • 小碗扣糖豆:θ\theta 控制线的位置,θ\theta 不对碗就全扣歪;θ\theta 合适,每个小碗都稳稳扣住数据。

从误差到假设:距离的概率画像

给定一个线性方程、给定数据,我们想要最好的线性拟合。但只要动手做拟合就会发现:数据与线之间总会有误差。与其回避,不如正面描述它——用概率的形式。

我们做一个基础假设:这些误差 eie_i(点到当前最近距离上的偏离)服从正态分布。这个假设很符合直觉:距离小的,一般都很小;特别大的距离,概率会特别小——正是正态分布”中间高、两头低”的形状。

有了这个假设,接下来就看:怎么把”极大似然”与”最小二乘里减少 cost function”这两件事统一起来。

先复习:一般的极大似然长什么样

讲师先把极大似然的一般流程过了一遍(第 5 章朴素贝叶斯讲 MAP 与 log trick 时已经见过同款操作)。

给定一组数据 x1,x2,…,xNx_1, x_2, \dots, x_N(这里 xx 是一维的,所以不写得那么啰嗦,x1x_1 到 xNx_N 代表 NN 个数)。我们认为它们服从正态分布——以均值 μ\mu、方差 σ2\sigma^2 为参数的随机变量。把参数记作 θ\theta,则 θ\theta 就是 (μ,σ)(\mu, \sigma):观察到这组数据的联合概率,是给定 θ\theta 时的条件概率,而它服从正态——把正态的概率密度函数(第 2 章的老朋友)代进来即可。

如果假设这些数据之间相互独立(做朴素贝叶斯时也是这么假设的),联合概率就拆成每一个概率的乘积:

L(θ)=∏i=1Nf(xi; μ,σ)L(\theta) = \prod_{i=1}^{N} f(x_i;\ \mu, \sigma)

极大似然的目标:调整 θ\theta,使这个乘积最大。但每个 ff 都是小数,越乘越小、算起来也麻烦——老 trick 登场:取对数,乘积变加和:

ℓ(θ)=log⁡L(θ)=∑i=1Nlog⁡f(xi; μ,σ)\ell(\theta) = \log L(\theta) = \sum_{i=1}^{N} \log f(x_i;\ \mu, \sigma)

调整 θ\theta 使对数似然 ℓ(θ)\ell(\theta) 最大。到这一步为止,都是复习。

把线性函数装进正态分布

现在是关键一步,讲师给了一个非常好用的画面:在这条直线上,每一个点都扣着一个同样大小(固定 σ\sigma)的正态分布小碗。

给定任何一个 xix_i:它的期望值由线性函数给出——xix_i 乘上 θT\theta^T,就是线性组合 θTxi\theta^Tx_i;而观测到的是 yiy_i。把两者之差 yi−θTxiy_i - \theta^Tx_i 放进正态密度函数的指数位置,就构造出一个以 θTxi\theta^Tx_i 为中心的正态分布:

yi∣xi; θ  ∼  N(θTxi, σ2)y_i \mid x_i;\ \theta \;\sim\; \mathcal{N}(\theta^Tx_i,\ \sigma^2)

f(yi)=12πσ2exp⁡(−(yi−θTxi)22σ2)f(y_i) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i - \theta^Tx_i)^2}{2\sigma^2}\right)

看清楚这个函数的两部分:前面的系数部分都是固定的,真正随 θ\theta 变化的是指数里那一项——观测与期望之间的差,被我们解释成了”线性函数产生的误差”。把线性误差写成正态分布的一部分——线性模型与概率模型就这样直接关联到一起了。

等价性:似然最大 = 平方和最小

把每个样本的密度连乘、取对数(独立假设 + log trick 再用一次):

ℓ(θ)=∑i=1Nlog⁡[12πσ2exp⁡(−(yi−θTxi)22σ2)]=−N2log⁡(2πσ2)  −  12σ2∑i=1N(yi−θTxi)2\begin{aligned} \ell(\theta) &= \sum_{i=1}^{N} \log\left[\frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y_i - \theta^Tx_i)^2}{2\sigma^2}\right)\right] \\ &= -\frac{N}{2}\log(2\pi\sigma^2) \;-\; \frac{1}{2\sigma^2}\sum_{i=1}^{N}(y_i - \theta^Tx_i)^2 \end{aligned}

第一项只含 NN 与 σ\sigma,与 θ\theta 无关(本节沿用讲师的设定:σ\sigma 是给定的固定值;它当然也可以作为参数一起估计,那超出了本节范围)。于是最大化 ℓ(θ)\ell(\theta) 只剩一件事可争:

arg⁡max⁡θ ℓ(θ)  ⟺  arg⁡min⁡θ ∑i=1N(yi−θTxi)2\underset{\theta}{\arg\max}\ \ell(\theta) \;\Longleftrightarrow\; \underset{\theta}{\arg\min}\ \sum_{i=1}^{N}(y_i - \theta^Tx_i)^2

右边正是最小二乘的目标函数。 整个变化就在这里:以前我们用最小二乘也好、梯度下降也好,都是在”调整 θ\theta 使损失函数最小”;今天多了一条路——调整 θ\theta 使似然值最大。两条路通向同一个 θ^\hat{\theta}。所以说,用概率的方式求极大似然,某种程度上就是在求 cost function 最小——两者直接联系到了一起。

数值验证:亲手把两条路走到同一个点

用一小段纯 Python 验证等价性:固定 σ=0.5\sigma = 0.5,用上一节的正规方程解出 θ^\hat{\theta},再算出各候选参数的完整对数似然——看 θ^\hat{\theta} 是否稳坐似然最高点,并验证”对数似然之差 = 平方和之差除以 2σ22\sigma^2“这个恒等式。

import math

# 数据:5 个样本,y 大致沿 y = 1.5x + 2 分布,带少量手工噪声
x = [1, 2, 3, 4, 5]
y = [3.6, 4.9, 6.7, 8.2, 9.6]

def dot(v1, v2):
    return sum(a * b for a, b in zip(v1, v2))

# ---- 第一步:最小二乘解析解(上一节的正规方程)----
col0 = [1.0] * len(x)          # x0 = 1
ATA = [[dot(col0, col0), dot(col0, x)],
       [dot(x, col0), dot(x, x)]]
ATy = [dot(col0, y), dot(x, y)]
det = ATA[0][0] * ATA[1][1] - ATA[0][1] * ATA[1][0]
theta = [(ATA[1][1] * ATy[0] - ATA[0][1] * ATy[1]) / det,
         (ATA[0][0] * ATy[1] - ATA[1][0] * ATy[0]) / det]

def sse(t0, t1):
    return sum((yi - (t0 + t1 * xi)) ** 2 for xi, yi in zip(x, y))

print("A^T A =", ATA)
print("A^T y =", ATy)
print(f"最小二乘解: theta0 = {theta[0]}, theta1 = {theta[1]}")
print(f"解处的残差平方和 SSE = {sse(*theta):.4f}")

# ---- 第二步:完整对数似然(固定 sigma = 0.5)----
sigma = 0.5

def loglik(t0, t1):
    ll = 0.0
    for xi, yi in zip(x, y):
        e = yi - (t0 + t1 * xi)
        ll += -0.5 * math.log(2 * math.pi) - math.log(sigma) - e * e / (2 * sigma ** 2)
    return ll

# ---- 第三步:让"别的 theta"来挑战 ----
candidates = [
    ("theta_hat(最小二乘解)", theta[0], theta[1]),
    ("截距挪远(theta0+0.4)", theta[0] + 0.4, theta[1]),
    ("斜率挪远(theta1-0.3)", theta[0], theta[1] - 0.3),
    ("两条都挪(1.6, 1.8)", 1.6, 1.8),
]
print(f"\n固定 sigma = {sigma},各参数组合的对数似然:")
for name, t0, t1 in candidates:
    print(f"  {name}: SSE = {sse(t0, t1):.4f}, log L = {loglik(t0, t1):.4f}")

# ---- 第四步:验证恒等式 logL = -SSE/(2*sigma^2) + 与 theta 无关的常数 ----
ll_hat = loglik(*theta)
ll_move = loglik(theta[0] + 0.4, theta[1])
diff_ll = ll_hat - ll_move
diff_pred = (sse(theta[0] + 0.4, theta[1]) - sse(*theta)) / (2 * sigma ** 2)
print(f"\n恒等式验证: logL(theta_hat) - logL(挪远) = {diff_ll:.4f}")
print(f"          理论预测 (SSE' - SSE)/(2*sigma^2) = {diff_pred:.4f}")
A^T A = [[5.0, 15.0], [15.0, 55]]
A^T y = [33.0, 114.3]
最小二乘解: theta0 = 2.01, theta1 = 1.53
解处的残差平方和 SSE = 0.0510

固定 sigma = 0.5,各参数组合的对数似然:
  theta_hat(最小二乘解): SSE = 0.0510, log L = -1.2310
  截距挪远(theta0+0.4): SSE = 0.8510, log L = -2.8310
  斜率挪远(theta1-0.3): SSE = 5.0010, log L = -11.1310
  两条都挪(1.6, 1.8): SSE = 1.5800, log L = -4.2890

恒等式验证: logL(theta_hat) - logL(挪远) = 1.6000
          理论预测 (SSE' - SSE)/(2*sigma^2) = 1.6000

结果一目了然:四个候选里,最小二乘解 θ^=(2.01,1.53)\hat{\theta} = (2.01, 1.53) 的 SSE 最小(0.05100.0510),对数似然也最高(−1.2310-1.2310)——其余三个怎么挪都比它差;而且对数似然之差与理论预测精确相等(1.6000=1.60001.6000 = 1.6000),连浮点毛边都没有。顺带注意”斜率挪远”的下场最惨(SSE 从 0.0510.051 暴涨到 5.0015.001):斜率一歪,离得越远的点被拖得越狠。

小碗扣糖豆:把直觉扣牢

最后把这个画面记住。数据像一地的小蚂蚁、小糖豆;正态分布像一只只小碗。我们需要一个碗把所有东西都盖住——盖得越好,似然值越大。

而碗的位置由谁控制?由 θ\theta 控制——θ\theta 决定那条线的位置。随便举一个不好的 θ\theta:线画歪了,所有点到线的距离全变,给定固定 σ\sigma 的正态分布,碗就全部扣歪了——碗都扣到没有糖豆的位置上去了,对数据的”覆盖质量”非常差,似然值小。如果 θ\theta 恰到好处,构造出来的每一个小碗都能稳稳地把数据 cover 住,似然值就是大的。

所以我们才要不断调整 θ\theta,直到它待在最合适的地方,使极大似然值最大——这句话翻译回上一节的语言,就是”不断调整 θ\theta,使损失函数最小”。

两种理解方式,一个结果

到这里,linear model 在我们手里有了两副完整的眼镜:

  • 几何的理解(上一节):构造一个向量空间,在里面找一个合适的线性组合,使误差最小——最小二乘是投影。
  • 概率的理解(本节):认为每个点到它所期望函数之间的距离服从正态分布,调整 θ\theta 使似然最大——最小二乘是极大似然。

无论是构造损失函数使误差最小,还是用概率的方式求极大似然,都能得到一样的结果。下几节的岭回归、逻辑回归,将轮流借用这两副眼镜。

📝 动手练一练

  1. 等价性推导:在正态误差假设下,写出”最大化对数似然 ⟺\Longleftrightarrow 最小化残差平方和”的关键推导步骤。
👉 点击查看参考答案

对数似然为:

ℓ(θ)=−N2log⁡(2πσ2)−12σ2∑i=1N(yi−θTxi)2\ell(\theta) = -\frac{N}{2}\log(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum_{i=1}^{N}(y_i - \theta^Tx_i)^2

第一项 −N2log⁡(2πσ2)-\frac{N}{2}\log(2\pi\sigma^2) 只含 NN 与固定的 σ\sigma,与 θ\theta 无关,不影响最优点。于是最大化 ℓ(θ)\ell(\theta) 等价于最大化 −12σ2∑i(yi−θTxi)2-\frac{1}{2\sigma^2}\sum_i (y_i - \theta^Tx_i)^2;由于 −12σ2-\frac{1}{2\sigma^2} 是负常数,这又等价于最小化 ∑i(yi−θTxi)2\sum_i (y_i - \theta^Tx_i)^2——残差平方和,正是最小二乘的目标函数。所以 θ^MLE=θ^OLS\hat{\theta}_{\text{MLE}} = \hat{\theta}_{\text{OLS}}。

  1. 单点似然手算:观测到一个样本 y=3.2y = 3.2。两条候选拟合线在这一点给出的预测分别是 θTx=3.0\theta^Tx = 3.0 与 θTx=3.9\theta^Tx = 3.9,取 σ=0.5\sigma = 0.5。分别计算两个高斯密度 f(y)f(y),判断哪条线的似然大,并算出倍数。
👉 点击查看参考答案

代入 f(y)=12πσ2exp⁡(−(y−θTx)22σ2)f(y) = \frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y - \theta^Tx)^2}{2\sigma^2}\right),其中 10.52π≈0.7979\frac{1}{0.5\sqrt{2\pi}} \approx 0.7979:

  • 线一(预测 3.0):残差 0.20.2,指数 −0.040.5=−0.08-\frac{0.04}{0.5} = -0.08,f1≈0.7979×0.9231≈0.737f_1 \approx 0.7979 \times 0.9231 \approx 0.737;
  • 线二(预测 3.9):残差 −0.7-0.7,指数 −0.490.5=−0.98-\frac{0.49}{0.5} = -0.98,f2≈0.7979×0.3753≈0.299f_2 \approx 0.7979 \times 0.3753 \approx 0.299。

线一的似然大约是线二的 0.737/0.299≈2.50.737 / 0.299 \approx 2.5 倍(正是 e0.9e^{0.9})——同一条观测,贴得近的线,似然高。全部样本连乘起来,这个差距逐点放大,这就是”碗要扣在有糖豆的地方”的数学含义。

本章小结

  • 正态噪声假设:点到拟合线的距离 eie_i 服从正态分布——距离小的概率大、特别大的概率特别小,这是连接概率与回归的地基。
  • 似然构造:沿直线每个点扣一个固定 σ\sigma 的正态小碗,yi−θTxiy_i - \theta^Tx_i 进指数,即 yi∣xi;θ∼N(θTxi,σ2)y_i \mid x_i;\theta \sim \mathcal{N}(\theta^Tx_i, \sigma^2);独立则连乘,log trick 变加和。
  • 等价性:ℓ(θ)=−N2log⁡(2πσ2)−12σ2∑i(yi−θTxi)2\ell(\theta) = -\frac{N}{2}\log(2\pi\sigma^2) - \frac{1}{2\sigma^2}\sum_i (y_i - \theta^Tx_i)^2,与 θ\theta 无关的常数不争胜负——极大似然估计 = 最小二乘估计,数值实验精确印证(似然差 = 平方和差 / 2σ22\sigma^2)。
  • 小碗扣糖豆:θ\theta 控制线,线控制碗的位置;碗扣歪了似然就小,扣稳了似然就大。
  • 两副眼镜:几何(向量空间的投影)与概率(正态噪声下的极大似然)是同一个最小二乘的两种理解,后面章节轮流使用。

📋 行动清单

  • 不看讲义,从 yi∣xi;θ∼N(θTxi,σ2)y_i \mid x_i;\theta \sim \mathcal{N}(\theta^Tx_i, \sigma^2) 出发,推出”极大似然 = 最小二乘”的完整链路
  • 运行本节代码,把”斜率挪远”改成”斜率挪远 0.1”,观察 SSE 与对数似然的变化幅度
  • 给同学讲一遍”小碗扣糖豆”:为什么 θ\theta 不好碗就全歪、θ\theta 合适似然就大
  • 预习下一节《逻辑回归(1)》:线性模型加上 Sigmoid,从回归走向分类

—— 小象教研组

配套资料 · 直接下载

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

  • 第8章课件:线性模型
    下载
  • 第8章笔记:普通最小二乘(OLS)
    下载
  • 第8章代码包(Logistic Regression)
    下载