文章目录
- FP32、FP16 和 INT8
- 1. FP32
- 2. FP16
- 3. INT8
 
FP32、FP16 和 INT8
当涉及到深度学习和计算任务时,FP32、FP16、INT8 和 INT4 是常用的数据类型,用于表示不同的数值精度和存储需求。
1. FP32
单精度浮点数:提供了较高的精度和动态范围,适用于大多数科学计算和通用计算任务。
位数说明(32 bits)
符号位(sign):1 bit
指数位(exponent):8 bits
尾数位(fraction):24 bits (23 explicitly stored)

计算方式: 参考 维基百科 - Single-precision floating-point format
  
      
       
        
         
         
           v 
          
         
           a 
          
         
           l 
          
         
           u 
          
         
           e 
          
         
        
          = 
         
        
          ( 
         
        
          − 
         
        
          1 
         
         
         
           ) 
          
          
          
            s 
           
          
            i 
           
          
            g 
           
          
            n 
           
          
         
        
          × 
         
         
         
           2 
          
          
          
            ( 
           
          
            E 
           
          
            − 
           
          
            127 
           
          
            ) 
           
          
         
        
          × 
         
         
         
           ( 
          
         
           1 
          
         
           + 
          
          
          
            ∑ 
           
           
           
             i 
            
           
             = 
            
           
             1 
            
           
          
            23 
           
          
          
          
            b 
           
           
           
             23 
            
           
             − 
            
           
             i 
            
           
          
          
          
            2 
           
           
           
             − 
            
           
             i 
            
           
          
         
           ) 
          
         
        
          . 
         
        
       
         \mathrm{value}=(-1)^{\mathrm{sign}}\times2^{(E-127)}\times\left(1+\sum_{i=1}^{23}b_{23-i}2^{-i}\right). 
        
       
     value=(−1)sign×2(E−127)×(1+i=1∑23b23−i2−i).
- s i g n = b 31 = 0 sign = b_{31} = 0 sign=b31=0
- E = ( b 30 b 29 … b 23 ) 2 = ∑ i = 0 7 b 23 + i 2 + i = 124 E = (b_{30}b_{29} \ldots b_{23})_{2} = \sum\limits_{i=0}^{7}b_{23+i} 2^{+i} =124 E=(b30b29…b23)2=i=0∑7b23+i2+i=124
- 1. b 22 b 21 … b 0 = 1 + ∑ i = 1 23 b 23 − i 2 − i = 1 + 1 ⋅ 2 − 2 = 1.25 1.b_{22}b_{21} \ldots b_0 = 1 + \sum\limits_{i=1}^{23} b_{23-i} 2^{-i} = 1 + 1 \cdot 2^{-2} = 1.25 1.b22b21…b0=1+i=1∑23b23−i2−i=1+1⋅2−2=1.25
结果:
  
      
       
        
         
         
           v 
          
         
           a 
          
         
           l 
          
         
           u 
          
         
           e 
          
         
        
          = 
         
        
          ( 
         
        
          + 
         
        
          1 
         
        
          ) 
         
        
          × 
         
         
         
           2 
          
          
          
            − 
           
          
            3 
           
          
         
        
          × 
         
        
          1.25 
         
        
          = 
         
        
          + 
         
        
          0.15625. 
         
        
       
         \mathrm{value}=(+1)\times2^{-3}\times1.25=+0.15625. 
        
       
     value=(+1)×2−3×1.25=+0.15625.
 可借助 IEEE-754 Floating Point Converter 自动计算:

2. FP16
半精度浮点数:相对于FP32提供了较低的精度,但可以减少存储空间和计算开销。主要应用于深度学习和机器学习等计算密集型任务。
位数说明(16 bits)
符号位(sign):1 bit
指数位(exponent):5 bits
尾数位(fraction):11 bits (10 explicitly stored)

计算方式: 参考 维基百科 - Half-precision floating-point format
| Exponent | Significand = zero | Significand ≠ \neq = zero | Equation | 
|---|---|---|---|
| 0000 0 2 00000_2 000002 | zero, - 0 | subnormal numbers | ( − 1 ) s i g n × 2 − 14 × 0. f r a c t i o n 2 (-1)^{\mathrm{sign}}\times2^{-14}\times0.\mathrm{fraction}_{2} (−1)sign×2−14×0.fraction2 | 
| 0000 1 2 , . . . , 1111 0 2 00001_2, ..., 11110_2 000012,...,111102 | normalized value | normalized value | ( − 1 ) s i g n × 2 E − 15 × 1. f r a c t i o n 2 (-1)^{\mathrm{sign}}\times2^{E-15}\times1.\mathrm{fraction}_{2} (−1)sign×2E−15×1.fraction2 | 
| 1111 1 2 11111_2 111112 | ± infinity | NaN(quiet, signalling) | 
3. INT8
8 位整数:主要用于对图像、音频等进行量化处理,以减少计算量和存储需求。
使用 8 位(1 字节)内存来存储每个数值,可以表示范围从 -128 到 127 的整数。
位数说明(8 bits)
- 最高位代表符号位(0 - 正,1 - 负)
Maximum value:
  
      
       
        
        
          0 
         
         
        
          1 
         
         
        
          1 
         
         
        
          1 
         
         
        
          1 
         
         
        
          1 
         
         
        
          1 
         
         
        
          1 
         
        
       
         0 \quad 1 \quad 1 \quad 1 \quad 1 \quad 1 \quad 1 \quad 1 
        
       
     01111111
  
     
      
       
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          7 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          6 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          5 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          4 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          3 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          2 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          1 
         
        
       
         + 
        
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          0 
         
        
       
         = 
        
       
         127 
        
       
      
        0 \times 2^7 + 1 \times 2^6 + 1 \times 2^5 + 1 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 127 
       
      
    0×27+1×26+1×25+1×24+1×23+1×22+1×21+1×20=127
Minimum value:
  
      
       
        
        
          1 
         
         
        
          0 
         
         
        
          0 
         
         
        
          0 
         
         
        
          0 
         
         
        
          0 
         
         
        
          0 
         
         
        
          0 
         
        
       
         1 \quad 0 \quad 0 \quad 0 \quad 0 \quad 0 \quad 0 \quad 0 
        
       
     10000000
  
     
      
       
       
         1 
        
       
         × 
        
        
        
          2 
         
        
          7 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          6 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          5 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          4 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          3 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          2 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          1 
         
        
       
         + 
        
       
         0 
        
       
         × 
        
        
        
          2 
         
        
          0 
         
        
       
         = 
        
       
         − 
        
       
         128 
        
       
      
        1 \times 2^7 + 0 \times 2^6 + 0 \times 2^5 + 0 \times 2^4 + 0 \times 2^3 + 0 \times 2^2 + 0 \times 2^1 + 0 \times 2^0 = -128 
       
      
    1×27+0×26+0×25+0×24+0×23+0×22+0×21+0×20=−128



















