在知识蒸馏中,损失函数通常由两部分组成: 标准交叉熵损失(Cross-Entropy Loss):学生模型直接拟合训练数据的硬标签,公式如下: 其中,yi是第 i 个样本的真实标签,Pstudent(xi)是学生模型对该样本的预测概率。 蒸馏损失(Distillation Loss):学生模型学习教师模型的软标签分布,公式如下: 其中,T是温度参数,qteach...
KD_loss = nn.KLDivLoss(reduction='batchmean')( F.log_softmax(outputs / T, dim=1), F.softmax(teacher_outputs / T, dim=1) ) * (alpha * T * T) # 计算交叉熵损失 CE_loss = nn.CrossEntropyLoss()(outputs, labels) # 总损失 return (1. - alpha) * CE_loss + alpha * KD_loss...
然后将student和teacher的输出做loss。loss有很多可以选择,论文中采用的是Jensen-Shannon Divergence loss,JSD我们下面会介绍。 3、SeqKD是指仅输入模型的prompt,使用teacher模型生成output后,然后再重复2中的内容,拼接数据后分别给teacher和student,输出相同维度的logits并进行loss计算。 <font style="color:rgb(25, 27...
2、Exploring Knowledge Distillation of Deep Neural Networks for Efficient Hardware Solutions 这篇文章将total loss重新定义如下: GitHub地址:https://github.com/peterliht/knowledge-distillation-pytorch total loss的Pytorch代码如下,引入了精简网络输出与教师网络输出的KL散度,并在诱导训练期间,先将teacher network的...
def distillation(y, labels, teacher_scores, temp, alpha): return nn.KLDivLoss()(F.log_softmax(y / temp, dim=1), F.softmax(teacher_scores / temp, dim=1)) * ( temp * temp * 2.0 * alpha) + F.cross_entropy(y, labels) * (1. - alpha) 我们这里写一下这个公式: KLDivLoss(log...
GitHub地址:https://github.com/peterliht/knowledge-distillation-pytorch total loss的Pytorch代码如下,引入了精简网络输出与教师网络输出的KL散度,并在诱导训练期间,先将teacher network的预测输出缓存到CPU内存中,可以减轻GPU显存的overhead: defloss_fn_kd(outputs, labels, teacher_outputs, params): ...
GitHub地址:https://github.com/peterliht/knowledge-distillation-pytorch 这篇文章将Total loss重新定义如下: Total loss的PyTorch代码如下,引入了精简网络输出与教师网络输出的KL散度,并在诱导训练期间,先将Teacher network的预测输出缓存到CPU内存中,可以减轻GPU显存的Overhead: ...
3. Knowledge Distillation 这里我的想法是通过搭建两个神经网络,一个大网络一个小网络,查看小网络知识蒸馏前后的效果。ps:这里的大神经网络模型也可以有CNN模型替换 import torchimport torch.nn as nnimport torch.optim as optimimport torch.nn.functional as Ffrom torchvision import datasetsfrom torchvision impor...
知识蒸馏(knowledge distillation)是模型压缩的一种常用的方法,不同于模型压缩中的剪枝和量化,知识蒸馏是通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度。最早是由Hinton在2015年首次提出并应用在分类任务上面,这个大模型我们称之为teacher(教师模型),小模型...
Loss使用 Exploring Knowledge Distillation of Deep Neural Networks for Efficient Hardware Solutions 一文中的Loss: loss = alpha * loss_gt + (1- alpha) * T * T * loss_soft loss_soft = KLDivLoss(pred / T, teacher_pred / T) 学习