基于知识提取的方法训练一个小网络

本文介绍了如何通过知识提取将大模型的性能转移至小模型,包括训练大模型、获取软目标标签以及训练小网络的过程。通过调整softmax的温度参数,可以得到平滑的软目标标签,用于小模型的训练,从而实现模型压缩与加速。
摘要由CSDN通过智能技术生成

Hinton大牛的文章,关于如何得到一个又小又好的网络的。文章链接《Distilling the Knowledge in a Neural Network》

—————————— 背景介绍 ——————————

大家都想要得到一个又好又快的模型,但是实际情况往往是模型越小则性能越差。文献[1]中提出了一种策略:大模型学习到的知识可以通过“提取”的方法转移到一个小模型上

所以,本文的宏观策略就是先训练一个性能很好的大模型,然后再据此学习得到一个性能不差的小模型。

—————————— 方法介绍 ——————————

因为整体方法比较简单,涉及到的推导和证明也比较少,所以这里直接给出方法步骤:

(1)训练一个大模型

使用普通的SoftmaxWithLoss训练一个性能好但比较复杂的网络,记作A
(PS. 该方法只适用于softmax分类)

(2)获取soft target label

将A中的softmax替换为下面的新的soft_softmax, 然后将训练集跑一遍,并将每张训练图片的网络输出结果保存下来。

float

(1)式中T=1时,退化成传统的softmax,T无穷大时,结果趋近于1/C,即所有类别上的概率趋近于相等。T>1时,我们就能获得soft target label。

这里解释两点:

——为什么称之为soft target label?

举一个栗子,假如我们分三类,然后网络最后的输出是[1.0 2.0 3.0],我们可以很容易的计算出,传统的softmax(即T=1)对此进行处理后得到的概率为[0.09 0.24 0.67],而当T=4的时候,得到的概率则为[0.25 0.33 0.42]。
可以看出,当T变大的时候输出的概率分布变得平缓了,这就称之为soft。

PS.不知道怎么算概率的,可以看下我的另外一篇博客caffe层解读系列-softmax_loss

——为什么要使用 soft target label?

通常我们使用softmax进行分类的时候,我们的label都是one shot label,比如我们分三类:猫、虎和猪,那么一张猫的图片它的label就是[1 0 0]。这种标注方式意味着每一类之间都是独立的,完全没有任何联系。但是事实上,猫和虎的相似度应该高于猫和猪的相似度,这种丰富的结构信息,one shot label(hard target)描述不了。此外,正因为one shot label的hard,导致了我们学习得到的概率分布也相对hard。显然对于一张猫的图片强行学习一个[1 0 0]的分布,其难度要比学一个[0.65 0.3 0.05]的分布大得多。

(3)训练一个小网络

重新创建一个小的网络,该网络最后有两个loss,一个是hard loss,即传统的softmaxloss,使用one shot label;另外一个是soft loss,即T>1的softmaxloss,使用我们第二步保存下来的soft target label。

整体的loss如下式:

\(L=\alpha L^{soft}+(1-\alpha)L^{hard}\)

其中

\(L^{soft} = -\sum_{c=1}^{C}y_c^{soft}\log\frac{e^{\frac{x_c}{T}}}{\sum_{c=1}^{C}e^{\frac{x_c}{T}}}\)

\(y_c^{soft}\) 为第二步输出的soft label

PS.由于soft项的残差大致乘以了\(\frac{1}{T^2}\),因此和hard结合时,最好将soft项的残差都放大\(T^2\)倍以此来平衡二者。

—————————— 参考文献 ——————————

《Buciluǎ C, Caruana R, Niculescu-Mizil A. Model compression[C]//Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2006: 535-541.》https://www.cs.cornell.edu/~caruana/compression.kdd06.pdf

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值