本文是阅读Hinton 大神在2014年NIPS上一篇论文:蒸馏神经网络的笔记,特此说明。此文读起来很抽象,大篇的论述,鲜有公式和图表。但是鉴于和我的研究方向:神经网络的压缩十分相关,因此决定花气力好好理解一下。

1、Introduction

文章开篇用一个比喻来引入网络蒸馏:

昆虫作为幼虫时擅于从环境中汲取能量,但是成长为成虫后确是擅于其他方面,比如迁徙和繁殖等。

同理神经网络训练阶段从大量数据中获取网络模型,训练阶段可以利用大量的计算资源且不需要实时响应。然而到达使用阶段,神经网络需要面临更加严格的要求包括计算资源限制,计算速度要求等等。

由昆虫的例子我们可以这样理解神经网络:一个复杂的网络结构模型是若干个单独模型组成的集合,或者是一些很强的约束条件下(比如dropout率很高)训练得到的一个很大的网络模型。一旦复杂网络模型训练完成,我们便可以用另一种训练方法:“蒸馏”,把我们需要配置在应用端的缩小模型从复杂模型中提取出来。

“蒸馏”的难点在于如何缩减网络结构但是把网络中的知识保留下来。知识就是一幅将输入向量导引至输出向量的地图。做复杂网络的训练时,目标是将正确答案的概率最大化,但这引入了一个副作用:这种网络为所有错误答案分配了概率,即使这些概率非常小。

我们将复杂模型转化为小模型时需要注意保留模型的泛化能力,一种方法是利用由复杂模型产生的分类概率作为“软目标”来训练小模型。在转化阶段,我们可以用同样的训练集或者是另外的“转化”训练集。当复杂模型是由简单模型复合而成时,我们可以用各自的概率分布的代数或者几何平均数作为“软目标”。当“软目标的”熵值较高时,相对“硬目标”,它每次训练可以提供更多的信息和更小的梯度方差,因此小模型可以用更少的数据和更高的学习率进行训练。

像MNIST这种任务,复杂模型可以给出很完美的结果,大部分信息分布在小概率的软目标中。比如一张2的图片被认为是3的概率为0.000001,被认为是7的概率是0.000000001。Caruana用logits(softmax层的输入)而不是softmax层的输出作为“软目标”。他们目标是是的复杂模型和小模型分别得到的logits的平方差最小。而我们的“蒸馏法”:第一步,提升softmax表达式中的调节参数T,使得复杂模型产生一个合适的“软目标”  第二步,采用同样的T来训练小模型,使得它产生相匹配的“软目标”

“转化”训练集可以由未打标签的数据组成,也可以用原训练集。我们发现使用原训练集效果很好,特别是我们在目标函数中加了一项之后。这一项的目的是是的小模型在预测实际目标的同时尽量匹配“软目标”。要注意的是,小模型并不能完全无误的匹配“软目标”,而正确结果的犯错方向是有帮助的。

2、Distillation

softmax层的公式如下:

               

T就是调节参数,一般设为1。T越大,分类的概率分布越“软”

“蒸馏”最简单的形式就是:以从复杂模型得到的“软目标”为目标(这时T比较大),用“转化”训练集训练小模型。训练小模型时T不变仍然较大,训练完之后T改为1。

当“转化”训练集中部分或者所有数据都有标签时,这种方式可以通过一起训练模型使得模型得到正确的标签来大大提升效果。一种实现方法是用正确标签来修正“软目标”,但是我们发现一种更好的方法是:对两个目标函数设置权重系数。第一个目标函数是“软目标”的交叉熵,这个交叉熵用开始的那个比较大的T来计算。第二个目标函数是正确标签的交叉熵,这个交叉熵用小模型softmax层的logits来计算且T等于1。我们发现当第二个目标函数权重较低时可以得到最好的结果

3、Preliminary experiments on MNIST

我的理解:将迁移数据集中的3或者7、8去掉是为了证明小模型也能够从soft target中学得知识。

4、Experiments on Speech Recognition

5、Training ensembles of specialists on very big datasets

