热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自压缩神经网络

过去十年,人工智能研究主要集中在探索深度神经网络的潜力。我们近年来看到的进步至少可以部分归因于网络规模的不断扩大。从使用GPT-3[1]的文本生成到使用Imagen[

c1525605631133b91cb66b8ad3f58a5f.jpeg

过去十年,人工智能研究主要集中在探索深度神经网络的潜力。我们近年来看到的进步至少可以部分归因于网络规模的不断扩大。从使用 GPT-3 [1] 的文本生成到使用 Imagen [2] 的图像生成,研究人员付出了相当大的努力来创建更大、更复杂的架构,以实现越来越令人印象深刻的壮举。此外,现代神经网络的成功使其在各种应用中部署。就在我写这篇文章的时候,一个神经网络正在施图预测我即将写的下一个单词,尽管它不够准确,不能很快取代我!

另一方面,性能优化在该领域受到的关注相对较少,这是神经网络更广泛部署的一个重大障碍。造成这种情况的一个可能原因是能够同时在数千个 GPU 或其他硬件上的数据中心中训练大型神经网络。这与计算机图形领域形成鲜明对比,例如,必须在单台计算机上实时运行的限制产生了在不牺牲质量的情况下优化算法的强大动力。

神经网络容量的研究表明,发现高精度解决方案所需的网络容量大于表示这些解决方案所需的容量。Frankle和Carbin [3]在他们的论文《彩票假设:寻找稀疏、可训练的神经网络》 [3] 中发现,只需要网络中权重的一小部分即可代表一个好的解决方案,但直接训练容量减少的网络并不能达到相样的精度。同样,Hinton 等人。[4] 发现,将“知识”从高精度网络转移到低容量网络可以产生比使用、相同损失函数的高容量网络更高精度的网络。

在本篇博文中,我们查找是否可以在训练时动态减少网络参数。虽然这样做具有挑战性,但由于实现的复杂性( PyTorch不是为处理动态网络架构而设计的,例如,在训练期间移除整个通道),

我们希望实现以下优点。

  • 减少最终网络中的权重数量。

  • 减少剩余权重的位宽。

  • 减少最终网络的运行时间。

  • 减少训练时间。

  • 降低设计网络架构时选择层宽度的复杂性。

  • 不需要特殊的硬件来优化(例如,不需要稀疏矩阵乘法)。

在这项工作中,我们通过引入一种新颖的量化感知训练(QAT)方案来实现这些目标,该方案平衡了最大化网络精度和最小化网络规模的要求。我们同时最大限度地提高精度并最大限度地减少权重位深度,从而消除不太重要或不必要的通道,从而以现有硬件可以轻松利用的方式降低计算和带宽需求。


可微量化

这是通过可微量化实现的,正如我在之前的文章[5]中介绍的那样。简而言之,可微量化允许您同时学习数字格式的参数和权重。这允许以与网络中的权重完全相同的方式学习量化,并启用诸如自压缩网络之类的新技术——本文的主题。

量化函数量化为可变比特率有符号定点格式:

dd4fc1aaa8a5f4e2aa9d14ba365b4715.png

这可以描述为以下步骤顺序:

  1. 使用指数缩放输入值:69d9efa388c1519bbb9e9ffd9c5fa7fc.png

  2. 使用位深度钳位值:120b19833ca8ae7c276dccf40c225de4.png

  3. 四舍五入到最接近的整数:ac8215611715f82fd4ac36bd858c103f.png

  4. 反转步骤 1 中引入的缩放:2f82cb74fcb40d4abf647677415aefb8.png

其中 b 是位深度,e 是指数,x 是被量化的值(或一组值) 。为了确保连续可微性,我们在训练期间使用实值位深度参数。

上述函数使用舍入运算。通过它传播可用梯度的常用方法是将四舍五入操作的梯度定义为 1 而不是 0。这类似于“直通估计器” [6] 。要了解其工作原理,请考虑下图:

d8af6b3e1937614a73c5b5ef08828fb8.png

当我们从函数中“缩小”时,您可以看到它是如何实现的;舍入函数似乎接近 y=x 线。我们将取整函数的后向传递(梯度)替换为函数 y=x 的梯度,即常数1。


可微量化进行自压缩

在这项工作中,我们使用可微量化(1)来减少训练期间网络参数的位宽(即压缩),以及(2)发现哪些参数可以用 0 位表示。当神经网络中的参数可以用 0 位表示而不影响网络的精度时,就没必要使用该参数。当发现权重张量中的通道可以用 0 位表示时,在训练期间将其从网络中删除。这样做的一个附加好处是训练会随着时间的推移而加速(见图2)。

该过程可以描述如下:

  1. 将网络的参数拆分为通道。

  2. 用位宽和指数的单个量化参数对每个通道进行量化。

  3. 为原始任务训练网络,同时最小化所有位宽参数。

  4. 当位宽参数达到 0 时,从网络中移除该参数编码的网络权重通道。由于消除了整个输出通道,这减少了相应卷积的大小以及消耗输出张量的任何后续操作,而不会更改网络输出。

通过在训练期间从网络中移除空(即 0 位)通道,我们可以显著加速训练而不改变训练结果:训练结果与我们在最后只移除空通道时得到的网络相同。

尽管本文中描述的方法学习压缩和消除通道,但它可以推广到其他硬件可利用的学习稀疏模式。


网络架构

选择的网络架构是 David Page 的CIFAR-10[7]的DAWNbench条目,这是一个可以快速训练的浅ResNet 。

使用快速训练网络有几个优点,包括:

  • 使算法设计迭代更快,

  • 缩短调试周期,

  • 使在合理的时间内在单个 GPU 上执行实验变得容易,

  • 帮助重现这项工作的结果。

该网络由两种主要类型的块组成:卷积块(卷积→批量归一化→激活→池化)和残差块(残差分支由两个卷积块组成)。

以下部分描述了如何对这些模块应用可微量化以使其可压缩。


优化目标

这项工作的目标是减少神经网络的推理和训练时间。为了实现这一点,应该在损失函数中体现推理时间,以便将其最小化,从而产生更快的网络。在这种情况下使用的指标是网络规模,定义为用于表示网络中权重的总位数。作为网络性能的体现,计算层输出所需的激活张量大小或操作数也可以最小化。

单个权重张量的大小可以用四个张量维度的乘积表示:输出通道、输入通道、滤波器高度和滤波器宽度(0、I、H、W)。由于我们使用一个单独的数字格式量化每个输出通道,并为层提供一个可学习的位数,因此用于表示张量的总位数由下式给出:

ed80f4fc3a627ce262be1be908a7a16c.png

当 ebf9a5046ffafa24e79ba8bb437bbf63.png 为 0 时,ith 通道变得不必要,减少了权重张量中的输出通道总数,以及下一个卷积的权重张量中相应的输入通道数。因此最小化通过 be40792fc74dd66cf07740e09e0e7942.png 最小化输出通道的数量,可以最小化权重张量中的元素数量。这有效地最小化了权重张量的输出维度。

认识到一层的输入通道数等于前一层的输出通道数,可以使压缩损失更好地反映网络的大小。这样一个权重张量的输入维度也可以最小化:

11be833c725c68bacd974b0f2b6d5732.png

一旦通道可以被压缩到 0 位,它就可能在训练期间被删除。然而,需要克服的实际问题是,从卷积层中移除一个输出通道并不一定意味着可以从下一层的输入中安全地移除相应的输入通道,因为可以将偏差添加到层的输出 0中,在这种情况下删除它可能会显著改变网络的输出。为了处理这个问题,识别达到 0 位的加权通道(过滤器),并对其输出应用L1 损耗,以将其推至 0 位。只有当偏差减少到 0 时,这些过滤器才会被移除,因为此时移除这样的通道不会改变网络的输出。

整个网络的大小是所有层大小的总和:

e784f6f3d48dcf76109b44d123e7281f.png

为了平衡网络的准确性和规模,我们简单地使用两项的线性组合:

ed81435a9c8a9c2eba0cc66883cc5487.png

其中 L是网络的原始损失,ed4e633c95af37bedcac05664eb44cf2.png 是压缩因子。较大的 4a64d3cf2a00d7bfbf2973d39c8d3968.png 会生成较小但不太准确的网络。


处理分支

压缩网络时出现的另一个问题是网络分支的处理,例如,在残差块中。解决这个问题最简单的方法是分别考虑这两个分支。


更新优化器

实现细节涉及使优化器随着网络的变化而更新的问题。优化器跟踪网络中每个参数的信息(元参数),当网络参数被动态删除时,相应的元参数也必须从优化器中删除。


结果

自压缩网络允许在规模和精度之间进行权衡,可以在规模准确度图中可视化(参见图1)。该图中的每个点都表示一个神经网络的大小和精度,该神经网络经过随机压缩率,从覆盖范围的对数均匀分布中采样 9ceea692c42d62185a32838ffbe7244d.png 。

图1 显示了在使用随机压缩率训练网络时,用于表示网络权重的位数与32 位每权重基线(对应于 32 位浮点)之间的关系。这是通过保留权重的百分比乘以剩余权重的平均位宽来计算的。网络的基线精度(未压缩精度)为 95.69 ± 0.22。

ea453cd517e8bb1d93019da61cf42924.png

图 1:当使用随机压缩率训练网络时,用于表示网络权重的位数与32 位/权重基线之间的关系。

图 2 仅显示了网络中使用的权重数量的减少。在不影响精度的情况下,可以移除大约 75% 的权重。

a9b7c4c78b7d6cbd10c33c9f6da09ab5.png

图 2 显示了使用随机压缩率训练网络时,网络中保留的权重百分比与精度之间的关系。

图 3 显示了通过在训练期间移除权重对训练时间的影响。一个世代的训练时间不仅取决于网络的大小,还取决于系统的其他部分,例如输入数据通道。为了确定基线训练开销,对于同一网络进行训练,每个层仅使用一个通道。每个训练世代大约需要 7.5 秒。

1bfa73245088fd4795b8da303de35efd.png

图 3:随着参数从网络中移除,神经网络训练时间加快。训练结束时移除了 86% 的权重。

图 4 显示了 d762ab867cba1b4aca600b5d95265fc2.png 时使用压缩率训练的网络架构。训练将移除除残差层中的快捷分支。其余九个通道在训练结束时已经达到 0 位,并且正在消除它们的偏差。预计它们会随着更长的训练而消失。第二个残差层中的快捷分支与它相关的损失非常低(由于它对网络规模的贡献最小),因此它的减少速度太慢,无法在训练结束时消失。

7f0215bb3634fc07a39fbd23cbbd230f.png

637a16eaf2ddbb2feef54d429862f976.png

图 4:训练前后的层大小和每层平均位宽的示例。这里删除了 86% 的权重和 97.6% 的位。每个方块代表一个卷积。方块中的值表示卷积的输出或输入(“in”)通道的总数,其中需要此类信息(在分支处)。

图 5 显示了整个训练过程中的网络规格。它在早期迅速收缩,然后逐渐减少。

85f3848973791372dcab5c3f35d7d6bd.png

图 5:网络规模在训练早期快速缩小,之后逐渐减小。


优化您的网络

在本篇博文中,我们分享了一个通用框架,用于优化神经网络的典型固定特征——通道数和位宽——以使网络在训练过程中学会自我压缩。这样做的主要优点是更快的执行时间和更快的生成网络训练。以前的许多工作都集中在通过创建稀疏层来减少网络规模,这需要软件和/或硬件的特殊支持才能更有效地运行。简单地减少层的宽度不需要专门支持。通过减少 DRAM 带宽,支持可变位宽可以提高多种架构的性能。

参考

[1] T. B. Brown and al, “Language Models are Few-Shot Learners,” 2020.

[2] C. Saharia and al, “Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding,” 2022.

[3] J. Frankle and M. Carbin, “The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks,” 2018.

[4] G. Hinton, O. Vinyals and J. Dean, “Distilling the Knowledge in a Neural Network,” 2015.

[5] Cséfalvay, S, “High-Fidelity Conversion of Floating-Point Networks for Low-Precision Inference using Distillation,” 25 May 2021. [Online]. Available: https://blog.imaginationtech.com/low-precision-inference-using-distillation/.

[6] G. Hinton, “Lecture 9.3 — Using noise as a regularizer [Neural Networks for Machine Learning],” 2012. [Online]. Available: https://www.youtube.com/watch?v=LN0xtUuJsEI&list=PLoRl3Ht4JOcdU872GhiYWf6jwrk_SNhz9.

[7] Page, D, “How to Train Your ResNet 8: Bag of Tricks,” 19 Aug 2019. [Online]. Available: https://myrtle.ai/how-to-train-your-resnet-8-bag-of-tricks/.


本文作者:Szabolcs Cséfalvay

原文链接:https://blog.imaginationtech.com/self-compressing-neural-networks

声明:本文为原创文章,转载需注明作者、出处及原文链接。

END

欢迎加入Imagination GPU与人工智能交流2群

68240b4c53e697b70e4cbbf77ecebcd3.jpeg

入群请加小编微信:eetrend89

(添加请备注公司名和职称)

推荐阅读

‍‍

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

60ac65c41be7f19fe19482cb3785a29a.jpeg

Imagination Technologies 是一家总部位于英国的公司,致力于研发芯片和软件知识产权(IP),基于Imagination IP的产品已在全球数十亿人的电话、汽车、家庭和工作场所中使用。获取更多物联网、智能穿戴、通信、汽车电子、图形图像开发等前沿技术信息,欢迎关注 Imagination Tech!


推荐阅读
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 语义分割系列3SegNet(pytorch实现)
    SegNet手稿最早是在2015年12月投出,和FCN属于同时期作品。稍晚于FCN,既然属于后来者,又是与FCN同属于语义分割网络 ... [详细]
  • 上一章讲了如何制作数据集,接下来我们使用mmcls来实现多标签分类。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • AI行业的下一个风口是医疗?创业者们这样说
    ▼点击上方蓝字关注网易智能为你解读AI领域大公司大事件,新观点新应用编者按:4月10日,鲸准AI产业价值峰会在北京举行。本次大会除了邀请A ... [详细]
author-avatar
冠吸柏芝霆疯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有