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

KL散度(Kullback-Leibler)

文章目录

  • 1. KL 散度的符号表示
  • 2. "||"符号的含义
  • 3. KL 散度的定义
  • 4. 为什么使用"||"符号
  • 5. 直观理解
  • 6. 应用中的理解
  • 7. 举例说明
  • 8. 补充说明

🍃作者介绍:双非本科大四网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发,目前开始人工智能领域相关知识的学习
🦅个人主页:@逐梦苍穹
📕所属专栏:人工智能
🌻gitee地址:xzl的人工智能代码仓库
✈ 您的一键三连,是我创作的最大动力🌹

KL散度用在了"LLaMA2"论文里面,关于论文提到的"PPO"算法,我先展示一下完整公式,感兴趣可以去我的这篇文章看一下:
速通LLaMA2:https://xzl-tech.blog.csdn.net/article/details/142315279

公式:
arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ R ( g ∣ p ) ] = { arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ whiten ( logit ( R s ( g ∣ p ) ) ) − β ∑ x π 0 ( x ∣ g , p ) log ⁡ ( π 0 ( x ∣ g , p ) π ( x ∣ g , p ) ) ] , ( d i s c r e t e , & , if is_safety( p ) or  R s ( g ∣ p ) < 0.15 ) arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ whiten ( logit ( R h ( g ∣ p ) ) ) − β ∑ x π 0 ( x ∣ g , p ) log ⁡ ( π 0 ( x ∣ g , p ) π ( x ∣ g , p ) ) ] , ( d i s c r e t e , & , otherwise ) arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ whiten ( logit ( R s ( g ∣ p ) ) ) − β ∫ π 0 ( x ∣ g , p ) log ⁡ ( π 0 ( x ∣ g , p ) π ( x ∣ g , p ) ) d x ] , ( c o n t i n u o u s , & , if is_safety( p ) or  R s ( g ∣ p ) < 0.15 ) arg ⁡ max ⁡ π E p ∼ D , g ∼ π [ whiten ( logit ( R h ( g ∣ p ) ) ) − β ∫ π 0 ( x ∣ g , p ) log ⁡ ( π 0 ( x ∣ g , p ) π ( x ∣ g , p ) ) d x ] , ( c o n t i n u o u s , & , otherwise ) \arg \max_{\pi} \mathbb{E}_{p \sim D, g \sim \pi}[R(g | p)]= \begin{cases} \arg \max_{\pi} \mathbb{E}_{p \sim D, g \sim \pi} \left[ \text{whiten}(\text{logit}(R_s(g | p))) - \beta \sum_{x} \pi_0(x \mid g, p) \log \left( \frac{\pi_0(x \mid g, p)}{\pi(x \mid g, p)} \right) \right],&(discrete,\&,\text{if is\_safety($p$) or } R_s(g | p) < 0.15 )\\ \arg \max_{\pi} \mathbb{E}_{p \sim D, g \sim \pi} \left[ \text{whiten}(\text{logit}(R_h(g | p))) - \beta \sum_{x} \pi_0(x \mid g, p) \log \left( \frac{\pi_0(x \mid g, p)}{\pi(x \mid g, p)} \right) \right],&(discrete,\&,\text{otherwise}) \\ \arg \max_{\pi} \mathbb{E}_{p \sim D, g \sim \pi} \left[ \text{whiten}(\text{logit}(R_s(g | p))) - \beta \int \pi_0(x \mid g, p) \log \left( \frac{\pi_0(x \mid g, p)}{\pi(x \mid g, p)} \right) dx \right],&(continuous,\&,\text{if is\_safety($p$) or } R_s(g | p) < 0.15)\\ \arg \max_{\pi} \mathbb{E}_{p \sim D, g \sim \pi} \left[ \text{whiten}(\text{logit}(R_h(g | p))) - \beta \int \pi_0(x \mid g, p) \log \left( \frac{\pi_0(x \mid g, p)}{\pi(x \mid g, p)} \right) dx \right],&(continuous,\&,\text{otherwise})\\ \end{cases} argπmaxEpD,gπ[R(gp)]= argmaxπEpD,gπ[whiten(logit(Rs(gp)))βxπ0(xg,p)log(π(xg,p)π0(xg,p))],argmaxπEpD,gπ[whiten(logit(Rh(gp)))βxπ0(xg,p)log(π(xg,p)π0(xg,p))],argmaxπEpD,gπ[whiten(logit(Rs(gp)))βπ0(xg,p)log(π(xg,p)π0(xg,p))dx],argmaxπEpD,gπ[whiten(logit(Rh(gp)))βπ0(xg,p)log(π(xg,p)π0(xg,p))dx],(discrete,&,if is_safety(p) or Rs(gp)<0.15)(discrete,&,otherwise)(continuous,&,if is_safety(p) or Rs(gp)<0.15)(continuous,&,otherwise)


下面详细解释一下 KL 散度公式

1. KL 散度的符号表示

在 KL 散度(Kullback-Leibler 散度)的公式中,通常写作:

