论文阅读_神经网络知识蒸馏_DK

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了论文阅读_神经网络知识蒸馏_DK相关的知识,希望对你有一定的参考价值。


英文题目:Distilling the Knowledge in a Neural Network
中文题目:神经网络知识蒸馏
论文地址:https://arxiv.org/pdf/1503.02531.pdf
领域:深度学习
发表时间:2015
作者:Geoffrey Hinton,谷歌
出处:NIPS
被引量:6972
阅读时间:2022.09.21

读后感

这是最早提出蒸馏模型的文章,它训练老师Teacher/学生Student两个模型,首先训练大而全的Teacher,然后用Teacher蒸馏出小而精的Student,S不仅学习T的对错判断,还学到更多细节,比如为什么错(错的离不离谱)。

介绍

作者提出训练和部署的模型未必是同一模型。大而复杂的模型效果(后简称Teacher/T)好,但相对复杂,预测时间长,占空间更大。作者提出如何把集成模型或大模型用一个小模型(后简称Student/S)实现。训练阶段产出大而全的模型,然后用蒸馏技术提炼小模型,以便部署。

和压缩参数相比,在输入输出之间建立新的映射可能是更好的模型瘦身方法。一般建模方法是:模型主要学习正例为什么分对,让负例概率越小越好。而实际上,负例的概率应该是有差异的。比如在识别宝马汽车时,垃圾车和胡萝卜都是负例,但垃圾车更像宝马。这一问题可能影响了模型对新数据的泛化。比如:在数据识别MNIST任务中,有时2看起来更像3,有时更像7,而像3的概率是10-6,像7的概率是10-9,差别非常微小。之前的方法是用对数修改Softmax作为损失函数,来计算小模型与大模型的误差。

文中进一步提出了“蒸馏”方法,以得到更丰富的信息,通过提升Softmax的“温度”,直到产生合理的软目标。

小模型可以使用未标注的数据训练(大模型打标签),也可以使用训练集数据训练,实验证明,使用训练集数据,并结合软目标和实际的预测损失效果更好。

方法

对于多分类问题,计算每个类的概率qi如下:

论文阅读_神经网络知识蒸馏_DK_数据

其中T是温度参数,一般设成1,设成大于1时,则产生较软的概率分布。下面看看软目标与硬目标的差异:

import numpy as np

def softmax(x,T=1):
f_x = np.exp(x/T) / np.sum(np.exp(x/T), axis=1, keepdims=True)
return f_x

print(softmax(np.array([[1,4,5]]), T=1))
#[[0.01321289 0.26538793 0.72139918]]
print(softmax(np.array([[1,4,5]]), T=3))
#[[0.13312123 0.36186103 0.50501774]]
print(softmax(np.array([[1,4,5]]), T=10))
#[[0.26030255 0.35137169 0.38832577]]

可以看到T=1时为硬目标,虽然4与5很相近,但概率差异很,调参时也将更重视最终的选择5;而T=10时,各项的得分又过于相近。

最终的损失函数由两部分组成,第一部分是用同样的温度训练的T模型和S模型两者间的差异;第二部分是S模型对实例真实标签的预测损失,此处的温度使用1,实验结果是对第二部分应用较低权重效果更好。

梯度计算

设zi是S模型结果,产生软概率qi,vi是T模型的结果,产生软概率pi,蒸馏模型的梯度计算如下:

论文阅读_神经网络知识蒸馏_DK_神经网络_02

如果温度很高,根据e^x的泰勒展开,后面项忽略不计,只保留前两项,变成:

论文阅读_神经网络知识蒸馏_DK_神经网络_03

再假设所有样本的预测均值为0,

论文阅读_神经网络知识蒸馏_DK_数据_04

则有:

论文阅读_神经网络知识蒸馏_DK_神经网络_05

因此在温度T较高时,用梯度往回推损失函数就是最小化z和v的均方误差,即蒸馏的目标是让z和v尽量一致,对正负例给予相似的关注,S模型能学到更多细节。而当温度低时,则如同普通Softmax,相对不重视负例。实验表明,当S模型太小,无法捕捉到T模型的所有知识时,中等温度是一种折中。


以上是关于论文阅读_神经网络知识蒸馏_DK的主要内容,如果未能解决你的问题,请参考以下文章

论文阅读_知识蒸馏_MobileBERT

论文阅读_知识蒸馏_Meta-KD

论文阅读_知识蒸馏_Distilling_BERT

神经网络分类知识蒸馏

论文速递TPAMI2022 - 自蒸馏:迈向高效紧凑的神经网络

CTPN_论文阅读总结