模型轻量化方法之----神经网络稀疏

1 稀疏

本人尝试过的稀疏算法有限,目前尝试过阈值稀疏、admm稀疏方式和简易pattern pruning,在此做一小结。

日后若有别的这方面尝试,会继续加。
稀疏的好处:减少存储,减少运算量,软硬件都可用。

  • 网络层数多,结构复杂,往往有更多的冗余
  • 不同场景下需求不一样。大数据集训练,小数据集测试可以带来更高的稀疏度
  • 本身参数值就小,可能更容易有更高的稀疏度
  • 针对不同网络层,采用不同的稀疏度

1.1 结构化稀疏

1) layer pruning

直接将某一层全部置零

2) channel pruning

某些通道全为零

3) intra-kernel pruning

某些行(列)全为零

pattern pruning

  1. 预先设置一些pattern作为mask,
  2. 针对weight的每个通道,选择与各pattern相乘之后,绝对值和最大的那个pattern
  3. 训练

1.2 非结构化稀疏

1) 阈值稀疏

简言之,就是将绝对值小的值置为零。

这里细分还可以分为 按层(per-layer) 和 按通道(per-channel)

  • 随机初始化再稀疏有时候比pretrain后稀疏效果好,特别是稀疏度较高的情况下

2) admm稀疏

将稀疏问题,转化为了优化问题,使用admm方法解之,得到凸优化解法,具体看paper。
在这里插入图片描述

分三步:

第一步:得到pretrain模型

第二步admm_prune: 修改loss函数,加上正则化项,引入Z,U
在这里插入图片描述

更新W,b

在这里插入图片描述

更新Z
在这里插入图片描述
更新U
在这里插入图片描述
不断更新Z, U ,直到W 趋向于 Z或者正则化项收敛(Z趋于W稀疏后的结果, W趋于Z)

第三步retrain : 对W小的值置零,且对应位置保持为零,不再更新

  • 调参:稀疏度,学习率,net_loss和admm_loss的比例
发布了21 篇原创文章 · 获赞 17 · 访问量 3703

猜你喜欢

转载自blog.csdn.net/qq_33892106/article/details/96476003