前言
深度神经网络(DNN)有个很大的缺点就是计算量太大。为克服这类问题,研究人员在两方面做了工作。
第一,使用高性能硬件加速;
第二,使用模型压缩(Model compression)。
我们这里讲的就是软件的方法,即模型压缩。
模型压缩的方法:
- 网络剪枝(Network Pruning)
- 量化(Quantization)
- 低秩分解(Low-rank factorization)
- 知识蒸馏(Knowledge distillation)
网络剪枝(Network Pruning)
研究的核心问题就是:如何有效地裁剪模型参数且最小化精度的损失。
网络剪枝可以分为 结构化剪枝(Structured pruning) 和 非结构化剪枝(Unstructured pruning) 两类。
目的:
- 减小内存开销,提升运行速度
- 减小模型文件大小
量化(Quantization)
模型量化的基本思想就是用更低精度来代替原浮点精度。
量化最核心的挑战是如何在减少表示精度的同时不让模型的准确度掉下来,即在压缩率与准确率损失间作trade-off。
低秩分解(Low-rank factorization)
秩可以度量相关性,而矩阵的相关性实际上就表示矩阵的结构信息。
如果矩阵之间各行的相关性很强,那么就表示这个矩阵实际可以投影到更低维的线性子空间,也就是用几个向量就可以完全表达,那么它就是低秩的。
特性:
1)在解决稀疏矩阵问题时可以通过矩阵分解发现数据的潜在结构
2)矩阵分解拥有优雅的概率解释
3)它可以轻易地结合特定领域的先验知识完成扩展,因此能适应现实世界中的各种问题
4)许多的优化算法能(如随机梯度下降方法)被应用于此去发现一个更好的解决方案。
知识蒸馏(Knowledge distillation)
基于“教师-学生网络思想”的训练方法,将已经训练好的模型包含的知识(”Knowledge”),蒸馏(“Distill”)提取到另一个模型里面去。
Teacher—Student模型,其中teacher是“知识”的输出者,student是“知识”的接受者。
知识蒸馏的过程分为2个阶段:
- 原始模型训练: 训练"Teacher模型", 简称为Net-T,它的特点是模型相对复杂,也可以由多个分别训练的模型集成而成。我们对"Teacher模型"不作任何关于模型架构、参数量、是否集成方面的限制,唯一的要求就是,对于输入X, 其都能输出Y,其中Y经过softmax的映射,输出值对应相应类别的概率值。
- 精简模型训练: 训练"Student模型", 简称为Net-S,它是参数量较小、模型结构相对简单的单模型。同样的,对于输入X,其都能输出Y,Y经过softmax映射后同样能输出对应相应类别的概率值。