【论文笔记】ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting

本文主要是介绍【论文笔记】ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

提出了ResRep,一种无损通道修剪的新方法,它通过减少卷积层的宽度(输出通道数)来缩小CNN的尺寸。
建议将CNN重新参数化为记忆部分遗忘部分,前者学习保持性能,后者学习修剪。通过对前者使用常规 SGD 进行训练,对后者使用带有惩罚梯度的新颖更新规则进行训练,实现了结构化稀疏性,然后等效地将记忆和遗忘部分合并到层数更窄的原始架构中。

github仓库

1 Introduction

压缩和加速卷积神经网络(CNN)的主流技术包括稀疏化、通道剪枝、量化、知识蒸馏等。通道剪枝通过减少卷积层的宽度(即输出通道数)来有效计算次数和内存占用,这与其他模型压缩方法相辅相成,因为它产生了原始架构的较薄模型,没有自定义的结构或操作。

然而,由于CNN的表示能力取决于卷积层的宽度,因此很难在不降低性能的情况下减小宽度。理想情况下,如果剪枝通道的参数足够小,剪枝后的模型可以提供与之前相同的性能(即训练后但剪枝前),称为完美剪枝。

由于训练和剪枝都可能降低性能,因此从两个方面评估基于训练的剪枝方法。

  • 抗损性。训练阶段倾向于降低准确性(称为训练引起的损害),因为它引入了一些期望的属性,如结构化稀疏性,这可能是有害的,因为优化目标发生了改变,参数偏离了最优解。如果模型在训练期间性能保持高水平,则说它具有高抗损性。
  • 可剪性。当训练后将模型剪枝成一个较小的模型时,获得的属性(例如,许多通道接近零)将减少剪枝引起的损害。如果模型承受高剪枝比例且性能下降较小,则说它具有高可剪性。

在本文中,提出了ResRep来解决上述问题,这受到了神经生物学对记忆和遗忘的研究的启发。

  • 记忆需要大脑加强某些突触但减弱其他突触,这类似于CNN的训练,使一些参数变大而另一些变小。
  • 通过萎缩或丢失突触来消除突触是一种经典的遗忘机制,作为生物神经网络中提高能量和空间效率的关键过程,类似于剪枝。
    神经生物学研究表明,记忆和遗忘分别由Rutabaga腺苷酸环化酶介导的记忆形成机制和Rac调节的突触萎缩机制独立控制,这表明通过两个解耦模块学习和剪枝更为合理。

受到这种独立性的启发,本文提出将“记忆”和“遗忘”解耦,传统范式中这两者是耦合在一起的,因为卷积参数同时参与了“记忆”(目标函数)和“遗忘”(惩罚损失)以达到折衷的目的。
传统方法强制每个通道“遗忘”,并删除了“遗忘最多”的通道。相比之下,本文的方法首先将原始模型重新参数化为“记忆部分”和“遗忘部分”,然后在前者上应用“记忆学习”(即使用原始目标的常规SGD)以保持“记忆”(原始性能),在后者上应用“遗忘学习”以“消除突触”(将通道置零)。

ResRep包括两个关键组成部分:

  • 卷积重新参数化(Rep,解耦的方法和相应的等效转换);
  • 梯度重置(Res,用于“遗忘”的更新规则)。

具体而言,在希望剪枝的原始卷积层后插入一个压缩器,它是一个 1 × 1 1\times 1 1×1卷积。在训练过程中,仅对压缩器添加惩罚梯度,选择一些压缩器通道并将它们从目标函数推导出的梯度置零。这样的训练过程使得一些压缩器通道的梯度非常接近于零,并且在没有剪枝引起的损害的情况下被移除。
然后,通过一些线性变换,将压缩器连同前面的卷积等效转换为具有较少通道的单个卷积。这种方法很容易推广到原始卷积后跟批量归一化(BN)的常见情况。在这种情况下,在BN后附加压缩器,并通过首先等效融合卷积-BN为带偏置的卷积(Eq. 4)来在训练后转换卷积-BN-压缩器序列。最终,结果模型具有与原始模型相同的架构(即没有压缩器),但是层次更窄。

Algorithm 1: Pipeline of ResRep channel pruning

输入:训练好的模型 W \mathcal{W} W
使用压缩器构建重参数化的模型 W ^ \hat{\mathcal{W}} W^
用单位矩阵初始化压缩器,其他部分使用 W \mathcal{W} W的原参数。
for i=0 to 最大迭代次数:

