从位宽到梯度:深度学习底层精度的“平滑”艺术

简介: 本文介绍了浮点数的规格化与非规格化,以及混合精度的适用场景和步骤,并介绍了常见的FP16、FP32等的数据格式

规格化 & 非规格化

  • 规格化:正常的浮点数表示范围。只要在规格化范围内,有效数字的位数是满的,算起来最准、最快。
  • 非规格化:在规格化的精度位到达最低的时候,为了表示更小的数不被截断所做的扩展

规格化

  • 规定:指数位 $E$ 不全为 0不全为 1(例如 FP16 中,$1 \le E \le 30$)
  • 公式:$V = (-1)^S \times (\mathbf{1} + M) \times 2^{E - Bias}$
    • 隐藏位:公式中 $M$ 前边的 $1$ 是硬件自动补上的,不占内存。
    • 精度表现:尾数 $M$ 的每一位都代表有效精度,相对精度恒定。
    • 适用场景:绝大多数正常的科学计算和模型权重

非规格化

  • 规定:指数位 $E$ 全为 0(例如 FP16 中,$E = 0$,且尾数 $M \neq 0$)
  • 公式:$V = (-1)^S \times (\mathbf{0} + M) \times 2^{1 - Bias}$
    • 隐藏位变身:开头的隐藏位从 $1$ 变成了 $0$。这就是为了能表示比“最小规格化数”还要小的数。
    • 指数固定:注意指数部分不再是 $0-Bias$,而是固定为 $1-Bias$。这样做是为了和规格化数的最小值平滑衔接,没有断层。
    • 适用场景:数值极度接近 $0$ 时的“保命”阶段(渐进式下溢)。

上述定义的目的:平滑过渡

  • 根据规格化的定义:最小的规格化数($E=1$):$1.0 \times 2^{1-15} = \mathbf{2^{-14}}$。
  • 根据非规格化的定义:M全为1的时候,$0 + M$ 接近1,最大值 $\approx 2^{-14}$
    • 最大值:$M = 11...11$(接近 $1$)$\rightarrow 0.999... \times 2^{-14} \approx 2^{-14}$。
    • 最小值:$M = 00...01 \rightarrow 2^{-10} \times 2^{-14} = 2^{-24}$。
  • 当非规格化 $M$ 全为1的时候,$0 + M$ 接近1,最大值 $\approx 2^{-14}$,完美衔接规格化最小值,实现数值平滑过渡

例子 (以FP16为例)

在 FP16 中,指数位 $E$ 只有 5 位

  • $E$ 能够表示的二进制数是从 0000011111(即 0 到 31)。
  • Bias(偏置)固定为 15

规格化数的 $E$ 取值范围是 $1$ 到 $30$

  • 最大的规格化数($E=30$):$2^{30-15} = 2^{15} = 32768$。
  • 最小的规格化数($E=1$):$1.0 \times 2^{1-15} = \mathbf{2^{-14}}$。

当 $E = 1$ 最小时,指数部分已经是 $2^{-14}$ 了。如果想表示比 $2^{-14}$ 更小的数,$E$ 必须变成 00000

如果没有“非规格化”处理:

  • 当 $E=0$ 时,公式依然是 $(1 + M) \times 2^{0-15}$。
  • 那么能表示的最小值($M=0$)是 $1.0 \times 2^{-15}$。即所能表示的最小正数是 $2^{-15}$。比 $2^{-15}$ 更小的数(比如 $2^{-20}$)一个也表示不出来! 它们会全部直接跳到 0。这个 $0$ 到 $2^{-15}$ 之间的真空,就是“空档"

非规格化补档:

当 $E=0$ 时,隐藏位从 1. 变成 0.

公式变为:$0.MMMM \times 2^{-14}$(注意:为了平滑衔接,指数固定为 $1-Bias$)。

