知识蒸馏KL-loss解读


前言

本文简单介绍知识蒸馏教师模型与学生模型使用KL loss方法。

一 、KL loss原理

hard label:训练的学生模型结果与真实标签进行交叉熵loss,类似正常网络训练。

soft label:训练的学生网络与已经训练好的教师网络进行KL相对熵求解,可添加系数,如温度,使其更soft。

知乎回答:loss是KL divergence,用来衡量两个分布之间距离。而KL divergence在展开之后,第一项是原始预测分布的熵,由于是已知固定的,可以消去。第二项是 -q log p,叫做cross entropy,就是平时分类训练使用的loss。与标签label不同的是,这里的q是teacher model的预测输出连续概率。而如果进一步假设q p都是基于softmax函数输出的概率的话,求导之后形式就是 q - p。直观理解就是让student model的输出尽量向teacher model的输出概率靠近。

二、logit蒸馏网络图示

在这里插入图片描述

三、KL代码

蒸馏模型分类loss代码如下:

import torch
import torch.nn as nn
import numpy as np

loss_f = nn.KLDivLoss()

# 生成网络输出 以及 目标输出
model_student = torch.from_numpy(np.array([[0.1132, 0.5477, 0.3390]])).float() # 假设学生模型输出

model_teacher = torch.from_numpy(np.array([[0.8541, 0.0511, 0.0947]])).float() #假设教师模型输出
label=torch.tensor([0])  # 真实标签
loss_KD = loss_f(model_student, model_teacher)
L=nn.CrossEntropyLoss()
loss_SL=L(model_student,label)
lambda_ ,T=0.6,3  # 分别为设置权重参数,T为温度系数
loss = (1 - lambda_) * loss_SL + lambda_ * T * T * loss_KD  # hint和jeff dean论文

print('\nloss: ', loss)

四、运行结果显示

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
KL-Divergence(KL散度)是一种用来衡量两个概率分布之间差异的指标。它始终大于等于0,当且仅当两个分布完全相同时,KL散度等于0。KL散度具有非对称性,即DKL(P||Q)不等于DKL(Q||P),并且不满足三角不等式的形式,因此KL散度不是用来衡量距离的指标。 KL散度的公式可以表示为DKL(P||Q) = ΣP(x) * log(P(x) / Q(x)),其中P和Q分别是两个概率分布,x表示分布中的某个事件。这个公式可以用来计算P相对于Q的信息损失,或者可以理解为在使用Q来近似表示P时的额外损失。 在机器学习中,KL散度经常被用于衡量两个概率分布之间的差异,例如在概率生成模型和信息检索中。在PyTorch中,可以使用F.kl_div()函数来计算KL散度。这个函数的原型为F.kl_div(input, target, size_average=None, reduce=None, reduction='mean'),其中input和target分别是输入和目标张量。 总结起来,KL散度是一种用来衡量两个概率分布之间差异的指标,它不是用来衡量距离的,并且具有非对称性。在机器学习中,KL散度常被用于衡量模型输出与真实分布之间的差异。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [浅谈KL散度](https://blog.csdn.net/weixin_33774615/article/details/85768162)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [KL Divergence ——衡量两个概率分布之间的差异](https://blog.csdn.net/weixin_42521185/article/details/124364552)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tangjunjun-owen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值