深度学习目标检测深度学习深度学习-推荐系统-CV-NLP

模型压缩总览

2018-05-26  本文已影响29人  CodePlayHu

深度学习使得很多计算机视觉任务的性能达到了一个前所未有的高度。不过,复杂的模型固然具有更好的性能,但是高额的存储空间、计算资源消耗是使其难以有效的应用在各硬件平台上的重要原因。为了解决这些问题,许多业界学者研究模型压缩方法以最大限度的减小模型对于计算空间和时间的消耗。最近团队里正在研究模型压缩相关的内容,正好在这里总结一下。(我的认识还很肤浅,本文也会不断补充和修改,欢迎拍砖)

理论基础

目前的方案

1. 低秩近似/分解(low-rank Approximation/factorization):

这一部分的思路比较简单,如果把原先网络的权值矩阵当作满秩矩阵来看,那么是不是可以用多个低秩的矩阵来逼近原来的矩阵,以达到简化的目的?答案是肯定的。原先稠密的满秩矩阵可以表示为若干个低秩矩阵的组合,低秩矩阵又可以分解为小规模矩阵的乘积。在这方面有几篇经典的论文。

论文

存在问题


2. 网络剪枝(network pruning):

网络剪枝的主要思想就是将权重矩阵中相对“不重要”的权值剔除,然后再重新fine tune 网络进行微调。

论文

开山之作
剪枝的粒度变化——剪多深
剪枝的方法——怎么剪
剪枝与训练的结合——什么时候剪
剪枝后综合处理的及其他剪枝相关论文

3. 网络量化(Network Quantization)

一般而言,神经网络模型的参数都是用的32bit长度的浮点型数表示,实际上不需要保留那么高的精度,可以通过量化,比如用0~255表示原来32个bit所表示的精度,通过牺牲精度来降低每一个权值所需要占用的空间。此外,SGD(Stochastic Gradient Descent)所需要的精度仅为6~8bit,因此合理的量化网络也可保证精度的情况下减小模型的存储体积。
根据量化方法不同,大致可以分为二值量化,三值量化,多值量化
对网络网络进行量化要解决三个基本问题

  1. 如何对权重进行量化
  2. 如何计算二值权重的梯度
  3. 如何确保准确率

论文

二值量化( binary quantization)

思想是将权值矩阵中的单精度浮点数用两个值来表示,一般考虑使用符号函数或者加入线性化的符号函数来近似。

三值量化(ternary quantization)

改进二值量化

多值量化
量化++

这部分介绍的是网络量化+其他处理方法以达到模型压缩的目的的论文

变bit/组合bit量化

这一部分文章考虑对于同一个模型采用不同种类的bit组合来进行模型量化

哈希
量化总结

最为典型就是二值网络、XNOR网络等。其主要原理就是采用1bit对网络的输入、权重、响应进行编码。减少模型大小的同时,原始网络的卷积操作可以被bit-wise运算代替,极大提升了模型的速度。但是,如果原始网络结果不够复杂(模型描述能力),由于二值网络会较大程度降低模型的表达能力。因此现阶段有相关的论文开始研究n-bit编码方式成为n值网络或者多值网络或者变bit、组合bit量化来克服二值网络表达能力不足的缺点。

知识蒸馏(knowledge distillation)

蒸馏模型采用的是迁移学习,通过采用预先训练好的复杂模型(Teacher model)的输出作为监督信号去训练另外一个简单的网络。这个简单的网络称之为student model。

论文

开山之作
监督信息

着重于研究教学监督信息的丰富与改进

学生模型设计、方法集成
其他任务
模型加速
非压缩目的的蒸馏

总结

紧凑网络设计


参考:

  1. CNN 模型压缩与加速算法综述

  2. 【一文看懂】深度神经网络加速和压缩新进展年度报告

上一篇 下一篇

猜你喜欢

热点阅读