D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(PQ)

这里的"||"是一个符号,用来分隔两个概率分布 P P P Q Q Q,表示计算 P P P相对于 Q Q Q的 KL 散度。

2. "||"符号的含义

  • 表示方向性: KL 散度是非对称的,即 D K L ( P ∥ Q ) ≠ D K L ( Q ∥ P ) D_{KL}(P \| Q) \neq D_{KL}(Q \| P) DKL(PQ)=DKL(QP)。因此,"||"符号表示了从 P P P Q Q Q的方向。
  • 读作: P P P相对于 Q Q Q的 KL 散度"或" P P P关于 Q Q Q的 KL 散度”。
  • 作用: 明确指出哪个分布是“真实”分布(或目标分布),哪个是“近似”分布(或模型分布)。在 D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(PQ)中, P P P通常被视为真实分布, Q Q Q是近似或模型分布。

3. KL 散度的定义

KL 散度用于衡量两个概率分布之间的差异,其数学定义为:

D K L ( P ∥ Q ) = ∑ x P ( x ) log ⁡ ( P ( x ) Q ( x ) ) D_{KL}(P \| Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right) DKL(PQ)=xP(x)log(Q(x)P(x))

或对于连续分布:

D K L ( P ∥ Q ) = ∫ P ( x ) log ⁡ ( P ( x ) Q ( x ) ) d x D_{KL}(P \| Q) = \int P(x) \log \left( \frac{P(x)}{Q(x)} \right) dx DKL(PQ)=P(x)log(Q(x)P(x))dx

在这个公式中:

  • P ( x ) P(x) P(x) 真实分布或目标分布的概率密度函数。
  • Q ( x ) Q(x) Q(x) 近似分布或模型分布的概率密度函数。
  • log ⁡ ( P ( x ) Q ( x ) ) \log \left( \frac{P(x)}{Q(x)} \right) log(Q(x)P(x)) 表示在每个点 x x x上, P ( x ) P(x) P(x)相对于 Q ( x ) Q(x) Q(x)的对数差异。

4. 为什么使用"||"符号

  • 强调非对称性: KL 散度不是对称的,即 D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(PQ) D K L ( Q ∥ P ) D_{KL}(Q \| P) DKL(QP)一般不相等。因此,用"$| | $"来强调计算的顺序和方向。
  • 区分角色: 在许多应用中, P P P Q Q Q扮演不同的角色。 P P P通常是数据的真实分布,我们希望模型 Q Q Q能够尽可能接近 P P P

5. 直观理解

  • 信息损失: KL 散度可以被看作是使用分布 Q Q Q来近似分布 P P P时所产生的信息损失。
  • 例子: 假设我们有两个概率分布:

D K L ( P ∥ Q ) D_{KL}(P \| Q) DKL(PQ)计算的是如果我们用模型 Q Q Q来近似真实分布 P P P时,所产生的差异或信息损失。

  • P P P:真实的硬币掷投结果分布,硬币是公平的,正反面概率均为 0.5。
  • Q Q Q:我们的模型认为硬币是偏的,正面概率为 0.7,反面概率为 0.3。

6. 应用中的理解

在您提到的公式中:

R ( g ∣ p ) = R ~ c ( g ∣ p ) − β D K L ( π 0 ( g ∣ p ) ∥ π ( g ∣ p ) ) R(g \mid p) = \tilde{R}_c(g \mid p) - \beta D_{KL}(\pi_0(g \mid p) \| \pi(g \mid p)) R(gp)=R~c(gp)βDKL(π0(gp)π(gp))

  • D K L ( π 0 ( g ∣ p ) ∥ π ( g ∣ p ) ) D_{KL}(\pi_0(g \mid p) \| \pi(g \mid p)) DKL(π0(gp)π(gp))
    • π 0 ( g ∣ p ) \pi_0(g \mid p) π0(gp):初始策略或基准分布。
    • π ( g ∣ p ) \pi(g \mid p) π(gp):当前策略或模型分布。
    • “||”:表示我们在计算初始策略相对于当前策略的 KL 散度。
  • 含义: 我们希望新的策略 π \pi π不要偏离初始策略 π 0 \pi_0 π0太多,因此通过 KL 散度来衡量这种偏离程度。

7. 举例说明

假设我们有一个简单的逻辑回归模型,该模型用于根据单个特征 x x x来预测输出 y y y属于类别0或类别1。

模型的参数 p p p为逻辑回归的权重 w w w和偏置 b b b

  • 先验分布 π 0 ( g ∣ p ) \pi_0(g|p) π0(gp): 假设我们有理由相信在没有数据的情况下,权重 w w w应接近0,因此我们将先验分布 π 0 \pi_0 π0设置为均值为0,方差为1的正态分布。
  • 后验分布 π ( g ∣ p ) \pi(g|p) π(gp): 训练数据后,我们更新权重并获得新的分布,假设更新后的权重 w w w均值为1,方差为1。
  • 条件风险函数 R ~ c ( g ∣ p ) \tilde{R}_c(g|p) R~c(gp): 使用二元交叉熵损失。
  • 调节参数 β \beta β: 设为0.1,用以控制正则化强度。

