0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎么使用蒸馏法对低精度推理出浮点网络进行高保真的转换?

Dbwd_Imgtec 来源:Imagination Tech 作者:Szabolcs Cséfalvay 2021-06-19 14:42 次阅读

神经网络加速器快速、低功耗推理的一个主要挑战是模型的大小。近年来,随着模型尺寸的增加,推理时间和每次推理能耗的相应增加,神经网络向更深的神经网络发展,激活和系数也在增加。这在资源受限的移动和汽车应用中尤为重要。

低精度推理有助于通过降低 DRAM 带宽(这是影响设备能耗的一个重要因素)、计算逻辑成本和功耗来降低推理成本。在这种情况下,下面的问题自然而然地出现了:编码神经网络权重和激活的最佳位深度是多少?有几个建议的数字格式可以减少位深度,包括Nvidia的TensorFloat,谷歌的8位非对称定点(Q8A)和bfloat16。

但是,虽然这些格式是朝着正确方向迈出的一步,但不能说它们是最佳的:例如,大多数格式都为要表示的每个值存储一个指数,当多个值在同一区间时,这些指数可能是多余的。

更重要的是,他们没有考虑神经网络的不同部分通常有不同的位深度要求这一事实。有些图层可以用较低的位深度编码,而其他图层(如输入和输出层)需要更高的位深度。MobileNet v3就是一个例子,它可以从 32 位浮点转换为大多数在 5-12 位区间内的位深度(见图 1)。

我们称使用不同的位深度来编码原始浮点网络的不同部分为可变位深度 (VBD) 压缩。当然,权重的位深度编码和网络准确度也是需要权衡的。较低的位深度会导致更有效的推断,但删除过多的信息会损害准确性,这意味着需要找到一个最佳的折中方案。VBD 压缩的目标是在压缩和精度之间进行平衡。

原则上,可以将其视为优化问题:我们希望用尽可能少的比特数达到最佳精度的网络。这是通过在损失函数中添加新的一项来实现的,该项表示网络的大小,以便可以沿原始损失函数最小化,该函数可以大致表示为:总损失=网络错误+γ(网络大小)其中γ是一个权重因子,用于控制网络大小和误差之间的目标权衡。

因此,要以这种方式压缩网络,我们需要两件事:精度的可微度量(错误)和网络大小的可微度量(压缩位深度)。网络大小项和网络误差项相对于比特数的可微性非常重要,因为它使我们能够优化(学习)比特深度。

可微网络规模

对于可微量化,我们可以使用任何具有可微位深度参数的函数,该参数将一个或多个浮点值映射为硬件可表示的压缩数字格式。例如,我们可以使用 Google Q8A 量化的可变位深度版本(其中可表示范围不是以零为中心):

d76f1e1a-d02c-11eb-9e57-12bb97331649.png

其中:

⌊x⌉是 x 四舍五入到最近的整数(使用目标硬件平台的舍入模式)

B 是位深度。

E 是浮点表示的指数。

α是不对称参数。

在实践中,量化参数 B、E 和α用于压缩多个权重,例如,单个参数用于压缩整个神经网络层(激活或权重张量)或层内的通道。我们还可以通过将不对称参数设置为 0 来使用对称量化(有效地将其转换为缩放的 B位无符号整数格式):d7900cd8-d02c-11eb-9e57-12bb97331649.png为了实现对所有参数的反向传播,我们使用直通估计器,将圆形函数的梯度作为 1。这使得公式中的所有操作都是可微的,使所有参数(包括位深度)都可学习!此时,我们可以选择要训练的参数:1. 权重和最大压缩位深度。2. 只有权重和指数(对于固定的位深度)。3. 只有量化参数,它有几个好处(如下所述),成本可能更低的压缩比。在生成本文的结果时选择了选项 3。

另一个需要考虑的方面是优化位深度参数 B(对于某些格式的指数 E):任何硬件都需要 B 是整数。要找到整数解,我们有多种选择:

将四舍五入与直通估计器一起应用于 B 参数(例如,使用公式)。但是,这给优化表面带来了不连续性,虽然可以处理,但超出了本文的范围。

d79c9da4-d02c-11eb-9e57-12bb97331649.png

这里选择的替代方案是在训练的第一阶段优化浮点数B,“保守”地将其四舍五入到最近的整数⌈B⌉( 否则激活和权重张量的重要部分可能会被钳制),将其固定为常量并继续训练。这样平均会损失大约 0.5 位的潜在压缩,但保证不会发生不适当的裁剪。

可微精度测度

为了测量网络的准确性,我们可以简单地使用网络最初训练的相同损失函数。然而,在许多应用中,目标是压缩一个已经用32 位浮点训练的网络,这意味着我们可以用蒸馏损失代替。这意味着压缩网络的精度是根据原始网络的输出来衡量的。在这项工作中,选择(输出)logits之间的绝对差异作为蒸馏损失,但也可以采用其他措施。

