趋近智
剪枝方法的基本原理是向模型引入稀疏性,将某些参数或参数组设为零。然而,这种稀疏性的引入方式会显著影响实际效果,尤其是在计算效率方面。主要区别在于非结构化剪枝和结构化剪枝。
非结构化剪枝,常被称为权重剪枝,在最细粒度的层面进行操作。它针对模型参数张量中的单个权重(如线性层中的权重矩阵或卷积滤波器)。核心思想简单明了:根据某些标准(最常见的是它们的绝对值),识别对模型输出贡献最小的权重并将其设为零。
剪枝方法通过向模型引入稀疏性来发挥作用,即将某些参数或参数组置为零。然而,这种稀疏性引入的方式极大地影响实际效果,尤其是在计算效率方面。主要区别在于非结构化剪枝和结构化剪枝。
W = [[1.2, -0.3, 0.8],
[0.1, -2.1, -0.5],
[-0.9, 0.05, 1.5]]
# 经过幅度剪枝后(阈值 0.4)
W_pruned = [[1.2, 0.0, 0.8],
[0.0, -2.1, -0.5],
[-0.9, 0.0, 1.5]]
特点:
硬件挑战:
尽管能达到较高的理论稀疏度(许多零值权重),非结构化剪枝在现代硬件(如GPU和TPU)上常常导致令人失望的实际加速效果。原因如下:
本质上,虽然浮点运算(FLOPs)的数量在理论上可能大幅减少,但实际的解决时间(延迟)通常不会按比例提高,有时甚至会降低,这是因为标准硬件无法高效处理细粒度、不规则的稀疏性。实现了用于存储或传输的模型尺寸缩减,但推理加速存在问题。
结构化剪枝采取了一种更粗粒度的方法。它不移除单个权重,而是移除模型中整个结构单元。这些单元与网络的计算结构对齐。例子包括:
考虑剪枝权重矩阵中的一整列(代表连接到下一层某个特定神经元的输出)或一整行(代表来自上一层某个特定神经元的输入):
W = [[1.2, -0.3, 0.8],
[0.1, -2.1, -0.5],
[-0.9, 0.05, 1.5]]
# 剪枝第2列(结构化)
W_pruned_col = [[1.2, 0.0, 0.8],
[0.1, 0.0, -0.5],
[-0.9, 0.0, 1.5]]
# 剪枝第1行(结构化)
W_pruned_row = [[0.0, 0.0, 0.0],
[0.1, -2.1, -0.5],
[-0.9, 0.05, 1.5]]
特点:
可视化差异:
下图描绘了由此产生的稀疏模式。非结构化剪枝产生分散的零,而结构化剪枝则移除整行/整列/整个块,留下更小的稠密结构。
稀疏模式的可视化比较。蓝色单元格代表非零权重,灰色单元格代表已剪枝(零)权重。非结构化剪枝导致零点分散,而结构化剪枝则移除整列,形成更小、有效的稠密矩阵。
在非结构化剪枝和结构化剪枝之间做出选择涉及权衡:
选择通常取决于主要目标:
现代方法常尝试弥合这一差距,例如,通过开发更硬件感知的非结构化剪枝标准或研究混合技术。理解这一基本区别对于在LLM优化背景下有效地选择和应用剪枝方法十分重要,因为模型尺寸和推理速度都是重要考量。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造