1.一种基于通道梯度剪枝的柔性深度学习网络模型压缩方法,具体步骤如下:
步骤1:获取待剪枝的深度卷积神经网络初始模型,这一过程具体实现是在卷积层输出后添加额外的遮掩层,上一层卷积层的输出即当前卷积层的输入,输入可以记为zl-1,则对于当前卷积层操作可以记为f(zl-1),初始化一个权重为1,维度与f(zl-1)的结果一致的遮掩层张量mmask作为遮掩层的权重,然后在对应的卷积层后添加上遮掩层,得到受遮掩层约束的输出:zl=f(zl-1)×mmask (1)
掩码为1的通道的输出是原始输出,而掩码为0的通道的输出为0(该通道的输出对结果无影响并且通道权重无法被更新),当原始深度卷积神经网络模型中所有考虑剪枝的卷积层都添加完约束后,就得到了掩码数组Mmask和待剪枝的深度卷积神经网络;
步骤2:训练网络模型,更新模型掩码信息,设定模型的压缩率s(既可以指网络剩余通道数占全部通道数的百分比,也可以表示剩余FLOPs占原FLOPs的百分比),在压缩率的限制下,使用训练集训练待剪枝深度卷积神经网络模型;
步骤2-1:训练过程中,计算全局通道重要性指标:依据模型表现越好,损失函数越低这一先验知识,冗余的通道对于模型变化的影响是相对较小的,,以损失函数值的变化幅度来体现当前通道的重要性程度,其数学表示式为:表示第l层第i个通道的重要性指标,L(x,y), 分别表示剪枝第l层第i个通道的输出前后的损失函数,x表示数据,y表示数据x对应的标签, 越小说明该通道对损失函数影响越小,在求取剪去单个通道后的损失函数变化值时,本发明采用泰勒一阶展开式来逼近实际的损失函数变化幅度,以减少搜索的计算量,单个通道的重要性指标为:指第l层第i个通道输出值, 则表示第l层第i个通道的输出值的回传梯度,具体实现时,回传梯度和输出值的获取通过在网络前向通道中插入Hook获取,然后对回传梯度和输出值相乘得到积的绝对值做层归一化处理,得到最终的通道重要性指标步骤2-2:训练过程中,网络的权重参数W通过随机梯度下降更新,掩码数组M则通过迭代阈值选择方法更新,生成阈值和调整掩码过程是将考虑剪枝的通道按照通道的重要性指标从小到大排序,生成一张表,包括index,key和value,index为序列下标,key为通道坐标(l,i)((l,i)表示第l层第i个通道),value为通道重要性指标 三者一一对应,统计通道总数n,则阈值为TI=Is×n (4)
对重要性指标小于阈值的通道,按照表内对应关系将对应坐标的通道的掩码置0,其余的通道掩码置1;
步骤2-3:在训练过程,柔性迭代更新掩码信息,对于第m轮训练,重置掩码全部为1,整个网络在数据集上被训练,按照步骤2-2,步骤2-3更新掩码信息并保存,对于第m+1轮训练,依据上一轮的掩码信息,屏蔽对应通道,残余网络在数据集上被训练,对于第m+2轮训练,按照第m轮训练过程,整个网络在数据集上被训练,此时第m+1轮被剪枝的通道恢复,重复上述迭代过程,直到跑完所有训练轮数后停止训练,保存最后得到稀疏模型和掩码信息;
步骤3:步骤2-3得到的掩码信息是一张表,包括key和value,key为通道坐标(l,i)((l,i)表示第l层第i个通道),value为掩码值0或1。统计每一层掩码值为1的通道的个数,按照每一层剩余通道数量重新构造一个新的规模更小的网络,将新网络的通道坐标按顺序对应掩码信息中的通道坐标,再把稀疏模型中仍然处于激活态的权重参数按照坐标对应关系一一保存到新网络中,得到紧凑的深度卷积神经网络模型;
步骤4:完成紧凑的深度卷积神经网络模型重训练,在原数据集上重新训练剪枝后的紧凑深度卷积神经网络模型,超参数设置为每次迭代的批次数量选取为128,一共迭代50~
100个epoch,优化方法选择带0.90~0.99动量的随机梯度下降,权重衰减为0.0001~
0.001,初始学习速率设置为0.01~0.1,然后在loss不发生显著变化的3个epoch后将学习率除以10。输出性能良好且模型参数量少的最终网络模型。