机器学习工程与系统
模型压缩(model compression)
/ MOD-ul kum-PRESH-un /
模型压缩,是所有「让一个练好的模型更小、更快、或运行更便宜,而无需从头重训」的技术的总称。如果说量化、剪枝、蒸馏是单件工具,那么模型压缩就是整个工具箱,以及使用它们的那门手艺。目标始终如一:拿一个能用、却对你需要的场合太重的模型,把它瘦下来、瘦到正好塞得进去——塞进一部手机、塞进一份紧巴巴的延迟预算、或塞进一张更小的云账单之下。
几样主要工具,在实践里彼此组合。量化用更低的精度去存每个数字。剪枝删掉那些几乎无关紧要的部分。蒸馏训练一个更小的模型去模仿更大的。还有别的——把大的权重矩阵分解成小的、在层与层之间共享权重——但这三样是主力,而且常常被叠着用:先蒸馏出一个更小的模型,再剪枝,最后把剩下的量化。
为什么这很重要:压缩,正是横在「一个唬人的研究模型」与「一个人们真能大规模、或在设备上部署的模型」之间的那道关。它是应用机器学习里最具实践分量的领域之一。贯穿其中的诚实主题是:每一种方法,都拿某些质量去换大小或速度。有时这点损失微不足道;有时它恰好落在你最在乎的那些情形上。世上没有免费的压缩——工程的本事,在于诚实地度量损失,再判断这桩权衡对你的用途值不值得。
一个 28 GB 的研究模型塞不进手机。工程师把它蒸馏成一个 3 GB 的学生,再剪枝到 2 GB,然后量化到 4 比特,最终落在 0.6 GB 上下——小到能随一个应用一起发布,同时一轮仔细的评测确认它仍答得过得去。
把蒸馏、剪枝、量化层层叠用——并在每一步核实质量是否守得住。
当心那种「压缩了 50 倍而无损失」的标题。这类说法通常只在某个特定基准的平均值上成立,可能藏起在边角情形、其他语言、或罕见输入上的真实退化。压缩的结果,必须拿你真正在乎的那份工作负载去评判。
又称
另见