来自于李宏毅教授的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相关推荐

  1. 吴恩达机器学习笔记week8——神经网络 Neutral network

    吴恩达机器学习笔记week8--神经网络 Neutral network 8-1.非线性假设 Non-linear hypotheses 8-2.神经元与大脑 Neurons and the brai ...

  2. 2021李宏毅机器学习笔记--22 Generative Adversarial Network 01

    @[TOC](2021李宏毅机器学习笔记–22 Generative Adversarial Network 01(GAN,生成式对抗网络)) 摘要 GAN是建立于神经网络的基础上的,其核心思想是&q ...

  3. 【李宏毅机器学习笔记】 23、循环神经网络(Recurrent Neural Network,RNN)

    [李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...

  4. 深度模型压缩论文(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 展望 本系列是在阅读 ...

  5. 机器学习笔记——数据挖掘与机器学习区别以及课程内容

    机器学习笔记 慕课|蒋良孝|中国地质大学 机器学习的定义 机器学习:利用经验改善计算机系统自身的性能 数据挖掘的定义 数据挖掘:识别出巨量数据中有效的.新颖的.潜在有用的.最终可理解的模式的非平凡的过 ...

  6. 机器学习笔记之深度信念网络(一)背景介绍与结构表示

    机器学习笔记之深度信念网络--背景介绍与结构表示 引言 深度信念网络 场景构建 深度信念网络的联合概率分布 引言 从本节开始,将介绍深度信念网络. 深度信念网络 深度信念网络(Deep Belief ...

  7. 2021李宏毅机器学习笔记--21 Anomaly Detection

    2021李宏毅机器学习笔记--21 Anomaly Detection(异常侦测) 摘要 一.问题描述 二.Anomaly异常 三.Anomaly Detection(异常侦测)做法 3.1 Bina ...

  8. 李宏毅svm_【李宏毅机器学习笔记】 18、支持向量机(Support Vector Machine,SVM)...

    [李宏毅机器学习笔记]1.回归问题(Regression) [李宏毅机器学习笔记]2.error产生自哪里? [李宏毅机器学习笔记]3.gradient descent [李宏毅机器学习笔记]4.Cl ...

  9. 机器学习笔记之概率图模型(一)背景介绍

    机器学习笔记之概率图模型--背景介绍 引言 背景介绍 联合概率分布的求解困境 条件独立性假设 概率图的分类 总结 引言 从本节开始将介绍概率图模型. 背景介绍 概率图模型(Probabilistic ...

最新文章

  1. Oracle 安装错误 - 无法在节点xx上执行物理内存检查 的解决
  2. docker linux redis 安装
  3. 【数据迁移】使用传输表空间迁移数据
  4. LOJ #6358 前夕 (组合计数、容斥原理)
  5. 机器视觉行业市场现状及发展前景分析
  6. react(89)--设置只能正整数
  7. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑
  8. 使用DataGrip连接Hive
  9. 前端页面数据埋点、分析和参考
  10. 改造家里的开关为智能开关,保留原有开关控制,零火版,HomeKit篇(三)
  11. 解决Nokia PC SUITE无法识别DELL E6400 WIDCOMM bluetooth的问题
  12. 360浏览器html文件无图标,360浏览器在网页的右键里不显示审查元素怎么了
  13. C语言和汇编语言函数调用
  14. NVIDIA Jetson TK1 rosrun rviz segmentation fault的解决方法
  15. 【C语言】你还不会指针吗?不妨来一起攻克指针这个难点
  16. 计算机网络第一章考研题
  17. TSCLIB.DLL函数库使用说明
  18. UESTC-2016dp专题 F 柱爷与三叉戟不得不说的故事
  19. 点击链接弹出qq对话框
  20. 夸西莫多的一首短诗--《瞬息间是夜晚》

热门文章

  1. C 语言指针 5 分钟教程
  2. 在阿里云主机上基于CentOS用vsftpd搭建FTP服务器
  3. 5、Python函数
  4. ASP.NET MVC学习系列(一)-WebAPI初探
  5. ​linux 系统出现Give root password for maintenance 问题
  6. 交换机VLAN划分详细手册
  7. python批量给文件命名为001,002,...【亲测有效】
  8. PAT甲级1142 Maximal Clique :[C++题解]图论、最大团、枚举
  9. Acwing756. 蛇形矩阵:模拟
  10. 通信网络基础期末复习-第五章-路由算法