计算步骤:

  • 计算条件风险 R ~ c ( g ∣ p ) \tilde{R}_c(g|p) R~c(gp)
    • 假设单个数据点为 ( x , y ) = ( 2 , 1 ) (x, y) = (2, 1) (x,y)=(2,1)模型预测 y ^ \hat{y} y^的概率为:
      * y ^ = σ ( w ⋅ x + b ) = σ ( 1 ⋅ 2 + 0 ) = σ ( 2 ) \hat{y} = \sigma(w \cdot x + b) = \sigma(1 \cdot 2 + 0) = \sigma(2) y^=σ(wx+b)=σ(12+0)=σ(2)
      • 其中 σ \sigma σ是sigmoid函数。计算 σ ( 2 ) ≈ 0.88 \sigma(2) \approx 0.88 σ(2)0.88
    • 二元交叉熵损失为: − [ y log ⁡ ( y ^ ) + ( 1 − y ) log ⁡ ( 1 − y ^ ) ] = − [ 1 log ⁡ ( 0.88 ) + 0 log ⁡ ( 0.12 ) ] ≈ 0.13 -\left[y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})\right] = -[1 \log(0.88) + 0 \log(0.12)] \approx 0.13 [ylog(y^)+(1y)log(1y^)]=[1log(0.88)+0log(0.12)]0.13
  • 计算KL散度:
    • 对于正态分布的KL散度,公式为: D K L ( N ( μ 0 , σ 0 2 ) ∥ N ( μ , σ 2 ) ) = log ⁡ ( σ σ 0 ) + σ 0 2 + ( μ 0 − μ ) 2 2 σ 2 − 1 2 D_{KL}(N(\mu_0, \sigma_0^2) \| N(\mu, \sigma^2)) = \log\left(\frac{\sigma}{\sigma_0}\right) + \frac{\sigma_0^2 + (\mu_0 - \mu)^2}{2 \sigma^2} - \frac{1}{2} DKL(N(μ0,σ02)N(μ,σ2))=log(σ0σ)+2σ2σ02+(μ0μ)221
    • 将值代入: D K L ( N ( 0 , 1 ) ∥ N ( 1 , 1 ) ) = log ⁡ ( 1 ) + 1 + ( 0 − 1 ) 2 2 ⋅ 1 − 1 2 = 0.5 D_{KL}(N(0, 1) \| N(1, 1)) = \log(1) + \frac{1 + (0 - 1)^2}{2 \cdot 1} - \frac{1}{2} = 0.5 DKL(N(0,1)N(1,1))=log(1)+211+(01)221=0.5
  • 计算总目标函数: R ( g ∣ p ) = 0.13 − 0.1 ⋅ 0.5 = 0.13 − 0.05 = 0.08 R(g|p) = 0.13 - 0.1 \cdot 0.5 = 0.13 - 0.05 = 0.08 R(gp)=0.130.10.5=0.130.05=0.08

小结:

通过这个计算例子,我们可以看到如何结合模型的预测损失和基于先验知识的正则化来形成最终的目标函数,这种方法有助于平衡模型的拟合能力和对先验知识的保留,尤其在数据较少或不完整时非常有用。

8. 补充说明

  • 其他表示方法: 有时,KL 散度也可以写作 D K L ( P   ||   Q ) D_{KL}(P \, \text{||} \, Q) DKL(P||Q) D K L ( P → Q ) D_{KL}(P \rightarrow Q) DKL(PQ),但"|"是最常用的表示方法之一。
  • 注意符号顺序: 在计算 KL 散度时,符号顺序很重要,交换 P P P Q Q Q会得到不同的结果。

http://www.kler.cn/a/312127.html

相关文章:

  • sqlserver删除最近2个月的记录
  • 前端代码分析题(选择题、分析题)——this指向、原型链分析
  • 【数据结构】线性表——链表
  • OpenGL 进阶系列07 - 阴影贴图(shadowmap )
  • python获取iOS最近业务日志的两种方法
  • 【计网】数据链路层笔记
  • java框架
  • 深入理解 MySQL MVCC:多版本并发控制的核心机制
  • vmware,centos8(虚拟机) 的安装
  • Python Web开发中的持续集成与持续交付(CI/CD)
  • cassandra指定配置文件的docker启动方法
  • 【学术会议征稿】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)
  • 微信小程序能不能有一种公共的分包,能被普通的分包引用其资源?(内有解决方案)
  • 【测试】博客系统测试报告
  • docker面经
  • 【Mac】系统环境配置
  • mybatisplus分页查询学习
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 计算机网路(应用层)
  • 中台架构下的数据仓库与非结构化数据整合
  • Nuxt Kit 中的插件:创建与使用
  • ffmpeg实现视频的合成与分割
  • 特征融合魔改,看这一篇就够了
  • Microsoft Edge 五个神级插件
  • vue 中属性值上变量和字符串怎么拼接
  • layui table中的checkbox禁用问题