当前位置: 首页 > news >正文

深度学习损失“三位一体”——从 Fisher 的最大似然到 Shannon 的交叉熵再到 KL 散度,并走进 PET·P-Tuning微调·知识蒸馏的实战

一页速览:

1912 Fisher 用最大似然把「让数据出现概率最高」变成参数学习;

1948 Shannon 把交叉熵解释成「最短平均编码长度」;

1951 Kullback-Leibler 用相对熵量化「多余信息」。

三条历史线落到今天深度学习同一个损失——交叉熵。

也就是我们常用的:CrossEntropyLoss 函数

下面按 时间 → 问题 → 数学 → 代码 的顺序拆解,并演示它们在二/多分类、大模型知识蒸馏(含温度 T)和 PET 软模板大模型微调里的角色。


1  三个名字、三个年代、一个目标

年代

人物

术语

初衷

关键论文

1912→1922

R. A. Fisher

最大似然 (MLE)

用参数让训练数据出现的联合概率最大

“On the mathematical foundations…” 1922

1948

C. E. Shannon

交叉熵 H(p,q)

预测分布 q 压缩 真实分布 p 的平均比特数

《A Mathematical Theory of Communication》

1951

S. Kullback & R. Leibler

KL 散度 DKL

衡量 p→q 需要的额外信息量

《On Information and Sufficiency》

H\left ( p,q \right ) 表示交叉熵, MLE 表示最大似然,D_{KL} 表示KL散度

一句话概览

最大似然(MLE)、交叉熵 H(p,q) 与 KL 散度 D_{\text{KL}}(p\|q) 其实是同一指标在三位不同学者手中的“别名”。

1912-1922 Fisher 用它做参数估计;

1948 Shannon 用它算最短平均比特;

1951 Kullback-Leibler 把它写成“额外信息”。

由于 \;D_{\text{KL}}=H(p,q)-H(p)\;  而熵 H(p) 只跟数据真分布有关、与模型参数毫无关系,最小 KL ⇔ 最小交叉熵 ⇔ 最大似然




2  二/多分类:把公式算一遍

场景

激活

损失公式

PyTorch

二分类

Sigmoid

-[y log ŷ+(1-y) log(1-ŷ)]

BCEWithLogitsLoss

多分类 C≥2

Softmax

-log qk

CrossEntropyLoss

2.1 二分类示例

logits = torch.tensor([1.386, -0.847, 0.405])  # ≈[0.8,0.3,0.6]
labels = torch.tensor([1., 0., 1.])
loss = torch.nn.BCEWithLogitsLoss()(logits, labels)  # ≈1.06

2.2 多分类示例:三分类为例子

logits = torch.tensor([[ 2.3, 0.1,-1.2],[ 0.2, 1.4, 0.0],[-0.5, 0.3, 2.1]])
labels = torch.tensor([0,1,2])
loss   = torch.nn.CrossEntropyLoss()(logits, labels)
C=2 时 Softmax+CCE 可化简为 Sigmoid+BCE,数学上等价 。


3  知识蒸馏:KL / 交叉熵 + 温度 T

核心损失

温度 T>1 让 logits 变平滑,更易传递「软知识」 。

为什么要温度? 把 logits / T (T>1) 能“压平”概率,使学生更容易学习细粒度信息

T, alpha = 4.0, 0.7
for x,y in loader:with torch.no_grad():p_soft = torch.softmax(teacher(x)/T, -1)q_logits = student(x)/Tq_log    = torch.log_softmax(q_logits, -1)loss_kd = (p_soft*(p_soft.log()-q_log)).sum(1).mean()*T*T      # KL 项loss_ce = torch.nn.CrossEntropyLoss()(q_logits*T, y)           # 硬标签loss    = alpha*loss_ce + (1-alpha)*loss_kdloss.backward(); opt.step()


4  PET微调:把分类任务改成「完形填空」

说人话,就是自己弄一个[mask] ----》 映射表,这样以bert 为案例的预测出来的 【mask】通过映射表,就是我们的真实分类了,所以我们在微调的时候,把数据弄成原始句子 ➕ 【mask】模式,真实分类给进去,然后微调bert 模型,训练好的这个就是我们的老师,这个老师,去给其他样本进行打软标签, 也就是提供软标签这个,用于指导我们的另一个模型去拟合或者接近老师的答案。
(PET 产生的原因就是,因为我们的bert 在预训练的时候,就是MLM任务,我们直接把任务改成这种,就不用拟合或者说训练太久,即可达到好的效果。) 

  1. Stage-A:5-10 条标注 + Pattern T + Verbalizer V → 微调 K 个 BERT-MLM(填 [MASK],损失=交叉熵)。

  2. Stage-B:老师集成给未标注文本打软标签 p_{\text{soft}} 。

  3. Stage-C:把 p_{\text{soft}} 当教师,用 KL/交叉熵 训学生分类器(下式)。

