深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression

文章目录

    • 1.摘要和背景
      • 1.1 摘要
      • 1.2 背景
    • 2.方法和贡献
      • 2.1 方法
      • 2.2 贡献
    • 3.实验和结果
      • 3.1 实验
      • 3.2 结果
    • 4.总结和展望
      • 4.1 总结
      • 4.2 展望

本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误的地方还望大家批评指出!

论文链接:BlockSwap: Fisher-guided Block Substitution for Network Compression
代码链接:github代码

1.摘要和背景

1.1 摘要

原文摘要:
The desire to run neural networks on low-capacity edge devices has led to the development of a wealth of compression techniques. Moonshine (Crowley et al., 2018a) is a simple and powerful example of this: one takes a large pre-trained network and substitutes each of its convolutional blocks with a selected cheap alternative block, then distills the resultant network with the original. However, not all blocks are created equally; for a required parameter budget there may exist a potent combination of many different cheap blocks. In this work, we find these by developing BlockSwap: an algorithm for choosing networks with interleaved block types by passing a single minibatch of training data through randomly initialised networks and gauging their Fisher potential. We show that block-wise cheapening yields more accurate networks than single block-type networks across a spectrum of parameter budgets.
在资源受限的设备(手机等终端设备)上使用深度神经网络使得模型压缩成为研究的热门。2018年Crowley等人提出的Moonshine方法将原始网络中的basicBlock用计算量更加少的block进行替代,从而达到了对模型裁剪的目的。但是,该方法对原始网络中的每一个block都使用相同的block进行替换,即:在筛选出最佳的block后,将原始模型的中所有block都是搜索得到的最佳的block进行替换。本文在moonshine方法基础上,对不同的basicBlock用不同的最佳的block进行替换,从而得到裁剪后的模型,然后使用网络蒸馏的方法对裁剪后的模型进行retrain,从而提高裁剪后模型的精度。本文提出的方法首先随机生成一批满足资源限定要求的网络,然后使用一个minibatch的数据对所有产生的网络进行前向传播,并计算出每个网络的Fisher potential,然后推选出Fisher potential最大的那个网络作为裁剪后的模型,然后对该模型进行微调(使用网络蒸馏方法),提高裁剪后模型的精度。

1.2 背景

  • 2018年Crowley等人提出的方法:Moonshine主要分为以下两步:

    • 将原始网络中的每个block替换成计算资源更加少的block
    • 将替换后的网络作为学生网络,原始网络作为老师网络,使用网络蒸馏的方法,训练学生网络,得到的学生网络便是压缩后的网络。
  • 2018年Crowley等人提出的方法:Moonshine,存在的问题是对所有的block使用相同的替换block,这个假设太强了。我们知道,即使在resnet中,不同的block之间的通道数还不一样,所以文章中使用同一个block对原始模型的所有的block进行替换是不合适的。

  • 使用分组卷积,深度可分离卷积,瓶颈卷积等特殊的卷积替换普通卷积,可以大大的降低模型的计算量。如:mobilenet就是使用深度可分离卷积替换原始的普通卷积,使得在和vgg相同的精度表现下可以拥有更少的参数。

2.方法和贡献

2.1 方法

  • 本文方法的过程:
    • 从候选的可替换卷积模块中随机选取block替换原始网络中的block,并使得构造出来的网络满足资源限制的条件。
    • 从数据集中随机选取一个minibatch的数据集,然后使用生成的所有满足要求的网络计算得到 Fisher potential,并选出 Fisher potential最大的那个网络
    • 将选出的网络作为学生网络,初始网络作为老师网络,使用网络蒸馏的方法对学生网络进行训练,得到的学生网络就是我们压缩后的网络。
      在这里插入图片描述
  • 使用网络蒸馏的方法可以将一个大而复杂的网络的知识迁移到一个小而简单的网络中,是比fine_turn更好的方法。但是使用网络蒸馏方法的前提是得知道小网络(裁剪后的网络)的结构。
  • 分组卷积,深度可分离卷积和瓶颈卷积或者它们的组合,替换普通的卷积可以大大的降低模型的计算量。
    在这里插入图片描述
  • 网络自动架构搜索(automating neural architecture search (NAS))技术常常包括如下方法:1)基于空间查找方法的(使用随机和非随机方法),即对候选的网络的参数空间进行搜索,从而得出满足要求的结构。2)基于优化算法(遗传算法),对网络的参数进行搜索;3)基于强化学习的架构搜索,即使用强化学习方法对参数进行搜索 ;4)one-shot方法:训练一个大而全的混合模型,然后根据要求选出合适的子模型等等。按时NAS方法被证明常常会找到一个次优解。

2.2 贡献

  • 提出了blockswap方法,通过该方法得出比删减网络的深度或者宽度或者moonshine方法结果要好。
  • 我们概述了一种通过Fisher信息快速比较候选模型的简单方法。 我们通过消融研究证实了我们的度量与最终训练误差高度相关,并表明它可以用来选择性能架构
  • 实验证明,本文的方法比moonshine和随机组合的方法都要好。

3.实验和结果

3.1 实验

  • 数据集:cofar10和ImageNet
  • 模型:WRN-40-2 , ResNet-34
  • 通过对比人为简单的删减网络的深度和宽度,moonshin取不同block的时候和blockswap方法的对比,验证本文方法的有效性。
  • blockswap方法在候选的block集合中搜索满足资源限制的搜索步骤为1000步,是随机的。然后使用一个minibatch的训练集根据生成的网络算出他们的firsh分数,然后选择分数最高的那个网络作为裁剪后的网络。
  • Networks are trained for 200 epochs using SGD with momentum 0.9. The initial learning rate of 0.1 is reduced by a factor of 5 every 60 epochs. Minibatches of size 128 are used with standard crop + flip data augmentation. The weight decay factor is set to 0.0005. For attention transfer β is set to 1000 using the output of each of the three sections of the network.

