当前位置:   article > 正文

模型量化2:最常用的数据类型:float32 (FP32)、float16 (FP16) 、 bfloat16 (BF16)【IEEE754制32位浮点数转换为十进制】

bf16

一、浮点表示的背景

数据类型的选择决定了所需的计算资源的数量,从而影响模型的速度和效率。在深度学习应用中,平衡精度和计算性能成为一项至关重要的练习,因为更高的精度通常意味着更大的计算需求。

在各种数据类型中,浮点数主要用于深度学习,因为它们能够以高精度表示各种值。通常,浮点数使用n位来存储数值。这些n位进一步分为三个不同的组成部分:

  • 符号:符号位指示数字的正数或负数。它使用一位,其中 0 表示正数,1 表示负数。
  • 指数:指数是一段位,表示基数(在二进制表示中通常为 2)的幂。指数也可以是正数或负数,允许数字表示非常大或非常小的值。
  • 有效数/尾数:剩余位用于存储有效数,也称为尾数。这代表数字的有效数字。数字的精度在很大程度上取决于有效数字的长度。

这种设计允许浮点数以不同的精度级别覆盖广泛的值。用于这种表示的公式是:

( − 1 ) sign × base exponent × significand \color{red}{(-1)^{\text{sign}} \times \text{base}^{\text{exponent}} \times \text{significand}} (1)sign×baseexponent×significand

为了更好地理解这一点,让我们深入研究深度学习中一些最常用的数据类型:float32 (FP32)、float16 (FP16) 和 bfloat16 (BF16):

  • FP32:使用 32 位来表示数字:一位表示符号,八位表示指数,其余 23 位表示有效数。虽然 FP32 提供高精度,但其缺点是计算量和内存占用量较高。
  • FP16:使用 16 位来存储数字:一位用于符号,五位用于指数,十位用于有效数。尽管这使其内存效率更高并加速计算,但范围和精度的降低可能会导致数值不稳定,从而可能影响模型的准确性。
  • BF16:也是一种 16 位格式,但其中一位用于符号,八位用于指数,七位用于有效数。与 FP16 相比,BF16 扩大了可表示范围,从而降低了下溢和上溢风险。尽管由于有效位数较少而导致精度降低,但 BF16 通常不会显着影响模型性能,并且对于深度学习任务来说是一个有用的折衷方案。

在这里插入图片描述

二、IEEE754制32位浮点数转换为十进制

首先了解一下IEEE754制32位浮点数的存储方式
在这里插入图片描述
一个由IEEE745制的32位浮点数由三部分组成

组成部分位数含义
符号位1位0为正,1为负
指数位2~9位类比十进制的科学计数法,此处以2为底,指数位为幂。注意还需要加上127的偏移量
尾数位10~32位省略了1. 实际为1.(尾数位),类似小数的二进制写法

核心逻辑:

I E E E 制浮点数 ⇒ 浮点数的二进制表示 ⇒ 浮点数的十进制表示 IEEE制浮点数⇒浮点数的二进制表示⇒浮点数的十进制表示 IEEE制浮点数浮点数的二进制表示浮点数的十进制表示

我们用例子来帮助理解,

1、例一

我们有一个用IEEE754二进制表示的32位浮点数:

0 1000 0000 1001 0010 0001 1111 1011 011

求它所代表的十进制浮点数是多少?

第一步:
符号位为 0 ⇛ 正数 0⇛正数 0正数

第二步:
尾数部分: 1.1001 0010 0001 1111 1011 011
如果结尾处是多个0,则将多余的0舍去

第三步:
指数位: ( 10000000 ) 2 = ( 128 ) 10 (10000000)_2=(128)_{10} (10000000)2=(128)10
减去偏移量:128+(-127)=1

第四步:组合:
根据 ( − 1 ) sign × base exponent × significand \color{red}{(-1)^{\text{sign}} \times \text{base}^{\text{exponent}} \times \text{significand}} (1)sign×baseexponent×significand,计算得:

