深度学习方法(十五):知识蒸馏(Distilling the Knowledge in a Neural Network),在线蒸馏

Distilling the Knowledge in a Neural Network

这篇介绍一下Hinton大神在15年做的一个黑科技技术,Hinton在一些报告中称之为Dark Knowledge,技术上一般叫做知识蒸馏(Knowledge Distillation)。核心思想是通过迁移知识,从而通过训练好的大模型得到更加适合推理的小模型。这个概念最早在06年的Paper: Model Compression中, Caruana提出一种将大模型学习到的函数压缩进更小更快的模型,而获得可以匹敌大模型结果的方法。

重点idea就是提出用soft target来辅助hard target一起训练,而soft target来自于大模型的预测输出。这里有人会问,明明true label(hard target)是完全正确的,为什么还要soft target呢?

hard target 包含的信息量(信息熵)很低,soft target包含的信息量大,拥有不同类之间关系的信息(比如同时分类驴和马的时候,尽管某张图片是马,但是soft target就不会像hard target 那样只有马的index处的值为1,其余为0,而是在驴的部分也会有概率。)[5]

这样的好处是,这个图像可能更像驴,而不会去像汽车或者狗之类的,而这样的soft信息存在于概率中,以及label之间的高低相似性都存在于soft target中。但是如果soft targe是像这样的信息[0.98 0.01 0.01],就意义不大了,所以需要在softmax中增加温度参数T(这个设置在最终训练完之后的推理中是不需要的)

q i = e x p ( z i / T ) Σ j e x p ( z j / T ) q_i=\frac{exp(z_i/T)}{\Sigma_jexp(z_j/T)} qi=Σjexp(zj/T)exp(zi/T)

Loss是两者的结合,Hinton认为,最好的训练目标函数就是这样,并且第一个目标函数的权重要大一些。
L = α L ( s o f t ) + ( 1 − α ) L ( h a r d ) L = \alpha L^{(soft)}+(1-\alpha)L^{(hard)} L=αL(soft)+(1α)L(hard)

算法示意图如下[5]:
在这里插入图片描述

1、训练大模型:先用hard target,也就是正常的label训练大模型。
2、计算soft target:利用训练好的大模型来计算soft target。也就是大模型“软化后”再经过softmax的output。
3、训练小模型,在小模型的基础上再加一个额外的soft target的loss function,通过lambda来调节两个loss functions的比重。
4、预测时,将训练好的小模型按常规方式(右图)使用。

在线蒸馏 codistillation

在分布式训练任务下,提出了一种替代标准SGD训练NN模型的方法codistillation,是一种非同步的算法,事实上有很多个Wieght的副本在独立训练,他可以有效“解决”机器增加但线性度不增加的问题,实验中还有一些数据表面可以比标准的SGD收敛更快。

也是distill的思想,但是因为是重头训练,所以什么是teacher model呢?作者提出用所有模型的预测平均作为teacher model,然后作为soft target来训练每一个模型。

在这篇论文中,使用codistillation来指代执行的distillation:

  • 所有模型使用相同的架构;
  • 使用相同的数据集来训练所有模型;
  • 任何模型完全收敛之前使用训练期间的distillation loss。

算法原理如下:
在这里插入图片描述

在这里插入图片描述
distillation loss作者提到了可以是平方距离,或者是KL-divergence,但是作者采用的是cross entropy。

分为两个阶段,第一个是独立的SGD更新阶段,这个阶段是不需要去同步的,因此非常高效。第二阶段是codistill阶段,就是用每一个model的平均预测结果来作为soft target训练每一个独立的model,有趣的是作者说这样会训练出来一堆不同的model(只要求他们表现接近,并不能强求他们的Weight一样),但是这些model在loss上没什么区别。、

在这里插入图片描述

作者也表明,实际上可以和标准的同步SGD来结合,也就是分组——组内用同步SGD训练model副本,然后组间用codistill来训练(只交换预测结果,非常小)。另外,作者表示虽然他们在仿真实现上是传输了所有的模型副本到所有node上,为了得到soft预测结果,但实际上可以只传输预测结果即可(我猜可能是框架支持不方便?)

实验结果:

在这里插入图片描述

重点看下Imagenet,16K Batchsize用两路训练比用一路训练收敛快。

参考资料

[1] Hinton胶囊网络后最新研究:用“在线蒸馏”训练大规模分布式神经网络
[2] G.Hinton Dark Knowledge
[3] 2006, Model Compression
[4] 如何让你的深度神经网络跑得更快
[5] 如何理解soft target这一做法?

  • 70
    点赞
  • 299
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
将神经网络中的知识进行提取,是一种将模型的信息转化为更为简洁和易于理解形式的过程。 神经网络是一种由许多神经元组成的复杂计算模型,它们通过学习和调整权重来解决各种问题。然而,神经网络通常具有大量的参数和复杂的结构,这使得它们难以解释和应用到其他领域。因此,我们需要一种方法来提取和总结神经网络中的知识,以便更好地理解和应用这些模型。 在进行神经网络知识提取时,有几种常见的方法。一种常见的方法是使用可视化技术,如热力图、激活图和网络结构图等,来可视化网络中不同层的活动模式。这些可视化技术能够帮助我们发现网络中的模式和特征,并从中推断出网络的知识。 另一种方法是使用特征提取技术,如卷积神经网络(CNN)的滤波器、自动编码器的隐藏层和循环神经网络(RNN)的隐状态等,来提取网络学习到的重要特征。这些重要特征可以帮助我们更好地理解网络学习到的信息,并将其应用到其他问题中。 此外,还有一种被称为知识蒸馏的技术,它通过训练一个较小的模型来提取大型模型中的知识。知识蒸馏通过引入目标函数和额外的训练策略,使小模型能够学习到大模型中的重要知识,并在不损失太多性能的情况下将其应用到实际问题中。 总而言之,提取神经网络中的知识是一项重要任务,它能够帮助我们更好地理解和应用这些复杂的模型。通过可视化、特征提取和知识蒸馏方法,我们能够从神经网络中提取出有用的信息,并将其应用到其他领域或解决其他问题中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值