[{"content":"一、定点数 与 浮点数（核心区别） 1. 什么是定点数（Fixed Point） 定义 定点数表示方式的核心特点是：\n小数点位置是固定的\n计算机内部存的是一个整数，而真实数值由一个固定的比例关系解释。\n表示方式（直觉）\n真实值 = 存储的整数 × 缩放因子 例如规定：\n缩放因子 = 0.1\n那么：\n存 15 → 表示 1.5 存 1 → 表示 0.1 INT8 / INT16 / INT32 都属于定点数体系。\n本质特点\n所有数共用一个尺度 精度和范围无法同时兼顾 数值分布一旦变化就容易失真 在神经网络中的问题\n神经网络中同一 tensor 内：\n可能同时存在非常小的数和非常大的数 固定尺度无法适配这种变化\n2. 什么是浮点数（Floating Point） 定义 浮点数的核心思想是：\n允许小数点“浮动”，让数值大小和精细程度分开表示\n基本结构\n[ 符号位 ][ 指数位 ][ 尾数位 ] 符号位：正 / 负 指数位：数量级（决定“有多大”） 尾数位：有效数字（决定“有多准”） 直觉理解 浮点数本质等价于科学计数法：\n真实值 ≈ 尾数 × 2^(指数) 优势\n能同时表示极小和极大的数 非常适合神经网络中的数值波动 二、浮点数都有哪些（常见与神经网络相关） 从“通用 → 特化 → 低精度”顺序列出。\n1. FP64（双精度浮点） 指数位：多 尾数位：多 特点：极高精度、极大范围 使用场景：科学计算 深度学习中：几乎不用 2. FP32（单精度浮点） 指数位：8\n尾数位：23\n特点：稳定、通用\n使用场景：\n早期训练 优化器状态 累计计算 3. TF32（TensorFloat-32） NVIDIA 专用内部格式\n指数位：与 FP32 相同\n尾数位：显著减少\n特点：\n保留 FP32 的数值范围 用更低精度换取更高吞吐 对用户透明，仅用于 Tensor Core 内部。\n4. FP16（半精度浮点） 指数位：5\n尾数位：10\n特点：\n精度尚可 数值范围较小，容易溢出 工程上需要 loss scaling\n5. BF16（Brain Floating Point） 指数位：8（与 FP32 相同）\n尾数位：7\n特点：\n数值范围极稳 精度较粗但可接受 目前训练主流格式\n6. FP8（8 位浮点） FP8 没有唯一格式，常见两种：\nE4M3\n指数位：4 尾数位：3 偏向精度 E5M2\n指数位：5 尾数位：2 偏向范围 特点\n单独使用几乎不可行 必须配合工程级缩放因子 用于 GEMM 等高算力算子 7. FP4（4 位浮点） 表示能力极弱 强依赖 block scaling 主要用于研究和实验 8. NF4（Normalized Float 4） 不是 IEEE 浮点 没有指数 / 尾数结构 本质是查表编码 专为神经网络权重量化设计（QLoRA） 9. INT8（再次强调） 定点数 没有指数位 依赖缩放因子解释数值 常用于推理阶段 三、浮点数格式是什么（统一视角） 所有标准浮点数都遵循：\n[ 符号 ][ 指数 ][ 尾数 ] 关键权衡\n指数位多 → 数值范围大，不易溢出 尾数位多 → 表示精细，误差更小 一句话总结：\n指数位决定“能不能活”，尾数位决定“活得好不好”。\n四、指数位的正负是怎么表示的 1. 指数位本身没有符号位 这是一个关键点：\n浮点数中，只有“数值符号位”，没有“指数符号位”。\n指数位始终是一个非负整数。\n2. bias（指数偏移量） 为了解释正指数和负指数，引入 bias。\n规则\n真实指数 = 存储的指数值 − bias 重要特性\nbias 不占任何 bit bias 写在浮点格式标准中 所有硬件自动遵守 用户无法修改 直觉类比 就像楼层显示：\n显示 50 被定义为真实 0 层 显示值 − 50 = 真实楼层 五、bias 与 缩放因子（scaling factor） 1. bias 是什么 属于浮点格式 决定指数如何被解释 固定、不可变 对单个数生效 2. 缩放因子是什么 定义\n人为引入的整体倍率，用来调整一整个 tensor 的数值范围\n作用\n让数据落入低精度格式的“舒适区” 避免溢出 提高有效精度利用率 公式直觉\n量化前：x × scale 反量化：结果 ÷ scale 3. 缩放因子是怎么算出来的 工程上采用以下流程：\n统计 tensor 中的最大绝对值（amax）\n确认目标格式可表示的最大值\n计算：\nscale ≈ 可表示上限 / amax 所有值统一乘以 scale\n转低精度计算\n再除以 scale\n4. delayed scaling（延迟缩放） 问题\n单步 amax 可能出现异常峰值 scale 剧烈变化会破坏精度 解决方案\n维护一个历史窗口（如最近 1024 步） 使用窗口内最大 amax 提高训练稳定性 5. bias 与 scaling 的本质区别 项目 bias scaling 层级 浮点格式 工程策略 是否占 bit 否 单独存 是否可变 否 是 作用范围 单个数 整个 tensor 一句话区分：\nbias 是规则，scaling 是手段。\n结束语 定点数靠固定尺度解释世界，浮点数靠指数适配世界； 指数的正负由 bias 决定，低精度的生存由 scaling 兜底。\n","permalink":"https://kairosxy.cn/posts/llm-precision/","summary":"\u003ch2 id=\"一定点数-与-浮点数核心区别\"\u003e一、定点数 与 浮点数（核心区别）\u003c/h2\u003e\n\u003ch3 id=\"1-什么是定点数fixed-point\"\u003e1. 什么是定点数（Fixed Point）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e定义\u003c/strong\u003e\n定点数表示方式的核心特点是：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e小数点位置是固定的\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e计算机内部存的是一个整数，而真实数值由一个\u003cstrong\u003e固定的比例关系\u003c/strong\u003e解释。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e表示方式（直觉）\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e真实值 = 存储的整数 × 缩放因子\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e例如规定：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e缩放因子 = 0.1\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e那么：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e存 15 → 表示 1.5\u003c/li\u003e\n\u003cli\u003e存 1 → 表示 0.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eINT8 / INT16 / INT32 都属于定点数体系。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e本质特点\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e所有数共用一个尺度\u003c/li\u003e\n\u003cli\u003e精度和范围无法同时兼顾\u003c/li\u003e\n\u003cli\u003e数值分布一旦变化就容易失真\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e在神经网络中的问题\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e神经网络中同一 tensor 内：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e可能同时存在非常小的数和非常大的数\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e固定尺度无法适配这种变化\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"2-什么是浮点数floating-point\"\u003e2. 什么是浮点数（Floating Point）\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e定义\u003c/strong\u003e\n浮点数的核心思想是：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e允许小数点“浮动”，让数值大小和精细程度分开表示\u003c/strong\u003e\u003c/p\u003e\u003c/blockquote\u003e\n\u003cp\u003e\u003cstrong\u003e基本结构\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e[ 符号位 ][ 指数位 ][ 尾数位 ]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e符号位：正 / 负\u003c/li\u003e\n\u003cli\u003e指数位：数量级（决定“有多大”）\u003c/li\u003e\n\u003cli\u003e尾数位：有效数字（决定“有多准”）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e直觉理解\u003c/strong\u003e\n浮点数本质等价于科学计数法：\u003c/p\u003e","title":"大模型精度：从定点数到浮点数"},{"content":" 用一组具体数字，把这三个概念一次讲透\n1. 固定场景 有两个分布：\nTeacher 分布 (P)：老师认为的真实概率 Student 分布 (Q)：学生学出来的概率 假设有 3 个类别：A / B / C\n类别 Teacher P Student Q A 0.7 0.6 B 0.2 0.3 C 0.1 0.1 数组表示：\nP = [0.7, 0.2, 0.1] Q = [0.6, 0.3, 0.1] 2. 熵 (Entropy) 定义 $$H(P) = -\\sum_i P_i \\log P_i$$\n计算 已知：\n$\\log 0.7 \\approx -0.357$ $\\log 0.2 \\approx -1.609$ $\\log 0.1 \\approx -2.303$ 代入：\n$$ \\begin{aligned} H(P) \u0026amp;= -(0.7 \\times -0.357 + 0.2 \\times -1.609 + 0.1 \\times -2.303) \\ \u0026amp;= 0.250 + 0.322 + 0.230 \\ \u0026amp;\\approx 0.802 \\end{aligned} $$\n含义 熵表示分布本身的不确定性——teacher 描述自己需要的最少信息量。\n3. 交叉熵 (Cross Entropy) 定义 $$H(P, Q) = -\\sum_i P_i log Q_i$$\n注意：P 是权重，但 log 的是 Q\n计算 已知：\n$\\log 0.6 \\approx -0.511$ $\\log 0.3 \\approx -1.204$ $\\log 0.1 \\approx -2.303$ 代入：\n$$ \\begin{aligned} H(P, Q) \u0026amp;= -(0.7 \\times -0.511 + 0.2 \\times -1.204 + 0.1 \\times -2.303) \\ \u0026amp;= 0.358 + 0.241 + 0.230 \\ \u0026amp;\\approx 0.829 \\end{aligned} $$\n含义 交叉熵衡量：如果真实分布是 P，但你用 Q 去描述它，平均要付出多少代价。\n熵 $H(P) = 0.802$：P 描述自己，最节省 交叉熵 $H(P, Q) = 0.829$：Q 描述 P，稍差一点 差出来的那部分，就是 KL 散度。\n4. Forward KL ($D_{KL}(P||Q)$) 定义 $$D_{KL}(P||Q) = \\sum_i P_i \\log \\frac{P_i}{Q_i}$$\n也等于：\n$$D_{KL}(P||Q) = H(P, Q) - H(P)$$\n计算 $$ \\begin{aligned} D_{KL}(P||Q) \u0026amp;= H(P, Q) - H(P) \\ \u0026amp;= 0.829 - 0.802 \\ \u0026amp;= 0.027 \\end{aligned} $$\n含义 Forward KL 的核心是：P 做权重\n也就是说：P 觉得重要的地方，你如果 Q 没跟上，会被重点惩罚。\n类别 P(A)=0.7 (重要) Q(A)=0.6 (偏低) A 权重高 贡献损失 如果某个类别 P 很小（如 0.001），那 Q 在这点偏一点影响不大。\n特性：Mode-Covering Forward KL \u0026ldquo;怕漏模式\u0026rdquo;——teacher 支持的模式，你必须都覆盖到。\n如果 teacher 觉得某类可能，但 student 给了 0 概率，$log(0)$ 会趋向无穷大，直接爆炸。\n5. Reverse KL ($D_{KL}(Q||P)$) 定义 $$D_{KL}(Q||P) = \\sum_i Q_i \\log \\frac{Q_i}{P_i}$$\n计算 $$ \\begin{aligned} D_{KL}(Q||P) \u0026amp;= Q_A \\log\\frac{Q_A}{P_A} + Q_B log\\frac{Q_B}{P_B} + Q_C log\\frac{Q_C}{P_C} \\ \u0026amp;= 0.6 \\times \\log(0.6/0.7) + 0.3 \\times \\log(0.3/0.2) + 0.1 \\times \\log(0.1/0.1) \\end{aligned} $$\n分别算：\n$\\log(0.6/0.7) = \\log(0.857) \\approx -0.154$ $\\log(0.3/0.2) = \\log(1.5) \\approx 0.405$ $\\log(0.1/0.1) = 0$ 于是：\n$$ \\begin{aligned} D_{KL}(Q||P) \u0026amp;\\approx 0.6 \\times (-0.154) + 0.3 \\times 0.405 + 0.1 \\times 0 \\ \u0026amp;\\approx -0.092 + 0.122 \\ \u0026amp;\\approx 0.030 \\end{aligned} $$\n含义 Reverse KL 的核心是：Q 做权重\n也就是��：student 自己押了很多概率的地方，如果 teacher 不认可，会被惩罚。\n特性：Mode-Seeking Reverse KL \u0026ldquo;怕押错模式\u0026rdquo;——student 重注的地方，必须得到 teacher 认可。\n如果 student 把概率押到一个 teacher 根本不支持的类别，也会直接炸掉。\n6. 核心区别：它们在\u0026quot;怕什么\u0026quot; 散度类型 公式 关心的问题 怕什么 Forward KL $D_{KL}(P||Q)$ teacher 支持的模式，你有没有都覆盖到 怕漏模式 (mode-covering) Reverse KL $D_{KL}(Q||P)$ student 自己押重注的地方，teacher 是否认可 怕押错模式 (mode-seeking) 极端例子说明 设 teacher：\n$$P = [0.5, 0.5, 0]$$\n（A 和 B 都可以，C 不行）\n方案 1：$Q_1 = [1, 0, 0]$ 只选 A，不选 B。\n对 Forward KL：teacher 觉得 B 也可能，但 Q 给了 0 → 第二项 $\\log(0.5/0)$ 趋向无穷大 结论：Forward KL 讨厌\u0026quot;漏模式\u0026quot; 方案 2：$Q_2 = [0.5, 0, 0.5]$ 选了 A 和 C，但 C 在 teacher 里是 0。\n对 Reverse KL：student 重押的 C，teacher 根本不认可 → 第二项 $\\log(0.5/0)$ 趋向无穷大 结论：Reverse KL 讨厌\u0026quot;押错模式\u0026quot; 7. 一句话总结 概念 公式 一句话解释 交叉熵 $H(P, Q) = -\\sum P_i log Q_i$ 真实分布是 P，你用 Q 描述要花多少代价 Forward KL $D_{KL}(P||Q)$ teacher 认可的东西，你有没有都覆盖 Reverse KL $D_{KL}(Q||P)$ 你自己押的地方，teacher 认不认 8. 餐馆类比 假设 teacher 推荐：\n餐馆 A：70% 餐馆 B：20% 餐馆 C：10% student 选：\nA：60% B：30% C：10% 正常情况：还算接近\n极端情况 1：student 只盯着 A，不看 B → Forward KL 说：\u0026ldquo;你漏掉了 teacher 认可的一个模式\u0026rdquo;\n极端情况 2：student 重押一个老师根本不推荐的 D → Reverse KL 说：\u0026ldquo;你怎么把概率浪费在这种离谱地方上？\u0026rdquo;\n9. 为什么蒸馏常用交叉熵 因为：\n$$D_{KL}(P||Q) = H(P, Q) - H(P)$$\n其中 $H(P)$ 对 student 来说是常数。\n所以：\n$$\\min D_{KL}(P||Q) \\quad \\Leftrightarrow \\quad \\min H(P, Q)$$\n最小化 Forward KL，等价于最小化交叉熵。\n本质上，你是在说：让 student 在 teacher 认为重要的地方，把概率也提上去。\n10. 和高熵 / Forking Token 的联系 把 token 位置上的 teacher 分布想成两种情况：\n低熵 token $$P = [0.98, 0.01, 0.01]$$\nteacher 非常确定。\n交叉熵 / Forward KL 会强烈要求 student 也跟上来 Reverse KL 也不希望 student 乱跑 答案几乎写死，变化不大 高熵 Forking Token $$P = [0.45, 0.35, 0.20]$$\nteacher 认为这里有多个合理分支。\n如果 student 学成：\n$$Q = [0.95, 0.04, 0.01]$$\n虽然很自信，但 teacher 认可的多个可能性被压扁了。Forward KL 会比较讨厌这种塌缩。\n这就是 Forward KL 和\u0026quot;在关键位置保留探索空间\u0026quot;天然一致的地方。\n11. 压缩记忆版 概念 公式 记忆口诀 交叉熵 $H(P, Q)$ 用 Q 描述 P 要花多少代价 Forward KL $D_{KL}(P||Q)$ 覆盖 teacher 的所有模式 Reverse KL $D_{KL}(Q||P)$ 押 teacher 认可的注 12. 数值汇总 指标 数值 $H(P)$ 0.802 $H(P, Q)$ 0.829 $D_{KL}(P||Q)$ 0.027 $D_{KL}(Q||P)$ 0.030 ","permalink":"https://kairosxy.cn/posts/entropy/","summary":"\u003cblockquote\u003e\n\u003cp\u003e用一组具体数字，把这三个概念一次讲透\u003c/p\u003e\u003c/blockquote\u003e\n\u003ch2 id=\"1-固定场景\"\u003e1. 固定场景\u003c/h2\u003e\n\u003cp\u003e有两个分布：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eTeacher 分布 (P)\u003c/strong\u003e：老师认为的真实概率\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eStudent 分布 (Q)\u003c/strong\u003e：学生学出来的概率\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e假设有 3 个类别：A / B / C\u003c/p\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: left\"\u003e类别\u003c/th\u003e\n          \u003cth style=\"text-align: center\"\u003eTeacher P\u003c/th\u003e\n          \u003cth style=\"text-align: center\"\u003eStudent Q\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eA\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.7\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.6\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eB\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.2\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.3\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eC\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.1\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e0.1\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e数组表示：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-fallback\" data-lang=\"fallback\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eP = [0.7, 0.2, 0.1]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eQ = [0.6, 0.3, 0.1]\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003chr\u003e\n\u003ch2 id=\"2-熵-entropy\"\u003e2. 熵 (Entropy)\u003c/h2\u003e\n\u003ch3 id=\"定义\"\u003e定义\u003c/h3\u003e\n\u003cp\u003e$$H(P) = -\\sum_i P_i \\log P_i$$\u003c/p\u003e\n\u003ch3 id=\"计算\"\u003e计算\u003c/h3\u003e\n\u003cp\u003e已知：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e$\\log 0.7 \\approx -0.357$\u003c/li\u003e\n\u003cli\u003e$\\log 0.2 \\approx -1.609$\u003c/li\u003e\n\u003cli\u003e$\\log 0.1 \\approx -2.303$\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e代入：\u003c/p\u003e\n\u003cp\u003e$$\n\\begin{aligned}\nH(P) \u0026amp;= -(0.7 \\times -0.357 + 0.2 \\times -1.609 + 0.1 \\times -2.303) \\\n\u0026amp;= 0.250 + 0.322 + 0.230 \\\n\u0026amp;\\approx 0.802\n\\end{aligned}\n$$\u003c/p\u003e","title":"熵、交叉熵、KL 散度"}]