可以利用尾数 $M$ 继续往小了表示:

  • $0.1 \times 2^{-14} = 2^{-15}$
  • $0.01 \times 2^{-14} = 2^{-16}$
  • ...
  • $0.0000000001 \times 2^{-14} = \mathbf{2^{-24}}$(这是 FP16 的极限精度点)

平滑过渡

  • 根据规格化的定义:最小的规格化数($E=1$):$1.0 \times 2^{1-15} = \mathbf{2^{-14}}$。
  • 根据非规格化的定义:M全为1的时候,$0 + M$ 接近1,最大值 $\approx 2^{-14}$
    • 最大值:$M = 11...11$(接近 $1$)$\rightarrow 0.999... \times 2^{-14} \approx 2^{-14}$。
    • 最小值:$M = 00...01 \rightarrow 2^{-10} \times 2^{-14} = 2^{-24}$。
  • 当非规格化 $M$ 全为1的时候,$0 + M$ 接近1,最大值 $\approx 2^{-14}$,完美衔接规格化最小值,既实现数值平滑过渡,又保证了可以继续表示更小的数

结论

  • 如果不划分非规格化,FP16 只能表示到 $2^{-15}$ 就截断了; 有了非规格化,它能靠尾数前面的 $0$ 一直撑到 $2^{-24}$

浮点数数据精度格式

image.png

  • S:Sign bit,符号位。决定数字的正负(0 为正,1 为负)

  • E:Exponent,指数位。决定数字的范围(Range),即这个数能有多大或多小

  • M:Mantissa / Fraction,尾数位/精度位。决定数字的精度(Precision),即小数点后能精确到多少位

$$ \begin{align} & 规格化: & V = (-1)^S \times (1 + M) \times 2^{E - Bias} \\ & 非规格化: & V = (-1)^S \times (\mathbf{0} + M) \times 2^{1 - Bias} \end{align} $$

  • $(-1)^S$ (符号部分)

    • 如果 $S=0$,结果为正;
    • 如果 $S=1$,结果为负。
  • $(1 + M)$ (尾数部分)

    • 为了节省空间,计算机默认二进制开头永远是 1.(比如 $1.011...$),所以那个 1 不占位,只存后面的小数部分 $M$。这就是为什么同样的位数,浮点数比定点数能表示更精细的小数。
  • $2^{E - Bias}$ (指数部分)

    • $E$ 是你在内存里看到的那个无符号整数。在 IEEE 754 标准中,$E = 0$ 被预留给了“非规格化数”,所以规格化数的最小 $E = 1$

    • $Bias$ (偏置值):为了让指数能表示负数(即非常小的数,如 $2^{-126}$),需要减去一个中间数

      • 对于 FP32,$Bias = 127$
      • 对于 FP16,$Bias = 15$

常见格式

格式 总位数 (bit) S (符号) E (指数) M (尾数/精度) Bias (偏置) 数值范围 (Range) 核心用途
FP32 32 1 8 23 127 非常广 训练基准 / 科学计算
TF32 19 (内部) 1 8 10 127 与 FP32 相同 A100/H100 训练加速
BF16 16 1 8 7 127 与 FP32 相同 大模型训练 (最稳)
FP16 16 1 5 10 15 窄 (最高 65504) 混合精度训练 / 推理
Int32 32 1 - 31 - $\pm 2.1 \times 10^9$ 索引 / 计数 / 高压整数运算
Int16 16 1 - 15 - $\pm 32768$ 信号处理 / 特定硬件压缩
Int8 8 1 - 7 - -128 ~ 127 模型推理量化 (省显存)
  • FP32 (单精度):传统的“标杆”。8 位指数,23 位尾数。精度高,但太占空间。

  • FP16 (半精度):为了快。只有 5 位指数,10 位尾数。缺点是容易“溢出”(数字太大或太小就没法表示了)。

  • BF16 (Brain Float 16):Google 发明的。8位指数位,7 位尾数

    • 重点: 牺牲了精度来换取和 FP32 一样的数值范围,这样训练时就不容易溢出,比 FP16 更稳。
  • TF32 (Tensor Float 32):NVIDIA A100 专用。它是 FP32 的“瘦身版”,保留了 FP32 的范围,但在计算内部截断了精度。

  • Int32 (整型):标准的 32 位整数。1 位符号位,31 位数值位。

    • 特点:范围极大(约 $\pm 21$ 亿),但在深度学习模型参数中很少直接使用,因为它太占空间且不支持小数点。

    Int16 (短整型):16 位整数。1 位符号位,15 位数值位。

    • 特点:范围在 $\pm 32768$ 之间。在某些特定的底层硬件加速或早期的音频处理中会用到,但在主流深度学习训练/推理中不如 Int8 普及。
  • Int8:8 位整数。主要用于推理(部署),因为模型训练好后,很多参数不需要那么精确也能跑出好结果