使用的蒸馏损失定义为:

d7a9323a-d02c-11eb-9e57-12bb97331649.png

(等式1)

蒸馏损失有许多优点:

标签训练:我们不需要标签数据来压缩网络,因为我们用原始网络的输出取代了标签。这意味着我们可以压缩网络,而无需访问(可能是专有的)原始数据集:我们只需要具有代表性的输入和原始网络。

通用性:神经网络压缩机具有通用性:它不需要特定于网络。

更少的训练数据:由于我们只是训练量化参数,过度拟合的范围大大缩小,所以我们可以使用更少的训练数据。有时候一张图片就足够了!

软目标:由于从输入得到的蒸馏损失比标签包含更多的量化误差信息,因此它允许更快、更准确的收敛。

我们可以使用蒸馏损失将权重与量化参数一起训练。然而,在这种情况下,我们需要更多的训练数据来防止过度拟合。两全其美的方法是以很小的学习率来训练权重,并提前停止。这样,权重可以抵消量化误差,而不会过度拟合数据集。

可微压缩将通用的、可微的精度度量与可微量化相结合,得到可微压缩的损失函数:

d7a9323a-d02c-11eb-9e57-12bb97331649.png

(等式2)第一个项是误差,第二项是网络大小的成本。B 是网络的平均位深度,可根据整个网络的深度参数来计算:

d7e7c4e6-d02c-11eb-9e57-12bb97331649.png

(等式3)其中c_i是使用位深度参数B_i量化的网络参数(权重或激活)的数量。请注意,此测量方式取决于批次大小。例如,如果对32个批次网络进行评估,则激活张量的大小实际上比使用1 批次大小的高出 32 倍。如果目标是将网络权重存储在尽可能小的空间中,则此指标中也可以忽略激活。

选择量化粒度一些神经网络表示,如谷歌的Q8A格式,允许将不同的比例系数(与上面的指数E的2次幂相关)应用于权重张量(过滤器)的不同通道。这种更精细的粒度可提高给定压缩级别的网络精度。

通过对每个通道应用单独的 E 和α参数,同时对整个张量使用相同的 B 参数,可以通过可变位深度压缩实现相同的目标。然而,每个通道的量化会导致更慢的收敛,因此根据我们的经验,使用学习前张量参数的训练阶段更快,然后将这些参数分解为每通道参数,并让它们在另一个训练阶段收敛。

这最终导致三个阶段的训练计划:

根据张量训练所有量化参数

切换到每通道指数和移位参数

将位深度舍入到整数,并将其固定到常量,然后训练指数和移位参数α。此外,权重也以较小的学习率进行训练。

结果对象分类

压缩分类网络的精确度。

图像分割

应用于分割网络的不同压缩方法之间的比较。第二个列基于启发式算法,该算法试图在不使用反向传播的情况下确定固定位深度的最佳指数。

风格转换

最后一列使用上述启发式给出10 比特时的完全空白输出。

结论用于编码神经网络权重和激活的位深度对推理性能有显著影响。将大小精度权衡作为损失函数的一部分,可以在神经网络训练过程中学习任意粒度的最佳比特深度。此外,当优化将 0 位分配给网络的一部分时,它会有效地从架构中删除该部分,作为一种架构搜索,从而降低计算成本和带宽成本。今后的工作将探索这方面的可微网络压缩。我们提出了一种基于微分量化和蒸馏的通用而灵活的方法,允许在不影响精度的情况下为各种任务优化位数。我们的方法有几个优点,包括训练时间短,重复使用训练过的网络,不需要标签,可调整的大小精度权衡和问题无关的损失功能。通过这种方式,我们可以将网络压缩为有效的可变位深度表示,而不牺牲对原始浮点网络的保真度。

[i] https://blogs.nvidia.com/blog/2020/05/14/tensorfloat-32-精确格式/

[ii]https://www.tensorflow.org/lite/performance/quantization_spec

[iii]https://arxiv.org/abs/1905.12322

[iv] https://arxiv.org/abs/1308.3432

[v]https://arxiv.org/abs/1503.02531

作者:Szabolcs Cséfalvay

原文链接:https://www.imaginationtech.com/blog/low-precision-inference-using-distillation/

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DRAM
    +关注

    关注

    40

    文章

    2303

    浏览量

    183293
  • 谷歌
    +关注

    关注

    27

    文章

    6141

    浏览量

    105080
  • 神经网络
    +关注

    关注

    42

    文章

    4762

    浏览量

    100533
  • 估计器
    +关注

    关注

    0

    文章

    3

    浏览量

    5536

