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

    文章

    2373

    浏览量

    188151
  • 谷歌
    +关注

    关注

    27

    文章

    6244

    浏览量

    110252
  • 神经网络
    +关注

    关注

    42

    文章

    4827

    浏览量

    106792
  • 估计器
    +关注

    关注

    0

    文章

    3

    浏览量

    5658

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    浮点指令(二:双精度

    浮点指令以及简单解释 fadd.d fadd.d rd, rs1, rs2//f [rd] = f [rs1] + f [rs2] 双精度浮点加(Floating-point Add
    发表于 10-24 13:00

    浮点指令(一:单精度

    浮点指令以及简单解释 fadd.s fadd.s rd, rs1, rs2//f [rd] = f [rs1] + f [rs2] 单精度浮点加(Floating-point Add
    发表于 10-24 11:42

    蜂鸟E203扩展浮点指令设计(1)

    , rs2 fdiv.s rd, rs1, rs2 fsqrt.s rd, rs1 • fadd.s指令将操作数寄存器rs1和rs2中的单精度浮点进行加法操作,结果写回寄存器rd中。 • fsub.s指令
    发表于 10-24 10:00

    RVF单精度浮点指令集扩展介绍(2)

    RVF单精度浮点指令集扩展 RVF扩展了26条浮点指令。 浮点乘加指令 浮点比较、最大最小值、转移、符号注入、分类指令
    发表于 10-22 07:26

    浮点运算单元的设计和优化

    普通的加减交替,同样对于无符号乘法进行一位符号扩展后统一当作有符号数进行运算,最终得到完全准确的除法结果,总共最多需要36个时钟周期。 4.浮点指令扩展:计划先完成单
    发表于 10-22 07:04

    RVF单精度浮点指令集扩展介绍(1)

    RVF单精度浮点指令集寄存器扩展 RVF扩展了32个独立的浮点通用寄存器,其中0号寄存器可变。 RVF扩展了1个fcsr寄存器,存放了异常标志和动态舍入模式。 RVF扩展必须对misa csr寄存器
    发表于 10-22 06:04

    功放IC搭配的升压芯片选型指南:为何H6801更适合高保真功放系统?

    技术,具备失真小、噪声、动态范围广等特性,尤其在音质解析力、低频控制力及背景纯净度上表现突出,兼顾高保真与低能耗优势。目前音频功放芯片主要面向消费电子领域,广泛应用于智能音箱、电视、投影仪、便携影音
    发表于 09-04 16:39

    功放IC搭配的升压芯片选型指南:为何H6922更适合高保真功放系统?

    脉冲调制技术,具备失真小、噪声、动态范围广等特性,尤其在音质解析力、低频控制力及背景纯净度上表现突出,兼顾高保真与低能耗优势。目前音频功放芯片主要面向消费电子领域,广泛应用于智能音箱、电视、投影仪
    发表于 09-04 09:59

    干扰可以提高测量精度,是真的吗?

    一、前言 水可以引燃蜡烛,是真的吗?是真的! 蛇怕雄黄,是真的吗?是假的! 上述两个现象,已经由央视 财经频道《是真的吗?》揭秘。 今天要探讨的是: 干扰可以提高测量
    的头像 发表于 08-04 09:28 533次阅读
    干扰可以提高测量<b class='flag-5'>精度</b>,是<b class='flag-5'>真的</b>吗?

    信而泰×DeepSeek:AI推理引擎驱动网络智能诊断迈向 “自愈”时代

    多维异构数据进行智能关联与融合分析。l 多阶推理链:深度模拟专家诊断逻辑,构建“现象(如交易延迟)→ 推测(如网络拥塞/丢包)→ 验证(如流量回溯/指标关联分析)→ 定因(如交换机QOS策略错误/硬件
    发表于 07-16 15:29

    Simcenter STAR-CCM+在燃烧学方面的应用:提供了一个可以高效、高保真进行燃烧仿真的迅速而可扩展的化学求解器

    ,确保获得精确结果,同时减少提前构建网格的工作量,是火焰瞬态仿真的理想选择使用多时间尺度进行共轭热仿真和LES,获得制造燃烧室内衬所需的高保真数据摘要如今,新一
    的头像 发表于 06-27 17:11 516次阅读
    Simcenter STAR-CCM+在燃烧学方面的应用:提供了一个可以高效、<b class='flag-5'>高保真</b><b class='flag-5'>进行</b>燃烧仿<b class='flag-5'>真的</b>迅速而可扩展的化学求解器

    LME49600 单通道、110MHz、高保真、高电流耳机缓冲器技术手册

    LME49600是一款高性能、失真、高保真度的250mA音频缓冲器。LME49600专为广泛的应用而设计。它可以在运算放大器的反馈回路中使用。
    的头像 发表于 05-20 09:45 1291次阅读
    LME49600 单通道、110MHz、<b class='flag-5'>高保真</b>、高电流耳机缓冲器技术手册

    揭秘:为什么说TS-AWG系列+外部衰减器是幅脉冲测试的终极解决方案?

    无论是医疗设备研发中的心脏信号模拟,还是光电探测领域的毫伏级脉冲测试,德思特TS-AWG系列任意波形发生器凭借16位垂直分辨率、超精细DAC步长(至0.076mV)和灵活的外部衰减配置,提供了高精度高保真的信号生成能力。
    的头像 发表于 03-12 14:16 633次阅读
    揭秘:为什么说TS-AWG系列+外部衰减器是<b class='flag-5'>低</b>幅脉冲测试的终极解决方案?

    使用OpenVINO™进行推理时的内存泄漏怎么解决?

    使用 OpenVINO™ 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃。
    发表于 03-06 08:29

    摩尔线程宣布成功部署DeepSeek蒸馏模型推理服务

    。 据悉,DeepSeek开源模型在多语言理解与复杂推理任务中一直表现出卓越的性能,其V3、R1等系列模型更是备受业界关注。而此次摩尔线程所实现的DeepSeek蒸馏模型推理服务部署,正是基于这些优秀模型的基础上
    的头像 发表于 02-06 13:49 1183次阅读