Skip to content

L11: <浮点→低精度浮点>量化过程中,对于”指数量化“表述有歧义。 #10

Description

@Chi-Shan0707
Image

"该类量化过程不引入缩放操作,仅通过截断尾数位与指数位实现精度压缩,同时保留浮点结构。因此其数值误差主要来源于舍入,而非量化映射误差。"

这容易引起歧义,可能会被错误理解为,如,指数为 (01111011), 我截取前5位(这甚至没有做Unbiasing),或者Unbiasing后截断前5或后5。
实际上:

尾数位的降精度确实表现为物理上的位截断(Truncation)或舍入(Rounding);

但指数位的降精度本质上需要进行重新偏置(Re-biasing):

以 8bits $\rightarrow$ 5bits 为例子

第一步:解偏置(Unbiasing),获取真实指数系统首先需要从源数据类型中提取真实物理量级。

$$E_{real} = E_{FP32_stored} - 127$$

第二步:重新偏置(Re-biasing),映射至目标精度计算在低精度格式下,该量级应该对应的存储值。

$$E_{FP16_target} = E_{real} + 15$$

第三步:动态范围校验与极值处理(这是所谓“截断”的真实动作)

由于 FP16 的指数空间远小于 FP32,必须对 $E_{FP16_target}$

行范围判定。这并非位截断,而是边界饱和处理(Saturation):

  • 上溢(Overflow)处理:若 $E_{real} &gt; 15$,即数值超出了 FP16 所能表达的上限( $\sim 65504$ ),硬件通常会将其强制赋值为该数据类型允许的最大值,或直接标记为无穷大(Inf)。
  • 下溢(Underflow)处理:若 $E_{real} &lt; -14$ ,即数值过于接近绝对零,跌穿了 FP16 的常规表示范围,系统会触发非规格化(Subnormal / Denormal)处理逻辑,或直接冲刷为零(Flush-to-Zero, FTZ)。

误差来源的差异:尾数位的压缩带来的是舍入误差(Rounding Error);而指数位的位宽减少(动态范围变窄)带来的是饱和/溢出误差(Overflow/Underflow),当数值超出表示范围时,会被强制置为 Inf 或 0。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions