Files
Notes/机器学习/统计学习要素-ESL-v1/8 第八章 模型推断和平均.md
2026-05-16 17:16:51 +08:00

175 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 8 第八章 模型推断和平均
draft: false
tags:
- ESL
---
## [逻辑架构图]
1. **不确定性的度量底座**:以 **MLE** 为起点,利用 **Fisher 信息** 定义参数空间的“曲率”与方差。
2. **推断的两大范式(仿真与叠加)**
- **Bootstrap重点扩充**:通过对经验分布的重采样模拟真实的抽样分布(计算暴力美学)。
- **Bayes 方法**:利用“能量场叠加”生成后验分布,通过先验注入物理约束。
- **深度关联**:揭示 Bootstrap 是贝叶斯后验的非参数化近似。
3. **计算引擎的底层实现**
- **EM 算法**:在“隐变量迷雾”中通过 E-M 迭代寻找似然下界的最高点。
- **MCMC**:通过马尔可夫链在高维能量场中进行“探索采样”。
4. **群体决策与架构集成**
- **Bagging**:通过并行化的 Bootstrap 采样降低方差(冗余设计)。
- **Stacking/模型平均**:多级流水线式的预测融合。
5. **统一视角**:概率模型下的不确定性闭环。
---
## [深度整理正文]
### 1. 极大似然估计 (MLE) 与 Fisher 信息矩阵
**我原本的内容**:我们要看“山峰”有多尖。评分函数 $\dot{\ell}(\theta)$ 在极值点等于 0。费雪信息矩阵 $I(\theta) = -E [ \frac{\partial^2 \ell(\theta)}{\partial \theta \partial \theta^T} ]$。曲率越陡,$\hat{\theta}$ 越确定。核心公式:$Var(\hat{\theta}) \to I(\theta)^{-1}$。
**{深度扩充}**
> {在底层系统优化中Fisher 信息矩阵的逆 $I(\theta)^{-1}$ 实际上定义了参数空间的**克拉美-罗下界Cramér-Rao Bound**。
>
> 每一个参数估计器Estimator都有其方差极限而 MLE 在大样本下是渐近有效的Asymptotically Efficient这意味着它能精准踩在这个极限上。
>
> 从计算机视觉或信号处理的角度看,这类似于**信噪比SNR**如果似然函数的曲率很低说明信号被淹没在噪声中无论你如何增加采样频率计算量你对参数的估计依然存在无法消除的抖动Variance。}
### 2. 自助法 (Bootstrapping):底层机理的深度解析
**我原本的内容**自助法是在原始数据集中进行有放回的采样Sampling with replacement构建出多个不同的子训练集。
**{深度扩充}**
> {我们要深度理解 **为什么 Bootstrap 有效?**
>
> 核心在于 **统计学插件原理Statistical Plug-in Principle**
>
> 当我们无法观测真实的总体分布 $F$ 时,我们用观测到的 $N$ 个样本生成的**经验分布函数 $\hat{F}$ (EDF)** 来替代它。
>
> 1. **模拟“上帝视角”**:在真实世界中,我们需要从总体 $F$ 中抽取 $B$ 个独立数据集才能看到参数 $\theta$ 的波动。但在现实中我们只有一个数据集。Bootstrap 通过从 $\hat{F}$ 中“有放回抽样”,模拟了从 $F$ 中抽样的过程。
>
> 2. **收敛性保证**:随着 $N \to \infty$$\hat{F}$ 趋近于 $F$。因此,在 $\hat{F}$ 上观察到的参数方差,就是对 $F$ 上参数方差的无偏估计。
>
> 3. **计算冗余与 OOB (Out-of-Bag)**
>
> 对于每一个自助样本集,大约有 $(1 - 1/N)^N \approx 1/e \approx 36.8\%$ 的原始数据没有被抽中。
>
> {这 36.8% 的数据就是天然的“验证集”。在系统实现中,这允许我们进行**原地验证In-situ Validation**无需像交叉验证CV那样手动切分数据块从而在处理流式数据时具有更高的吞吐量。}
>
>
> **Bootstrap 的系统代价**
>
> 它是一个**计算密集型**任务。如果你有 $B=1000$ 个采样,你的总计算开销就是单模型的 1000 倍。
>
> 在现代多核架构下,每一个 Bootstrap 任务都是独立的线程,可以完美适配 **SIMD** 或 **GPU 并行**。但其内存开销在于,虽然数据是重复的,但如果模型很大, $B$ 个模型的参数权重会迅速吃掉所有 L3 Cache 甚至驻留内存RSS。}
### 3. 贝叶斯方法:先验与能量场的叠加
**我原本的内容**:贝叶斯定理 $P(\theta|Z) = \frac{P(Z|\theta)P(\theta)}{P(Z)}$。取对数后:$E_{posterior} = E_{likelihood} + E_{prior}$。先验反映了看到数据前的经验(如权重应该很小,这是 Lasso/Ridge 的来源)。
**{深度扩充}**
> {在贝叶斯视角下,预测分布 $P(y_{new}|Z) = \int P(y_{new}|\theta) P(\theta|Z) d\theta$。
>
> 这是一个典型的**加权平均**过程。对比 MLE 只用一个最高点预测(点估计),贝叶斯预测是在整个参数分布上做卷积。
>
> {从编译器优化的角度看,如果你假设先验是高斯分布,后验也是高斯分布(共轭先验),那么这个积分有闭式解。但如果不是,我们就必须退化到数值积分或采样。贝叶斯方法的“保守”本质上是因为它考虑了所有可能的 $\theta$,这种**稳健性Robustness**在航空航天控制等不容许单点故障的系统中是不可或缺的。} }
### 4. EM 算法:在隐变量的迷雾中登山
**我原本的内容**对付隐变量Latent Variables $Z^m$。E 步计算隐藏数据的期望,构造 Q 函数。M 步寻找让 Q 达到最大值的 $\theta$。
**{深度扩充}**
> {EM 算法的数学核心是 **詹森不等式Jensen's Inequality**。
>
> $\ell(\theta) = \log \sum_{Z^m} P(Z, Z^m|\theta) \ge \sum_{Z^m} P(Z^m|Z, \theta^{(j)}) \log \frac{P(Z, Z^m|\theta)}{P(Z^m|Z, \theta^{(j)})}$
>
> {右边那一项就是我们在 E 步构造的**似然下界ELBO**。EM 算法就像是在做一个 **双缓冲区交换Double Buffering**
>
> - **E 步**:在当前位置向上修筑一个支撑平面(下界)。
>
> - **M 步**:在这个平面上走到最高点。
>
>
> 这个过程保证了似然值在单调不减的同时避开了直接对“Log-Sum”项求导的灾难性计算复杂度。在分布式存储系统的去重De-duplication算法中也有类似 EM 的迭代逻辑来估计数据块的分布。} }
### 5. MCMC 采样:高维能量场的探测器
**我原本的内容**既然算不出积分就去分布里“旅游”。MH 算法:计算接受率 $\alpha = \min(1, \frac{P(\theta'|D)}{P(\theta|D)})$,能量低(概率高)百分之百跳,能量高以一定概率跳。
**{深度扩充}**
> {MCMC 真正的硬核在于它解决了**维度灾难**。
>
> 传统的数值积分(如辛普森法则)随维度 $d$ 呈指数级增长;而 MCMC 的误差下降速度仅受样本量 $B$ 影响,与维度 $d$ 的关系较弱。
>
> {在系统层面MCMC 的瓶颈在于**冷启动问题Warm-up/Burn-in**。马尔可夫链初始阶段的样本不符合目标分布必须丢弃。这类似于缓存预热Cache Warming在系统达到稳态Steady State之前所有的预测都是不可信的。
>
> **Gibbs 采样**则利用了条件分布,每次只更新一个维度。这在硬件实现上可以类比为**流水线局部刷新**:我不更新整个寄存器组,只更新受影响的那个位。} }
### 6. 袋装法 (Bagging):通过并行冗余降低方差
**我原本的内容**Bagging 的名称来源于 "Bootstrap" 和 "Aggregating"。分类用投票法回归用平均法。优势是降低方差并行计算。最经典的应用是随机森林Random Forest
**{深度扩充}**
> {Bagging 为什么能降低方差?
>
> 假设我们有 $B$ 个独立的基模型,每个模型的方差是 $\sigma^2$,且它们之间的相关系数为 $\rho$。
>
> 则集成模型的总方差为:$\rho\sigma^2 + \frac{1-\rho}{B}\sigma^2$。
>
> 1. **当模型完全独立($\rho=0$)时**:方差降为 $\sigma^2/B$。这也就是你笔记中提到的“平均法”的神力。
>
> 2. **随机森林的精髓**:它不仅用 Bootstrap 采样数据还随机选择特征Feature Subspacing。这在本质上是为了**强制降低基模型之间的相关性 $\rho$**。
>
>
> {在程序员视角下Bagging 是一种**多副本容错架构**。单棵决策树极其不稳定(数据抖动一下,根节点就变了),类似于一个不带 ECC 的内存条。Bagging 通过 $B$ 个副本的冗余利用大数定律对冲掉了单个节点的随机错误。同时由于各个模型之间没有数据依赖No Data Dependency它可以实现** Embarrassingly Parallel极易并行化**,在多核 CPU 上实现接近线性的加速比。} }
### 7. 模型平均 (BMA) 与堆栈 (Stacking)
**我原本的内容**:训练 $p(\theta|D)$ 是为了得到一张全景导航图。Stacking 是把输出当作输入。
**{深度扩充}**
> {**Bayesian Model Averaging (BMA)**
>
> 权重分配基于模型的边际似然 $P(D|M_k)$。这意味着表现越好的模型话语权越大。
>
> **Stacking (堆栈)**
>
> 这是一层**元学习Meta-learning**。基模型的预测结果变成了一张全新的特征表。
>
> {实现 Stacking 时最忌讳的是“数据泄露”。如果用同一个数据集既训练基模型又训练元模型,元模型会学会“信任那个已经过拟合的基模型”。
>
> 因此Stacking 在工程上必须配合 **$K$-Fold CV**:每一个基模型的输出必须是针对它未曾见过的 Hold-out 数据的预测。这在系统设计中被称为 **隔离保护Isolation**,防止过拟合的毒素在流水线中向下游蔓延。} }
---
## [边界知识联动]
- **内存一致性与并行 Bootstrap**:在进行大规模 Bagging 时,如果使用 Python 等带有 GIL全局解释器锁的语言多线程会退化为单线程。真正的专家会使用多进程Multiprocessing并配合 **Shared Memory****Plasma Store**避免数据在进程间频繁序列化Pickle带来的巨大 CPU 开销。
- **信号处理中的 Fisher 信息**:在雷达探测或 GPS 定位中Fisher 信息矩阵用于计算 **GDOP (几何精度因子)**。它告诉硬件工程师,卫星的几何分布(参数空间曲率)如何影响最终的定位方差。
- **编译器调优与随机搜索**:正如你笔记末尾提到的,现代编译器(如 LLVM在寻找最佳指令组合时往往会使用类似 **Random Search****模拟退火** 的策略。这是因为参数空间太大且非凸寻找全局最优解MLE不可行只能通过采样MCMC 思想)找到一个足够好的局部解。
- **虚拟内存与 COW**:在实现 Bootstrap 时,如果你的原始数据集有 100GB抽样 100 份并不意味着需要 10TB 内存。利用 Linux 的 **fork()****Copy-on-Write**,所有子进程初始共享同一块物理内存页,只有当某个采样模型试图修改数据(极少发生)时,才会发生物理复制。