KL divergence

Kullback-Leibler divergence

 

形式:

{\displaystyle D_{\text{KL}}(P\parallel Q)=\sum _{x\in {\mathcal {X}}}P(x)\log \left({\frac {P(x)}{Q(x)}}\right).}

{\displaystyle D_{\text{KL}}(P\parallel Q)=\int _{-\infty }^{\infty }p(x)\log \left({\frac {p(x)}{q(x)}}\right)\,dx}

性质:

非负

P=Q时,D[P||Q]=0

不对称性:D(P||Q)≠D(Q||P)

 

自信息:符合分布 P 的某一事件 x 出现,传达这条信息所需的最少信息长度为自信息,表达为

熵:从分布 P 中随机抽选一个事件,传达这条信息所需的最优平均信息长度为香农熵,表达为

交叉熵:用分布 P 的最佳信息传递方式来传达分布 Q 中随机抽选的一个事件,所需的平均信息长度为交叉熵,表达为

KL 散度:用分布 P 的最佳信息传递方式来传达分布 Q,比用分布 Q 自己的最佳信息传递方式来传达分布 Q,平均多耗费的信息长度为 KL 散度,表达为 D_p(Q) 或 D_KL(Q||P),KL 散度衡量了两个分布之间的差异。

KL散度的前一项是选择项,它会对两个分布的差异性进行选择

 

当一个分布很复杂,如上图的P(Z),我们用一个简单的分布如高斯分布Q(Z)去拟合的时候,我们更愿意把Q放在前面,这样至少能拟合P中的一部分。

 

 

VAE推导:可以看出,从原始的基于最大化数据分布的直观理解进行推导(第一行)和直接写出ELBO(最后一行)的结果是一样的(第七行)。但直接写成ELBO的形式,在优化上并不直观,但写成第七行的形式,通过设计encoder和decoder网络,可以比较直接地进行优化。VAE可以说是一个variational inference和deep learning一个非常巧妙的结合。除了VAE,我印象里理论和实践结合的比较好的就是LDA了。

 

转载于:https://www.cnblogs.com/huangshiyu13/p/10766223.html

### KL 散度作为损失函数 在机器学习中,KL散度可以作为一种有效的损失函数来评估预测的概率分布与真实标签之间的差异。具体来说,在训练过程中,模型试图最小化由KL散度定义的距离,从而使得预测的结果尽可能接近实际的数据分布。 对于二元分类或多类分类问题而言,当目标变量遵循某种已知的概率分布时,可以通过优化KL散度来调整参数,进而提高模型性能。值得注意的是,尽管KL散度本身不是严格意义上的对称距离指标,但在很多应用场景下仍然能够很好地发挥作用[^1]。 #### 计算方法 给定两个离散型随机变量\(P\)和\(Q\)分别代表真实的类别分布以及模型输出的估计分布,则它们之间KL散度可按照如下方式计算: \[D_{\mathrm{KL}}(P \parallel Q)=\sum _i P(i)\log {\frac {P(i)}{Q(i)}}.\] 这里需要注意的是,如果某些情况下存在零概率项的话,可能会导致上述表达式的分母变为0;因此实践中通常会对原始公式做一些修改以避免这种情况的发生,比如加入平滑因子或将所有可能出现的状态都考虑进去[^4]。 ```python import numpy as np def kl_divergence_loss(y_true, y_pred): """ Calculate Kullback-Leibler divergence between true and predicted distributions. Parameters: y_true (array-like): True probability distribution. y_pred (array-like): Predicted probability distribution. Returns: float: Value of KL Divergence Loss. """ epsilon = 1e-10 # Small constant to prevent division by zero y_true = np.clip(y_true, epsilon, None) y_pred = np.clip(y_pred, epsilon, None) return np.sum(y_true * np.log(y_true / y_pred)) ``` 此代码片段展示了如何实现一个简单的KL散度损失函数,其中包含了防止数值不稳定性的措施——通过`np.clip()`函数确保输入不会包含过小或负数的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值