pruning

1. Introduction to Pruning

What is pruning?

How should we formulate pruning? 定义剪枝标准

2. Determine the Pruning Granularity

In what pattern should we prune the neural network?定义剪枝标准

  • 确定剪枝的标准。常见的标准包括基于权重大小的剪枝、基于重要性得分的剪枝(如梯度或二阶导数),或结构化剪枝(去除整个神经元或通道)。
  • 考虑剪枝的具体目标,例如模型压缩、推理加速或内存减少。

Pruning can be performed at different granularities, from structured to non-structured
pruning_第1张图片

3. Determine the Pruning Criterion选择剪枝方法

What synapses/neurons should we prune?

选择与标准相符的剪枝方法或算法。例如,可以使用L1或L2正则化进行基于权重大小的剪枝,也可以使用通道剪枝等技术进行结构化剪枝。

A. What sysnapses should we prune?

a. 基于权重大小的剪枝 Magnitude-based pruning

“Magnitude-based pruning”(基于权重大小的剪枝)是一种常见的神经网络剪枝技术,它基于神经网络中的参数(通常是权重)的大小来确定哪些参数应该被剪枝,以减小模型的大小和复杂性。该技术的主要思想是去除那些绝对值较小的权重,因为它们对模型的贡献相对较小,而保留那些较大的权重,以维持模型性能。

下面是基于权重大小的剪枝的基本原理和步骤:

1. 权重排序: 首先,对神经网络中的所有权重进行排序,通常按绝对值大小进行排序,从最小到最大。

2. 剪枝决策: 根据事先确定的剪枝比率或目标,选择要剪枝的权重。通常,可以通过设置一个剪枝比率来确定要保留的权重百分比。较小的权重将被标记为剪枝。

3. 剪枝操作: 将被标记为剪枝的权重设置为零或删除它们,从而减小了模型的参数数量。这通常会导致模型稀疏化,即模型中许多权重为零。

4. 微调和重训练: 通常需要对被剪枝的模型进行微调或重新训练,以部分恢复模型的性能。这可以通过在新的训练数据上进行额外的训练来实现。

  • “Magnitude-based pruning” 的优点包括简单易行、有效减小模型大小、减少计算和内存需求。然而,它也可能导致较大的性能损失,因为一些绝对值较小但对模型泛化性能有一定贡献的权重也被剪枝了。因此,在实际应用中,通常需要进行谨慎的实验和调整,以平衡模型大小和性能之间的权衡。

此外,“Magnitude-based pruning” 通常结合其他剪枝技术,如结构化剪枝或重要性基
剪枝,以更好地保持模型性能。

b. 基于缩放的剪枝 Scaling-based pruning
  • A scaling factor is associated with each filter (i.e., output channel) in convolutional layers
    • The scaling factor is multiplied to the output of that channel
    • The scaling factors are trainable parameters

  • “Scaling-based pruning”(基于缩放的剪枝)是一种神经网络剪枝技术,它基于权重的缩放因子来确定哪些权重应该被剪枝。这一技术旨在通过考虑权重的相对重要性来减小模型的复杂性,同时最小化性能损失。基于缩放的剪枝通常与剪枝阈值结合使用,权重的缩放因子与阈值比较,如果权重的缩放因子低于阈值,则相应的权重将被剪枝。

下面是基于缩放的剪枝的基本原理和步骤:

1. 计算权重的缩放因子: 对神经网络的每个权重计算一个缩放因子,通常是该权重的绝对值与一些参考值的比值。这个参考值可以是所有权重的均值、最大值、标准差等。

2. 设置剪枝阈值: 确定一个剪枝阈值,该阈值决定了哪些权重应该被剪枝。通常,权重的缩放因子与阈值进行比较。

3. 剪枝决策: 对于每个权重,将其缩放因子与剪枝阈值进行比较。如果缩放因子低于阈值,则将该权重标记为要被剪枝。

4. 剪枝操作: 将被标记为剪枝的权重设置为零或删除它们,减小了模型的参数数量。

