当前位置: 首页 > ds >正文

Float32、Float16、BFloat16

  • 我们先介绍 Float32、Float16、BFloat16 的 浮点数表示方法

  • 然后根据浮点数表示,来分析总结他们是怎么控制 精度和 数值范围 的

  • 最后再来对比的说明 Float32、Float16、BFloat16 的 应用场景 和 硬件支持

1、浮点数的表示方法

  • Float32 : 单精度浮点数格式

    • 使用 32位(4字节)来表示一个浮点数

    • 遵循 IEEE 754标准,32位 包括 1 位符号位、8 位指数部分和 23 位尾数部分

  • Float16:半精度浮点数格式,

    • 使用 16位(2字节)来表示一个浮点数

    • 遵循 IEEE 754标准,16位 包括 1 位符号位、5 位指数部分和 10 位尾数部分

  • BFloat16: Brain Floating Point 16-bit

    • 使用 16位(2字节)来表示一个浮点数

    • 不遵循 IEEE 754标准,16位 包括 1 位符号位、8 位指数部分 和 7 位尾数部分

数据类型

一共位数

符号位数(Sign)

指数位数(Exponent)

尾数位数(Mantissa)

Float32

32

1

8

23

Float16

16

1

5

10

BFloat16

16

1

8

7

float32 结构为 :
S | EEEEEEEE | MMMMMMMMMMMMMMMMMMMMMMMfloat16 结构为 :
S | EEEEE | MMMMMMMMMMbfloat16 结构为 :
S | EEEEEEEE | MMMMMMMMMMMM

 

浮点数的值 通过以下公式计算:

\text { value }=(-1)^{S} \times(1+\text { Mantissa }) \times 2^{(\text {Exponent-Bias })}

其中 :

  • S:符号位,表示数字的正负:0 为正,1 为负

  • Mantissa:尾数部分

  • Exponent:指数部分,表示 2 的幂次

  • Bias:指数的偏置

    • float32 的 Bias 为 127

    • float16 的 Bias 为 15

    • bfloat16 的 Bias 为 127

下面我们具体来举例说明 浮点数的表示

1)float32

  float32 :32位浮点数,通常称为 单精度浮点数

2)float16

  float16 是 16 位浮点数,通常称为 半精度浮点数

  float16的浮点数表示方法 与 float32 的表示方法类似,只不过在表示上有较小的精度和范围。

3)bfloat16

BFloat16 主要用于 深度学习训练阶段,特别是在需要保持与 Float32 类似的 数值范围 的同时,减少内存占用(精度比较低)


2、指数偏置 Bias

指数的偏置(Bias) 主要是用来 控制指数部分的正负。

由上面例子可知 :

  • 实际指数 是 -1,它表示的是浮点数的真实指数。

  • 实际指数 -1 加上 指数偏置 127 后,得到存储的指数 126,它的二进制形式 01111110 是存储在浮点数表示中的值。

所以,指数偏置的作用:是将原本可能为负的指数值 (-1),转换为 无符号整数(126),以便于计算机在表示时能够方便地使用无符号整数表示 指数部分。


3、精度 与 数值范围

1)指数部分 (Exponent) 控制数据范围

 

  结论 :指数部分位数越多,可以表示的 数据范围越大 

2)尾数部分 (Mantissa) 控制精度

结论 :尾数部分位数越多,可以表示的 精度越高

有效数字:指的是在浮点数表示中,能够精确表达的数字。即,从最左边非零数字到最后一位数字的所有数字

  • 123.45 有 5 个有效数字:1, 2, 3, 4, 5

  • 0.00456 有 3 个有效数字:4, 5, 6

  • 400 有 3 个有效数字:4, 0, 0


4、应用场景 与 硬件支持

应用场景:

  • Float32:最常见的浮点数类型,适用于大多数机器学习的训练阶段和推理阶段,适合精度要求高的任务

  • Float16: 主要用于推理阶段, 数值精度较低,可通过硬件加速提高计算效率

  • BFloat16:主要用于深度学习训练阶段,尤其是在需要保持数值范围的同时(BFloat16保留了和 float32 类似的数值范围),又想要降低内存需求的任务,旨在减少内存占用和加速计算

硬件支持 :

  • Float32 :大多数现代硬件(如 CPU 和 GPU)都对 float32 提供良好的支持

  • Float16:一些 GPU(尤其是 NVIDIA 的 Volta 及之后的架构,如 V100、A100、T4)对 float16 有硬件支持,可以显著加速训练和推理

  • BFloat16bfloat16 在某些硬件(特别是 Google 的 TPU 以及 Intel 的处理器)上得到硬件支持,用于加速深度学习的训练和推理

http://www.xdnf.cn/news/2086.html

相关文章:

  • 【KWDB 创作者计划】_深度学习篇---数据获取
  • 一篇速成Linux 设置位 S(SetUID)
  • 欧拉计划 Project Euler56(幂的数字和)题解
  • SAP ABAP S/4新语法
  • python代做推荐系统深度学习知识图谱c#代码代编神经网络算法创新
  • ai聊天流式响应,阻塞式和流式响应 nginx遇到的坑
  • c#加密证件号的中间部分,改为*号
  • Flask 请求数据获取方法详解
  • 信息学奥赛一本通 1509:【例 1】Intervals | OpenJudge 百练 1201:Intervals
  • NLP高频面试题(五十四)——深度学习归一化详解
  • 使用npm install或cnpm install报错解决
  • 鼠标指定范围内随机点击
  • websheet之 编辑器
  • PyTorch与CUDA的关系
  • Android——Activity与Fragment通信
  • Asp.Net Core 异常筛选器ExceptionFilter
  • Python教程(一)——Python速览
  • 白鲸开源与亚马逊云科技携手推动AI-Ready数据架构创新
  • <论文>(谷歌)用于时序链接预测的迁移学习
  • Asp.Net Core 基于(asp.net core 2.2) 创建asp .net core空项目
  • vite+vue2+elementui构建之 package.json
  • 深度解析:从12306看混合云架构下的高并发系统设计
  • Z-Wave正通过自我革新,重塑在智能家居领域新定位
  • 2025年的营销趋势-矩阵IP
  • (Go Gin)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
  • 数据湖DataLake和传统数据仓库Datawarehouse的主要区别是什么?优缺点是什么?
  • FlinkSql入门与实践
  • Linux文件管理完全指南:从命名规则到压缩解压
  • OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明
  • 字节:视频一致性生成论文速读