1. Introduction to Network Compression
深度学习中的网络压缩是指在保持神经网络性能的同时,减少其规模的过程。这非常重要,因为深度学习模型,尤其是用于自然语言处理或计算机视觉的大型模型,训练和部署的计算成本可能非常高。网络压缩通过降低内存占用并加快推理速度,在不牺牲精度的情况下,使模型更加高效。
网络压缩所使用的技术有:
1.1 Network Pruning
对于网络剪枝,有一个彩票假设理论,该理论指出:“密集的、随机初始化的前馈网络中包含子网络(中奖票),当这些子网络单独训练时,其测试精度可以在类似的迭代次数下达到与原始网络相当的水平。这些中奖票之所以‘中奖’,是因为它们的连接权重初始值使训练特别高效。”(来源:论文链接)。
还有一篇关于神经网络重要性估计的论文也值得阅读。(来源:论文链接)
1.2 Knowledge Distillation
知识蒸馏(Knowledge Distillation, KD)是一种机器学习技术,其中一个较小且更简单的模型(称为学生模型)被训练以复制一个较大且更复杂的模型(称为教师模型)的行为。其目标是将教师模型的“知识”转移到学生模型,使得较小的模型在保持高性能的同时,在计算和内存方面更加高效。
在进行知识蒸馏时,一个常用的技巧是引入一个称为温度(temperature)的超参数。知识蒸馏中的温度用于使教师模型的输出概率分布更加平滑。它控制预测的置信度或分散程度,从而使学生模型更容易从教师模型的输出中学习。
1.3 Parameter Quantization
参数量化是一种模型压缩技术,通过用更少的位数表示神经网络的参数(权重和激活值),来减少内存占用和计算需求。与使用全精度(如32位浮点数)表示参数不同,参数量化使用低精度数据类型,例如16位、8位甚至二进制格式来存储和处理参数。
这篇文章在解释和可视化量化方面做得非常出色: 文章链接。
1.4 Architecture Design
架构设计涉及创建内在高效的神经网络结构,通过减少模型规模、内存使用和计算复杂性来优化性能,而无需依赖训练后的压缩技术。与剪枝或量化不同,这种方法从一开始就专注于设计更小、更快且更高效的网络。
以卷积神经网络(CNN)为例,常规的卷积核如下:
但是,我们可以引入一种新的卷积方式,即深度可分卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。深度可分卷积对每个输入通道独立地应用一个单独的滤波器。逐点卷积则用于跨通道混合信息,它使用一个 1×1 的卷积核来调整输出通道的数量。
与普通卷积相比,深度可分卷积的参数量大大减少,减少的比例约为 k×k。其中 k 是卷积核的大小。
之所以有效,是因为它是一种低秩近似(low rank approximation)。
低秩近似是一种在机器学习和神经网络中使用的技术,通过用较小的低秩矩阵来近似大矩阵,从而减少其规模和复杂度。其目标是捕捉最重要的信息,同时丢弃冗余部分,从而减少计算、存储和内存需求。在卷积神经网络中,深度可分卷积通过将传统的卷积操作分解为两个较小的操作(深度卷积和逐点卷积),有效地降低了计算量和参数数量,这正是低秩近似的一种应用。
1.5 Dynamic Computation
动态计算方法允许网络根据输入数据、网络当前状态或资源限制来调整其计算的操作数或层数。这种适应性可以发生在推理过程中(例如在测试图像上),甚至在训练过程中。通过动态地选择不同的计算路径或层,网络能够在保证性能的同时,优化计算资源的使用,提高效率。
2. Homework Results and Analysis
机器学习作业13是网络压缩。
网络压缩:在不损失性能的情况下使模型更小。在这个任务中,我们需要训练一个非常小的模型来完成作业3(在Food-11数据集上进行图像分类)。
数据集仍然是Food-11,但顺序不同。
有一个特别的规定:确保你的模型的总参数数目小于或等于60,000。