CHIPNET ICLR2021

CHIPNET ICLR2021论文精读

原文链接:link
代码链接:link
本文完全是个人见解,可能有理解错的地方请大家多多包涵,及时指正。

contribution

CHIPNET ICLR2021_第1张图片
想法感觉很不错,之前看的大多数剪枝都是先训练然后将权重绝对值最小的那部分按照剪枝比例剪掉,然后迭代剪。
这篇文章将mask变成一个可以使用梯度来更新的量(我看到的文章很少有基于梯度更新mask的,如果大家有看到过类似文章,欢迎在评论区分享)

剪枝mask由0-1构成,是离散的无法使用gradient-based 方法更新mask,本文通过将{0,1}的mask转化为[0,1]的连续函数,从而可以使mask能够使用梯度更新。接下来问题就转化成了如何将[0,1]的数投影到{0,1}

proposed approach

主要以下分为3个函数:

logistic curves

z ~ = 1 1 + e − β ( ψ − ψ 0 ) \widetilde{z}=\frac {1} {1+e^{-\beta(\psi-\psi_{0})}} z =1+eβ(ψψ0)1
不同 β \beta β得到的 z ~ \widetilde{z} z 曲线
β \beta β很小时, z ~ \widetilde{z} z 近似一个在-1到1上呈线性的曲线,当 β \beta β很大时, z ~ \widetilde{z} z 近似一个阶跃函数。
CHIPNET ICLR2021_第2张图片

continuous Heaviside function

仅仅是logistic curves不能获得离散的{0,1}的值,因此引入了continuous Heaviside function
z = 1 − e − γ z ~ + z ~ e − γ z=1-e^{-\gamma\widetilde{z}}+\widetilde{z}e^{-\gamma} z=1eγz +z eγ
不同 γ \gamma γ得到的 z z z曲线
由下图可以看出, γ = 0 \gamma=0 γ=0时,曲线 z z z是线性的, γ \gamma γ越大,曲线 z z z越接近阶跃函数
CHIPNET ICLR2021_第3张图片

crispness loss

虽然logistic curves和continuous Heaviside function有助于获得离散的{0,1}值,但是没有约束或者罚函数来约束它,因此文章中给出了一个crispness loss
L c = ∣ ∣ z ~ − z ∣ ∣ 2 2 \mathcal{L}_c=||\widetilde{z}-z||_2^2 Lc=z z22
CHIPNET ICLR2021_第4张图片
上图是 β = 2 \beta=2 β=2 γ = 4 \gamma=4 γ=4对应的logistic curves和continuous Heaviside function曲线,只有当 z ~ = z = 0 \widetilde{z}=z=0 z =z=0或者 z ~ = z = 1 \widetilde{z}=z=1 z =z=1 L c \mathcal{L}_c Lc最小,为0。
下图是不同的 β \beta β γ \gamma γ对应的 L c ( ψ ) \mathcal{L}_c(\psi) Lc(ψ)曲线
CHIPNET ICLR2021_第5张图片
β \beta β γ \gamma γ较小时,crispness loss对剪枝过程影响很小,随着 γ \gamma γ的增加, L c \mathcal{L}_c Lc的尖峰上移且左移,左移使得对于负的 ψ \psi ψ惩罚更大,使其变得更负,这就使得z更接近0。
下图a是所提的方法(包含完整的三部分),b没有crispness loss,c没有without logistic round function,可以看出a的阙值更大,能获得更好的稀疏性。
CHIPNET ICLR2021_第6张图片

budget constraints

文中使用了channel, activation volume, parameters and FLOPs这四种开支约束。
文中定义了一项budget loss L b = ( V ( z ) − V 0 ) 2 \mathcal{L}_b=(\mathcal{V}(z)-\mathcal{V}_0)^{2} Lb=(V(z)V0)2,其中 V ( ⋅ ) \mathcal{V}(\cdot) V()是上述四种开支之一,在此mark一下,感觉在附录里详细介绍budget constraints的比较少,方便下次查阅。
CHIPNET ICLR2021_第7张图片

soft and hard pruning

本文剪枝分为两步:soft pruning 和 hard pruning。预训练模型后应用mask进行软剪枝,软剪枝算法如下图所示:
CHIPNET ICLR2021_第8张图片
这里的loss由三部分组成: L = L c e + α 1 L c + α 2 L b \mathcal{L}=\mathcal{L}_{ce}+\alpha_{1}\mathcal{L}_{c}+\alpha_{2}\mathcal{L}_{b} L=Lce+α1Lc+α2Lb,这里 L c e \mathcal{L}_{ce} Lce是交叉熵损失。该部分在代码中体现为:

def criterion(model, y_pred, y_true):
    global steepness
    ce_loss = CE(y_pred, y_true)  # orginal loss
    budget_loss = ((model.get_remaining(steepness, args.budget_type).to(device) - Vc.to(device)) ** 2).to(device)
    crispness_loss = model.get_crispnessLoss(device)
    return budget_loss * weightage1 + crispness_loss * weightage2 + ce_loss

在每次软剪枝之后,都会以硬剪枝的方式评估模型的性能。 最后,选择在验证集上具有最佳性能的模型进行微调。

pseudo code

CHIPNET ICLR2021_第9张图片

experiment setup

数据集:CIFAR-10/100 和 Tiny ImageNet
模型: WideResNet-26-12,PreResNet-164,ResNet-50 和 ResNet-101
参数设置: α 1 = 10 \alpha_{1}=10 α1=10, α 2 = 30 \alpha_{2}=30 α2=30
其他细节详见附录,不想写了

results

这里只放结果不分析了,虽然这文章没用ImageNet,但是个人感觉附录写的真的详细,不像有些文章…
CHIPNET ICLR2021_第10张图片
CHIPNET ICLR2021_第11张图片
CHIPNET ICLR2021_第12张图片
CHIPNET ICLR2021_第13张图片
CHIPNET ICLR2021_第14张图片
CHIPNET ICLR2021_第15张图片
上图可视化感觉有点夸张,中间几层几乎全剪掉了??
CHIPNET ICLR2021_第16张图片

Transfer learning of masks

文章中Tiny ImageNet作为老师模型,CIFAR-100作为学生模型,对ResNet-101进行剪枝,发现当通道开支在40%和60%时,迁移mask的性能比训练原始数据集的更好,可能因为Tiny ImageNet比CIFAR-100信息更加丰富
CHIPNET ICLR2021_第17张图片

由于篇幅较长了,代码就不放在这篇讲了,下篇博文会详细介绍CHIPNET的代码(写的真好啊!!!)

你可能感兴趣的:(CNN剪枝,深度学习,机器学习,卷积神经网络,剪枝,pytorch)