深度学习之模型压缩

一、背景

深度学习让计算机视觉任务的性能到达了一个前所未有的高度。但,复杂模型的同时,带来了高额的存储空间、计算资源消耗,使其很难落实到各个硬件平台。

为了解决这些问题,压缩模型以最大限度地减小模型对于计算空间和时间的消耗。

二、理论基础

必要性:目前主流的网络,如VGG16,参数量1亿3千多万,占用500多MB空间,需要进行300多亿次浮点运算才能完成一次图像识别任务。

可行性:在深度卷积网络中,存在着大量冗余地节点,仅仅只有少部分(5-10%)权值参与着主要的计算,也就是说,仅仅训练小部分的权值参数就可以达到和原来网络相近的性能。

三、目前方法

从数据,模型和硬件多维度的层面来分析,压缩和加速模型的方法

1、压缩已有的网络,包含:张量分解,模型剪枝,模型量化;(针对既有模型)

1.1、张量分解

定义:将网络权值当满秩矩阵,可以用多个低秩矩阵来逼近该矩阵。

 目的:降低时间复杂度。

优点:适合模型压缩

缺点:实现并不容易,涉及计算成本高昂的分解操作,且需要大量的重新训练来达到收敛。

对于二维矩阵运算,SVD是个好方法。

SVD分解:

  • [2016,Zhang]Accelerating very deep convolutional networks for classification and detection:对参数矩阵进行张量SVD分解进行非线性问题的求解,同时不需要通过随机梯度下降过程进行优化,并在非对称重构中考虑前一网络层的累计重构误差,在不需要随机梯度下降(SGD)的情况下,开发了一种有效的非线性优化问题求解方法
  • [2015,Jaderberg,BMVC]Speeding up convolutional neural networks with low rank expansions:使用秩为1(可以分解为行向量与列向量乘积)的卷积核作用在输入图上产生相互独立的M个基本特征图,卷积神经网络大小为k×k 的卷积核分解为1×k 和k×1的卷积核, 然后通过学习到的字典权重利用线性组合重构出输出特征图。
  • [2017,Tai]Convolutional neural networks with low-rank regularization. (Princeton University, etc.):提出从零开始训练低秩约束卷积神经网络模型的方法,不仅速度得到提升,而且在一些情况下模型性能也有所提高.作者提出一种低阶张量分解的新算法,用于消除卷积核中的冗余.该算法找 到 矩阵分解 的精神的全局优化器,比迭代方法更有效。

对于多维矩阵运算,涉及到Tensor,主要是CP分解,Tucker分解,Tensor Train分解,Block Term分解。

CP分解:

  • [2014,JADERBER]Speeding up convolutional neural networks using fine-tuned CP-decomposition:采用CP分解法将一层网络分解为五层低复杂度的网络层,但在基于随机梯度下降法的模型权重微调过程中难以获取张量分解的优化解.作者利用两个卷积神经网络模 型对该方法进行评估,结果表明该方法以较低的性能损失实现更高的计算速度
  • [2014,Denton,NIPS]Exploiting linear structure within convolutional netowrks for efficient evalution:探索多种张量分解方法,例如二维张量分解可采用奇异值分解法,三维张量可转化为二维张量进行分解,以及单色卷积分解和聚类法低秩分解等.作者利用 卷 积 参 数 的冗余性获得 近似计算过程,较大的减少所需的计算量,在保持原始模型浮动1%精度的条件下,基于 CPU和GPU的计算过程均取得近2倍的加速。

1.2、模型剪枝

将权重矩阵中相对不重要的权值剔除,然后再重新精修(finetune)网络进行微调。

1.2.1 广义修剪

1、正则化:修改目标函数,得到一个参数较少的网络,如添加L1Norm在损失函数;

2、修剪:删除冗余的特征和参数

1.2.2 基本流程

1、分析神经元重要程度

2、移除不重要的神经元

3、对网络进行微调

4、重新执行第一步,下一轮迭代

1.2.3 核心问题

1.2.3.1 剪什么?

1、细粒度剪枝:保留模型精度,但依赖硬件设备

2、粗粒度剪枝:模型速度和大小都有效提升,但精度会大幅下降。

