zoukankan      html  css  js  c++  java
  • 【Joint Search-and-Training】2020-IJCAI-Beyond Network Pruning a Joint Search-and-Training Approach-论文阅读

    Joint Search-and-Training

    2020-IJCAI-Beyond Network Pruning a Joint Search-and-Training Approach

    来源:ChenBong 博客园

    • Institute:Xidian University
    • Author:Xiaotong Lu,Weisheng Dong*
    • GitHub:/
    • Citation:/

    Introduction

    提出了一种联合搜索-训练的紧凑网络训练方法,无需使用pre-train model,直接从头开始在backbone网络上搜索-训练紧凑网络。

    将backbone网络视为搜索空间,反复搜索、训练不同的子网,将最佳子网取出微调到收敛。


    Motivation

    传统的剪枝方法:

    • 需要训练一个过度参数化的网络(需要预训练模型),作为剪枝对象
    • 剪枝后需要继承结构和权重

    本方法:

    • 把剪枝看做NAS的一个特例
    • 在backbone网络上反复搜索,训练不同的子网

    Contribution


    Method

    Pipeline

    image-20200803170224376

    图1说明:

    在backbone网络T上反复采样子网络,更新子网络的权重,并将子网络的更新map回backbone网络T中,反复多次后,取出最佳子网络fine-tune到收敛。


    Fix pruning rate vs. Our method

    image-20200803170239585

    图2说明:

    每个filter对应一个 (alpha) ,类似filter的重要性指标,

    fix pruning rate是每一层都使用固定的剪枝率,会导致将有的层的某个filter重要性指标较大,但是因为该层未达到指定剪枝率,而把该filter剪掉;

    本文的方法类似全局剪枝:

    • 全局剪枝是将重要性小于阈值的filter剪掉,而且全局的阈值是统一的;
    • 本文的方法是每一层对应一个“阈值”,将每层的卷积核重要性大到小排列,将每个卷积核的重要性从头开始逐一累加,当累加到大于该层的“阈值”时停止,此时保留的卷积核即已经累加的卷积核。

    ThresNet-每层阈值的计算

    image-20200803171321356

    (eta=Phileft(alpha ight) qquad(2))

    公式(2)说明:

    • (Phi) 表示 ThresNet 的参数
    • (alpha) 表示 backbone网络的结构参数(weights)
    • (eta) 表示 backbone网络的各层阈值

    图3说明:

    训练一个代理网络ThresNet,作用是根据backbone网络的不同状态(不同时刻,backbone网络的 (alpha) 不同),计算该状态下backbone网络的各层filter的阈值 (eta^{l})

    • 网络输出:各层的阈值 (eta) (e.g. T为16层,则输出为16维的向量);

      输出是维度是固定的(e.g. 长度=16的向量)

    • 网络输入:各层的结构参数 (alpha)(weights);

      但输入的维度是不固定的(输入是16个向量,每个向量的长度=对应层的通道数),如一个backbone网络共有3种通道数(如16/32/64),那么输入的一组向量有的是16维,有的是32维,有的是64维,ThresNet网络分为2部分,第一部分就设置3个全连接网络,接收这3种不同维度的向量,将维度都统一到128;第二部分(应该)也是一个全连接网络,输入为3个128维的向量,输出为1个向量(e.g. 16维的向量,代表backbone网络16层每层的阈值)

    • ThresNet 使用强化学习进行训练,是在搜索-训练的过程中逐渐训练的,因此ThresNet也会随着 搜索-训练 的进行,而不断更新ThresNet的网络权重 (Phi)

    && 为什么不能直接将 (alpha) 展开成一维向量?同一个backbone网络,展开后的长度(即filter数量)应该也是固定的吧?


    (left.R=-left(l_{a v g}+gamma imes operatorname{param}(S) ight) ight) qquad (3))

    公式(3)说明:

    R为训练ThresNet的奖励Reward


    ( abla_{Phi} J(Phi) approx frac{1}{K} sum_{k=1}^{K} sum_{l=1}^{L} R_{k} abla_{Phi} log pi_{Phi}left(eta^{l} mid alpha^{l} ight) qquad (4))

    公式(4)说明:

    && 强化学习更新ThresNet的网络权重 (Phi)

    && 应该是训练完 ThresNet 再进行 搜索-训练


    算法细节

    image-20200803181007793

    A2.s1 初始化 backbone 网络

    (mathbb{O}^{l}=operatorname{Concat}left(mathbb{I}^{l} * W_{1}^{l}, mathbb{I}^{l} * W_{2}^{l}, cdots, mathbb{I}^{l} * W_{mathbb{C}_{l}}^{l} ight) qquad (5))

    公式(5)说明:

    • (mathbb{I}^{l}) 表示第 l 层的输入feature map
    • (W^l_c) 表示第 l 层的第 c 个filter
    • *代表卷积操作

    (mathbb{O}^{l}=operatorname{Concat}left(mathbb{I}^{l} * hat{alpha}_{1}^{l} W_{1}^{l}, mathbb{I}^{l} * hat{alpha}_{2}^{l} W_{2}^{l}, cdots, mathbb{I}^{l} * hat{alpha}_{C_{l}}^{l} W_{C_{l}}^{l} ight) qquad s.t. hat{alpha}_{c}^{l}=frac{exp left(alpha_{c}^{l} ight)}{sum_{k=1}^{C_{l}} exp left(alpha_{k}^{l} ight)} qquad(6))

    公式(6)说明:

    • 引入结构参数(alpha)(alpha_c^l) 对应第 l 层第c个filter
    • (hat{alpha}) 代表softmax后的 (alpha)

    kaiming normal 初始化网络T的权重W(parameter)和结构参数 (alpha)(weight)

    image-20200803181007793

    A2.s3 粗训练 backbone 网络

    (egin{aligned} ell_{ ext {coarse}}=& ext {CrossEntropyLoss}left(y_{i}, mathcal{T}left(x_{i}, Omega, alpha ight) ight) +lambda|alpha|_{2} end{aligned} qquad(1))

    公式(1)说明:

    • T是大网络(搜索空间)
    • (Omega) 是网络权重(parameter),即上面的W
    • (alpha) 是结构参数
    • (lambda) 是超参

    使用以上的loss粗训练网络100个epochs(for cifar),或40个epochs(for ImageNet)


    A2.s4~s12 反复搜索(采样)与训练子网络

    image-20200803181007793
    A2.s5 采样子网络

    重复采样T个子网络,实验中(T=30 for cifar,T=20 for ImageNet)

    采样是逐层地采样,每一层都采样完即可组成一个子网络。

    image-20200803165326149

    算法1说明:

    • 输入:l 层的 (alpha^l) 和 filter (W_{1,2, ldots, mathrm{C}_{l}}^{l})(C_l) 是 l 层的通道数
    • 输出:子网络filter的结构参数:(p^{l}) ,子网络的 filter (W_{1,2, ldots, F_{l}}^{l})
    • 步骤:
      • A1.s1 给 (alpha^l) 添加随机扰动,扰动后的结构参数记为 (n^l)
      • A1.s2计算 (n^l) 的softmax,记为 (hat{n}^l)
      • A1.s3 使用ThresNet 计算 l 层的阈值 (th^{l})
      • A1.s4~s5 将 l 层的卷积核按 (hat{n}^l) 的大小逐一累加,直到累加和大于阈值 (th^{l}) 停止,此时累加的个数为c
      • A1.s6 取向量 (alpha^l)(C_l) 维)的前c个元素,组成新向量 (p^{l}) (c维)
      • A1.s7 保留前c个filter

    每一层都采样完即可组成一个子网络。


    image-20200803181007793
    A2.s6~s11 训练子网络

    子网络有2组参数,一组是网络权重 (Theta) ,一组是结构参数 (alpha)

    (mathbb{D}_{ ext {train}}) 上训练M个(实验中M=10 for ImageNet)epochs,更新网络权重 (Theta)

    (Theta=underset{Theta}{operatorname{argmin}} sum_{i=1}^{mathbb{B}_{t}} ell_{operatorname{train}}left(y_{i}, mathcal{S}left(x_{i}, Theta, p ight) ight) qquad (8))

    (mathbb{D}_{ ext {valid}}) 上训练N个(实验中N=2 for ImageNet)epochs,更新结构参数 (alpha) :

    (p=underset{p}{operatorname{argmin}} sum_{i=1}^{mathbb{B}_{v}} ell_{v a l}left(y_{i}, mathcal{S}left(x_{i}, Theta, p ight) ight) qquad (9))


    image-20200803181007793

    A2.s13 取出最佳子网fine-tune到收敛

    训练到收敛,没有说具体的epochs


    Experiments

    CIFAR-10

    image-20200803193219534


    CIFAR-100

    image-20200803193240867


    ImageNet

    image-20200803193258930


    Conclusion


    Summary

    • 对比的都是比较早的文章?
    • 给每个filter赋予一个结构参数(表征该filter的重要性),不断从backbone网络中抽样(保留最重要的前k个filter)子网进行训练,迭代更新网络权重和结构参数(每个
    • 方法看起来很复杂,比如:
      • 在大网络中选取子网络不是用直观的概率抽样(nas中),也不是用全局的统一阈值(全局剪枝),而是用一个代理全连接网络 ThresNet 来预测每一层的阈值(这个阈值又不是直接小于阈值filter删除,而是累加最大的k个,直到达到阈值)
      • 使用全连接网络预测每一层的阈值,应该可以直接展开成一维,却要使用多级全连接层;还有sampler加的一些随机扰动等等,感觉为了复杂而复杂,不够简洁
    • 核心就是类似one-shot的在超网中抽样子网进行训练
    • 暂时没有开源

    Reference


  • 相关阅读:
    线性关系和相关系数
    CSS中的display:inlineblock
    SQL Server中常用的SQL语句
    Access SQL中Left Join、Right Join和Inner Join的使用
    PHP合并静态文件
    PHP中的include功能
    CSS背景图片居中的细节
    IIS Web服务扩展中添加ASP.NET4.0
    修改SQL server数据库中的逻辑文件名
    在SQL Server中,不使用“SQL 邮件”的情况下发送邮件
  • 原文地址:https://www.cnblogs.com/chenbong/p/13441485.html
Copyright © 2011-2022 走看看