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

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的比例
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
稀疏BP神经网络是一种能够自动选择重要连接并剔除无用连接的神经网络。下面是一种实现稀疏BP神经网络方法: 1. 初始网络:首先,初始神经网络的权重和偏置。可以使用随机初始方法,如高斯分布或均匀分布。 2. 前向传播:将输入数据通过网络进行前向传播,计算每个神经元的输出值。可以使用激活函数(如sigmoid函数)来引入非线性。 3. 计算稀疏性:在前向传播过程中,通过某种方法计算每个神经元的稀疏性度量。一种常用的度量是平均激活值(average activation)。具体而言,计算每个神经元在训练样本上的平均激活值,并与一个预先设定的稀疏性目标进行比较。 4. 反向传播:根据网络输出和目标值之间的差异,使用反向传播算法计算每个权重和偏置的梯度。 5. 更新权重和偏置:使用梯度下降法或其他优算法,根据计算得到的梯度更新网络的权重和偏置。 6. 剪枝连接:根据稀疏性度量选择要剪枝的连接。可以使用阈值来决定哪些连接被认为是无用的,然后将这些连接的权重设置为零或删除它们。 7. 调整网络结构:根据剪枝的连接,调整网络的结构。可以删除无用的神经元或重新连接其他神经元。 8. 重复步骤2-7:重复进行前向传播、反向传播、剪枝和调整网络结构的步骤,直到达到稀疏性目标或收敛。 请注意,这只是一种实现稀疏BP神经网络方法之一,具体的实现可能会有所不同。此外,还有其他方法可以实现稀疏性,如L1正则、自适应学习率等。可以根据具体问题和需求选择适合的方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值