深度学习-双精度

浮点数据类型主要分为双精度(Fp64)、单精度(Fp32)、半精度(FP16)。
首先来看看为什么需要混合精度。使用FP16训练神经网络,相对比使用FP32带来的优点有:

  • 减少内存占用:FP16的位宽是FP32的一半,因此权重等参数所占用的内存也是原来的一半,节省下来的内存可以放更大的网络模型或者使用更多的数据进行训练。
  • 加快通讯效率:针对分布式训练,特别是在大模型训练的过程中,通讯的开销制约了网络模型训练的整体性能,通讯的位宽少了意味着可以提升通讯性能,减少等待时间,加快数据的流通。
  • 计算效率更高:在特殊的AI加速芯片如华为Ascend 910和310系列,或者NVIDIA VOTAL架构的Titan V and Tesla V100的GPU上,使用FP16的执行运算性能比FP32更加快。

但是使用FP16同样会带来一些问题,其中最重要的是1)精度溢出和2)舍入误差

  • 数据溢出:数据溢出比较好理解,FP16的有效数据表示范围为 6.10 × 10 − 5 ∼ 655046.10 × 1 0 − 5 ∼ 65504 6.10×10−5∼655046.10\times10^{-5} \sim 65504 6.10×105655046.10×10565504,FP32的有效数据表示范围为 1.4 × 10 − 451.7 × 10381.4 × 1 0 − 45   1.7 × 1 0 38 1.4×10−45 1.7×10381.4\times10^{-45} ~ 1.7\times10^{38} 1.4×10451.7×10381.4×1045 1.7×1038。可见FP16相比FP32的有效范围要窄很多,使用FP16替换FP32会出现上溢(Overflow)和下溢(Underflow)的情况。而在深度学习中,需要计算网络模型中权重的梯度(一阶导数),因此梯度会比权重值更加小,往往容易出现下溢情况。
  • 舍入误差:Rounding Error指示是当网络模型的反向梯度很小,一般FP32能够表示,但是转换到FP16会小于当前区间内的最小间隔,会导致数据溢出。如0.00006666666在FP32中能正常表示,转换到FP16后会表示成为0.000067,不满足FP16最小间隔的数会强制舍入。

相关推荐

  1. 深度学习-精度

    2024-01-04 15:34:06       58 阅读
  2. 精读深度学习 - 函数式之美》

    2024-01-04 15:34:06       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-04 15:34:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-04 15:34:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-04 15:34:06       87 阅读
  4. Python语言-面向对象

    2024-01-04 15:34:06       96 阅读

热门阅读

  1. 【docker】安装docker环境并启动容器

    2024-01-04 15:34:06       55 阅读
  2. linux新M2固态挂载

    2024-01-04 15:34:06       65 阅读
  3. 【Python】线程和多线程的使用

    2024-01-04 15:34:06       66 阅读
  4. GPT-5:未来的大潮,即将到来?

    2024-01-04 15:34:06       55 阅读
  5. Go语言开发利器:几种主流IDE的优势与应用

    2024-01-04 15:34:06       49 阅读
  6. 安卓作业002 - 用户登录窗口

    2024-01-04 15:34:06       55 阅读
  7. 应知应会的python常用库

    2024-01-04 15:34:06       49 阅读
  8. 计算机网络名词解释

    2024-01-04 15:34:06       56 阅读