LLM 时代的经典机器学习:只讲它在哪里重现
系列精华 · 十篇正文每篇一页,按 ↓ 看机制与真实案例
arganzheng · 2026-03-09
这个系列回答一个问题
看到 LLM 上的一个问题,能不能叫出它的经典名字——叫出名字,经典解法就在手边。
| LLM 上的问题 |
它的经典名字 |
| benchmark 污染 |
测试集泄漏 |
| reward hacking |
在一个过拟合的评估器上做优化 |
| weight decay |
Ridge |
| RAG |
KNN |
| attention |
核回归(1964) |
| judge 的长度偏好 |
系统误差 |
| 「20 个 benchmark 领先 12 个」 |
多重比较 |
十篇的依赖:从「什么是学习」出发
%%{init: {"flowchart": {"wrappingWidth": 240}}}%%
flowchart TB
L1["01 什么是学习"] --> L2["02 线性回归"]
L2 --> L3["03 逻辑回归·奖励模型"]
L3 --> L4["04 贝叶斯·KNN·决策树"]
L3 --> L5["05 SVM·核方法"]
L4 --> L6["06 集成"]
L4 --> L7["07 聚类"]
L7 --> L8["08 降维"]
L8 --> L9["09 去重"]
L6 & L5 --> L10["10 评估"]
01 · 什么是学习:划分、泛化、偏差-方差
测试集只能看一次;过拟合 = 容量相对数据太大;reward hacking 是优化过拟合的评估器

误差 = 偏差² + 方差 + 噪声

- 学习曲线:100 个点之后 15 次与 4 次一样好——数据多了容量就不是问题
- 在测试集上挑最好的:中位乐观 0.015,均值 0.255(长尾)——这就是「刷榜」
案例:加州房价,随机划分 vs 按地区划分

- 只用经纬度的 KNN:随机划分 RMSE 5.2 万,按地区划分 8.6 万——分数是抄邻居抄出来的
- 划分方式要模仿上线后的数据;近重复随机切 CV 0.060 vs 真实 0.10
- 超参数只碰开发集:一次划分选次数 3–12 跳;用到 \(y\) 的特征选择把 CV 从 0.32 抬到 0.53
02 · 线性回归:最小二乘、梯度下降与 Ridge / Lasso
正规方程把 \(y\) 投影到特征平面;Ridge 就是 weight decay

L1 为什么产生稀疏、L2 为什么只是缩小

- Lasso:50 个特征里 45 个无用的系数恰好归零;Ridge 只缩向零从不到零
- \(w \leftarrow (1 - 2\eta\lambda)w - \eta g\) 与 Ridge 闭式解差 \(10^{-13}\)——weight decay 不是深度学习特有的技巧
案例:加州房价,猜均值 → Ridge / Lasso 十步

- 三次项无正则:训练 55k / 测试 102k——过拟合的形状;Ridge 拉回 60k;Lasso 368 列砍掉 322 列
- 第 6 步 cond(X) \(10^{16}\):换台机器测试 RMSE 变 225k——实现不显式求逆、
lstsq 才稳;Lasso 的零来自软阈值 \(\alpha \ge \lvert\rho\rvert\)
03 · 逻辑回归与奖励模型:每个分类头的原型
奖励模型 = 特征差上的逻辑回归;准确率上限是标注一致性

奖励模型准确率为什么到 80% 就上不去

- 3000 对偏好:准确率 91.5% vs 上限 91.3%,\(w\) 与真值相关 0.999
- 噪声 4.0 时准确率只有 71%,但 \(w\) 相关仍 0.995——贴着标签正确率就是学会了,不是训得不够久
案例:垃圾短信,TF-IDF + 逻辑回归
- 精确率 100%、召回 87%(阈值 0.5);阈值 0.2 时两者都到 0.92——阈值是业务参数
- 权重最大的词就是可解释性:推向 spam 的是 txt、call、free、claim、150p;推向 ham 的是 me、my、that
- 准确率、校准、标注一致性是三个数:logit 乘 \(T\) 准确率不变、ECE 0.015 → 0.135;案例校准表 ECE 0.018
- 代码:
classical-ml/case_03_sms_spam.py
04 · 三个基础分类器:朴素贝叶斯、KNN 与决策树
KNN 就是检索、靠好 embedding;树不修停会长到全对——剪枝是正则化

维度灾难:KNN 为什么不能直接用在高维上

- 1000 维时最近与最远只差 10%——「最近邻」失去意义
- 先学出低维 embedding 再做近邻,这就是检索(RAG)的前提;k = 1 训练 100% 测试 0.83
案例:泰坦尼克,一棵深度 3 的树

- 深度 3 最好 83%;深度不限训练 1.000 测试 0.826
boat(救生艇号)列能到 97%——是泄漏,上船时不知道
- 代价复杂度剪枝:225 叶 → 5 叶;多项式 NB 101 个词直接连乘下溢为 0,log 域照常比大小
05 · SVM 与核方法:从最大间隔到 attention
只有支持向量定边界;核 = 不升维算内积;核回归三步 = attention 三步

核回归 = attention

- 相似度 → 归一化 → 加权值,1964 年的 Nadaraya–Watson;与点积 attention 公式对到 \(10^{-15}\)
- 新的是 \(Q, K, V\) 学出来;核 SVM 64000 样本 7.6 s vs 线性 0.01 s——核方法的代价是 \(n^2\)
案例:MNIST,重跑 LeCun 1998 年那张表