原文标题:使用蒸馏法对低精度推理的浮点网络进行高保真转换

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TensorRT-LLM精度推理优化

    本文将分享 TensorRT-LLM 中低精度量化内容,并从精度和速度角度对比 FP8 与 INT8。首先介绍性能,包括速度和精度。其次,介绍量化工具 NVIDIA TensorRT Model
    的头像 发表于 11-19 14:29 147次阅读
    TensorRT-LLM<b class='flag-5'>低</b><b class='flag-5'>精度</b><b class='flag-5'>推理</b>优化

    准备做一个72W高保真音频功放,想用高速高精度运放OPA627作前级小信号放大,如何才能发挥它的最佳性能?

    准备做一个72W高保真音频功放,想用高速高精度运放OPA627作前级小信号放大,OPA627凭借其优越的性能在音频领域受到众多发烧友的亲睐,对于这个天价优越性能的运放,我们应该如何正确使用它 ,才能发挥它的最佳性能?非常感谢!
    发表于 11-01 08:11

    TLV320AIC3204 Line out输出,经过3W的高保真功放,输出有相当明显的POP声是正常的吗?

    按照手册配置的软件配置,当主板上电后,耳机监听,POP声不明显,但是Line out 输出,经过3W的高保真功放,输出有相当明显的POP声。这样正常吗?设计时如何减小POP声
    发表于 10-15 06:41

    揭秘使用20位DAC生成超低噪声、高保真波形的设计挑战

    电子发烧友网站提供《揭秘使用20位DAC生成超低噪声、高保真波形的设计挑战.pdf》资料免费下载
    发表于 09-11 09:47 0次下载
    揭秘使用20位DAC生成超低噪声、<b class='flag-5'>高保真</b>波形的设计挑战

    LME49743四路高性能、高保真音频运算放大器数据表

    电子发烧友网站提供《LME49743四路高性能、高保真音频运算放大器数据表.pdf》资料免费下载
    发表于 06-19 11:00 0次下载
    LME49743四路高性能、<b class='flag-5'>高保真</b>音频运算放大器数据表

    INA1620高保真音频运算放大器和EMI滤波器数据表

    电子发烧友网站提供《INA1620高保真音频运算放大器和EMI滤波器数据表.pdf》资料免费下载
    发表于 06-17 10:39 0次下载
    INA1620<b class='flag-5'>高保真</b>音频运算放大器和EMI滤波器数据表

    LME49723双通道高保真音频运算放大器数据表

    电子发烧友网站提供《LME49723双通道高保真音频运算放大器数据表.pdf》资料免费下载
    发表于 06-17 09:54 0次下载
    LME49723双通道<b class='flag-5'>高保真</b>音频运算放大器数据表

    LME49600高性能、高保真、大电流缓冲器数据表

    电子发烧友网站提供《LME49600高性能、高保真、大电流缓冲器数据表.pdf》资料免费下载
    发表于 06-17 09:18 0次下载
    LME49600高性能、<b class='flag-5'>高保真</b>、大电流缓冲器数据表

    高保真耳机放大器TPA6120A2数据表

    电子发烧友网站提供《高保真耳机放大器TPA6120A2数据表.pdf》资料免费下载
    发表于 03-19 10:57 3次下载
    <b class='flag-5'>高保真</b>耳机放大器TPA6120A2数据表

    毫米波雷达半精度浮点存储格式分析

    本文介绍了TC3xx单片机雷达信号处理单元SPU支持的半精度浮点格式,将其和32bit整型数格式进行比较,分析了两者的动态范围及实际处理误差,发现半精度
    的头像 发表于 02-20 08:26 343次阅读
    毫米波雷达半<b class='flag-5'>精度</b><b class='flag-5'>浮点</b>存储格式分析

    便携式音频播放器/迷你小音响实现Hi-Fi高保真音质

    便携式音频播放器/迷你小音响实现Hi-Fi高保真音质
    的头像 发表于 02-04 09:53 1015次阅读

    新型光电系统实现高保真信息传输

    扩散体带来了巨大的挑战,限制了自由空间中光学数据的高保真传输。自适应光学提出了一种潜在的解决方案,可以动态地校正随机失真,但采用的空间光调制器和迭代反馈算法不可避免地增加了成本和复杂性。 加州大学洛杉矶分校(
    的头像 发表于 01-26 06:33 350次阅读
    新型光电系统实现<b class='flag-5'>高保真</b>信息传输

    精度和双精度浮点数的区别

    精度和双精度是计算机中表示浮点数的两种不同的精度。在计算机中,浮点数用来表示带有小数部分的实数,而单
    的头像 发表于 12-15 10:25 5243次阅读

    HarmonyOS:使用MindSpore Lite引擎进行模型推理

    使用 MindSpore Lite 推理引擎进行模型推理的通用开发流程。 基本概念 在进行开发前,请先了解以下概念。 张量 :它与数组和矩阵非常相似,是 MindSpore Lite
    发表于 12-14 11:41

    精度和双精度浮点数的区别

    在计算机科学和数值计算中,浮点数是一种用于表示实数的数据类型。浮点数有两种精度级别:单精度和双精度。这两种
    的头像 发表于 12-13 10:55 1w次阅读