5. 微调和重训练: 通常需要对被剪枝的模型进行微调或重新训练,以部分恢复模型的性能。这可以通过在新的训练数据上进行额外的训练来实现。

  • “Scaling-based pruning” 的优点是它可以更好地考虑权重的相对贡献,因此可以减小性能下降的风险。它在减小模型大小和复杂性方面也比一些其他简单的剪枝技术更有效。然而,选择适当的缩放因子和阈值仍然需要谨慎的调整和实验。
c. Second-Order-based Pruning

“Second-Order-based Pruning”(基于二阶导数的剪枝)是一种神经网络剪枝技术,它利用神经网络中参数的二阶导数信息来确定哪些参数应该被剪枝。这一技术旨在更精确地识别不重要的参数,以减小模型的复杂性,同时最小化性能损失。相比于基于一阶导数(如梯度)的剪枝方法,基于二阶导数的剪枝更加细致和精确。

下面是基于二阶导数的剪枝的基本原理和步骤:

计算参数的二阶导数:对神经网络的每个参数计算其相对于损失函数的二阶导数,通常使用海森矩阵(Hessian matrix)或近似方法来估计二阶导数。这些二阶导数提供了关于参数的曲率信息,即它们告诉我们参数周围的损失函数曲线形状。

1. 设置剪枝阈值: 确定一个剪枝阈值,该阈值决定了哪些参数应该被剪枝。通常,二阶导数的绝对值与阈值进行比较。

2. 剪枝决策: 对于每个参数,将其二阶导数的绝对值与剪枝阈值进行比较。如果二阶导数的绝对值低于阈值,则将该参数标记为要被剪枝。

3. 剪枝操作: 将被标记为剪枝的参数设置为零或删除它们,减小了模型的参数数量。

4. 微调和重训练: 通常需要对被剪枝的模型进行微调或重新训练,以部分恢复模型的性能。这可以通过在新的训练数据上进行额外的训练来实现。

“Second-Order-based Pruning” 的优点在于它更精确地考虑了参数对模型的影响,因此可以减小性能下降的风险。它通常用于需要高度精细化剪枝的应用中,如在资源受限的环境中,需要最大程度地减小模型复杂性而又不损害性能。

B. Selection of Neurons to Prune

When removing neurons from a neural network model,
• the less useful the neurons being removed are,
• the better the performance of pruned neural network is.

Percentage-of-Zero-Based Pruning

这种剪枝方法根据参数中的零值(或接近零值)的比例来决定哪些参数应该被剪枝。 这一技术旨在利用神经网络中存在的稀疏性来减小模型的复杂性,同时保持或提高性能。
以下是 “Percentage-of-Zero-Based Pruning” 的基本原理和步骤:

1. 计算零值比例: 对神经网络中的每个参数(通常是权重)计算零值或接近零值的比例。这可以通过将参数与一个接近零的阈值进行比较来实现,通常使用很小的阈值。

2. 设置剪枝比例阈值: 确定一个剪枝比例阈值,该阈值决定了哪些参数应该被剪枝。通常,参数的零值比例与阈值进行比较。

3. 剪枝决策: 对于每个参数,将其零值比例与剪枝比例阈值进行比较。如果零值比例高于阈值,说明该参数足够稀疏,将被标记为要被剪枝。

Regression-based Pruning

4. Determine the Pruning Ratio确定剪枝比率

How should we find per-layer pruning ratios?

1. Analyze the sensitivity of each layer

We can perform sensitivity analysis to determine the per-layer pruning ratio

2. AutoML

NetAdapt

What should target sparsity be for each layer?

决定剪枝比率,即要剪掉的参数百分比。这是一个关键的超参数,平衡了模型大小的减小和性能保持。
探索不同的剪枝比率以及它们对模型性能的影响,以找到合适的权衡点。

5. Fine-tune/Train Pruned Neural Network 微调训练

How should we improve performance of pruned models?

在剪枝后,对模型进行微调或重新训练,以恢复性能的部分损失。
根据需要调整学习速率和其他超参数。

你可能感兴趣的:(剪枝,算法,机器学习)