深度模型压缩论文(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,一经查实,立即删除!

相关文章

NLP复习资料(8)-知识图谱、信息抽取

NLP复习资料第16讲—知识图谱第17讲-信息抽取(知识图谱生命周期中信息获取的关键技术)国科大,宗老师《自然语言处理》课程复习笔记,个人整理,仅供参考。第16讲—知识图谱 知识图谱经典知识表示理论语义网资源描述框架…

Collection源码阅读

package java.util;import java.util.function.Predicate; import java.util.stream.Stream; import java.util.stream.StreamSupport;/*** 集合层次结构的根接口,一个集合表示一组对象,称为元素* JDK不提供任何该接口的直接实现,JDK提供实现…

socket阻塞和非阻塞的区别

读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返 回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲 区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读…

深度模型压缩论文(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 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误…

架构分享--微博架构

先来分享下大神Tim Yang的关于微博的架构设计: 这里主要从 存储和接口角度来讲 对于大流量系统的架构设计,对于写入方面是特别需要注意的,基本上现在遇到的系统都是对于主数据库的写入,然后对于从数据库实现流量的分发。 对于存…

Pytorch(7)-自己设计神经网络会遇到的问题

操作pytorch架构遇到的问题1.网络参数初始化2.查看当前可学习参数3.增加可学习的参数4.参数优化函数Adagrad5.直接修改网络梯度值6.optimizers.zero_grad()报错7.tensor.detach() 和 tensor.data 的区别1.网络参数初始化 在pytorch中,有自己默认初始化参数方式&…

Python里的OS模块常用函数说明

Python的标准库中的os模块包含普遍的操作系统功能。如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的。即它允许一个程序在编写后不需要任何改动,也不会发生任何问题,就可以在Linux和Windows下运行。 下面列出了一些在os模块中比较…

深度模型压缩论文(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基础视频教程》笔记整理&#…

Wow6432Node

64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项。许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然。 64 位版本 Windows 包含的默认 64 位版本注册表编辑器 (Regedit.exe) 可显示 64 位和 32 位的 注册表项。WOW64 注册表重定向器为 32 位程序提供…

如何使用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判断后&…

MachineLearning(4)-核函数与再生核希尔伯特空间

核函数与再生核希尔伯特空间1.支持向量积-核函数2.一个函数为核函数的条件3.核函数与希尔伯特空间3.1希尔伯特空间-Hilbert空间1.支持向量积-核函数 核(kernel)的概念由Aizenman et al.于1964年引入模式识别领域,原文介绍的是势函数的方法。在那之后,核…

CRegKey 注册表操作

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

进程基础

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

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

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

C资源

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

学点数学(2)-特征函数

特征函数1.数列特征方程2.矩阵特征方程3.微分方程特征方程4.积分方程特征方程特征方程是为研究相应的数学对象而引入的一些等式,这些等式描述了特定对象的特性。依据研究的对象不同,特征方程包括数列特征方程、矩阵特征方程、微分方程特征方程、积分方程…

GCC如何产生core dump

先决条件1.安装apport(automatically generate crash reports for debugging)2.修改/etc/security/limits.conf文件,使允许core dump,或者用ulimit -c unlimited设置core dump文件的大小为unlimited3.C/C的编译开关-g(…