摘要
本次学习探讨了神经网络压缩的必要性及其核心技术。针对资源受限环境(如移动设备与嵌入式系统)下部署大型模型的需求,分析了网络剪枝与知识蒸馏等压缩方法的原理与应用。网络剪枝通过移除冗余参数或神经元实现模型轻量化,而知识蒸馏则借助教师网络指导学生网络学习,以在减少参数规模的同时保持模型性能。这些方法为在存储与计算能力受限的场景中高效部署机器学习模型提供了可行的技术路径。
Abstract
This study examines the necessity of neural network compression and its core techniques. To address the need for deploying large models in resource-constrained environments (such as mobile devices and embedded systems), it analyzes the principles and applications of compression methods including network pruning and knowledge distillation. Network pruning achieves model lightweighting by removing redundant parameters or neurons, while knowledge distillation guides a student network to learn from a teacher network, maintaining model performance while reducing parameter scale. These methods provide viable technical pathways for efficiently deploying machine learning models in scenarios with limited storage and computational capabilities.
一.模型量化原因
到目前已经了解了很多大型的模型如Bird或GPT,本次学习了解的是我们能不能将这些大型的模型简化缩小,使其有较少量的参数的情况下效果与原来没有很大差别。
首先我们为什么会在意网络压缩这件事呢?因为在很多时候我们需要将这些模型用在资源受限的情况下,如将这些机器学习的模型运行在智能手表或者无人机上,这些设备只有比较小的存储空间,运算能力受限,所以如果我们的模型太过巨大,手表就可能会运行不了,这就需要网络压缩了。
对此也会有疑问:为什么不先将资料传输到云端,在云端运算完之后再将结果传回?这是因为对于要及时反馈的事件时通过云端计算再传回可能会因为时延太长而引发问题,其次因为要传输云端,这时隐私又是一个问题。
二.网络压缩技术
1.网络剪枝(Network Pruning)
①网络剪枝
网络剪枝顾名思义就是要把network中的一些参数把它“剪掉”。因为在一个大型的网络中会有大量的参数,而这些参数中每一个参数不一定会被用到,为了节省空间以及节约运算资源就可以将它们“剪掉”。就如脑神经元,在人刚出生时脑神经元数量少链接也少,但是随着年龄的增长链接会变多,同时有些连结也会慢慢消失。
网络剪枝的框架如下进行:先训练一个最大的网络模型,接着去测评在这个模型中每一个参数或神经元的重要性,然后将不重要的神经元或者参数从模型中移除,这样便可以得到一个小型网络。
通常如上步骤完成后,模型的效率及正确率就会较原来会低一点,因为有些参数被移除,所以这个网络当然是受到一些损伤的。但是可以通过将这个小型网络重新微调,也可再重新评估参数的重要性再进行调整,若此反复几次便可得到比较小的网络,这时它的正确率较原来正确率也许就没有太大差别。
前面说到修建的参考单位可以是参数或者神经元,用这两者参考单位在实际操作上是有较为显著的差距的。如果以参数为单位,这时将一个参数去除,得到的网络形状可能会是不规则,这就导致在实操时由于定义每一层输入几个神经元输出几个神经元,对于这种不规则网络就会很难操作。就算做好了,由于GPU是将网络的运算看作一个矩阵的乘法,但是当网络不规则时就不容易用矩阵的乘法进行加速。
下面再看看一个文献中的效果图:
这个文献想要展示的就是以参数为单位做剪枝时遇到的问题。先看紫色的这条线是Sparsity,其是指有多少百分比的参数被剪枝掉,观察发现这个先与1很接近,表示有接近95%以上的参数被剪枝掉。
但是正常取出95%的参数,只剩下5%的参数时网络应该会变得很小运算变快,但是发现实际上并没有加速多少。所以参数剪枝不见得是一个特别有效的方法。
若以神经元为单位来剪枝,这时移除一些神经元之后网络架构还是规则的。
②为什么不从小模型直接训练
我们正常是先训练一个大模型后再将其缩小,而且小的模型与大的模型正确率没差很多,那为什么不直接训练一个小模型呢?一个普遍的答案是大的网络好训练,如果直接训练一个小的网络往往得不到跟大的网络一样的正确率。
对此有一个彩票假说,该理论认为,一个大型稠密网络中可能存在一个稀疏的子网络(“中奖彩票”),在单独训练时能达到与原网络相当的精度。剪枝的目的就是找到这个子网络。
这个彩票假说在实验上被证实的方式与网络的剪枝非常相关。如下:现在有一个大的网络,在这个网络中一开始的参数是随机初始化的,之后便可以得到一组训练完的参数(用紫色表示),接着用网络剪枝的技术将一些紫色的参数丢掉得到比较小的网络。
若这时将这个小型网络中的参数重新随机初始化以一个一样大的小型网络,就会发现训练不出来。但是对于这个较小的网络在重新初始化参数时用的与开始时的参数一样就可以训练出来。
对于这个彩票假说,也有一篇有趣的研究:解构彩票假说。在这个研究中有两个结果,一个是通过不同的剪枝策略,发现某两个剪枝策略是最有效的。
另外一个结果是初始化参数只要不改变参数的正负号就可以将小的网络训练起来,也就是说正负号是初始化参数能否训练好的关键。
对此也有反驳彩票假说的文章《Rethinking the Value of Network Pruning》。这篇文章试了两个给数据集以及不同的模型,得出下面结果:
其在Scratch-E直接训练小的模型时,用的参数初始化是真随机而不是彩票假说中的在原数据集中随机抽取,得到的结果确实与从大模型剪枝过来的小模型是有差距的。但是在实验Scratch-B中在更新参数时多更新几个EPOD之后得到的结果就要比剪枝得来的结果要好。
所以彩票假说中小模型不好训练是否真实还有待研究。
2.知识蒸馏(Knowledge Distillation)
知识蒸馏与网络剪枝是有类似之处,知识蒸馏是先训练一个大的模型被称为教师网络模型,通过这个模型来得到小的模型也就是学生网络模型,其与网络剪枝不一样的是其小的网络是更具大的教师网络模型进行学习的。
其学习方法如下:假如现在要完成后的是手写数字辨识,就将资料输入到教师模型中,教师模型就会产生分布结果,接着就是给学生看一样的图片,其不是通过正确答案进行学习,而是将老师的输出看作正确答案进行学习。
为什么认为知识蒸馏有用?是因为教师神经网络会给学生网络额外的咨询,就如让学生辨识手写“1”,是有点困难的,因为其与7和9都是相似的,而老师就会告诉说明“1”能否分别是没有关系的,只要知道这个手写数对应的分布就饿可以了。
这种方式就比小模型用正确答案来学习结果要好很多。甚至只要教师告诉学生哪些数字之间有关系就可以让让学生在完全没有看到某些数字训练资料之下就可以将这个些数字学会。
这个教师神经网络不一定是要一个巨大的网络,其甚至可以是多个网络的组合。这个组合是选多个结果中的一个或所有结果取平均当作最终结果。
在使用知识蒸馏也有一个小技巧,就是稍微更改Softmax的函数,即在函数中做期望值之前将每一个数值都除上一个T,这个T是需要调整的一个参数,起作用就是将原本比较集中的分布使其变得分散点。就如下:
总结
本次课程系统介绍了神经网络压缩的背景与主要技术。首先阐述了模型压缩的现实必要性,即在存储与算力有限的边缘设备中,直接部署大型模型面临效率与延迟的挑战。在此基础上,重点讲解了网络剪枝与知识蒸馏两类核心方法:网络剪枝通过训练后评估参数重要性并剪除冗余部分,再经微调恢复性能,其中以神经元为单位的剪枝更具实用性;知识蒸馏则通过教师网络输出的软标签指导学生网络学习,借助分布信息提升小模型的泛化能力。此外,课程还探讨了“彩票假说”及其争议,揭示了剪枝过程中初始化与结构选择的重要性。总体而言,神经网络压缩技术通过模型精简与知识迁移,为实现高效、轻量的边缘智能部署奠定了方法论基础,并在实际应用中体现出重要的工程价值。