# 神经网络模型的压缩优化
* [1 定义](#1定义)
* [2 发展背景](#2发展背景)
* [3 优化的两个方向](#3优化的两个方向)
* [4 模型压缩优化实例](#4模型压缩优化实例)
* [5 有效方法](#5有效方法)
* [6 参考链接](#6参考链接)
## 1定义
网络模型压缩,即降低大型神经网络其存储和计算消耗
## 2发展背景
- 深度学习算法是计算密集型和存储密集型的,为了完成更加复杂的信息处理任务,深度神经网络变得越来越深,也使得其计算量越来越大。这使得它难以被部署到资源有限的嵌入式系统上,然而,手机、车载等移动端应用对深度神经网络的需求越来越多,因而深度神经网络模型的压缩、加速、优化变的越来越重要。
## 3优化的两个方向
- 1、通过减少参数数量,达到模型压缩的目的。而压缩基于一个很重要的理论,即神经网络模型通常是过参数化的,也就是说,通常不需要那么多参数 就可以表达出模型特征。
- 2、通过节省计算,降低计算量,达到模型运算加速的目的。
## 4模型压缩优化实例
- 例子:比如在对图像分类的时候,随着层级的增加,应该把图像的空间分辨率慢慢缩小,但这同时也需要增加每一层中的filter 数。另外实践中发现用小的filter 是更经济的,还有用Low-rank分解逼近的方法也比较有效。
## 5有效方法
在深度神经网络模型加速和压缩方面的几个有效方法:
1、[剪枝](剪枝.md)
研究表明网络中很多连接都是接近0或者冗余的,如何对这些参数进行稀疏就变的很有意义。但并不是只要剪枝就一定会提高运算速度。原因是如果剪枝过于随机,并不能有效提升运算速度。所以需要结构化剪枝(structured pruning)。
2、[低秩分解](低秩分解.md)
有很多种分解方法,比如奇异值分解、tucker分解、块分解。
3、[权值量化](权值量化.md)
通常神经网络中的权值一般用单精度的浮点数表示,需要占用大量的存储空间。而用码书对权值进行量化可以共享权值,从而减轻存储负担。
4、用定点来代替浮点数计算。
## 6参考链接
[ VALSE 2017 | 神经网络模型压缩优化方法](https://blog.csdn.net/electech6/article/details/72822009)
[神经网络压缩:Deep Compression](https://blog.csdn.net/shuzfan/article/details/51383809)
[当前深度神经网络模型压缩和加速方法速览](https://blog.csdn.net/touch_dream/article/details/78441332)