蒸馏神经网络(Distill the Knowledge in a Neural Network)相关推荐

  1. 【模型压缩】蒸馏神经网络(Distill the Knowledge in a Neural Network)

    1,简介 昆虫作为幼虫时擅于从环境中汲取能量,但是成长为成虫后确是擅于其他方面,比如迁徙和繁殖等. 同理神经网络训练阶段从大量数据中获取网络模型,训练阶段可以利用大量的计算资源且不需要实时响应.然而到 ...

  2. Paper:《Distilling the Knowledge in a Neural Network神经网络中的知识蒸馏》翻译与解读

    Paper:<Distilling the Knowledge in a Neural Network神经网络中的知识蒸馏>翻译与解读 目录 <Distilling the Know ...

  3. Distilling the Knowledge in a Neural Network 论文笔记蒸馏

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/bryant_meng/article/ ...

  4. 【Distilling】《Distilling the Knowledge in a Neural Network》

    arXiv-2015 In NIPS Deep Learning Workshop, 2014 文章目录 1 Background and Motivation 2 Conceptual block ...

  5. 第一节课-第二周:神经网络的编程基础(Basics of Neural Network programming)

    二.神经网络的编程基础(Basics of Neural Network programming) 2.1 二分类(Binary Classification) 2.2 逻辑回归(Logistic R ...

  6. 《吴恩达深度学习》学习笔记002_神经网络的编程基础(Basics of Neural Network programming)

    http://www.ai-start.com/dl2017/html/lesson1-week2.html 神经网络的编程基础(Basics of Neural Network programmin ...

  7. 全连接神经网络详解(Full Connect Neural Network)

    文章目录 前言 一.单层神经网络 1.1 正向传播 1.2 损失函数 1.3 梯度下降 二.浅层神经网络 2.1 正向传播 2.2 反向传播 三.深层神经网络 3.1 ImageNet发展史 3.2 ...

  8. 【论文翻译_知识蒸馏】Distilling Holistic Knowledge with Graph Neural Networks

    (以下的"提取"都可以替换为"蒸馏"),收录于ICCV2021 摘要 知识提炼(KD)旨在将知识从一个更大的优化教师网络转移到一个更小的可学习学生网络.现有的知 ...

  9. 《Distilling the Knowledge in a Neural Network》 论文阅读笔记

    原文链接:https://arxiv.org/abs/1503.02531   第一次接触这篇文章是在做网络结构的时候,对于神经网络加速,知识蒸馏也算是一种方法,当时连同剪纸等都是网络压缩的内容,觉得 ...

最新文章

  1. 慎用Outline ,UGUI Outline实现原理分析
  2. 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量...
  3. 第一章:1.1.2 信号分类
  4. 反射获取成员方法并运行
  5. Android bootchart分析
  6. 骑驴找马!在职期间如何优雅的去面试?
  7. nginx 和 nodejs配置使用搭建网站
  8. SpringCloud Gateway 服务网关,断言
  9. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
  10. 手机modem开发(28)---开发电信VoLTE开关默认值设置
  11. 微软发布IoT应用现状报告:88%国内企业已使用IoT;技术人才仍为最大需求;三分之一企业死于构想阶段...
  12. 6.1-6.4 压缩打包介绍,压缩工具gzip,bzip2, xz
  13. [python 笔记]:序列详解:字符串,列表,元组,range对象
  14. python自学记录 pydev安装
  15. 2016/2/13 《计算机系统要素》(The Elements of Computing Systems)读书笔记(1)
  16. Android Studio Template(模板)开发,最后有参考
  17. hdu 1452 因子和 + 逆元素+ 快速幂
  18. stc 串口收发 c语言,STC15W408AS串口通讯PC乱码
  19. LOL登录后黑屏,主界面一直加载解决办法
  20. Jmeter下载及安装方法

热门文章

  1. 详细介绍NLP对话系统
  2. myeclipse优化配置指南、myeclipse常用功能设置、 myeclipse快捷键
  3. [codeforces 1379B] Dubious Cyrpto 公式推导
  4. ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3
  5. 加mp4文件后js失效_video不能播放mp4的问题(一)
  6. 180501 逆向-RedHat(Reverse)
  7. android raw相机,最高大上的安卓相机App?专业拍摄ProShot
  8. 计算机四级月工资多少,大学教授工资多少一月 薪水是多少
  9. 整理了100个Python精选库,建议收藏!
  10. windows.frames