1.2.3.2 怎么剪?

1、权重衰减法:属正则化方法

1.2.3.3 什么时候剪?

迭代式剪枝:训练权重----》剪枝-----》训练权重

1.3、网络量化

一般,神经网络模型的参数都是32bit长度的浮点数表示。很多时侯不需要这么高的精度,可以通过量化,用如用8bit来表示。通过牺牲精度来降低每个权值所需要的空间。SGD所需要的精度仅为6-8bit,合理的量化可保证精度的情况下减小模型的存储体积。根据量化方法不同,可分为2值量化,3值量化,多值量化。

3个问题:如何量化?如何计算梯度?如何保证准确率?

1.3.1、二值量化

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

[2017,Zhou,ICLR]Incremental network quantization:Towards lossless cnns with low-precision weights:给定任意结构的全精度浮点神经网络模型,能将其转换成无损的低比特二进制模型。增量式网络量化方法,三种独立操作:权重划分、分组量化、再训练。

1.3.2、 三值量化

改进的二值量化,在二值网络函数(-1,+1)的基础上,显式地增加0这个量化值。

2016,Fengfu,CVPR]Ternary weight networks:三值化

1.3.3、 多值量化

使用8big或16bit定点数来表示。

[2016,DETTMERS]8-bit approximations for parallelism in deep learning:开发并测试8bit近似算法,将32bit的梯度和激活值压缩到8bit,通过 GPU集群测试模型和数据的并行化性能,在保证模型预测精度的条件下,提出的方法取得两倍的数据传输加速。

2、构建新的小型网络,包含:知识蒸馏,紧凑网络设计;(针对新模型)

2.1、迁移学习/知识蒸馏

  • 迁移学习:将一个模型的性能迁移到另一个模型上
  • 网络精馏:在同一个域上迁移学习的一种特例

采用预训练好的复杂模型的输出作为监督信号去训练另外一个简单的网络。

  2017,Romero,ICLR]Hints for the deep nets:设计了更深的更窄的学生模型,同时保证两者的网络参数相同,采用Hints方式。

2.2、紧凑网络设计

1、MobileNet系列:采用深度可分离卷积来构建卷积。

2、ShuffleNet:

3、SqueezeNet

3、计算加速(针对硬件)

 Faster CNNs with direct sparse convolutions and guided pruning:提出一种基于向量形式的乘法,实现密集矩阵与稀疏矩阵之间的高效乘法运算。

[2017,ICML]MEC: Memory-efficient Convolution for Deep Neural Network:内存利用率高且速度较快的卷积计算方法

4、对数据进行变换(针对数据源)

WAE-Learning a Wavelet-like Auto-Encoder to Accelerate Deep Neural Networks:WAE借助小波分解得思想,将原图分解成两个低分辨率图像,以达到网络加速的目。

原文地址:https://www.cnblogs.com/jimchen1218/p/11957885.html

时间: 2024-10-08 05:50:04

深度学习之模型压缩的相关文章

深度学习计算模型中“门函数(Gating Function)”的作用

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 看深度学习文献,门函数基本上已经是你必然会遇到的一个概念了,最典型的就是LSTM,首先上来你就得过得去"遗忘门""输入门""输出门"这三个门.门函数本身是个独立概念,不过LSTM使用多个门函数来组合出一个带有状态记忆的计算模型而已.随着LSTM大行其道,各种计算模型开始在计算过程中引入门函数的概念,相信这些论文你也没少看,其实这也是一种研究模式,比如

深度学习的模型是怎么训练/优化出来的