PVP 组件:Pattern T + Verbalizer V
例:"Review: <x>. Sentiment: [MASK]." ,terrible↔0,great↔1

Step-A 少量标注 → 微调 K 个教师 MLM

  • 损失:CrossEntropyLoss 填 [MASK](即交叉熵)

Step-B 教师集成 → 大量未标注文本生成软标签 psoft

Step-C 学生分类器

# --- Stage-A: 训练 K 个教师 MLM ---
for T in patterns:teacher = BertForMaskedLM.from_pretrained('bert-base')finetune_mlm(teacher, few_shot_data, T, verbalizer)  # 交叉熵填空teachers.append(teacher)# --- Stage-B: 生成软标签 ---
soft = []
for x in unlabeled:logits = [mask_logits(m,x,T,V) for m,T in zip(teachers,patterns)]soft.append(torch.mean(torch.stack(logits),0).softmax(-1))  # p_soft# --- Stage-C: 学生分类器 ---
student = BertForSequenceClassification.from_pretrained('bert-base')
for x, p_soft in zip(unlabeled, soft):q = student(x).log_softmax(-1)kl  = (p_soft * (p_soft.log() - q)).sum()loss = kl                      # α=0,可选加硬标签交叉熵loss.backward(); opt.step()

用 KL/交叉熵把学生分布 qθ 贴到教师软标签 psoft 上 。


5  2025 Prompt-Tuning ,lora 家族选型

方法

额外参数

优点

缺点

推荐场景

Prompt-Tuning

0

零成本 PoC

方差大,需≥100B 模型

原型验证

PET

全量+集成

1-10 样本即可

两阶段工程复杂

极少标签

P-Tuning v2

0.1-3 %

稳定通用

需提示编码器

NLU few-shot

PPT

同上 + 预训

最优精度

预训练成本高

少样本高精度

LoRA / QLoRA

0.05-1 %

工业主流

需改 Linear

任务量产

一般都是用 P-Tuning v2 和 LoRA 这几个


参考文献

  1. Fisher R. A., Maximum Likelihood (1922)

  2. Shannon C. E., A Mathematical Theory of Communication (1948)

  3. Kullback S., Leibler R., On Information and Sufficiency (1951)

  4. PyTorch Docs — BCEWithLogitsLoss

  5. PyTorch Docs — CrossEntropyLoss

  6. Schick T., Schütze H., Pattern-Exploiting Training (EACL 2021)

  7. Hinton G. et al., Distilling the Knowledge… (2015)

  8. Liu X. et al., GPT Understands, Too — P-Tuning v2 (2021)

  9. Gu P. et al., PPT: Pre-trained Prompt Tuning (ACL 2022)

  10. Stats.SE 讨论 BCE vs CCE

  11. KD 温度研究综述


一句话总结

Fisher 说:让样本出现概率最大;Shannon 说:把平均比特压到最小;Kullback-Leibler 说:去掉无用信息。
三句话 = 一个训练目标:把交叉熵降到最低。 无论你在训练模型,还是蒸馏学生,还是用一个小小 Prompt 让大模型「开窍」,它始终是深度学习的黄金公式。

相关文章:

  • AI开发 | Web API框架选型-FastAPI
  • 机器学习——支持向量机(SVM)
  • 机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克
  • QT之INI、JSON、XML处理
  • mac 安装 mysql 和 mysqlshell
  • 黑马点评--基于Redis实现共享session登录
  • 技术文档炼金术:从混乱到优雅的知识封装
  • RabbitMQ核心特性——重试、TTL、死信队列
  • redis哨兵服务
  • H3C-WAF-单机部署
  • Vue 样式不一致问题全面分析与解决方案
  • ShenNiusModularity项目源码学习(29:ShenNius.Admin.Mvc项目分析-14)
  • webpack的构建流程
  • 折半搜索【2024华为智联杯 K.时光】
  • 【C/C++】多线程开发:wait、sleep、yield全解析
  • (泛函分析)线性算子谱的定义,谱的分类,谱的性质。
  • 《算法导论(第4版)》阅读笔记:p127-p133
  • 【MySQL】表的内外连接
  • 笔记本电脑右下角wifi不显示,连不上网怎么办?
  • Perl单元测试实战指南:从Test::Class入门到精通的完整方案
  • 微信公众号如何快速涨粉/百度seo营销
  • 深圳好的网站建设公/google搜索网址
  • 网站建设与实现 文献综述/图片搜索
  • dreamweaver做网站教学/手机app免费下载
  • 做网站遇到的问题及解决方法/搜索引擎网站有哪些
  • 广州制作网站哪家专业/六年级上册数学优化设计答案