8-机器学习与大模型开发数学教程-第0章 预备知识-0-8 编程与数值计算基础(浮点数精度、溢出、数值稳定性)

前几节我们复习了集合、逻辑、数列、复数,这些是数学语言

但当我们真正写代码跑模型时,还需要掌握数值计算的"底层规则"

这一节我们来聊三个非常关键但常被忽视的点:

  • 浮点数精度
  • 溢出
  • 数值稳定性

它们看似是编程细节,其实直接影响到模型训练的效果,甚至可能导致"损失函数 NaN"的惨剧。


0-4 编程与数值计算基础

1. 浮点数精度

在计算机里,数字并不是连续的,而是有限的二进制表示。

这就带来一个问题:很多小数没法被精确表示

例子

python 复制代码
print(0.1 + 0.2)  # 输出?

结果不是 0.3,而是:

复制代码
0.30000000000000004

为什么?

因为二进制小数不能精确表示 0.1 和 0.2,它们只能存储为近似值。

生活类比

就像你用"分米"为单位来丈量房间,有些长度(比如 2.75 米)就量不准,只能近似到 2.8 米。


在机器学习中的影响

  • 参数更新 :当学习率非常小(如 1e−91e^{-9}1e−9),更新值可能因为精度问题被"吞掉",参数不变。
  • 比较大小 :判断两个浮点数是否相等时要小心,推荐用 math.isclose() 或设置一个容差。

2. 溢出(Overflow / Underflow)

溢出(overflow):数太大,超过计算机能表示的范围。

  • 例如:math.exp(1000) → 会得到 inf(无穷大)。

下溢(underflow):数太小,被当作 0。

  • 例如:math.exp(-1000) → 会得到 0.0
python 复制代码
import math
print(math.exp(1000))   # inf
print(math.exp(-1000))  # 0.0

生活类比

  • 溢出像是往一个 500ml 杯子里倒 1000ml 水 → 溢出来了。
  • 下溢像是往杯子里倒一滴水 → 看起来就像没水。

在机器学习中的影响

  • softmax 函数
    softmax(xi)=exi∑jexj\text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}softmax(xi)=∑jexjexi
    如果 xix_ixi 特别大,exie^{x_i}exi 会溢出成 inf,导致结果变成 NaN

常见解决方案

  • 在 softmax 前减去最大值:

    python 复制代码
    x = x - np.max(x)
    exp_x = np.exp(x)
    softmax = exp_x / np.sum(exp_x)

    这样避免指数爆炸。


3. 数值稳定性

数值稳定性(Numerical Stability)指的是:计算过程中是否会因为精度误差或溢出而导致结果不可靠

典型问题

  • 大数相减(灾难性消除)
    • 例如:(106+0.001)−106=0.001(10^6 + 0.001) - 10^6 = 0.001(106+0.001)−106=0.001
    • 但在计算机里,由于 10610^6106 太大,0.001 可能被"忽略",导致结果变成 0。
  • 累加误差
    • 例如对一个大数组求和:先加小数再加大数 vs 先加大数再加小数,结果可能不同。
    • 这就是浮点数的加法不满足严格结合律:(a+b)+c≠a+(b+c)(a+b)+c \neq a+(b+c)(a+b)+c=a+(b+c)。

浮点精度 溢出/下溢 累积误差 输入数据 数值计算 近似结果 inf / 0 不稳定结果

图示说明:数值计算中可能产生多种不稳定情况,最终影响结果。


在机器学习中的解决方法

  1. 对数技巧(log-trick)
    • 在计算概率时,经常用 log 形式:
      log⁡(a⋅b)=log⁡a+log⁡b\log(a \cdot b) = \log a + \log blog(a⋅b)=loga+logb
    • 避免了直接相乘导致的 underflow。
  2. 正规化
    • 在 softmax、batch normalization 中,通过缩放数据,避免极端值。
  3. 高精度计算
    • 有些框架支持 float64 或混合精度训练(mixed precision),在效率和稳定性之间取平衡。

小结

  • 浮点数精度 :计算机只能存近似小数,可能导致 0.1+0.2≠0.30.1+0.2 \neq 0.30.1+0.2=0.3。
  • 溢出/下溢:数太大变成无穷大,数太小变成 0。
  • 数值稳定性:累积误差、灾难性消除会让计算结果不可靠。

联系 AI 的意义

  • 在深度学习中,训练失败的常见原因就是"数值不稳定",比如梯度爆炸、loss 变 NaN。
  • 掌握这些基础,能帮助我们写出更健壮的训练代码。
相关推荐
buttonupAI6 小时前
今日Reddit各AI板块高价值讨论精选(2025-12-20)
人工智能
2501_904876486 小时前
2003-2021年上市公司人工智能的采纳程度测算数据(含原始数据+计算结果)
人工智能
曹文杰15190301127 小时前
2025 年大模型背景下应用统计本科 计算机方向 培养方案
python·线性代数·机器学习·学习方法
竣雄7 小时前
计算机视觉:原理、技术与未来展望
人工智能·计算机视觉
救救孩子把7 小时前
44-机器学习与大模型开发数学教程-4-6 大数定律与中心极限定理
人工智能·机器学习
Rabbit_QL7 小时前
【LLM评价指标】从概率到直觉:理解语言模型的困惑度
人工智能·语言模型·自然语言处理
呆萌很7 小时前
HSV颜色空间过滤
人工智能
roman_日积跬步-终至千里8 小时前
【人工智能导论】02-搜索-高级搜索策略探索篇:从约束满足到博弈搜索
java·前端·人工智能
FL16238631298 小时前
[C#][winform]基于yolov11的淡水鱼种类检测识别系统C#源码+onnx模型+评估指标曲线+精美GUI界面
人工智能·yolo·目标跟踪
爱笑的眼睛118 小时前
从 Seq2Seq 到 Transformer++:深度解构与自构建现代机器翻译核心组件
java·人工智能·python·ai