1.Why and How?
如果再回顾一分钟GPT-3,我们可以看到参数数量和训练时间如何影响性能。
在GPT-3模型的不同变体中,验证损失与计算时间的关系。颜色代表参数的数量
趋势似乎很明显:更多的参数导致更好的性能和更高的计算成本。后者不仅影响培训时间,而且还会影响服务器成本和环境影响。但是,训练只是神经网络生命周期的第一部分。从长远来看,推理成本会接管。
为了通过压缩模型来优化这些成本,出现了三种主要方法:
减少权重(weights pruning)
量化(quantization)
知识提炼(knowledge distillation)
在本文中,将介绍这些内容,并概述它们的工作方式。
2.减少权重
减少神经网络大小的最古老方法之一是减少权重,它消除了神经元之间的特定连接。在实践中,消除意味着将删除的权重替换为零。
乍一看,这个想法可能令人惊讶。这不会消除神经网络所学的知识吗?
当然,删除所有连接无疑会导致丢失所有已学到的知识。另一方面,仅修剪一个连接可能并不意味着精度会降低。
问题是,在预测性能开始下降之前,可以删除多少连接呢?
最佳脑损伤(Optimal Brain Damage)
研究此问题的第一批人是Yann LeCun,John S.Denker和Sara A.Solla,他们在1990年发表的论文《Optimal Brain Damage》。他们开发了以下迭代方法。
训练网络。
通过观察权重在受到干扰后的变化情况,估算每个权重的重要性。变化较小意味着重要性降低。(此重要性称为显著性。)
删除重要性不高的权重。
返回步骤1。重新训练网络,将删除的权重永久固定为零。
在对LeNet进行MNIST分类的修剪实验中,他们发现可以去除很大一部分权重,而损失没有明显增加。
彩票假说(Lottery Ticket Hypothesis)
麻省理工学院的研究人员在2008年取得了一项重大突破。乔纳森·弗兰克(Jonathan Frankle)和迈克尔·卡宾(Michael Carbin)在题为《彩票假说》的论文中指出:随机初始化的密集神经网络包含一个子网络,该子网络经过初始化,以便在单独训练时可以在训练最多相同数量的迭代后匹配原始网络的测试精度。
这种子网称为中奖彩票。要了解为什么我们考虑购买10^1000张彩票。(这比可观察到的宇宙中的原子数还多,但是我们让它滑动。)因为有很多彩票,所以他们都不是中奖号码的可能性是很小的。这类似于训练我们随机初始化权重的神经网络。
如果这个假设是正确的,并且可以找到这样的子网,则训练可以更快,更便宜地进行,因为单个迭代步骤将减少计算量。
问题是,假设是否成立,如果成立,我们如何找到这样的子网?作者提出了以下迭代方法。
随机初始化网络并存储初始权重以供以后参考。
对网络进行给定数量的步骤。
删除一定比例的权重最低的幅度。
将剩余权重恢复为第一次初始化期间给定的值。
转到步骤2。并重复修剪。
在通过简单数据集训练的简单体系结构(例如MNIST上的LeNet)上,此方法提供了显着的改进,如下图所示。
但是,尽管它显示出了希望,但它在ResNets等更复杂的体系结构上却表现不佳。此外,修剪在训练后仍然会发生,这是一个重大问题。
同步流
训练前修剪的最新算法于2020年发布。Hidenori Tanaka,Daniel Kunin,Daniel LK Yamins和斯坦福大学的Surya Ganguli在他们的论文中开发了一种更进一步的方法并进行未经训练的修剪。首先,他们介绍了层塌陷的概念,整个层的过早修剪使网络变得无法训练,在理论中起着重要的作用。任何修剪算法都应避免图层崩溃。困难的部分是确定满足该标准的一类算法。
为此,作者介绍了由定义的网络中给定权重的突触显著性评分
但是,工作远未完成。正如乔纳森·弗兰克(Jonathan Frankle)及其合著者在最近的论文中指出的那样,没有通用的最新解决方案。每种方法在特定的情况下都很出色,但在其他情况下却胜于其他。而且,训练前的修剪方法优于基线随机修剪,但它们仍然不如某些训练后算法(尤其是基于幅度的修剪)表现更好。
接下来,我们将看看神经网络压缩的另一种工具:量化。
3. 量化
本质上,神经网络只是一堆线性代数和其他一些运算。默认情况下,大多数系统使用float32类型表示变量和权重。
但是,通常,其他格式(例如int8)的计算可能比float32中的计算更快,并且占用的内存更少。(当然,这些可能取决于硬件,但是我们在这里不做更多具体说明。)
神经网络量化是旨在利用这一点的方法套件。例如,如果我们希望如上所述从float32转到int8,并且我们的值在[-a,a]的某个实数a范围内,则可以使用以下转换
转换权重并以新形式进行计算。
当然,事情并不是那么简单。将两个int8数相乘很容易溢出到int16,依此类推。在量化过程中,必须注意避免由此引起的误差。
与所有压缩方法一样,这会丢失信息并可能无法预测性能。问题和以前一样:找到最佳的权衡。
量化具有两个主要方面:训练后量化和量化意识训练。前者更直接,但与后者相比会导致更大的精度损失。
如上表所示,在某些情况下,这可以将推理时间缩短一半。但是,从float32到int8的转换不是平稳的转换;因此,当渐变景观为野生状态时,它可能导致次优结果。
通过量化感知训练,该方法也有可能缩短训练时间。
到目前为止,我们看到的方法具有相同的原理:训练网络并丢弃一些信息以对其进行压缩。正如我们将看到的,第三个,知识提炼,与这些有很大的不同。
4.知识提炼
尽管量化和修剪可能有效,但最终会造成破坏。Geoffrey Hinton,Oriol Vinyals和Jeff Dean在他们的论文《在神经网络中升华知识》中开发了一种替代方法。
他们的想法很简单:训练一个大模型(老师)以获得最佳性能,并使用其预测结果训练一个较小的模型(学生)。
他们的工作表明,通过这种方式,大型集成模型可以使用更简单的体系结构进行压缩,更适合于生产。
知识提炼缩短了提炼模型的推理时间,而不是训练时间。这是其他两种方法之间的本质区别,因为训练时间通常成本很高。(如果我们回想一下GPT-3的例子,那是数百万美元。)
那么,为什么不从一开始就使用紧凑的体系结构?秘诀是教学生模型使用其预测像老师一样概括。在这里,学生模型不仅可以看到大型培训数据,还可以看到新的数据,可以拟合出教师的输出数据。
模型越小,需要更好地概括的训练数据就越多。因此,可能需要复杂的体系结构(例如集成模型)才能在具有挑战性的任务上达到最新的性能。尽管如此,它的知识仍可用于使学生模型的性能超出基准。
知识提炼的第一个用例之一是压缩乐团,使其适合生产。在Kaggle比赛中,合唱团声名狼藉。几个获胜的模型由几个较小的模型组成,可提供出色的结果,但在实践中无法使用。
从那时起,它已成功应用于其他体系结构,最著名的是BERT,它是NLP的著名转换器模型。
5.结论
随着神经网络越来越大,压缩模型变得越来越关键。随着问题和体系结构的复杂性增加,计算成本和环境影响也随之增加。
这种趋势似乎只会加速:GPT-3包含1,750亿个参数,与以前的巨型模型相比,幅度增加了10倍。因此,压缩这些网络是一个基本问题,将来将变得更加重要。
每晚21:30,小白和您一起遇见AI