积分、概率与梯度下降项目

本节目标

先把积分理解为累积与面积,连接连续概率、CDF 和期望;再用一个不依赖第三方库的线性回归项目,把 MSE 梯度、中心有限差分、梯度下降、发散检测和输入边界串成可运行、可测试的闭环。

积分的最低直觉

定积分把区间切成很多小片并累加:

若 是速度,积分给位移;若 是概率密度,积分给区间概率:

连续分布期望:

密度某点的高度不是该点概率。数值积分与 Monte Carlo 采样是复杂模型估计期望的常见方式,但样本误差仍需概率统计描述。

合法概率密度需满足 且全域积分为 1。累积分布函数:

在密度连续等合适条件下,。期望是按密度加权的平均,不是“最可能值”;长尾分布的期望还可能不存在。

微积分基本定理把累积与变化率连接:若 ,则 (合适条件下)。

数值积分把无限细分换成有限网格,存在离散误差;Monte Carlo 用随机样本近似期望,存在抽样误差。增大网格或样本只能减少相应随机/离散误差,不能修复错误密度、偏置采样或目标定义。

项目:拟合

实现:gradient_descent.py|测试:test_gradient_descent.py。

模型与梯度

对 个点拟合 ,均方误差:

解析梯度:

输入与训练契约

  • xs、ys 等长且至少两个观测,每个值为有限实数;
  • 布尔、字符串、NaN、无穷值和所有 相同的不可识别情况被拒绝;
  • 学习率、差分 step 和梯度容差必须为正有限数,训练步数为正整数;
  • 更新前先在初始参数处比较解析梯度与中心有限差分;
  • 训练中发现非有限数或 loss 相对初始值急剧增大时显式报发散;
  • 输出包含数据量、step、学习率、初始/最终 loss、参数和最大梯度检查误差。

运行与测试

从 vault 根目录运行:

$env:PYTHONDONTWRITEBYTECODE = '1'
python -B '.\Knowledge\AI Agent Engineer\docs\微积分基础\examples\gradient_descent.py'
python -B -m unittest discover `
    -s '.\Knowledge\AI Agent Engineer\docs\微积分基础\examples' `
    -p 'test_*.py' `
    -v

中心差分:

它只用于小规模独立核验,不适合替代大模型反向传播。脚本预期输出:

observations=5 steps=2000 learning_rate=0.050000
initial-loss=9.000000000000 final-loss=0.000000000000
weight=2.000000 bias=1.000000
gradient-check-max-abs-error=1.118e-09

9 项测试覆盖解析梯度、中心差分、精确收敛、行顺序不变性、常量 、长度边界、非法数据、非法控制参数和过大学习率发散。项目使用显式异常与退出状态,不用会被 python -O 移除的 assert 承担关键验证。

2026-07-14 实际验证

在 Python 3.11.9 下,脚本以普通模式和 python -O 模式运行结果一致;9 项 unittest 全部通过,两个 Python 文件也通过 py_compile 语法检查。验证生成的 __pycache__ 已删除,未作为知识库内容保留。

必做实验

  1. 把学习率从 0.05 改为 1.0,记录 loss 是否发散。
  2. 故意删掉梯度中的因子 2,确认梯度检查失败。
  3. 将特征放大 100 倍,观察同一学习率为何不再合适。
  4. 加噪声后区分“无法精确拟合”与“优化器没收敛”。
  5. 扫描 difference_step 从 1e-2 到 1e-12,画出最大梯度误差;解释为何不是越小越好。
  6. 将 MSE 从 mean 改成 sum,同步推导梯度并说明学习率为何要重新选择。
  7. 为 loss 下降但验证指标恶化的情况写出停止和审计记录。

常见错误与排查

  • 有限差分与解析梯度使用了不同数据、reduction 或参数点。
  • 差分 step 太大产生截断误差,太小产生浮点消减。
  • 只检查最终参数接近答案,却未检查初始梯度方向。
  • 把发散留成巨大数值继续运行,而不是记录学习率、step 和首个异常位置后停止。
  • 训练集精确拟合就宣称模型泛化或具有因果解释。
  • 将输入放大后沿用旧学习率,却没有检查曲率和梯度尺度。

掌握检查

  • 我能解释积分是累积,导数是局部变化。
  • 我能手推 MSE 对 的梯度。
  • 我会用有限差分验证,而不是只看最终 loss。
  • 我能解释学习率与尺度的关系。
  • 我知道训练 loss 通过不等于线上有效。
  • 我能解释 9 项测试分别防止什么错误。
  • 我会把非有限数和急剧增大的 loss 作为显式失败。

参考资料

核验日期:2026-07-14。

返回 微积分基础。