3.2 结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • BlockSwap chooses a student that is better than the teacher, despite using 3.5× fewer parameters and 3× fewer MACs.
  • Fisher potential metric is an effective means for choosing optimal block structures
  • Specifically, it beats the teacher by 0.49% in top-1 error and 0.82% in top-5 error despite using almost 3× fewer parameters

4.总结和展望

4.1 总结

  • 提出了一种算法,可以对复杂的模型进行压缩以适用于计算资源受限的设备。
  • 通过给定一个block候选集合,然后随机的对原始网络中的block使用候选的block进行替换,并且满足资源受限的条件。然后,使用一个minibatch的训练集对生成的网络计算firsher分数,并将分数最高的那个网络作为裁剪后的网络,然后利用网络蒸馏的方法对得到的裁剪后的网络进行训练。

4.2 展望

  • 文章中给出的候选的block集合中的block数目有限,是否可以发现更好的可替换的block?
  • 文章中对于网络的替换是基于随机生成的,是否可以使用基于优化算法或者网络生成呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目录1.摘要和介绍1.1摘要部分2.背景和方法2.1 背景2.2 贡献2.3 方法3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误…

深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.1.1 训练过程2.1.2 loss介绍2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望主要贡献:基于网络蒸馏方法,提出了一种提升裁剪后模型的精度的方法!将训练时间大…

关系数据库——基础

数据库系统概论 四个基本概念 数据:数据库中存储的基本对象,描述一个事物的符号记录,数据和其语义不可分开说 数据库(DB):是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统&a…

Python(27)-模块

模块、包1.模块导入的方式2.使用as给模块取一个别名(大驼峰命名法)3.从模块中导入部分工具4.从模块中导入全部工具5.模块搜索顺序6__name__7.包8.发布模块、安装模块、卸载包9.pip安装第三方模块本系列博文来自学习《Python基础视频教程》笔记整理&#…

如何使用docker配置深度学习开发环境

文章目录1.底层驱动的安装1.1 操作系统的安装1.2 显卡驱动的安装1.3 cuda的安装2.使用docker配置深度学习开发环境2.1 docker的安装2.2 nvidia_docker的安装2.3 安装过程中的问题2.3.1 docker和nvidia_docker的版本不匹配的问题。2.3.2 解决每次运行docker命令的时候要加sudo.2…

反射全解

反射的概念 反射的引入: Object obj new Student(); 若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法: 1.若编译和运行类型都知道,使用 instanceof判断后&…

CRegKey 注册表操作

1.简介 CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便的打开注册表的某个分支或子键(CRegKey::Open),可以方便的修改一个键的键值(CRegKey::SetValue),也可以查询某…

进程基础

进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封闭性:程序在封闭的环境下运行,程序独占资源,资源的状…

用Docker容器自带的tensorflow serving部署模型对外服务

相信很多人和我一样,在试图安装tensorflow serving的时候,翻遍了网上的博客和官网文档,安装都是以失败而告终,我也是一样,这个问题折磨了我两个星期之久,都快放弃了。幸运的是在同事的建议下,我…

C资源

云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对…

面试题汇总---深度学习(图像识别,NLP内容)

文章目录1.基本概念1.1 为什么神经网络中深度网络的表现比广度网络表现好?1.2 推导BP算法1.3 什么是梯度消失和梯度爆炸?1.4 常用的激活函数有哪些?1.5 常用的参数更新方法有哪些?1.6 解决过拟合的方法?数据层面模型层…

Python(28)-文件,os模块

文件1. 文件2. 文件的基本操作3. 读取文件open()3.1 文件指针: 标记从哪一个位置开始读取数据.3.2 文件的打开方式mode3.3 文件按行读取3.3.1 readline()3.3.2 readlines()4.文件输出f.write(),print()5.文件复制5.1 小文件复制(搬家)5.2 大文件复制&…

IOCP的程序

C代码 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-图像分割-RCNN-FCN-Boxsup

图像分割算法对比小结1.{基本概念}2.{R-CNN}2.1R-CNN 网络结构选择性搜索算法为什么选择SVM作分类器边框回归2.2{R-CNN 训练}2.3{R-CNN实验结果}2.4{R-CNN语义分割}2.5{补充材料}2.5.1{R-CNN建议区域放缩}2.5.2{IOU阈值设置不一样的原因}2.5.3{Bounding-box回归修正}2.6{R-CNN存…

Python模块(3)--PIL 简易使用教程

PIL模块-用与记1.图片导入Image.open()2.图像显示.show()4.查看图片属性.format,.size,.mode3.图像格式转换.convert()4.图像模式“L”&#xff0c;“RGB”,"CYMK"5. 图片旋转.rotate()旋转方式1&#xff1a;旋转不扩展旋转方式2&#xff1a;旋转扩展旋转方式3&#…

输入输出系统

I/O设备&#xff1a;输入输出和存储功能的设备 I/O设备的分类 按传输的速度&#xff1a; 低速设备&#xff08;如键盘、鼠标、语音输入输出设备&#xff09; 中速设备&#xff08;如行式打印机、激光打印机等&#xff09; 高速设备&#xff08;如磁带机、磁盘机、光盘机等&…

模拟银行家算法

介绍 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…