梯度归零问题

  • 梯度归零:指在采用低精度浮点数(如 FP16)存储梯度时,由于数值过小,超出了该数据格式能表示的最小正值范围,导致梯度在表示或计算过程中被强制截断为 0。这会导致模型参数停止更新,训练陷入停滞。

原因

  • 硬件维度的指数限制:FP16 的指数位仅有 5 位,配合偏置值(Bias=15),其能表示的最小规范化正数为 $2^{-14}$。
  • 算法维度的精细化:FP16 的尾数位仅有 10 位。当数值接近 $2^{-14}$ 时,其最小可感知的变化步长(精度坍塌点)仅为 $2^{-24}$。
  • 正则化压制:在 Word2Vec 或大型 Transformer 中,L2 正则化会强制将权重和梯度压制在极小范围内。当梯度值 $g < 2^{-24}$ 时,在 FP16 体系下该数值无法被表示,直接映射为 0。

推导

  • 公式:$V = (-1)^S \times (1 + M) \times 2^{E - Bias}$
  • 最小规格化正数:为获得最小值,令指数位 $E = 1$,尾数位 $M = 0$:$V_{min_norm} = 1.0 \times 2^{1 - 15} = 2^{-14}$
  • 最小精度步长:在最小指数范围内,数值的精度由尾数 $M$ 的最后一位决定。FP16 有 10 位尾数,最后一位的权重为 $2^{-10}$。$\Delta V = 2^{-10} \times 2^{-14} = 2^{-24}$
  • 归零判定:若梯度计算结果 $g$ 满足 $|g| < \Delta V \text{ (即 } 2^{-24}\text{)}$,则在 FP16 的位宽限制下,计算机无法区分 $g$ 与 $0$ 之间的差异,执行硬件截断

解决方案

  • 损失放大:在反向传播前,将 Loss 乘以一个巨大的比例因子 $S$(例如 $2^{16}$):$Loss_{scaled} = Loss \times S$
  • 链式传导:根据链式法则,所有梯度都会随之放大 $S$ 倍,从而将原本位于 $2^{-24}$ 以下的梯度推回至 FP16 的有效表示范围($2^{-14}$ 以上)。$G{scaled} = \frac{\partial (Loss \times S)}{\partial w} = G{original} \times S$
  • 权重更新前还原: 在更新权重 $w$ 之前,先将梯度除以 $S$ 还原,并在 FP32 格式下进行更新,确保优化步长不受影响

低精度的意义

  • 高精度问题:高精度 = 费钱、耗电、慢
  • 低精度优点
    • 更少内存:显存占用减半,你可以跑更大的 Batch Size。
    • 更低能耗:执行一次 FP32 乘法 的能量约为 3.7pJ,而 FP16 仅需 1.1pJ。由于乘法器电路复杂度与位数平方成正比,低精度不仅能节省 2x 的内存,更能带来近 4x 的能效比提升,是大规模集群训练的工业标准
    • 更快的计算:单位时间内 GPU 能处理更多的运算(TFLOPS 更高)

