Open shee-gao opened 4 months ago
很抱歉没有及时回复您的问题。以下是对您问题的回复: BC和bias correction的目标不一样,因此导致了完全不一样的优化和应用结果,核心在于BC和quantizer解耦了, 使得BC可以被很容易的优化并且和可以被应用于任何模块,在选定了quantizer的前提下BC可以保证最低的输出误差,而bias correction无法保证。
具体而言,bias correction的提出是为了减少量化误差,从而提高量化模型的精度,其核心思想是在量化完成之后的输出上添加一个offset
,来对齐量化前后输出的均值,最早在2019年nips的PTQ中被提出。
最新的工作中bias correction也被用于对齐量化前后的激活值分布,从而提高量化模型的精度。
在简单的量化和特殊的模块中,比如仅使用权值量化的Linear模块中,bias correction可以被推导出来等价于在输出上添加了一个偏置tensor,但是大家通常不这么做,因为推导出的这个偏置tensor和output一样大,如果缓存起来的话非常耗内存。
在复杂一点的场景和模块,比如权值和激活值均被量化的情况,以及BMM
模块,Transformer
和Residual Block
等复杂的模块,bias correction是无法被推导为在输出添加一个偏置tensor,
因为bias correction的本质是对每一个量化过程(一个linear层量化通常包含权值和激活两个量化过程)添加一个offset
,会导致复杂的输出计算,比如多个float tensor的乘法和加法,因此从形式上来说,
BC总是被应用到输出上,bias correction本应用于量化过程中与量化耦合, 从形式上说BC和bias correction是不同的。
此外,bias correction中offset
的设置也是启发式的,难以优化,虽然通常都能降低量化损失,但是难以保证是最优的。
我们提出BC用于补偿量化输出误差,从而提高量化模型的精度。
其核心思想是通过在量化的输出上添加一个bias vector
,从而抵消量化误差。
这个bias vector
是独立于量化方法的,可以用于任何量化方法,比如定点量化、二值量化等。
也可以用于任何模块或者模型的补偿,比如Transformer
和Residual Block
等。
BC的优化是一个凸优化问题,对于任何量化模块、量化方法,都可以保证最低的输出误差。
此外,我们的想法还来自CVPR2023的NoiseQuant,在该文章中,作者提出在量化的输入上添加一个noise
tensor可以使得量化变得更平滑,然后再在输出后去除这个noise
tensor,实验发现可以实现更低的量化精度损失。
我们在复现中发现量化前添加noise
tensor,量化后又去除noise
tensor,并不会改变输出的结果。
通过推导发现NoiseQuant改善量化结果的本质在于其在量化输出后的去除noise
tensor的过程中,
没有对noise
tensor进行量化(因为量化前添加的noise
tensor随着输入的量化被一起量化了),
这意味着NoiseQuant并没有从添加了噪声的输入中完全去除noise
tensor的影响,而是相当于对输出添加了一个0均值的噪声(quantized(noise)-noise
,可以从这里的111-112行找到该结果)。
我们从NoiseQuant的实现代码中发现,该noise
tensor的生成启发式的,其从一个固定范围的参数中生成一系列的随机数来作为noise tensor,并且暴力搜索哪一个noise tensor可以使得量化结果最好。
这个启发式的搜索过程是非常耗时的,而且不一定能够找到最优的noise tensor。
我们提出了BC,通过凸优化得到最优的bias vector
,用于直接补偿量化输出误差,不需要在输入上添加noise
然后去除,可以保证最低的输出误差,不需要启发式的搜索过程。
希望这条回复对您有所帮助,如果您有任何问题,请随时联系我们。
总的来说,bias correction是用于量化后模型激活值的校准,它主要是用于校准量化后的激活值,使量化前后模型的激活值的均值保持一致。而我们的方法,是用于校准量化模型中的每个模块的输出和原始模型输出一致,也就是在模型每个被量化的模块的输出后添加一个偏置向量,对齐原始模块输出。理论上来讲,我们的方法也可以和bias correction相结合,因为我们所加的偏置向量是在MAC(矩阵乘法也就是激活和权重相乘)操作之后,而bias correction是添加在MAC操作之前。
想请问一下这篇论文操作与bias correction 有啥本质区别嘛
请看我上面的回复,谢谢!
thanks
发件人: @. @.> 代表 GONG CHENG @.> 发送时间: 2024年5月13日 23:15 收件人: GongCheng1919/bias-compensation @.> 抄送: 高射 @.>; Author @.> 主题: Re: [GongCheng1919/bias-compensation] difference with bias correction (Issue #2)
想请问一下这篇论文操作与bias correction 有啥本质区别嘛
请看我上面的回复,谢谢!
― Reply to this email directly, view it on GitHubhttps://github.com/GongCheng1919/bias-compensation/issues/2#issuecomment-2107949325, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BBWFB4J3YM37HWES7J6QFG3ZCDKH7AVCNFSM6AAAAABG4SVVW2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCMBXHE2DSMZSGU. You are receiving this because you authored the thread.Message ID: @.***>
想请问一下这篇论文操作与bias correction 有啥本质区别嘛