- 线性 7.4% → KNN 2.95% → RBF-SVM 1.43%(60k 全量、16,122 个支持向量)——排序与 1998 年一致
- 10k → 60k 训练时间 40 倍;训练集 2k → 20k 支持向量 1523 → 8071、预测 4.8 s → 22.3 s——核化省的是 \(\phi\) 的维数,付的是 \(n^2\)
06 · 集成:随机森林与梯度提升
bagging 只降方差;梯度提升 = 函数空间的梯度下降

bagging 抹掉孤岛,但偏差不变

- self-consistency、多个 judge 平均——都是 bagging,修不了系统性的错
- 数据质量打分:8B 给 15T token 打分 = 训练算力的 33.3%,线性模型 0.004%——大模型标几十万段、小分类器过全部
案例:Adult 收入预测
- 一棵树 AUC 0.772 → 随机森林 0.917 → 梯度提升 0.930:表格数据上 GBDT > RF > 单树
- 学习率 × 轮数:lr 0.3 第 80 轮到顶后下滑,lr 0.1 在 222 轮,lr 0.03 到 400 轮还在缓升
- permutation 重要性用来审计:资本收益、年龄、教育年限居前,race、国籍、性别几乎为零
- 早停轮数来自验证集(测试集上挑是乐观偏差);森林 50 → 2000 棵 AUC 0.9155 → 0.9169、模型 21 MB → 822 MB
07 · 聚类:K-Means、DBSCAN 与「这批语料里有什么」
K-Means 收敛到局部最优;聚类是探索不是预测,不需要「正确」

形状决定算法:K-Means 切月牙,DBSCAN 沿密度

- 肘部:5 → 6 降 1000、6 → 7 降 500;78 句 embedding \(k = 7\) ARI 1.0,模板页自成一簇
- 语料探索时 \(k\) 取 50 还是 200 影响不大——每簇抽几条读
案例:RFM 客户分群

- 714 人(16%)贡献 65% 营业额;起名字与决定动作是人的事
- 颜色量化:k = 16 已经能看,k = 64 几乎看不出差别
08 · 降维:PCA、SVD、t-SNE 与 embedding 的各向异性
PCA = 中心化的 SVD;t-SNE 只保邻域;向量挤在窄锥(余弦 0.7+),先减均值

PCA 看全局,t-SNE 看局部

- PCA 2 维 KNN 0.60 vs t-SNE 0.98;64 维里 29 维解释 95%
- 真实权重 90% 能量要 299/896 维——W 本身不低秩,LoRA 的低秩假设是关于 \(\Delta W\) 的
案例:Eigenfaces

- 前 50 个主成分解释 88%,重建出眼镜;k = 20 能认出是谁
- PCA 为压缩不为精度:原始像素比 PCA 更准;whiten 把低方差主成分拉平,150 维时 1-NN 0.93 → 0.80
09 · 去重:MinHash 与 LSH 的概率
MinHash 相等概率 = Jaccard;阈值 0.7 是 \(b=14,r=8\) 算出的 0.685

案例:wikitext 去重,暴力 vs LSH

- 暴力两两比较 16 分钟 vs LSH 1.5 秒;200 万对只剩 267 个候选
- LSH 按 S 曲线概率召回候选(\(J \ge 0.7\) 找到 89%),漏掉的不是 bug、也没有「不漏」的保证;三层去重由便宜到贵:精确 → MinHash → embedding(同义句 Jaccard 0.00 但余弦 0.46)
10 · 评估:从混淆矩阵到 judge 的一致性
不平衡时准确率没有信息;校准要单独查;系统偏差平均不掉

AUC 高不等于概率可信:校准

- 过度自信 ECE 0.069 → 0.019,AUC 不变;永远选 A 有 92% 一致、κ = 0
- 20 个 benchmark 领先 12 个:随机期望 10 ± 2.2,在一个标准差内
- 阈值在验证集上定;同来源的题按簇重抽(公式区间覆盖 61% vs 簇 94%)
案例:银行营销,按成本定阈值

- 准确率无用、按成本定阈值、配对检验:差 0.001 AUC 的 \(p = 0.1\)——是噪声
贯穿十篇的几条线
| 线 |
在哪几篇 |
一句话 |
| 容量 vs 数据 |
一、二、四、五、六 |
过拟合的解药是数据、正则、集成;容量随深度 / 核宽 / 次数增长 |
| 测试集只能看一次 |
一、十 |
参与过决策的就不是测试集;多个 benchmark 要多重比较 |
| 相似度 → 加权 |
四、五、七、八、九 |
KNN、核回归 / attention、K-Means、余弦、Jaccard——距离怎么定义决定一切 |
| 偏差 vs 方差 |
一、三、六、十 |
集成只降方差;系统偏差(judge 位置偏好)平均不掉 |
| 概率不是分数 |
三、十 |
阈值是业务参数;AUC 不看概率、校准另查 |
常见误区
- 学习率越小越安全——上限由最大曲率定,太小在沟底爬不动;先标准化让碗变圆
- 奖励模型 78% 太低该训更久——上限是标注一致率,贴着它就是学会了
- KNN 直接用在原始高维特征上——1000 维最近与最远只差 10%
- attention 是全新机制——1964 年的核回归,新的是 Q、K、V 学出来
- K-Means 两次结果不同是 bug——局部最优是性质,用 k-means++ 与
n_init
- 两段文本余弦 0.85 说明很像——各向异性下所有对都在 0.7 以上,先减均值
- 过滤器准确率 95% 很好——正例 3% 时全判负也有 95.6%
- 20 个 benchmark 领先 12 个——随机期望 10 ± 2.2