网站首页 > 技术文章 正文
神经网络模型剪枝
深度神经网络(DNN)模型剪枝是通过去除DNN中冗余的参数和结构来降低DNN的计算量,可分为非结构化剪枝和结构化剪枝。非结构化剪枝将DNN中每个独立的连接看作一个可裁剪的对象,可实现很高的裁剪率,但是其剪枝结果必须存储为稀疏矩阵,需要定制加速器才能完成相应的计算加速,这在一定程度上限制了DNN在通用体系结构下的计算加速。非结构化剪枝的研究则可追溯到20世纪90年代的OBD(OptimalBrainDamage)算法和OBS(Optiaml Brain Surgeon)算法,二者都是利用损失函数的二阶泰勒展开来计算连接的重要性,但是求解二阶导数非常耗时。近年来涌现出诸多DNN模型剪枝的相关研究,比如深度压缩(Deep Compression)提出剪去网络中绝对值量级比较小的参数来实现一种高度压缩的DNN模型;Data-free算法则提出可于多次迭代过程中删除冗余参数;HashedNets利用哈希函数将连接权重随机分组实现参数共享,从而减少了参数数量。结构化剪枝关注于相对完整的网络结构的裁剪,比如某一特征通道或者整个卷积核。Adam等人提出了一种粗粒度的基于显著性度量的通道剪枝算法。RNP中提出了一种运行时神经网络剪枝框架,在运行时根据输入图像和当前特征图,动态地判断每个卷积核的重要性并进行删减。StructuredPruning提出了包括特征映射剪枝、卷积核剪枝以及细粒度的核定长剪枝方法,通过显著性度量来删除DNN模型中的一部分网络结构,同时保持剩余结构的相对完整性。ThiNet中利用下一层的输入信息来指导上一层的通道剪枝以保证剪枝过程的安全性,并基于逐层剪枝和微调的方法,实现DNN模型的结构化剪枝。相比于非结构化剪枝,结构化剪枝则按照不同的粒度将DNN权值或特征张量划分为不同大小的结构进行裁剪,可在通用体系结构下实现加速,但是剪枝率往往偏低。
神经网络模型量化
DNN模型量化通过将DNN中全精度传播的数值(包括权值、特征值,甚至是梯度值)替换为低精度的数据形式来简化DNN所需的计算和存储资源,从而提升效率。按照DNN位宽和目标量化值的类型,可将DNN模型量化分为二值/三值量化、线性量化和非线性量化。
二值/三值量化属于超低位宽的量化方法,比如BNNs提出了一种用于快速推理的二值神经网络,它将所有的权值和激活值量化为{-1,1},虽然BNNs实现了惊人的计算效率,但是必须依靠批归一化(batchnormalization)才能收敛,而且模型精度会显著下降。Xnor-Net在二值量化的基础上增加了一个浮点缩放参数来促进网络收敛,还提出利用位运算代替乘积运算以保证二值网络的计算效率,但压缩后的DNN模型的精度仍有明显下降。TWNs在二值中引入了一个额外的0值来权衡计算效率和推理精度。TNNs则是将模型所有权值和激活值都量化为三值,并通过学习教师网络的输出来训练该三值网络。BC和TC的方案是把缩放到[-1,1]后的权值作为采样概率,将原始的权值采样为二值或三值的形式。STC首先将权值缩放到[-1,1]之间,然后将其均匀量化为三值。二值/三值量化虽然可实现很高的计算效率,但会不可避免地导致DNN模型推理精度下降。
线性量化是将原始权重数据量化为连续的对硬件友好的定点值。Fixed-quantization根据经验直接舍去权值/层输出的末尾比特并保留高位的比特。T-DLA则考虑到高位的比特中可能存在无效位,同时舍去了末尾的比特和高位的无效比特。DoRe-Fa-Net将权值和特征值量化为间隔均匀的连续的定点数,通过缩放因子将数据缩放(转换)到目标范围,然后利用舍入操作实现数据离散化。TSQ使用了两步量化的策略先后量化特征值和权值,采用稀疏量化方法将激活值量化为低比特的表示,即将低于阈值的值设置为0,然后将其他值均匀量化为离散的值,最后将卷积权值按照通道进行三值量化。QIL通过重参数化均匀量化宽度,实现了一种可训练的线性量化方法,并通过优化任务损失来训练量化参数。μL2Q引入了平移参数和缩放参数,首先谨慎地将数据转换到合适的范围,然后使用截断操作去除异常值,最后应用舍入操作实现权值量化。线性量化对硬件实现非常友好,但是由于量化后的数值分布与原始权值/特征值的钟形分布不拟合,可能会导致额外的模型性能下降。
非线性量化非常适用于钟形或长尾的权值/特征值分布。非线性量化可大致分为3类:(1)基于k-means的量化方法,将权值/激活聚类并用中心值代替其他值;(2)残差量化方法,对权值进行迭代量化,每一次迭代都是对上一次量化前后的数据的误差进行再量化;(3)对数量化方法,将数据映射为指数形式的值,从而获得与钟型分布更加拟合的量化数值。非均匀量化可以有效防止模型压缩后的精度下降,但是其量化过程较复杂,需要精心设计投影函数。
猜你喜欢
- 2024-11-13 五大基本算法 五大基本算法是什么
- 2024-11-13 高级程序员必备:分治算法分享 分冶算法
- 2024-11-13 最快速的寻路算法 Jump Point Search
- 2024-11-13 手机实时人工智能之「三维动作识别」:每帧只需9ms
- 2024-11-13 模型压缩 | 无需"精雕细琢","随机剪枝"足矣!(ICLR 2022)
- 2024-11-13 决策树算法的剪枝策略:优化模型的关键路径
- 2024-11-13 基于Python的决策树分类器与剪枝 利用python建立决策树模型
- 2024-11-13 离线强化学习的单次修剪 离线训练模型
- 2024-11-13 只要保留定位感知通道,目标检测模型也能剪枝70%参数
- 2024-11-13 用动态数据修剪加速深度学习 动态数据变化视频制作
你 发表评论:
欢迎- 11-13第一次养猫的人养什么品种比较合适?
- 11-13大学新生活不适应?送你舒心指南! 大学新生的不适应主要有哪些方面
- 11-13第一次倒班可能会让人感到有些不适应,以下是一些建议
- 11-13货物大小不同装柜算法有哪些?怎么算?区别有哪些?
- 11-13五大基本算法 五大基本算法是什么
- 11-13高级程序员必备:分治算法分享 分冶算法
- 11-13最快速的寻路算法 Jump Point Search
- 11-13手机实时人工智能之「三维动作识别」:每帧只需9ms
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)