机器学习笔记 network compression
来自于李宏毅教授的ML课件,作业七部分
Hung-yi Lee (ntu.edu.tw)
0 前言
我们为什么要进行network compression呢?
因为在某些环境中(比如在手机,手环等设备中),如果我们要嵌入深度学习model的话,那么鉴于设备的原因,其存储空间,或是计算能力,都是有限的。所以我们不能需要太大的模型。
1 network pruning
对于很大的模型来说,并不是它的所有参数都是有用的,我们也许不需要那么多的参数
以人脑神经元的pruning过程为例,人脑也是在成长过程中先是有很多的神经元连接,然后慢慢地将冗余的神经元连接去掉
比如我们以用L1范数评估weight的重要性为例:
我们现在有3个filter(橙、蓝、绿),我们通过计算这三个filter的L1范数,判断各个filter权重的重要性,把小的那个去掉
1.1 为什么不一开始train一个小模型
那么问题来了:为什么不一开始就trian一个小的network呢?而是要从一个大的network再慢慢地prune成一个小model呢
因为如果只是一个小模型的话,可能会遇到鞍点或者局部最小值,不一定能learn得很好。但是大模型的话(尤其是足够大的模型),是可以避开鞍点和local minimal的
1.1.1 lottery ticket hypothesis
这是19ICLR的一篇paper,大致意思是这样的
对于一个大模型,我首先随机初始化一组参数(红色部分),然后进行tuning,得到效果还不错的模型(紫色部分)
之后我们进行model pruning,得到一个小一点的模型(但是剩下的这些部分参数不变,仍然为紫色的部分)
此时如果我们对剩下的模型部分重新随机初始化(绿色部分),可能是learn不出一个很好的模型的。但是如果我们将原来随机初始化大模型对应的参数直接复制过来,是可以train得不错的
1.2 network pruning 实际操作上的选择
如果我们是weight pruning,那么这会使得模型不易实现,也不易用GPU加速
- 因为这样的话模型就不是一个矩阵的形式,那么无论是pytorch这种深度学习框架,还是依靠矩阵运算来加速的GPU,都无法实现
- 如果我们只是将prune的weight用0表示,那么模型参数的规模还是不变的
如果我们是neuron pruning,那么我们只是减掉矩阵的一定的维度,依然很方便地实现&GPU加速
2 knowledge distillation
在知识蒸馏中,我们的目标是train一个大的network(teacher network)和一个小的network(student network)。其中teacher network学习的label就是ground truth的label,而小的student network所需要学习的内容是teacher network的输出
这样的好处在哪里呢?相比于一个冷冰冰的ground label 1,teacher network可以学到这个label更丰富的信息(比如7和9这两个数字跟1很像,同时7比9更像)
——>这样就会导致,哪怕student没有看到过7和9,他也有可能learn出一定的7&9的特征
——>teacher network 往往是一个很大的/集成了很多模型的大model,student network则可以用较少的参数实现近似的效果
2.1 label temperature
由于知识蒸馏希望teacher学习到更丰富的信息,不希望他仅仅学习到(接近)one-hot label的信息,所以我们希望各个label之间的差距稍微拉近一些,这时候就需要用到temperature的内容
2.2 TA network
如果teacher network 和student network 相差太大,那么student network可能没法很好地学习teacher network
于是引入一个参数量介于teacher network和student network之间的TA networl 来帮助student network 学习
3 parameter quantization
有两种思路:
第一种是使用更少的比特数来表示一个参数值
第二种是进行weight clustering
比如我们根据某种clustering的方法把weight分成四个cluster,每个cluster的weight值都使用这个cluster的平均值来表示
这样的好处是省内存,我们只需要一个记录每个cluster是什么数值的table,以及一个元素为属于哪个cluster的矩阵就可以了(比如我们分成四个cluster,只需要2bit)
但是这种方法势必会减少一定的精度
第三种方法是使用类似于哈夫曼编码的方式进行编码
使用比较频繁weight用较少的比特表示,使用比较少的weight用较多的比特表示
4 模型架构设计
比如,我们本来想创建一个N维到M维的全连接层,我们需要M*N个参数
现在我们在中间插入一层维度为K的中间层,那么我们只需要M*K+N*K个参数
包括mobilenet,就是一种很明显的依靠模型架构设计的方法来进行
NTU 课程 7454 (5) CNN进阶_UQI-LIUWJ的博客-CSDN博客
5 动态计算
如果资源充足的时候,那么就做到最好;如果资源不足的时候,那么就在不怎么影响性能的情况下,先求有再求好【类似于省电模式】
一种解决方法是,在中间的hidden layer 就接一些输出,如果计算资源不足的时候,那么从中间就把结果输出出来了
6 多种network compression方法混合
机器学习笔记 network compression相关推荐
- 吴恩达机器学习笔记week8——神经网络 Neutral network
吴恩达机器学习笔记week8--神经网络 Neutral network 8-1.非线性假设 Non-linear hypotheses 8-2.神经元与大脑 Neurons and the brai ...
- 2021李宏毅机器学习笔记--22 Generative Adversarial Network 01
@[TOC](2021李宏毅机器学习笔记–22 Generative Adversarial Network 01(GAN,生成式对抗网络)) 摘要 GAN是建立于神经网络的基础上的,其核心思想是&q ...
- 【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)
[李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...
- 深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression
文章目录 1.摘要和背景 1.1 摘要 1.2 背景 2.方法和贡献 2.1 方法 2.2 贡献 3.实验和结果 3.1 实验 3.2 结果 4.总结和展望 4.1 总结 4.2 展望 本系列是在阅读 ...
- 机器学习笔记——数据挖掘与机器学习区别以及课程内容
机器学习笔记 慕课|蒋良孝|中国地质大学 机器学习的定义 机器学习:利用经验改善计算机系统自身的性能 数据挖掘的定义 数据挖掘:识别出巨量数据中有效的.新颖的.潜在有用的.最终可理解的模式的非平凡的过 ...
- 机器学习笔记之深度信念网络(一)背景介绍与结构表示
机器学习笔记之深度信念网络--背景介绍与结构表示 引言 深度信念网络 场景构建 深度信念网络的联合概率分布 引言 从本节开始,将介绍深度信念网络. 深度信念网络 深度信念网络(Deep Belief ...
- 2021李宏毅机器学习笔记--21 Anomaly Detection
2021李宏毅机器学习笔记--21 Anomaly Detection(异常侦测) 摘要 一.问题描述 二.Anomaly异常 三.Anomaly Detection(异常侦测)做法 3.1 Bina ...
- 李宏毅svm_【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)...
[李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...
- 机器学习笔记之概率图模型(一)背景介绍
机器学习笔记之概率图模型--背景介绍 引言 背景介绍 联合概率分布的求解困境 条件独立性假设 概率图的分类 总结 引言 从本节开始将介绍概率图模型. 背景介绍 概率图模型(Probabilistic ...
最新文章
- Oracle 安装错误 - 无法在节点xx上执行物理内存检查 的解决
- docker linux redis 安装
- 【数据迁移】使用传输表空间迁移数据
- LOJ #6358 前夕 (组合计数、容斥原理)
- 机器视觉行业市场现状及发展前景分析
- react(89)--设置只能正整数
- python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
- 使用DataGrip连接Hive
- 前端页面数据埋点、分析和参考
- 改造家里的开关为智能开关,保留原有开关控制,零火版,HomeKit篇(三)
- 解决Nokia PC SUITE无法识别DELL E6400 WIDCOMM bluetooth的问题
- 360浏览器html文件无图标,360浏览器在网页的右键里不显示审查元素怎么了
- C语言和汇编语言函数调用
- NVIDIA Jetson TK1 rosrun rviz segmentation fault的解决方法
- 【C语言】你还不会指针吗?不妨来一起攻克指针这个难点
- 计算机网络第一章考研题
- TSCLIB.DLL函数库使用说明
- UESTC-2016dp专题 F 柱爷与三叉戟不得不说的故事
- 点击链接弹出qq对话框
- 夸西莫多的一首短诗--《瞬息间是夜晚》
热门文章
- C 语言指针 5 分钟教程
- 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器
- 5、Python函数
- ASP.NET MVC学习系列(一)-WebAPI初探
- ​linux 系统出现Give root password for maintenance 问题
- 交换机VLAN划分详细手册
- python批量给文件命名为001,002,...【亲测有效】
- PAT甲级1142 Maximal Clique :[C++题解]图论、最大团、枚举
- Acwing756. 蛇形矩阵:模拟
- 通信网络基础期末复习-第五章-路由算法