2021李宏毅机器学习笔记--13 Network Compression

摘要

未来有可能将深度学习技术应用于一些移动设备上,但是这些设备有可能存储空间或者资源受到限制,不能存放过深或者过大的模型,也或者受限于计算能力,network不能有太多层或者太多参数。所以说network compression这件事非常重要,本篇文章着重介绍一些让network变小的方式。

一、Network Pruning(修剪)

1.1基本思想

神经网络的参数很多,但其中有些参数对最终的输出结果贡献不大而显得冗余,将这些冗余的参数剪掉的技术称为剪枝。剪枝可以减小模型大小、提升运行速度,同时还可以防止过拟合。

剪枝分为one-shot和iteration剪枝:

one-shot剪枝过程:训练模型–> 评估神经元(或者kernel、layer)的重要性–>去掉最不重要的神经元–> fine-tuning–>停止剪枝。

iteration剪枝过程:训练模型–> 评估神经元(或者kernel、layer)的重要性–>去掉最不重要的神经元–> fine-tuning–>判断是不是要继续剪枝,如果是回到第二步(评估神经元的重要性),否则停止剪枝。

在这里插入图片描述

1.2 why pruning

为什么要进行修剪?为什么不直接在数据集上训练小的模型,而是先训练大模型?有两个解释:
一是:因为模型越大,越容易在数据集上找到一个局部最优解,而小模型比较难训练,有时甚至无法收敛。
二是:大乐透假设(Lottery Ticket Hypothesis)

1.3 大乐透假设(Lottery Ticket Hypothesis)

提出大乐透假设试图解释为什么需要修剪。
我们先对一个network进行初始化(红色的weight),再得到训练好的network(紫色的weight),再进行pruned,得到一个pruned network

如果我们使用pruned network的结构,再进行随机初始化random init(绿色的weight),会发现这个network不能train下去
如果我们使用pruned network的结构,再使用原始随机初始化original random init(红色的weight),会发现network可以得到很好的结果。
所以有结论:可能神经元会不会被训练起来与初始值有很大关系,是一种大乐透现象。
在这里插入图片描述

1.4 Rethinking the Value of Network Pruning

作者通过数个网络和数据集的prune 测试,得到了三个观察和结论:

1.如果有一个确定的“压缩”模型,训练一个大网络不是必要的;
2.在prune算法中,我们所认为“重要”的权重,其实对裁剪的小模型来说,并不是那么有用;
3.对于最终的压缩小模型来说,通过prune算法得到的网络架构,比通过prune得到的“重要”的权重更加重要。

并得出一个最终结论:对于SOT的剪枝算法而言,使用裁剪的权重来fine-tune只能得到类似的或者更差的效果;对于通过剪枝算法得到的特定网络模型,可以直接随机初始化训练,而不用经历传统的裁剪管道(训练大网络,裁剪出权重,finetune小网络)。

同时,作者对彩票假说

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值