李宏毅机器学习network compression(网络压缩) 学习笔记

由于现代智能设备逐渐趋于小型化,小型芯片的算力无法支持很深的网络模型计算,因此产生了network compression的需求。
network compression共有几种方法:
1.参数/神经元的修剪
由于修剪参数(weight)会导致无法使用gpu cuda加速矩阵运算,因此一般选择减少神经元,即通过评估每个神经元的重要性(weight的值是否接近0,计算L1或L2的数值/对神经元:若不管输入是什么,神经元输出的都接近0则不重要)
为什么要做修剪,而不是一开始就用比较小的网络结构:因为参数比较多的神经网络更不容易出现局部极值点(参数越多概率越小),从而更容易找到全局极值点

2.knowledge distillation(知识蒸馏)
先学习一个大的网络,再根据大的网络输出的结果来训练一个小的网络,由于大的网络输出结果是附带了除label外其他分类的可能性,即各个分类之间的关系,这个“老师”会传授更多知识,比直接用原数据集训练小网络的效果要好得多

3.参数压缩
(1)采用更小的bit来代替参数值
(2)将weight分组后进行取平均值代替每组的weight

4.调整网络结构(目前最有效)
(1)线性网络:在两个很大的神经元之间增加一层较少神经元的中间层,参数量就会由NM变成NK+M*K,当K远小于n和m时就可行,但是矩阵的max秩会从原来n或m中的一个变成k,因此需要谨慎考虑K的取值
(2)卷积网络:将过滤器分为两类,一类每个过滤器对应输入的每个chanel(原为一个过滤器包含输入的所有chanel),共有输入的chanel个过滤器,另一类过滤器负责将上面过滤器输出的feature合并为一个feature,每个过滤器对应一个chanel。原理类似于线性网络的压缩。

5.动态规划运算量
(1)训练从浅到深的网络,根据现有运算资源选择相应的网络(占用存储空间,不建议)
(2)对一个网络在由浅到深选取不同部位加入分类器,问题:1.较为浅层的信息很难用于分类,性能很差 2.在浅层加入分类器会破坏原网络的结构(浅层的分类器会要求浅层也抽取分类结果,而这本不是浅层网络的任务),解决方法:MSDnet

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值