本文主要是介绍Layer-Wise Data-Free CNN Compression,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Layer-Wise Data-Free CNN Compression
我们的无数据网络压缩方法从一个训练好的网络开始,创建一个具有相同体系结构的压缩网络。这种方法在概念上类似于知识蒸馏[23],即使用预先训练好的“教师”网络来训练“学生”网络。但是知识蒸馏需要训练数据。以前的方法都是通过生成数据来解决这个问题,比如Adversarial Knowledge Distillation(AKD)[6]和Deep Inversion(DI)[51]。然而,这些方法的计算成本很高。
图1。我们的方法概述。我们首先在教师和学生身上进行BatchNorm fusion和Assumption-Free Cross-Layer Equalization(AFCLE,第3.2节)。然后,我们分别训练学生的每一层。我们使用前一层(第3.1节)的BatchNorm统计数据生成数据,然后使用这些数据优化压缩的学生网络以匹配教师。
我们采用图1所示的更简单的方法。我们将学生的每一层视为教师中相应层的压缩近似值。只要每一层的近似值是准确的,整体的学生网络就会产生与教师类似的输出。这个这种方法的计算效率远高于其他生成方法,因为我们的方法不需要训练输入图像,就可以在网络的每一层产生良好的训练信号。
图2。MobileNetV1分析了我们的方法和对抗性知识提取(AKD)的前传次数和训练精度[6]。深度反演[51](未显示)比AKD需要更多的FLOPs ,而且精度较低。
相反,我们为每个层分别生成输入,这不需要生成真实的图像。我们的方法比AKD[6]少14倍的触发器,比DI[51]少450倍的FLOPs (图2),只经过几百次迭代就收敛了。
我们的第一个挑战在于生成用于训练教师层的压缩近似值的数据。我们的第二个挑战在于对网络进行预处理以实现更有效的压缩。我们将在以下小节中讨论这些问题。
3.1. LayerWise Data Generation
我们描述了layer-wise网络输入的方法。我们假设网络由包含卷积的块组成,然后是BatchNorm[25],然后是激活。让 B i \mathcal B_i Bi代表与索引i块相关联的BatchNorm层。 B i \mathcal B_i Bi的均值和标准差为 μ B i , σ B i \mu_{\mathcal B_i},\sigma_{\mathcal B_i} μBi,σBi,然后应用权值为 γ B i \gamma_{\mathcal B_i} γBi和bias为 β B i \beta_{\mathcal B_i} βBi的的通道仿射变换。因此,我们知道BatchNorm的输出通道的标准偏差是 γ B i \gamma_{\mathcal B_i} γBi,均值为 β B i \beta_{\mathcal B_i} βBi。
我们利用这些信息生成layer-wise输入。设 C i \mathcal C_i Ci表示网络块i中的卷积层, f i f_i fi表示块i中的激活。另外, h ( ⋅ ) h(\cdot) h(⋅)代表h层对应输入的输出。考虑块i从由集合K索引的块中接受多个输入张量的情况。让 x B i − 1 x_{\mathcal B_{i-1}} xBi−1代表用真实数据训练的训练batch中BatchNorm层 B i − 1 \mathcal B_{i-1} Bi−1的输入。假设这些tensors由加法函数组合而成(如残差网络[22]),卷积Ci的输入xCi为
加法外的其他组合函数也如此。
在没有数据的训练中,我们无法访问 x B i − 1 x_{\mathcal B_{i-1}} xBi−1,所以我们估计它。用 G c i ( ⋅ ) \mathcal G_{c_i}(\cdot) Gci(⋅)代表用于生成训练 C i \mathcal C_i Ci层输入的函数,利用我们上面关于BatchNorm层的输出统计的观察,我们估计
其中 N ( μ , σ ) \mathcal N(\mu,\sigma) N(μ,σ)代表高斯分布。在第一个卷积层的情况下,我们从 N ( 0 , 1 ) \mathcal N(0,1) N(0,1)生成数据。我们忽略了其他层(如平均池)对统计数据的影响。
我们在第3.3节和第3.4节中描述了如何使用生成的数据来计算学生网络的层。但首先,我们描述了我们的方法的另一个组成部分,该方法旨在对网络进行预处理以改进最终结果。
3.2. AssumptionFree CrossLayer Equalization
我们描述了均衡(equalizing)网络层的方法。为了便于描述, W ∈ R c o , c i W\in \mathbb R^{c_o,c_i} W∈Rco,ci代表一个具有 c o c_o co输出维度和 c i c_i ci输入维度的矩阵。
我们的方法将无数据网络压缩问题分解为压缩单个层的子问题。有两个问题使从压缩后的单个层组装压缩网络的问题变得复杂。
第一个问题是关于BN层,BN层具有参数 μ , σ , γ , β \mu,\sigma,\gamma,\beta μ,σ,γ,β。给定一个偏置为b的线性层W,线性层的输出,后跟BatchNorm
⨀ \bigodot ⨀代表elementwise multiplication。如果W的某一行c乘以比例因子 α \alpha α,如果b和 μ \mu μ的第c个元素乘以 α \alpha α,如果 γ \gamma γ的第c个元素乘以标量因子 1 / α 1/\alpha 1/α,则函数f(x)保持不变。因此,W的权重的相对重要性取决于BatchNorm参数的值。在修剪或量化W时,这是有问题的,因为我们希望权重值的大小能反映其重要性。BatchNorm层内隐藏的比例因子可以防止这种情况的发生。为了解决这个问题,我们融合BN层的参数 μ , σ , γ , β \mu,\sigma,\gamma,\beta μ,σ,γ,β到之前的线性层。以使BatchNorm参数对权重大小的有效影响得到考虑。一旦这种融合发生,BatchNorm可以被忽略。公式3中使用的BatchNorm统计量必须在该融合步骤之前收集。它们将保持有效,因为BatchNorm参数的变化会被W和b的变化所补偿。
将无数据网络压缩分解为layer-wise压缩子问题的第二个复杂性是,各层的权重相对大小可能不一致。考虑一对具有权重 W 1 W_1 W1和 W 2 W_2 W2以及偏置 b 1 b_1 b1和 b 2 b_2 b2的线性层的输出。假设网络使用ReLU激活[1],这样层对的输出是
如果 W 2 W_2 W2的第c行乘上一个缩放因子 α \alpha α,且如果 b 2 b_2 b2对应的第c个元素乘上 α \alpha α,且 W 1 W_1 W1相对应的列乘上 1 / α 1/\alpha 1/α,输出 f ( x ) f(x) f(x)保持不变。换句话说,层间权重的相对重要性在先验上是不一致的。有相似重要性的权重需要在整个网络中具有相似的值,否则一些层将被修剪得太重,而一些层将被修剪得不够。不一致也会导致次优的量化范围,如[38]所述。
为了解决这种缩放不一致的问题,我们采用了一种方法,我们称之为Assumption-Free Cross-Layer Equalization(AFCLE),它是DFQ[38]中描述的Cross-Layer Equalization方法的扩展。对于每一个权重为 W j ∈ R c o × c i W_j\in\mathbb R^{c_o\times c_i} Wj∈Rco×ci,偏置为 b j ∈ R c o b_j\in\mathbb R^{c_o} bj∈Rco的线性层 L j \mathcal L_j Lj,我们把一对向量 v j i ∈ R c j , v j o ∈ R c o v_j^i\in\mathbf R^{c_j},v_j^o\in\mathbf R^{c_o} vji∈Rcj,vjo∈Rco联系起来。(扩展到卷积层是同样的)这些向量将在AFCLE中使用,之后将保持固定。我们计算线性层的输出为
在AFCLE之前, v j i a n d v j o v_j^i\ and\ v_j^o vji and vjo的所有元素初始化为1。设 W 2 W_2 W2的第c行 W 2 c W^c_2 W2c,和 W 1 W_1 W1对应的列 W 1 c W_1^c W1c。我们计算比例因子 s c s_c sc,并将网络更新为
这篇关于Layer-Wise Data-Free CNN Compression的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!