精度选择

混合精度训练 (AMP)

  • 全称:Automatic Mixed Precision
  • 核心思想:能省则省,该准则准

操作

  1. 准备阶段:在内存中同时存在一套 FP32 权重(主权重)和一套 FP16 权重(计算用)。

  2. 前向传播 (Forward):使用 FP16 权重进行计算,得到 Loss。

  3. 损失缩放 (Loss Scaling) —— 关键步骤!

    • 在调用 loss.backward() 之前,先将 Loss 乘以一个因子 $S$(比如 65536)。

    • 公式:$Loss_{scaled} = Loss \times S$。

  4. 反向传播 (Backward)

    • 此时计算出的梯度全都被放大了 $S$ 倍。

    • 原本会变成 $0$ 的微小梯度(比如 $2^{-20}$),现在变成了 $2^{-20} \times 2^{16} = 2^{-4}$,成功留在 FP16 的规格化安全区

  5. 梯度还原 (Unscaling)

    • 在更新权重前,把这些 FP16 梯度除以 $S$,还原回真实大小。
  6. 权重更新

    • 将还原后的梯度应用到那套 FP32 主权重上。

    • 为什么用 FP32 更新? 因为梯度 $\times$ 学习率后的变化量非常小,只有 FP32 能精准捕捉这种细微的挪动。

A100/H100/V100

  • 训练阶段
    • 旧卡(如 V100),首选 FP16 混合精度
    • A100/H100 等新卡,强烈建议用 BF16,它更稳定,基本不需要调 Loss Scaling
  • 推理阶段
    • CV 任务:普遍能接受 Int8 量化。
    • NLP/大模型:通常用 FP16Int8/FP16 混合