以典型的分类问题为例,来梳理模型的训练过程.训练的过程就是问题发现的过程,一次训练是为下一步迭代做好指引. 1.数据准备 准备: 数据标注前的标签体系设定要合理 用于标注的数据集需要无偏.全面.尽可能均衡 标注过程要审核 整理数据集 将各个标签的数据放于不同的文件夹中,并统计各个标签的数目 如:第一列是路径,最后一列是图片数目. PS:可能会存在某些标签样本很少/多,记下来模型效果不好就怨它. 样本均衡,样本不会绝对均衡,差不多就行了 如:控制最大类/最小类<\(\delta\),\(\delt

深度学习数据集+模型说明

1.mnist Google实验室的Corinna Cortes和纽约大学柯朗研究所的Yann LeCun建的一个手写数字数据库,训练库有60,000张手写数字图像,测试库有10,000张.对应的手写识别模型为LeNet. 数据地址:http://yann.lecun.com/exdb/mnist/ 2.cifar10 由Hinton的两个大弟子Alex Krizhevsky.Ilya Sutskever收集的一个用于普适物体识别的数据集.Cifar是加拿大牵头投资的一个先进科学项目研究所. C

深度学习5-4-9模型

引用:https://yq.aliyun.com/articles/603116 5步法: 构造网络模型 编译模型 训练模型 评估模型 使用模型进行预测 4种基本元素: 网络结构:由9种基本层结构和其他层结构组成 激活函数:如relu, softmax.口诀: 最后输出用softmax,其余基本都用relu 损失函数:categorical_crossentropy多分类对数损失,binary_crossentropy对数损失,mean_squared_error平均方差损失,mean_abso

秦涛:深度学习的五个挑战和其解决方案

深度学习的五个挑战和其解决方案 编者按:日前,微软亚洲研究院主管研究员秦涛博士受邀作客钛媒体,分享他对深度学习挑战和解决方案的思考 ,本文为秦涛博士在此次分享的实录整理. 大家好,我是微软亚洲研究院的秦涛,今天我将分享我们组对深度学习这个领域的一些思考,以及我们最近的一些研究工作.欢迎大家一起交流讨论. 先介绍一下我所在的机器学习组.微软亚洲研究院机器学习组研究的重点是机器学习,包含机器学习的各个主要方向,从底层的深度学习分布式机器学习平台(AI的Infrastructure)到中层的深度学习.

深度学习在图像识别中的研究进展与展望

深度学习在图像识别中的研究进展与展望 深度学习是近十年来人工智能领域取得的最重要的突破之一.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域都取得了巨大成功.本文将重点介绍深度学习在物体识别.物体检测.视频分析的最新研究进展,并探讨其发展趋势. 1.深度学习发展历史的回顾 现在的深度学习模型属于神经网络.神经网络的历史可以追溯到上世纪四十年代,曾经在八九十年代流行.神经网络试图通过大脑认知的机理,解决各种机器学习的问题.1986年Rumelhart.Hinton和Will

图像识别中的深度学习 转

转:http://mp.weixin.qq.com/s?__biz=MzAwNDExMTQwNQ==&mid=209152042&idx=1&sn=fa0053e66cad3d2f7b107479014d4478#rd#opennewwindow 1.深度学习发展历史 深度学习是近十年来人工智能领域取得的重要突破.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域的应用取得了巨大成功.现有的深度学习模型属于神经网络.神经网络的起源可追溯到20世纪40年代,曾经

【王晓刚】深度学习在图像识别中的研究进展与展望

深度学习是近十年来人工智能领域取得的最重要的突破之一.它在语音识别.自然语言处理.计算机视觉.图像与视频分析.多媒体等诸多领域都取得了巨大成功.本文将重点介绍深度学习在物体识别.物体检测.视频分析的最新研究进展,并探讨其发展趋势. 1. 深度学习发展历史的回顾 现有的深度学习模型属于神经网络.神经网络的历史可追述到上世纪四十年代,曾经在八九十年代流行.神经网络试图通过模拟大脑认知的机理,解决各种机器学习的问题.1986 年Rumelhart,Hinton 和Williams 在<自然>发表了著

【深度学习系列4】深度学习及并行化实现概述

[深度学习系列4]深度学习及并行化实现概述 摘要: 深度学习可以完成需要高度抽象特征的人工智能任务,如语音识别.图像识别和检索.自然语言理解等.深层模型是包含多个隐藏层的人工神经网络,多层非线性结构使其具备强大的特征表达能力和对复杂任务建模能力.训练深层模型是长期以来的难题,近年来以层次化.逐层初始化为代表的一系列方法的提出给训练深层模型带来了希望,并在多个应用领域获得了成功.深层模型的并行化框架和训练加速方法是深度学习走向实用的重要基石,已有多个针对不同深度模型的开源实现,Google.Fac