本文总结了《哈佛大学在读博士董鑫:模型量化—更小更快更强》(https://www.bilibili.com/video/av76554696)的内容。
首先他简单介绍了下量化的必要性,这个其实随便哪篇文章的介绍里都会提及。
随后他介绍了量化目前的问题:
在前向传播时,由于量化使得参数精度下降,于是模型的表达能力下降了。这在一些简单的分类任务中表现得不太明显,甚至有时候量化还会增加分类精度。但当模型精度极度小,或面对复杂问题及数据集较复杂时,量化就会导致严重的精度下降。
另一个问题是,在量化时,根据所选bit数的不同,我们实际上是将不同范围内的参数统一到同一个值上。当参数的范围越大,所给定的bit数越小,这个范围就越大。如何选取合适的参数范围以及bit数,这也是一个实际问题。
前向传播的最后一个问题是,均匀量化和非均匀量化的分歧。均匀与非均匀指的是量化的范围是否一致。后者因为更加灵活,因此会带来更好的精度表现。但在硬件上的实施就相对难些。
谈完了前向传播,就轮到了后向传播。后向传播的问题是一目了然的:因为现有的方法都对参数和激活值做了量化,但这两个量化函数往往是阶梯函数,它们的梯度几乎在处处都是0,因此对后向传播造成了困难。
解决这个方法的一个现有的方法是STE(Straight Through Estimator)。它的思想是,假装量化没有发生,网络将输入值未经处理就传递到后方。这样在反向传播时,在实际的量化函数处的导数值就变成了1。这样做会产生两个问题:一是由于这样的估计比较粗糙,因此在训练时,loss curve会波动;二是由于量化函数实际上和y=x这条直线并不一致,而我们用后者的梯度来代替前者,这就会导致梯度的不匹配(也就