目录
相关文章
|
2天前
|
人工智能 弹性计算 自然语言处理
OpenClaw是什么?阿里云OpenClaw一键部署官方教程(原Clawdbot/Moltbot)
2026年,开源AI智能体OpenClaw(“龙虾AI”)爆火。它是一款遵循MIT开源协议的AI自动化引擎与个人助手平台,能将大模型从“对话”变为“执行任务”。其核心架构由网关、智能体、技能和记忆构成,可自主行动、跨平台协同且高度可扩展。阿里云提供官方镜像一键部署方案,新用户首月服务器成本9.9元,还有大模型免费额度。
259 21
|
11天前
|
人工智能 机器人 Linux
阿里云/本地部署OpenClaw+Qwen+飞书集成多Agent协同实战:一人公司全流程搭建指南
在自媒体运营、内容创作、技术开发等场景中,单人承担全流程工作效率受限。基于OpenClaw智能代理框架、通义千问大模型与飞书协作平台,可搭建**1个主控Agent+6个专业Worker**的完整AI团队,实现任务自动拆解、分工执行、进度协同、成果整合,真正以单人之力完成公司级运作。本文完整覆盖多Agent定义、配置、飞书接入、2026年阿里云与本地全平台部署、大模型API配置及问题排查,所有代码可直接复用。
659 7
|
9天前
|
人工智能 安全 机器人
阿里云JVS Claw创意技能大赏启动:三分钟实现“养虾自由”,AI智能体由你定义!
阿里云推出JVS Claw——零代码AI智能体平台:https://t.aliyun.com/U/IJbaxg 三分钟手机“养虾”,24小时待命、越用越聪明。支持多端同步、云端沙箱安全隔离、自进化技能体系。现启动“创意技能大赏”征集活动,邀全民共建智能体生态!
163 15
|
26天前
|
数据采集 JSON API
从踩坑到高效落地:关键词搜索京东商品列表API的实操心得
本指南聚焦京东商品列表API实操,详解jd.item_search接口调用要点:涵盖必填参数(app_key、timestamp、sign等)、关键词/分页/价格筛选配置及核心响应字段(SKU、标题、售价、销量等),助开发者快速对接,高效获取合规商品数据。(239字)
205 22
|
24天前
|
人工智能 架构师 测试技术
AI帮你清理技术债
这是一款面向资深架构师的AI分析工具,专精遗留系统深度诊断。支持全自动解析代码,输出含技术栈、架构图(Mermaid)、代码质量评估、技术债分级、可落地重构方案及微服务拆分建议的结构化报告,助力高效现代化演进。
95 8
|
17天前
|
Linux API 数据安全/隐私保护
OpenClaw零门槛部署手册:阿里云+本地多系统搭建+免费大模型配置流程+常见问题解析
OpenClaw(昵称“龙虾”)作为2026年热门的开源AI框架,区别于传统聊天型AI,其核心价值在于能够自动执行任务、操作设备、处理文件、浏览网页,成为真正意义上的“数字员工”。该工具完全开源,支持多平台部署,既可以通过阿里云实现云端7×24小时稳定运行,也能部署在本地MacOS、Linux、Windows11设备上保障数据隐私。本文将详细拆解2026年OpenClaw的部署流程,包括阿里云轻量应用服务器一键部署、ECS手动部署,以及本地三大系统的安装步骤,同时提供阿里云百炼免费API与Coding Plan免费大模型的配置方法,并整理部署与使用中的常见问题,帮助新手零门槛上手。
517 6
|
11天前
|
Linux API 网络安全
阿里云/本地部署 OpenClaw 与多Agent协同实战:千问/Coding Plan API配置、飞书集成、常见问题排查
OpenClaw(曾用名Clawdbot)是2026年主流开源AI智能体框架,支持本地私有化部署、多Agent协同、工具调用、记忆管理与第三方平台接入,可广泛用于内容创作、项目管理、代码开发、自动化运营等场景。本文基于2026年最新稳定版,完整覆盖**阿里云云端部署、MacOS/Linux/Windows11本地安装、阿里云千问大模型API配置、Coding Plan免费模型接入、多Agent协同、飞书集成、常见问题排查**全流程,所有配置与命令均可直接复制使用,无技术门槛也能快速落地。
448 8
|
2天前
|
人工智能 API 数据安全/隐私保护
OpenClaw(“小龙虾”)超全保姆级教程:3分钟搞定阿里云/本地部署+API配置+5个必备Skill与常见问题详解
OpenClaw(曾用名Clawdbot)以“GitHub星标之王”的姿态席卷开源圈,但其基础功能仅能满足简单对话需求。对新手而言,真正解锁其生产力价值的关键,在于安装适配场景的Skill(技能插件)——如同给天才宝宝搭配乐高组件,装上信息检索Skill就能实时洞察世界,配上办公管理Skill就能变身金牌秘书,组合使用更能实现“搜索-提炼-创作”全流程自动化。
99 4
|
8天前
|
监控 安全 Java
地缘冲突背景下海湾国家网络钓鱼与恶意软件攻击演化及防御研究
本文基于Bitdefender实测数据,深度剖析2026年中东冲突升级后海湾国家钓鱼攻击激增(+130%)的复合威胁:阿拉伯语场景化诱饵、Java远控木马与HTA+PowerShell无文件攻击协同渗透。提出覆盖邮件安全、终端防护、威胁狩猎与应急响应的全流程防御体系,并提供可复现检测代码与配置范例。(239字)
57 4
|
8天前
|
人工智能 自然语言处理 监控
模型介导钓鱼:AI 助手被诱导生成钓鱼内容的机理与防御
本文剖析AI办公时代新型威胁——模型介导钓鱼:攻击者利用提示注入,在邮件中嵌入低可见性恶意指令,诱使Copilot等AI助手生成高可信钓鱼摘要。该攻击绕过传统防御,隐蔽性强、成功率高。研究提出覆盖输入净化、指令隔离、输出审计、行为管控的全链路防御体系,并提供可落地的检测拦截代码。(239字)
60 3

热门文章

最新文章