神经网络的int8量化_如何压缩一个神经网络

本文探讨了神经网络的压缩方法,包括权重减少、量化和知识提炼。权重减少通过修剪非重要连接来减小模型大小,如Optimal Brain Damage和Lottery Ticket Hypothesis。量化将权重从float32转换为int8以减少计算和内存需求,分为训练后量化和量化意识训练。知识提炼则通过训练小型模型复制大型模型的预测,以实现高效推理。这些技术对于降低模型的推理成本和环境影响至关重要。
摘要由CSDN通过智能技术生成

9d7827abb92f911bfbfee6e20c03f032.png

现代的最新神经网络架构非常庞大。例如,OpenAI最新的革命性NLP模型GPT-3,该模型能够编写诗歌和互动式诗歌讲述 。 好吧,GPT-3有大约1750亿个参数。 为了了解此数字的大小,请考虑以下内容: 100美元的钞票宽约15.60厘米。 如果紧挨着放下这些美元,那条线将延伸272922千米。 为了进行比较,沿赤道测量的地球周长为40074千米。 但是与金钱相反,在参数数量上,有时数量太多并不能带来更好的效果。当然,更多的参数似乎意味着更好的结果,但也意味着更大的成本。 GPT-3太大,以至于无法轻易将 其转移到其他计算机上。 当前可以通过OpenAI API对其进行访问,因此不能仅克隆GitHub存储库并在计算机上运行它。 但是,这只是冰山一角。对于机器学习工程师来说,部署更小的模型也可能带来巨大挑战。实际上,小型和快速的模型比笨重的模型好得多。 因此,研究人员和工程师为压缩模型投入了大量精力。 通过这些努力,出现了几种解决该问题的方法。

1.Why and How?

如果再回顾一分钟GPT-3,我们可以看到参数数量和训练时间如何影响性能。

bd74d2ffac3b5089fd0150e011788bc1.png

在GPT-3模型的不同变体中,验证损失与计算时间的关系。颜色代表参数的数量

趋势似乎很明显:更多的参数导致更好的性能和更高的计算成本。后者不仅影响培训时间,而且还会影响服务器成本和环境影响。但是,训练只是神经网络生命周期的第一部分。从长远来看,推理成本会接管。

为了通过压缩模型来优化这些成本,出现了三种主要方法:

  • 减少权重(weights pruning)

  • 量化(quantization)

  • 知识提炼(knowledge distillation)

在本文中,将介绍这些内容,并概述它们的工作方式。

2.减少权重

减少神经网络大小的最古老方法之一是减少权重,它消除了神经元之间的特定连接。在实践中,消除意味着将删除的权重替换为零。

乍一看,这个想法可能令人惊讶。这不会消除神经网络所学的知识吗?

当然,删除所有连接无疑会导致丢失所有已学到的知识。另一方面,仅修剪一个连接可能并不意味着精度会降低。

问题是,在预测性能开始下降之前,可以删除多少连接呢?

最佳脑损伤(Optimal Brain Damage)

研究此问题的第一批人是Yann LeCun,John S.Denker和Sara A.Solla,他们在1990年发表的论文《Optimal Brain Damage》。他们开发了以下迭代方法。

  1. 训练网络。

  2. 通过观察权重在受到干扰后的变化情况,估算每个权重的重要性。变化较小意味着重要性降低。(此重要性称为显著性。)

  3. 删除重要性不高的权重。

  4. 返回步骤1。重新训练网络,将删除的权重永久固定为零。

在对LeNet进行MNIST分类的修剪实验中,他们发现可以去除很大一部分权重,而损失没有明显增加。

彩票假说(Lottery Ticket Hypothesis)

麻省理工学院的研究人员在2008年取得了一项重大突破。乔纳森·弗兰克(Jonathan Frankle)和迈克尔·卡宾(Michael Carbin)在题为《彩票假说》的论文中指出:随机初始化的密集神经网络包含一个子网络,该子网络经过初始化,以便在单独训练时可以在训练最多相同数量的迭代后匹配原始网络的测试精度。

这种子网称为中奖彩票。要了解为什么我们考虑购买10^1000张彩票。(这比可观察到的宇宙中的原子数还多,但是我们让它滑动。)因为有很多彩票,所以他们都不是中奖号码的可能性是很小的。这类似于训练我们随机初始化权重的神经网络。

如果这个假设是正确的,并且可以找到这样的子网,则训练可以更快,更便宜地进行,因为单个迭代步骤将减少计算量。

问题是,假设是否成立,如果成立,我们如何找到这样的子网?作者提出了以下迭代方法。

  1. 随机初始化网络并存储初始权重以供以后参考。

  2. 对网络进行给定数量的步骤。

  3. 删除一定比例的权重最低的幅度。

  4. 将剩余权重恢复为第一次初始化期间给定的值。

  5. 转到步骤2。并重复修剪。

在通过简单数据集训练的简单体系结构(例如MNIST上的LeNet)上,此方法提供了显着的改进,如下图所示。