( − 1 ) 0 × 2 1 × 1. 10010010000111111011011 = 11.0010010000111111011011 (-1)^0\times 2^1 \times 1.\color{#F784EB}{1001 0010 0001 1111 1011 011}\color{black}{=11.001 0010 0001 1111 1011 011} (1)0×21×1.10010010000111111011011=11.0010010000111111011011

至此已将IEEE制浮点转换为浮点数的二进制表示

最后再将 11.0010 0100 0011 1111 0110 11 11.0010\quad0100\quad0011\quad1111\quad0110\quad11 11.0010010000111111011011 转换为十进制:

1 × 2 1 2 + 1 × 2 0 1 + 0 × 2 − 1 0 + 0 × 2 − 2 0 + 1 × 2 − 3 0.125 + 0 × 2 − 4 0.0625 + 0 × 2 − 5 0 + 1 × 2 − 6 0.015625 + 0 × 2 − 7 0 + 0 × 2 − 8 0 + 0 × 2 − 9 0 + 0 × 2 − 10 0 + 1 × 2 − 11 0.00048828125 + 1 × 2 − 12 0.000244140625 + 1 × 2 − 13 0.0001220703125 + 1 × 2 − 14 0.00006103515625 + 1 × 2 − 15 0.000030517578125 + 1 × 2 − 16 0.0000152587890625 + 0 × 2 − 17 0 + 1 × 2 − 18 0.000003814697265625 + 1 × 2 − 19 0.0000019073486328125 + 0 × 2 − 20 0 + 1 × 2 − 21 + 1 × 2 − 22 = 3.1415927410125732 1×212+1×201+0×210+0×220+1×230.125+0×240.0625+0×250+1×260.015625+0×270+0×280+0×290+0×2100+1×2110.00048828125+1×2120.000244140625+1×2130.0001220703125+1×2140.00006103515625+1×2150.000030517578125+1×2160.0000152587890625+0×2170+1×2180.000003814697265625+1×2190.0000019073486328125+0×2200+1×221+1×222=3.1415927410125732 1×21+1×20+0×21+0×22+1×23+0×24+0×25+1×26+0×27+0×28+0×29+0×210+1×211+1×212+1×213+1×214+1×215+1×216+0×217+1×218+1×219+0×220+1×221+1×222=21000.1250.062500.01562500000.000488281250.0002441406250.00012207031250.000061035156250.0000305175781250.000015258789062500.0000038146972656250.000001907348632812503.1415927410125732

2、例二

我们有一个用IEEE754二进制表示的32位浮点数:

0 1000 0011 0100 1000 0000 0000 0000 000

求它所代表的十进制浮点数是多少?

第一步:
符号位为 0 ⇛ 正数 0⇛正数 0正数

第二步:
尾数部分: 1.0100 1000 0000 0000 0000 000
将多余0舍去得
1.0100 1

第三步:
指数位: ( 10000011 ) 2 = ( 131 ) 10 (1000 0011)_2=(131)_{10} (10000011)2=(131)10
减去偏移量:131+(-127)=4

第四步:组合:

1.01001 × 2 4 = 10100.1 1.01001\times2^4=10100.1 1.01001×24=10100.1

至此已将IEEE制浮点转换为浮点数的二进制表示

最后再将 10100.1 10100.1 10100.1 转换为十进制:

1 × 2 4 16 + 0 × 2 3 0 + 1 × 2 2 4 + 0 × 2 1 0 + 0 × 2 0 0 + 1 × 2 − 1 0.5 = 20.5 1×2416+0×230+1×224+0×210+0×200+1×210.5=20.5 1×24+0×23+1×22+0×21+0×20+1×21=1604000.520.5




权重量化简介
【IEEE754制32位浮点数】与十进制相互转换
进制转换
带小数十进制转二进制–图解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/986491
推荐阅读
相关标签
  

闽ICP备14008679号