补充导读:从数学女孩到机器学习
以第1卷第6章的微分、差分与连续离散转换为数学锚点,建立从学习问题、数据边界、损失优化到泛化评估的机器学习证据链。
学习目标
- 能把机器学习任务写成包含预测时点、输入、标签和错误代价的学习问题契约
- 能用矩阵、损失函数和梯度检查解释线性模型的一次更新,并识别数值稳定风险
- 能区分模型表达能力、优化过程、泛化表现与数据泄漏,设计可复现的训练验证测试流程
- 能通过交互实验比较正常切分与泄漏场景,说明离线高分为什么不自动等于上线可靠
从数学工具开始:经验不是证明
先预测:训练损失降到零,是否说明模型已经“学会”任务?不一定。模型可能只是记住训练样本,或者提前看到了验证、测试甚至未来信息。机器学习的核心证据不是“训练过程能跑”,而是对未见数据仍有可复核表现,并且这个表现对应真实使用时的错误代价。
本章是独立重写的补充导读,不把机器学习伪装成《数学女孩》前四卷中的原章。它选择第1卷第6章《在米尔嘉旁边》作为数学锚点:那一章把微分与差分并置,比较一次函数、二次函数、三次函数,讨论下降阶乘幂和微分与差分的对应,还把连续指数函数 e^x 与离散指数函数 2^x放在在两个世界中往返的旅行中理解。这里沿着同一条桥继续走:微分给出局部方向,差分帮助检查实现,矩阵组织数据,概率描述不确定性,最后由数据切分检验泛化。
一、先定义学习问题
↡规定预测对象、预测时点、可用输入、标签和错误代价的机器学习任务说明给每个样本一对 (xᵢ,yᵢ) 还不够。必须说明 xᵢ 在预测时是否真的可得、yᵢ
何时确定、样本代表哪个未来分布,以及假阳性和假阴性的代价是否相同。例如预测违约时,预测时点是申请提交时;“催收次数”若在违约后才产生,就不能成为预测特征。
三种反馈结构
监督学习有标签,连续目标通常是回归,离散目标通常是分类;无监督学习没有指定答案,要从距离、尺度和模型假设中寻找聚类或降维结构;强化学习则围绕状态、动作、回报、探索和信用分配展开。三种结构的反馈来源不同,不能用一个指标或一个数据切分模板包办。
问题契约还要写清楚基线。若预测明天的销量,永远输出训练集均值就是一个回归基线;若正类只占 1%,永远预测负类可能有 99% 准确率,却没有识别任何正类。基线不是低级方案,而是防止复杂模型只比“什么也不做”好看一点的参照物。
二、线性回归:把矩阵变成可验收的损失
设有 m 个样本、p 个特征,把特征写成设计矩阵 X∈R^{m×p},参数为 θ∈R^p,预测为:
若需要截距,可在 X 中加入一列常数 1。残差向量是 r=Xθ-y,定义↡衡量模型预测与目标之间差异,并作为训练优化对象的函数:
平方损失把大误差放大,适合某些连续目标,却不等于所有业务的真实代价。对参数求导:
令梯度为零得到正规方程 XᵀXθ=Xᵀy。若 X 满列秩,平方损失严格凸并有唯一解;但这不意味着实现应显式计算 (XᵀX)⁻¹。构造 XᵀX 会放大条件数,特征共线时矩阵甚至奇异;QR 分解、SVD 或稳定的最小二乘求解器通常更合适。
正则化改变目标
岭回归加入惩罚:
它常能缓解共线性并降低方差,却也引入偏差。λ 应由训练集之外的验证过程选择,不能为了让测试分数好看而反复窥视测试集;是否惩罚截距、特征是否标准化,也属于模型契约的一部分。
三、梯度下降:局部方向不是全局保证
↡反复沿损失函数负梯度方向更新参数的优化方法 是局部一阶信息:在足够小的步长下,负梯度给出最陡的局部下降方向。更新式为:
学习率 η 过大可能震荡或发散,过小则进展缓慢。即使每一步都降低训练损失,也不能推出找到了全局最优,更不能推出对分布外数据有效。对梯度为 β-Lipschitz 的凸函数,固定步长常需满足 0<η<2/β 一类条件;非凸模型、随机小批量和自适应优化器需要分别说明保证对象。
这正是第1卷微分与差分的桥:解析梯度描述连续局部变化,有限差分用离散扰动检查代码是否忠实。对第 j 个参数做中心差分:
ε 太大有截断误差,太小会放大舍入误差,所以梯度检查使用相对误差容差,不要求逐位相等。
def mse_and_gradient(X, y, theta):
residual = X @ theta - y
loss = np.mean(residual ** 2)
gradient = (2.0 / X.shape[0]) * X.T @ residual
return loss, gradient
def gradient_check(X, y, theta, index, epsilon=1e-6):
step = np.zeros_like(theta)
step[index] = epsilon
plus, _ = mse_and_gradient(X, y, theta + step)
minus, _ = mse_and_gradient(X, y, theta - step)
numeric = (plus - minus) / (2.0 * epsilon)
_, analytic = mse_and_gradient(X, y, theta)
return numeric, analytic[index]特征尺度差异会把损失等高线拉成长椭圆,让统一学习率来回摆动。标准化不是为了让公式好看,而是改善优化几何;标准化统计量必须只在训练集上拟合,再应用到验证和测试数据。
四、分类、概率与评价指标
二元分类可以令:
交叉熵为 ℓ(y,p)=-y log p-(1-y)log(1-p);输出概率到最终类别还要选择阈值。阈值不是自然常数,而是由错误代价、资源约束和业务风险共同决定。
类别极不平衡时,应同时查看混淆矩阵、精确率、召回率、PR 曲线、概率校准和切片指标。总准确率可能掩盖少数类完全失效;ROC-AUC 也不能代替一个具体阈值下的成本评估。指标必须对应学习问题契约,不能只挑最高的数字。
五、神经网络:表达、优化与泛化分开验收
一层神经网络写作:
若各层都只有线性变换,多层矩阵乘积仍等价于一个线性变换;非线性激活使表示空间真正扩展。万能逼近定理是表示能力结论:在给定条件下,某类网络能逼近连续函数。它不保证有限数据识别目标、不保证优化器找到参数、不保证模型很小,也不保证分布外↡模型在没有参与训练的、且符合真实使用分布的数据上仍然有效。
↡在计算图上按链式法则从损失向输入反向计算各参数梯度的方法不是一条新的求导定律,而是链式法则的高效组织:前向计算保存中间量,反向阶段复用它们计算梯度。自动微分减少手写错误,却不免除对损失定义、张量形状、数值稳定和不可导点约定的检查。
六、数据切分、泄漏与上线证据
↡把本应只在预测之后才能知道的信息,直接或间接带入训练特征或预处理的错误训练集可以被优化器反复使用;验证集用于选择超参数、阈值和停止时机;测试集应在方案冻结后尽量只使用一次,估计最终泛化误差。若先在全数据上标准化、按全体目标编码类别、把同一用户的记录拆到不同集合,或使用预测时点之后生成的特征,离线分数都会被污染。
时间任务通常按时间切分,不能随机打散未来和过去;同一主体的多条记录常需要分组切分,避免模型从同一人的近重复样本中“认出答案”。验证集也不是永久干净的:反复依据验证分数修改方案,最终会对验证集过拟合,因此需要保留未见测试或外部评估。
上线后,泛化不是一次测试就永久成立。要监控输入覆盖、缺失率、预测分布、切片指标、延迟标签、数据漂移和回退机制。若训练分布与生产分布改变,原来正确的阈值和错误代价可能不再适用;监控触发的是重新评估流程,不是自动证明模型已经失效或仍然可靠。
交互实验:把“高分”拆成证据
先选择模型容量和数据处理方式,再观察训练、验证与测试的相对表现。开启“泄漏模式”会让测试信息提前进入特征,分数可能变得漂亮,却同时标红评估不再独立;“重置”恢复安全切分,方便对照实验。
安全切分下,高容量模型的训练分数可以很高,但验证和测试承担独立验收。
分步验收:从数学更新到可信评估
1. 定义:固定预测时点与代价
写出预测对象、可用特征、标签产生时间和错误代价;检查每一列特征在真实预测时是否已经存在,并与基线比较。
本章回顾:机器学习的五份证据
- 先定义预测时点、输入、标签、代价和基线。
- 矩阵与损失写清拟合目标,梯度检查验证实现。
- 表达能力、优化过程和泛化表现不是同一个命题。
- 训练、验证、测试和时间切片各有职责,泄漏会污染分数。
- 上线仍需监控分布、切片、延迟标签和回退机制。
练习与答案
练习
- 问题 1:写出学习问题契约。 以“预测申请提交时的违约风险”为例,列出预测时点、允许使用的输入、标签时间和至少两种错误代价;指出一个看似有用但非法的特征。
- 问题 2:检查梯度更新。 对一个参数写出中心有限差分公式,并说明学习率过大、过小各会在训练曲线上出现什么现象;再给出一个实现层面的检查。
- 问题 3:改 Demo 代码。 在交互实验中增加一个“按时间切分”选项:当数据顺序包含未来信息时,禁止随机切分,并在界面显示训练区间早于验证区间、验证区间早于测试区间。
- 问题 4:解释一个高分。 如果开启泄漏模式后测试准确率从 0.78 升到 0.99,你会先检查哪些证据,而不是直接发布模型?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 学习问题
规定预测什么、何时预测、能看见哪些输入,以及错了要付出什么代价。
- 损失函数
把预测和真实目标之间的差异变成一个可计算、可优化的数字。
- 梯度下降
反复沿损失局部下降最快的方向移动参数的优化方法。
- 泛化
模型在没有参与训练的、且符合真实使用分布的数据上仍然有效。
- 反向传播
沿计算图反向应用链式法则,高效计算各参数对损失的影响。
- 数据泄漏
把预测时本来不知道的信息带进训练或预处理,造成虚假的高分。