首页 > 文章 > 不同框架的修剪技术

不同框架的修剪技术

Fan Zhang 2020年03月13日

迭代修剪技术这一概念可追溯到 Yan Le Cun 在 1990 年乃至更早的研究。这个概念很简单,每个神经网络都有冗余参数,对输出的贡献不大。通过去除对结果影响较小的神经元和突触,网络将会变得更小、更快。

修剪神经网络就像玩积木游戏一样。移除一块积木本身很容易,但最有趣的部分是如何避免整个积木塔倒塌。基于 Song 的论文而形成的赛灵思修剪技术至今已被引用了 2000 多次。三级管道仍被视为先进的修剪技术,在 Alexnet 上速度可提高 35 倍,在 VGG16 上可提高 49 倍,同时不会降低精度。

加州大学伯克利分校视觉和学习中心(BVLC)的一名教师指出:“无论您花费多少时间来研究深度学习课题,难免会碰到 Caffe 这个术语。”由于 Caffe 框架中运算符的实现非常标准,因此基于 Caffe 的修剪工具可轻松适用于不同网络。

Caffe 框架中的典型修剪工作流程包含四个步骤。敏感分析是整个工作流程中最关键的部分,它将神经元和突触逐层排列。换言之,分析策略将在很大程度上决定修剪网络的性能。分析完成后需要设置修剪率以进入下一步。

$ ./decent_p ana –config config.prototxt

第二步是修剪。修剪率简单定义了您想要剪掉的比例。根据排列表将参数设为零,直到达到修剪率。随后摘要表将展示修剪后的精度、参数和操作如何变化。

$ ./decent_p prune –config config.prototxt

pruning

第三步是微调。修剪后,精度会有所下降,需要微调进行恢复。如果修剪过度,网络可能无法恢复,这就是所谓的“迭代修剪”,需要重复多次修剪和微调步骤,逐渐提高修剪率。

$ ./decent_p finetune –config config.prototxt

下面是配置文件修改的示例:

    
workspace: "examples/decent_p/"
gpu: "0,1,2,3"
test_iter: 100
acc_name: "top-1"

model: "examples/decent_p/float.prototxt"
#weights: "examples/decent_p/float.caffemodel"
weights: "examples/decent_p/regular_rate_0.1/_iter_10000.caffemodel"
solver: "examples/decent_p/solver.prototxt"

# change rate from 0.1 to 0.2
#rate: 0.1
rate: 0.2
pruner {
  method: REGULAR
}

最后一步是转换。到目前为止,模型都带有掩码,低级参数为零。转换之前工作负载保持不变。最后一步将进行真正的修剪,并将其转换为更轻量化的模型。

$ ./decent_p transform –model baseline.prototxt –weights finetuned_model.caffemodel

作为基于 C 语言的框架,Darknet 几乎没有依赖性,目前受到了很多关注。Yolo 网络对其普及应发挥重要作用。相对于 Caffe 而言,Darknet 对于像 MaxPool 这样的运算符的实现有所不同。不过,Darknet 框架的修剪工具并没有太大变化,同样也是四步工作流程。在修剪步骤中,需要设置阈值参数而不是修剪率,这可能就是最大的区别所在。两个参数的定义如下:

修剪率– 修剪后希望减掉多少工作负载。

阈值– 每层能承受多少精度损失。

仅从精度的角度来看,阈值与修剪率成正比。

TensorFlow 是当今世界面向丰富编程 API、分布式训练策略和灵活设计平台的领先机器学习框架之一。赛灵思推出的 TensorFlow 框架修剪工具仍遵循经典的四步工作流程,但是对输入图形或 API 而言可能有一定的限制。对于内部没有 Keras API 的图形和权重,输入图形需要采用 .pbtxt 和 .chpt 形式。

为了帮助用户更好地了解不同框架的修剪工具,每个步骤的输入和输出总结如下表所示:

  Caffe Darknet TensorFlow
Input Output Input Output Input Output
Ana
  • baseline.prototxt
  • baseline.caffemodel
  • config.prototxt
NA
  • baseline.cfg
  • baseline.weights
  • config.cfg
  • ana.out
  • origin.pbtxt
  • origin.ckpt
NA
Prune
  • baseline.prototxt
  • baseline.caffemodel
  • config.prototxt
  • prune.prototxt
  • prune.caffemodel
  • baseline.cfg
  • baseline.weights
  • config.cfg
  • prune.cfg
  • Compress.out
  • baseline.pbtxt
  • baseline.ckpt
  • prune.pbtxt
  • prune.ckpt
Fineture
  • baseline.prototxt
  • prune.caffemodel
  • solver.prototxt
  • finetune.caffemodel
  • prune.cfg
  • compress.out
  • config-prune.cfg
  • finetune.weights
  • baseline.pbtxt
  • prune.ckpt
  • finetune.ckpt
Transform
  • baseline.prototxt
  • finetune.caffemodel
  • transform.caffemodel
  • prune.cfg
  • finetune.weights
  • transform.cfg
  • transform.weights
  • baseline.pbtxt
  • finetune.ckpt
  • transform.ckpt

综上所述,赛灵思在 Caffe、Darknet 和 TensorFlow 框架上采用了经典、统一的四步修剪工作流程。统一的修剪概念使得工具易于使用,当两个网络使用不同的框架设计时也不会产生额外的成本。


About Fan Zhang

About Fan Zhang

Fan Zhang 博士现任赛灵思技术市场部 AI 专家,负责赛灵思 AI 解决方案的创新和推广,实现全球垂直市场的差异化。张博士于 2018 年 7 月加入赛灵思,此前他在深鉴科技业务部担任技术总监。在此之前,他曾是一家海外公司的核心研发人员,并且拥有近 10 年的项目开发经验。张帆在诺丁汉大学获得哲学博士学位和理学硕士学位。