当前位置: 首页 > news >正文

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

前几节我们复习了集合、逻辑、数列、复数,这些是数学语言
但当我们真正写代码跑模型时,还需要掌握数值计算的“底层规则”

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

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

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


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

1. 浮点数精度

在计算机里,数字并不是连续的,而是有限的二进制表示。
这就带来一个问题:很多小数没法被精确表示

例子

print(0.1 + 0.2)  # 输出?

结果不是 0.3,而是:

0.30000000000000004

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

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


在机器学习中的影响

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

2. 溢出(Overflow / Underflow)

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

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

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

  • 例如:math.exp(-1000) → 会得到 0.0
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 前减去最大值:

    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(ab)=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。
  • 掌握这些基础,能帮助我们写出更健壮的训练代码。
http://www.dtcms.com/a/406912.html

相关文章:

  • php网站开发书微信公众号手机网站开发
  • 做网站需要工商执照吗代人做网站
  • Go基础:模块化管理为什么能够提升研发效能?
  • 合肥专业做网站公司wd wordpress
  • IR 680LT Maleimide,IR 680LT马来酰亚胺用于蛋白质标记与定量分析
  • 打工人日报#20250925
  • Kubernetes Pod 的生命周期与故障排查
  • Java List列表创建方法大总结
  • 河南工信建设网站市场营销师报名官网
  • 没有文字的网站怎么优化建立旅游网站的目的
  • Spring Boot用户登录注册系统设计与实现
  • 筑牢AI安全防线:阿里云AI安全护栏
  • seo网站优化教程如何把自己电脑做网站服务器吗
  • 网站的内容建设安徽招标投标信息网
  • Qt中,​Latin-1​字符编码简介
  • 现有项目迁移到新的仓库中
  • 金融网站建设方案ppt模板亚马逊关键词搜索器
  • 分布式之抢购
  • Music Tag Web 怎么安装 ffmpeg?
  • Marked.js:一个强大的Markdown解析库
  • App HTTPS 抓包实战指南,原理、常见阻碍、逐步排查与工具组合
  • 网站建设花钱吗北京哪个网站建设最好
  • Weblogic XMLDecoder 反序列化漏洞(CVE-2017-10271)
  • HTTP 报文格式
  • 新手 Visual Studio 环境配置 详解
  • 24小时通过网站备案可以找厂家的网站
  • 关于物联网的基础知识(四)——国内有代表性的物联网平台都有哪些?
  • 网站建设对企业的好处有哪些wordpress page模版
  • 外贸网站建设的重要性用wordpress仿a站
  • (17)ASP.NET Core2.2 EF基于数据模型创建数据库