预训练中去除异常值是一餐免费午餐吗?

💡 原文中文,约1800字,阅读约需5分钟。
📝

内容提要

该文综述Transformer语言模型的量化研究,重点讨论异常值抑制与低精度微调。提出Clipped softmax、Gated attention、Outlier Suppression+、PreQuant、SDQ等方法,通过通道位移、缩放、蒸馏等技术消除激活异常值,实现INT8乃至4比特量化,在GLUE、XGLUE等基准上保持接近浮点精度,显著降低内存与推理成本。

🔎

延伸解读

异常值抑制:量化落地的关键

文章指出,Transformer语言模型中的激活异常值会严重阻碍低精度量化。为此,研究者提出多种抑制方法,如Clipped softmax、Gated attention、Outlier Suppression+、PreQuant和SDQ等,通过通道位移、缩放、蒸馏等技术消除异常值,从而在INT8甚至4比特下保持接近浮点精度。这些方法表明,异常值处理是量化能否成功的关键环节。

低精度微调:部署经济性的推手

低精度微调在大规模模型部署中日益重要,但异常值激活会损害性能。文章提到,有研究使用8位整数表示异常值激活,提升低精度微调的鲁棒性。结合后训练量化,这些技术能大幅降低推理所需的GPU数量,提高经济性。对于关注部署成本的企业,低精度微调是值得跟踪的方向。

量化方法的多样性与适用场景

文章综述了多种量化方法,包括针对权重的后训练量化、基于嵌入组的量化、量化感知张量压缩等。这些方法在GLUE、XGLUE等基准上验证,有的实现高达63倍的压缩比且几乎无损。不同方法适用于不同场景:有的侧重权重压缩,有的侧重激活量化,读者需根据自身模型和硬件选择。

预训练中的异常值:脆弱性与影响

文章引用研究指出,预训练Transformer对删除极少数要素异常脆弱,尤其是LayerNorm中的缩放因子和偏差。这些异常值在预训练早期出现,并保持相同维度位置。禁用它们会显著降低MLM损失和下游任务性能。这提示我们,异常值并非冗余,而是模型功能的关键组成部分,量化时需谨慎处理。

❓

Q&A

有哪些方法可以抑制Transformer语言模型中的异常值?

文章提到了多种方法:Clipped softmax和Gated attention帮助模型学习更小的异常值;Outlier Suppression+采用channel-wise shifting和scaling操作;PreQuant框架先量化再微调;还有Gamma Migration和Token-Wise Clipping等离群值抑制框架。

低精度量化对Transformer模型的内存和推理成本有什么影响?

低精度量化可以显著降低内存占用和推理成本。例如,通过INT8量化,模型可以在保持接近浮点精度的同时减少GPU数量,实现更高的经济性。

PreQuant框架是如何工作的?

PreQuant是一种“先量化再微调”的框架,将量化和微调分开进行,使用参数有效的微调方法进行校正,在GLUE数据集上取得了良好效果。

量化多语言模型面临哪些挑战?

量化多语言模型需要泛化到没有针对性微调的语言,这是一个挑战。但通过SDQ方法,XLM-R-Base和InfoXLM-Base可以从32位浮点减少到8位整数,同时在XGLUE基准上保持高性能。

异常值激活对低精度微调有什么负面影响?

异常值激活对低精度微调模型的性能有负面影响。文章提出使用8位整数表示异常值激活的方法,以提高低精度微调语言模型的鲁棒性和性能。

量化感知张量压缩训练方法有什么效果?

该方法通过将嵌入层和线性层压缩成低秩张量核,获得低精度模型表示,并应用层与层蒸馏,在自然语言理解任务中实现了高达63倍的压缩比、几乎无损的精度损失和显著的推断与训练加速。

🏷️

标签

➡️

继续阅读