W ^ \hat{\mathcal{W}} W^前向传播一个小批量,使用原来的目标函数计算损失,求出梯度。
只对压缩器的梯度应用梯度重置。
使用压缩器重置后的梯度和其它参数的原始梯度更新 W ^ \hat{\mathcal{W}} W^
end for
删除 W ^ \hat{\mathcal{W}} W^中接近于零的压缩器行(如范数小于等于 1 0 − 5 10^{-5} 105)。将 W ^ \hat{\mathcal{W}} W^的参数等效地转换到 W ′ \mathcal{W}' W中。此时 W ′ \mathcal{W}' W W \mathcal{W} W具有相同的结构,但是具有更窄的层。
输出:剪枝后的模型 W ′ \mathcal{W}' W

总结ResRep的特点:

  • 高抗损性。为了维持性能,ResRep不改变原始模型(即卷积-BN部分)的损失函数、更新规则或任何训练超参数。
  • 高可剪性。压缩器受惩罚梯度驱动,使得许多通道的值足够小,实现了完美的剪枝,即使惩罚强度较轻。
  • 针对所需的FLOP全局减少比例,ResRep自动找到每层的最终宽度,无需先验知识,使其成为CNN结构优化的强大工具。
  • 端到端训练和易于实现。

总结本文贡献:

  • 受神经生物学研究启发,提出了将“记忆”和“遗忘”解耦以进行剪枝。
  • 提出了两种技术,Rep和Res,以实现高抗损性和高可剪性。它们可以分开使用,而组合使用效果最佳。
  • 在常见的基准模型上取得了最先进的结果,包括在ImageNet上对ResNet50进行了真正的无损剪枝,剪枝比例为54.5%。

3 ResRep for Lossless Channel Pruning

3.1 Formulation and Background

首先介绍卷积和通道剪枝的公式。