e1d71ae99d22be69791af51da71206a6.png

但是,尽管它显示出了希望,但它在ResNets等更复杂的体系结构上却表现不佳。此外,修剪在训练后仍然会发生,这是一个重大问题。

同步流

训练前修剪的最新算法于2020年发布。Hidenori Tanaka,Daniel Kunin,Daniel LK Yamins和斯坦福大学的Surya Ganguli在他们的论文中开发了一种更进一步的方法并进行未经训练的修剪。首先,他们介绍了层塌陷的概念,整个层的过早修剪使网络变得无法训练,在理论中起着重要的作用。任何修剪算法都应避免图层崩溃。困难的部分是确定满足该标准的一类算法。

为此,作者介绍了由定义的网络中给定权重的突触显著性评分

e65e8b89a72130e40c6472edb317b417.png

但是,工作远未完成。正如乔纳森·弗兰克(Jonathan Frankle)及其合著者在最近的论文中指出的那样,没有通用的最新解决方案。每种方法在特定的情况下都很出色,但在其他情况下却胜于其他。而且,训练前的修剪方法优于基线随机修剪,但它们仍然不如某些训练后算法(尤其是基于幅度的修剪)表现更好。

接下来,我们将看看神经网络压缩的另一种工具:量化。

3. 量化

本质上,神经网络只是一堆线性代数和其他一些运算。默认情况下,大多数系统使用float32类型表示变量和权重。

但是,通常,其他格式(例如int8)的计算可能比float32中的计算更快,并且占用的内存更少。(当然,这些可能取决于硬件,但是我们在这里不做更多具体说明。)

神经网络量化是旨在利用这一点的方法套件。例如,如果我们希望如上所述从float32转到int8,并且我们的值在[-a,a]的某个实数a范围内,则可以使用以下转换

bf96a2ccd164f4eb74d7055e6797eb8e.png

转换权重并以新形式进行计算。

当然,事情并不是那么简单。将两个int8数相乘很容易溢出到int16,依此类推。在量化过程中,必须注意避免由此引起的误差。

与所有压缩方法一样,这会丢失信息并可能无法预测性能。问题和以前一样:找到最佳的权衡。

量化具有两个主要方面:训练后量化和量化意识训练。前者更直接,但与后者相比会导致更大的精度损失。

d9fa8ea1e144c50c2fed434f35a0599e.png

如上表所示,在某些情况下,这可以将推理时间缩短一半。但是,从float32到int8的转换不是平稳的转换;因此,当渐变景观为野生状态时,它可能导致次优结果。

通过量化感知训练,该方法也有可能缩短训练时间。

到目前为止,我们看到的方法具有相同的原理:训练网络并丢弃一些信息以对其进行压缩。正如我们将看到的,第三个,知识提炼,与这些有很大的不同。

4.知识提炼

尽管量化和修剪可能有效,但最终会造成破坏。Geoffrey Hinton,Oriol Vinyals和Jeff Dean在他们的论文《在神经网络中升华知识》中开发了一种替代方法。

他们的想法很简单:训练一个大模型(老师)以获得最佳性能,并使用其预测结果训练一个较小的模型(学生)。

他们的工作表明,通过这种方式,大型集成模型可以使用更简单的体系结构进行压缩,更适合于生产。

知识提炼缩短了提炼模型的推理时间,而不是训练时间。这是其他两种方法之间的本质区别,因为训练时间通常成本很高。(如果我们回想一下GPT-3的例子,那是数百万美元。)

那么,为什么不从一开始就使用紧凑的体系结构?秘诀是教学生模型使用其预测像老师一样概括。在这里,学生模型不仅可以看到大型培训数据,还可以看到新的数据,可以拟合出教师的输出数据。

60b2fca901695bc2ff72eedd4d89dbff.png

模型越小,需要更好地概括的训练数据就越多。因此,可能需要复杂的体系结构(例如集成模型)才能在具有挑战性的任务上达到最新的性能。尽管如此,它的知识仍可用于使学生模型的性能超出基准。

知识提炼的第一个用例之一是压缩乐团,使其适合生产。在Kaggle比赛中,合唱团声名狼藉。几个获胜的模型由几个较小的模型组成,可提供出色的结果,但在实践中无法使用。

从那时起,它已成功应用于其他体系结构,最著名的是BERT,它是NLP的著名转换器模型。

5.结论

随着神经网络越来越大,压缩模型变得越来越关键。随着问题和体系结构的复杂性增加,计算成本和环境影响也随之增加。

这种趋势似乎只会加速:GPT-3包含1,750亿个参数,与以前的巨型模型相比,幅度增加了10倍。因此,压缩这些网络是一个基本问题,将来将变得更加重要。

3c7b1f03102490cb15c5690635b1feb8.png每晚21:30,小白和您一起遇见AI3c7b1f03102490cb15c5690635b1feb8.png

cd7b9c6b0e8a3d8e6905555f299f66fd.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值