简介
当前通道稀疏支持对不同的层做不同稀疏率的稀疏处理,但逐层设置稀疏率对用户的使用门槛较高,对于某一层,如何选择稀疏率(即配置中的prune_ratio)是比较困难的,手工尝试的配置需要进行重训练,耗费时间多。针对上述问题,引入自动通道稀疏搜索特性,根据用户模型来计算各通道的稀疏敏感度(影响精度)以及稀疏收益(影响性能),然后搜索策略依据稀疏敏感度和稀疏收益来搜索最优的逐层通道稀疏率,以平衡精度和性能。
说明:当前版本该特性为试用特性,不支持应用于商用产品中。
- 稀疏敏感度:稀疏敏感度定义为当前通道稀疏后对整网精度的影响估计,稀疏敏感度越大代表当前通道稀疏后整网精度损失越大,默认算法根据loss(w - wi)的泰勒展开计算通道稀疏敏感度。支持用户自定义计算方式。裁剪第i个通道后,稀疏敏感度计算公式如下:
采用近似估计的方法对loss(w - wi)进行泰勒展开,目前考虑到计算量只算一阶。
- 稀疏收益:当前通道的稀疏收益用比特复杂度表示,为计算量化Flops与计算比特位宽之积:
其中,Flops为浮点计算量,act_bit为数据的数据精度,wts_bit为权重的数据精度。
自动通道稀疏搜索流程如图1所示,支持稀疏的层以及规格请参见表1。
各流程简要说明如下:
- 初始化:初始化动作首先需要解析用户模型以及稀疏配置(可选),分析网络中可通道稀疏层及其对应的通道稀疏配置(是否有用户指定配置稀疏率),生成通道稀疏配置生成的搜索空间:解析用户目标压缩率配置。
- 搜索空间:为支持通道稀疏的层,但是没有通过override_layer_configs或者override_layer_types配置稀疏率。
- 压缩率:定义为原模型比特复杂度与稀疏后模型比特复杂度之比。
- 敏感度计算:计算每个通道的稀疏敏感度,内置基于损失估计的敏感度计算方法,使用泰勒展开的一次项估计裁剪该通道后网络loss的变化;支持用户自定义敏感度计算方法。
- 比特复杂度计算:计算每个通道的比特复杂度,视为通道的稀疏收益。
- 通道稀疏率配置搜索:默认采用自动通道稀疏搜索算法,搜索满足用户指定压缩率的最优通道稀疏率配置;支持用户自定义求解器。
自动通道稀疏搜索特性只是生成通道稀疏的简易配置文件,若想得到最终稀疏后模型,还需要进行手工稀疏,将上述生成的简易配置文件作为入参传入通道稀疏。
父主题: 自动通道稀疏搜索