机器学习李宏毅学习笔记33


前言

神经网络压缩(一)
类神经网络剪枝(pruning)


一、神经网络压缩

简化模型,用比较少的参数,但让效能差不多,这就是network compression这件事。有些情况下需要把模型用在resource constrain(资源有限)的情况下,比如说跑在智能手表上、小型无人机上等等。只有比较少的内存和计算能力,这时就需要比较小的模型,这种情况多用于需要及时响应并且保障隐私的情况下,不然就可以传到云端在把结果传回来。

二、Network pruning----一种network compression技术

有些参数是没有用的,network pruning就是要把这些没有用的参数找出来,并且丢掉。首先先train一个大的network,然后去评估这个network里每一个参数或者neural的重要性,看有没有那些参数是没在做事的。简单的评估方法就是看这个参数的绝对值,如果绝对值越大,表示对整个network的影响也越大。也可以用life long learning里面的思想,把参数的bi算出来,这样就知道每个参数是否重要。也可以把神经元当做单位,可以通过计算神经元输出不为0的次数。把不重要的参数(神经元)移除,这样就可以得到一个比较小的参数。移除参数后,正确率会下降一点。将没有被移除的参数做微调,可以在提高正确率。用训练资料,把修改过的network重新训练。训练后的可以再次进行评估、移除,不断重复。不能一次性移除大量参数,这样会对network产生比较大的影响,通过多次减去少量参数的方法进行减枝。
在这里插入图片描述

1.移除不同单位的区别

以参数为单位去掉后,network的形状可能是不规则的,这就导致了不好实作也不好用gpu加速。如果把去掉的位置补0的话,就没有真的把network变小。
在这里插入图片描述
使用network pruning可以去掉95%的参数,但是运算速度并没有加速。甚至多数情况下速度是变慢的。
在这里插入图片描述
这样看来用神经元作为单位是一种好的方法。使用神经元为单位进行pruning,去除一些神经元之后,network的架构依然是规则的,方便使用pytorch和gpu加速。
在这里插入图片描述

2.大乐透假说

既然小的network和大的network正确率差不多,为什么不直接train一个小的。一个大的network比较好train,直接train一个小的network没办法得到和大的network一样的正确率。
大乐透假说表示只要参数的数量越多,越容易训练。大的network可以看多是多个小的network的组合,训练一个大的network,相当于同时训练多个小的network,每一个小的network不一定能被成功的训练出来,但是只要有一个小的network成功,那么这个大的network就成功了。所以小的network越多,被成功训练起来的概率就越高。
如果用大的network随机初始化训练后,得到的进行剪枝得到小的network。这个小的network如果进行参数随机初始化就训练不起来,但是如果这个小的network用大的network的初始化参数就可以训练起来。

在这里插入图片描述


总结

视频学习地址:https://www.bilibili.com/video/BV13Z4y1P7D7/?p=35&spm_id_from=333.880.my_history.page.click&vd_source=3a369b537e1d34ff9ba8f8ab23afedec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值