D D D C C C为输出和输入的通道数, K K K为卷积核的大小, K ∈ R D × C × K × K \mathbf{K}\in\mathbb{R}^{D\times C\times K\times K} KRD×C×K×K是卷积核的参数tensor, b ∈ R D \mathbf{b}\in\mathbb{R}^D bRD为可选的偏差, I ∈ R N × C × H × W \mathbf{I}\in\mathbb{R}^{N\times C\times H\times W} IRN×C×H×W O ∈ R N × D × H ′ × W \mathbf{O}\in\mathbb{R}^{N\times D\times H'\times W} ORN×D×H×W是输入和输出, ⊛ \circledast 是卷积操作, B B B是广播函数,将 b \mathbf{b} b广播城 N × D × H ′ × W ′ N\times D\times H'\times W' N×D×H×W的尺寸。有:
O = I ⊛ K + B ( b ) (1) \mathbf{O}=\mathbf{I}\circledast\mathbf{K}+B(\mathbf{b})\tag{1} O=IK+B(b)(1)
对于一个不含偏差项但是后面跟着一个bn层(均值为 μ \mu μ,标准差为 σ \sigma σ,比例因子为 γ \gamma γ,偏差为 β ∈ R D \beta\in \mathbb{R}^D βRD)的卷积层,有:
O : , j , : , : = ( ( I ⊛ K : , j , : , : ) − μ j ) γ j σ j + β j , ∀ 1 ≤ j ≤ D (2) \mathbf{O}_{:,j,:,:}=((\mathbf{I}\circledast\mathbf{K}_{:,j,:,:})-\mu_j)\frac{\gamma_j}{\sigma_j}+\beta_j,\ \forall 1\leq j\leq D\tag{2} O:,j,:,:=((IK:,j,:,:)μj)σjγj+βj, ∀1jD(2)
i i i为卷积层的编号,为了剪枝卷积层 i i i,根据某种规则获得了被剪掉的通道集合 P ( i ) ⊂ { 1 , 2 , ⋯ , D } \mathcal{P}^{(i)}\subset\{1,2,\cdots,D\} P(i){1,2,,D},留下其补集 S ( i ) = { 1 , 2 , ⋯ , D } \ P ( i ) \mathcal{S}^{(i)}=\{1,2,\cdots,D\}\backslash\mathcal{P}^{(i)} S(i)={1,2,,D}\P(i)。剪枝操作留下了第 i i i个卷积层的 S ( i ) \mathcal{S}^{(i)} S(i)的输出通道和后续层(第 i + 1 i+1 i+1个卷积层)的相应输入通道,然后丢弃其他的。偏差或后续BN中的相应输入通道也被丢弃。
获得的新卷积核为:
K ( i ) ′ = K S ( i ) , : , : , : ( i ) , K ( i + 1 ) ′ = K : , S ( i ) , : , : ( i + 1 ) (3) {\mathbf{K}^{(i)}}'=\mathbf{K}_{\mathcal{S^{(i)},:,:,:}}^{(i)},\ {\mathbf{K}^{(i+1)}}'=\mathbf{K}_{:,\mathcal{S}^{(i)},:,:}^{(i+1)}\tag{3} K(i)=KS(i),:,:,:(i), K(i+1)=K:,S(i),:,:(i+1)(3)

3.2 Convolutional Re-parameterization

对于每一个需要修剪的带有BN层(如果有的话)的卷积层(这个卷积层被称为目标层),附加一个 1 × 1 1\times 1 1×1卷积的压缩器,卷积核 Q ∈ R D × D \mathbf{Q}\in\mathbb{R}^{D\times D} QRD×D。给一个训练好的模型 W \mathcal{W} W,构建一个重参数化的模型 W ′ \mathcal{W}' W,方法是通过 W \mathcal{W} W的原始参数初始化卷积层和bn层, Q \mathbf{Q} Q用单位矩阵初始化,以便重新参数化的模型产生与原始模型相同的输出。
如果目标层没有后续的BN,那么BN可以被看做偏差。
梯度重置(3.3)训练后,修剪压缩器产生的接近于0的通道并将模型转换为 W ′ \mathcal{W}' W,其具有与 W \mathcal{W} W相同的结构,但是具有更窄的层。
具体来说,对于具有卷积核 Q \mathbf{Q} Q的特定压缩器,修剪范数小于阈值 ϵ \epsilon ϵ的通道。
形式上,获得要被剪枝的通道集合 P = { j ∣ ∣ ∣ Q j , : ∣ ∣ 2 < ϵ } \mathcal{P}=\{j|\ ||\mathbf{Q}_{j,:}||_2<\epsilon\} P={j ∣∣Qj,:2<ϵ}或者保留通道集合 S = { j ∣ ∣ ∣ Q j , : ∣ ∣ 2 ≥ ϵ } \mathcal{S}=\{j|\ ||\mathbf{Q}_{j,:}||_2\geq\epsilon\} S={j ∣∣Qj,:2ϵ}。与Eq.3相似,通过 Q ′ = Q S , : \mathbf{Q}'=\mathbf{Q}_{\mathcal{S},:} Q=QS,:来剪枝 Q \mathbf{Q} Q。实验中设置 ϵ = 1 0 − 5 \epsilon=10^{-5} ϵ=105,这个阈值足够剪枝获得不错的效果了。剪枝后,压缩器的行数会小于列数,如 Q ′ ∈ R D ′ × D , D ′ = ∣ S ∣ \mathbf{Q}'\in \mathbb{R}^{D'\times D},\ D'=|\mathcal{S}| QRD×D, D=S
为了将 W ^ \hat{\mathcal{W}} W^转变为 W ′ \mathcal{W}' W,将每个卷积层-bn层-压缩器序列转换为具有 K ′ ∈ R D ′ × C × K × K \mathbf{K}'\in\mathbb{R}^{D'\times C\times K\times K} KRD×C×K×K和偏差 b ′ ∈ R D ′ \mathbf{b}'\in\mathbb{R}^{D'} bRD
首先,等效地将卷积层-bn层融合到用于推理的卷积层中,这个卷积层会产生和原始相同的输出。对于一个具有 K , μ , σ , γ , β \mathbf{K},\mu,\sigma,\gamma,\beta K,μ,σ,γ,β的卷积层-bn层,用如下的方法构建一个具有 K ˉ \bar{\mathbf{K}} Kˉ卷积核、 b ˉ \bar{\mathbf{b}} bˉ偏差的卷积核。对于 1 ≤ j ≤ D 1\leq j\leq D 1jD,有:
K ˉ j , : , : , : = γ j σ j K j , : , : , : , b ˉ j = − μ j γ j σ j + β j (4) \bar{\mathbf{K}}_{j,:,:,:}=\frac{\gamma_j}{\sigma_j}\mathbf{K}_{j,:,:,:},\ \bar{\mathbf{b}}_j=-\frac{\mu_j\gamma_j}{\sigma_j}+\beta_j\tag{4} Kˉj,:,:,:=σjγjKj,:,:,:, bˉj=σjμjγj+βj(4)
找出一种方法构建 K ′ \mathbf{K}' K b ′ \mathbf{b}' b,使得:
( I ⊛ K ˉ + B ( b ˉ ) ) ⊛ Q ′ = I ⊛ K ′ + B ( b ′ ) (6) (\mathbf{I}\circledast\bar{\mathbf{K}}+B(\bar{\mathbf{b}}))\circledast\mathbf{Q}'=\mathbf{I}\circledast\mathbf{K}'+B(\mathbf{b}')\tag{6} (IKˉ+B(bˉ))Q=IK+B(b)(6)
通过卷积的可加性,得到:
I ⊛ K ˉ ⊛ Q ′ + B ( b ˉ ) ⊛ Q ′ = I ⊛ K ′ ˉ + B ( b ′ ) \mathbf{I}\circledast\bar{\mathbf{K}}\circledast\mathbf{Q}'+B(\bar{\mathbf{b}})\circledast{\mathbf{Q}}'=I\circledast\bar{\mathbf{K}'}+B(\mathbf{b}') IKˉQ+B(bˉ)Q=IKˉ+B(b)
由于 B ( b ˉ ) B(\bar{\mathbf{b}}) B(bˉ)的每个通道都是常值矩阵,因此 B ( b ˉ ⊛ Q ′ ) B(\bar{\mathbf{b}}\circledast\mathbf{Q}') B(bˉQ)也应当是常值矩阵。由于 I ⊛ K ˉ \mathbf{I}\circledast\bar{\mathbf{K}} IKˉ上使用 Q ′ \mathbf{Q}' Q进行的 1 × 1 1\times 1 1×1卷积只是通道级别的重组,因此可以通过重组 K ˉ \bar{\mathbf{K}} Kˉ的通道的方式将 Q ′ \mathbf{Q}' Q合并到 K ˉ \bar{\mathbf{K}} Kˉ中。设转置函数为 T ( K ˉ ) T(\bar{\mathbf{K}}) T(Kˉ),如 T ( K ˉ ) T(\bar{\mathbf{K}}) T(Kˉ)的尺寸是 C × D × K × K C\times D\times K\times K C×D×K×K,于是构造 K ′ \mathbf{K}' K b ′ \mathbf{b}' b的公式可以写为:
K ′ = T ( T ( K ˉ ⊛ Q ′ ) ) (8) \mathbf{K}'=T(T(\bar{\mathbf{K}}\circledast\mathbf{Q}'))\tag{8} K=T(T(KˉQ))(8)
b j ′ = b ˉ ⋅ Q j , : ′ , ∀ 1 ≤ j ≤ D ′ (9) \mathbf{b}'_j=\bar{\mathbf{b}}\cdot\mathbf{Q}'_{j,:}, \ \forall1\leq j\leq D'\tag{9} bj=bˉQj,:, ∀1jD(9)
在实践中,转换并保存训练好的重新参数化模型的权重,构建一个具有原始架构但层数更窄且没有BN的模型,并使用保存的权重进行测试和部署。

3.3 Gradient Resetting

本节描述了如何在保持准确性的同时在压缩器中产生结构化稀疏性,首先讨论特定内核 K \mathbf{K} K上惩罚的传统用法,以使某些通道的大小更小,即 ∣ ∣ K P , : , : , : ∣ ∣ → 0 ||\mathbf{K}_{\mathcal{P},:,:,:}||\rightarrow0 ∣∣KP,:,:,:∣∣0。令 Θ \Theta Θ为通用参数集, X , Y X,Y X,Y是数据示例和标签, L perf ( X , Y , Θ ) L_\text{perf}(X,Y,\Theta) Lperf(X,Y,Θ)是与性能相关的目标函数(如:用于分类的交叉熵)。传统范式通过预定义的强度因子 λ \lambda λ来添加惩罚项 P ( K ) P(\mathbf{K}) P(K)
L total ( X , Y , Θ ) = L perf ( X , Y , Θ ) + λ P ( K ) (10) L_\text{total}(X,Y,\Theta)=L_\text{perf}(X,Y,\Theta)+\lambda P(\mathbf{K})\tag{10} Ltotal(X,Y,Θ)=Lperf(X,Y,Θ)+λP(K)(10)其中 P P P可以是 L 1 L1 L1 L 2 L2 L2,或group Lasso。尤其是group Lasso可以有效地产生通道方式的结构化稀疏性。下面的讨论中用 F ( j ) = K j , : , : , : \mathbf{F}^{(j)}=\mathbf{K}_{j,:,:,:} F(j)=Kj,:,:,:来表示 K \mathbf{K} K中的特定通道。于是group Lasso损失可以表述为:
P Lasso ( K ) = ∑ j = 1 D ∣ ∣ F ( j ) ∣ ∣ E (11) P_\text{Lasso}(\mathbf{K})=\sum_{j=1}^D ||\mathbf{F}^{(j)}||_E\tag{11} PLasso(K)=j=1D∣∣F(j)E(11)
其中 ∣ ∣ F ( j ) ∣ ∣ E ||\mathbf{F}^{(j)}||_E ∣∣F(j)E是欧几里得范数
∣ ∣ F ∣ ∣ E = ∑ c = 1 C ∑ p = 1 K ∑ q = 1 K F c , p , q 2 (12) ||\mathbf{F}||_E=\sqrt{\sum_{c=1}^C\sum_{p=1}^K\sum_{q=1}^K\mathbf{F}_{c,p,q}^2}\tag{12} ∣∣FE=c=1Cp=1Kq=1KFc,p,q2 (12)
G ( F ) G(\mathbf{F}) G(F)作为梯度,对其进行求导
G ( F ) = ∂ L total ( X , Y , Θ ) ∂ F = ∂ L perf ( X , Y , Θ ) ∂ F + λ F ∣ ∣ F ∣ ∣ E (13) G(\mathbf{F})=\frac{\partial L_\text{total}(X,Y,\Theta)}{\partial\mathbf{F}}=\frac{\partial L_\text{perf}(X,Y,\Theta)}{\partial\mathbf{F}}+\lambda\frac{\mathbf{F}}{||\mathbf{F}||_E}\tag{13} G(F)=FLtotal(X,Y,Θ)=FLperf(X,Y,Θ)+λ∣∣FEF(13)
特定通道 F \mathbf{F} F的训练动态非常直接。从一个训练良好的模型开始, F \mathbf{F} F位于局部最优解附近,因此Eq.13的第一项接近于0,但第二项不接近0,因此 F \mathbf{F} F被推向0。如果 F \mathbf{F} F对性能很重要,目标函数将试图保持其幅度,即第一个梯度项将与第二个梯度项相竞争,因此 F \mathbf{F} F最终会比原来更小,这取决于 λ λ λ。否则,以极端情况为例,如果 F \mathbf{F} F根本不影响 L perf L_\text{perf} Lperf,第一项将为0,因此 F \mathbf{F} F将通过第二项持续向0增长。换句话说,性能相关的损失和惩罚损失相互竞争,使得 F \mathbf{F} F的最终值将反映其重要性,为了方便起见,称之为基于能力的重要性评估。

然而这面临了两个问题:
问题A:惩罚将每个通道的参数偏离了目标函数的最优解。值得注意的是,轻微的偏差可能不会带来负面影响,例如, L 2 L2 L2正则化也可以被视为轻微的偏差。然而,如果惩罚过于强大,尽管一些通道被置零以进行剪枝,但剩余的通道也变得太小,无法保持表征能力,这是一个不希望出现的副作用。
问题B:通过轻微的惩罚实现高抗损性,我们无法实现高可剪性,因为大多数通道仅仅变得比原来更接近于0,但不足以实现完美的剪枝。

提出通过对由目标函数导出的梯度进行重置,以实现对轻微惩罚的高可剪性。
引入二进制掩码 m ∈ { 0 , 1 } m\in\{0,1\} m{0,1},表示是否希望将 F \mathbf{F} F归零。为了便于实现, 没有向目标函数添加任何项(即 L total = L perf L_\text{total}=L_\text{perf} Ltotal=Lperf),只和往常一样求梯度,然后手动应用掩码,添加惩罚梯度并用所得梯度进行SGD更新:
G ( F ) ← ∂ L perf ( X , Y , Θ ) ∂ F m + λ F ∣ ∣ F ∣ ∣ E (14) G(\mathbf{F})\leftarrow\frac{\partial L_\text{perf}(X,Y,\Theta)}{\partial\mathbf{F}}m+\lambda\frac{\mathbf{F}}{||\mathbf{F}||_E}\tag{14} G(F)FLperf(X,Y,Θ)m+λ∣∣FEF(14)
下一节描述如何决定将哪些通道置零(即为多个通道设置掩码值)。通过这种方式,已经解决了上述两个问题。A) 尽管我们对每个通道的目标相关梯度添加了Lasso梯度,这等价于通过向原始损失添加Lasso损失来偏离最优解,但偏差是轻微的(在实验中 λ = 1 0 − 4 λ = 10^{-4} λ=104),因此对性能没有害处。B) 当 m = 0 m=0 m=0时,第一项不再存在与第二项竞争,因此即使λ很小, F \mathbf{F} F也会稳步向0移动。

3.4 The Remembering Parts Remember Always, the Forgetting Parts Forget Progressively

记住的部分永远记住,忘记的部分逐渐忘记。

如果直接应用于卷积核,Res会带来一个问题:一些与目标相关的梯度编码了保持性能所需的监督信息,但被丢弃了。直觉上,参数被强制“遗忘”了一些有用的信息(梯度)。幸运的是,Rep正是解决这个问题的方法,它允许只剪枝压缩器,而不是原始的卷积层。ResRep只强迫压缩器“遗忘”,而所有其他层仍然专注于“记忆”,因此不会失去编码在原始卷积核梯度中的信息。

要将Res与Rep结合起来,需要决定哪些 Q \mathbf{Q} Q的通道将被置零。在训练重新参数化的模型时,只对压缩器添加Lasso梯度。
几个epochs后, ∣ ∣ Q j , : ∣ ∣ ||\mathbf{Q}_{j,:}|| ∣∣Qj,:∣∣会反应通道 j j j的重要性(3.3中的基于能力的重要性评估),因此根据 Q \mathbf{Q} Q的值执行通道选择。
n n n为压缩器的数量, m ( i ) m^{(i)} m(i)(一个 D ( i ) D^{(i)} D(i)维的二进制向量)是第 i i i个压缩器的掩码,定义 t ( i ) ∈ R D ( i ) t^{(i)}\in\mathbb{R}^{D^{(i)}} t(i)RD(i)是度量向量,有
t j ( i ) = ∣ ∣ Q j , : ( i ) ∣ ∣ 2 , ∀ 1 ≤ j ≤ D ( i ) (15) t_j^{(i)}=||\mathbf{Q}^{(i)}_{j,:}||_2,\ \forall1\leq j\leq D^{(i)}\tag{15} tj(i)=∣∣Qj,:(i)2, ∀1jD(i)(15)
每次通道选择,对每个压缩器的每个通道,计算其度量值,并将其组织为映射 M = { ( i , j ) → t j ( i ) ∣ ∀ 1 ≤ i ≤ n , 1 ≤ j ≤ D ( i ) } \mathcal{M}=\{(i,j)\rightarrow t_j^{(i)}|\forall1\leq i\leq n,1\leq j\leq D^{(i)}\} M={(i,j)tj(i)∣∀1in,1jD(i)}。然后对 M \mathcal{M} M的值进行升序排序,依次选择最小的,将其对应 m j ( i ) m_j^{(i)} mj(i)设为0。当减少的FLOPS达到目标,或已经选择了 θ \theta θ(选择上限)个通道时,停止选择。
未选择的通道的掩码值设置为1。动机很简单:根据基于能力的重要性评估的讨论,就像传统的惩罚损失用于与原始损失竞争并选择具有较小范数的通道一样,使用惩罚梯度来与原始梯度竞争。 更好的是,所有指标值在开始时都是1(因为每个压缩器核都初始化为单位矩阵),这使得在不同层之间进行比较更加公平。将 θ \theta θ初始化为一个小数,每隔几次迭代增加 θ \theta θ,并逐渐重新选择通道以逐渐“遗忘”,避免一次性将太多通道置零。那些掩码为0的通道将变得非常接近0,因此压缩器中出现了结构化稀疏性。

这篇关于【论文笔记】ResRep: Lossless CNN Pruning via Decoupling Remembering and Forgetting的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899648

相关文章

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi