个人站点-主NLP
欧洲史
开发工具
Linux
计算机软件
DL-训练
历史-欧洲史
历史-中国史
中国史
DL-公式推导
DL-算法原理
DL-工程化
计算机硬件
可解释性
LLM-基础
传统NLP
社会运转
训练框架
Benchmark
生活记录
技术报告
强化学习
交叉熵损失
交叉熵损失
先看公式吧
信息熵
信息熵是一种指标,用来衡量:
- 不确定性
- 信息量
- 平均编码长度
为什么这么设计:
信息熵是用来衡量随机变量 的指标,核心思想来源于信息理论中的“信息量”和“概率”的关系。
- : 表示随机事件 发生的概率。
- : 表示事件 所携带的信息量,概率越小,信息量越大。
- :表示事件 的信息熵贡献
- 因为,取负号是为了让信息熵变成正数,这样更符合直觉。
- : 对所有可能事件的“信息量”进行加权平均(按概率 p(x) 加权),也就是是对所有可能事件的信息量的期望值
交叉熵
交叉熵是用一个分布来近似真实分布 时所需要的平均编码长度:
Kullback-Leibler (KL) 散度
KL散度就是描述 真实分布的信息熵和用来模拟的时候的交叉熵的差值:
为什么是交叉熵被用于损失
单看三个公式的话,交叉熵衡量的是用模拟的时候,所需要的平均编码长度或者信息量,理论上应该KL散度才是真正的损失吧,损失等于(真实-模拟)
但实际应用上,只用交叉熵就可以了
所以核心是信息熵的定义,在这里我们回到香农的初始定义:
在信息论里面,熵是对不确定性的测量,不确定性越高,所携带的信息量越高
所以当我们讨论los为什么只用交叉熵公式的时候,记住这句话:
交叉熵的目标并不是简单地描述,而是为了衡量用 去近似真实分布 时所付出的代价(不确定性)
以上是咬文嚼字式的解释,不重要,因为即使我们用了KL散度,在实际代码优化过程中也会退化成交叉熵的,只需要记得以下几点即可:
- 最小化和最小化在优化目标上是一致的。
- KL 散度需要先计算,但 是固定的,可理解为常数项,在优化过程中不会影响梯度,直接消去即可
分步骤理解Loss公式
我们从单样本的交叉熵推广到多样本,然后结合实际应用
1. Multi-class Classification 单样本的交叉熵公式
对于单条样本,想象next token的预测过程,我们假设next token的one hot为:
[0,0,0,0,0,…,1,…,0,0,0]
: 分类的类别数。
. : 该条样本
- 对于真实类别 ,
- 对于其他类别 ,
- 由于只有1、0,所以公式可以简化为:
2. Multi-class Classification 多样本的交叉熵公式
同样,多条样本,每条也都是one hot为:
[0,0,0,0,0,…,1,…,0,0,0]
这时候公式为:
- : 样本总数。
- : 分类的类别数。
由于也是one-hot,所以可以简化为:
3. Multi-label Classification 多样本的交叉熵公式
其实跟Multi-class Classification 多样本的交叉熵公式是一样的,只是无法简化了,因为的时候
4. Multi-class Classification +Softmax的loss计算
在多分类问题中,Softmax 输出层将模型的 logits 转化为概率分布:
Loading...