首页 > 其他分享 >kl 散度计算

kl 散度计算

时间:2023-04-18 10:15:34浏览次数:31  
标签:loss right log 散度 kl reduction 计算 target left

  KL 散度,又叫相对熵,用于衡量两个分布之间的距离。设 $p(x)$, $q(x)$ 是关于随机变量 $x$ 的两个分布,则 $p$ 相对于 $q$ 的 KL 散度为:

    $D_{K L}(p \| q)=E_{p(x)} \log \frac{p(x)}{q(x)}$

  信息论中,熵 $H(P)$ 表示对来自 $P$ 的随机变量进行编码所需的最小字节数,而交叉熵 $H(P, Q)$ 则表示使用基于 $Q$ 的编码对来自 $P$ 的变量进行编码所需的字节数,它也可以作为损失函数,即交叉熵损失函数:

    $H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)$

  因此,KL散度可以认为是使用基于 $Q$ 的编码对来自 $P$ 的变量进行编码所需的“额外"字节数;显然,额外字节数必然非负,当且仅当 $P=Q$ 时,额外字节数为 $0$:

    $\begin{aligned}D_{K L}(p \| q) & =\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right) \\& =-H(p(x))+\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)\right]\end{aligned}$


  CLASS torch.nn.KLDivLoss(size_average=None, reduce=None, reduction='mean', log_target=False)

    $L\left(y_{\text {pred }}, y_{\text {true }}\right)=y_{\text {true }} \cdot \log \frac{y_{\text {true }}}{y_{\text {pred }}}=y_{\text {true }} \cdot\left(\log y_{\text {true }}-\log y_{\text {pred }}\right)$

  To avoid underflow(下溢) issues when computing this quantity, this loss expects the argument input in the log-space. The argument target may also be provided in the log-space

  To summarise, this function is roughly equivalent to computing

if not log_target: # default
    loss_pointwise = target * (target.log() - input)
else:
    loss_pointwise = target.exp() * (target - input)

  and then reducing this result depending on the argument reduction as

if reduction == "mean":  # default
    loss = loss_pointwise.mean()
elif reduction == "batchmean":  # mathematically correct
    loss = loss_pointwise.sum() / input.size(0)
elif reduction == "sum":
    loss = loss_pointwise.sum()
else:  # reduction == "none"
    loss = loss_pointwise

  reduction= “mean” doesn’t return the true KL divergence value, please use reduction= “batchmean” which aligns with the mathematical definition. In a future release, “mean” will be changed to be the same as “batchmean”.

  使用:

kl_loss = nn.KLDivLoss(reduction="batchmean")
# input should be a distribution in the log space
input = F.log_softmax(torch.randn(3, 5, requires_grad=True))
# Sample a batch of distributions. Usually this would come from the dataset
target = F.softmax(torch.rand(3, 5))
output = kl_loss(input, target)
 
kl_loss = nn.KLDivLoss(reduction="batchmean", log_target=True)
log_target = F.log_softmax(torch.rand(3, 5))
output = kl_loss(input, log_target)

 

标签:loss,right,log,散度,kl,reduction,计算,target,left
From: https://www.cnblogs.com/BlairGrowing/p/17328494.html

相关文章

  • java 递归方法 计算1-100之间的所有自然数的和 计算1-100之间所
    packageprectice;/***递归方法的使用**递归方法的定义:一个方法体内调用他自身**①方法递归包含了一种隐式循环,它会重复执行某段代码,但这种重发执行无须循环控制。*②递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似死循环。** 例1:计......
  • 为什么计算机时间要从1970年1月1日开始算起
    今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是1970年1月1号呢?我想大家应该都知道,但是我估计大家几乎大部分都没有想过这个问题。我们就一起来聊聊,这是为什么?1、最懒的解释......
  • 交直流输电网的潮流计算,程序同时有统一法和交替法两种不同的潮流计算方法
    交直流输电网的潮流计算,程序同时有统一法和交替法两种不同的潮流计算方法,只需要改变Method标志位就可以改变方法程序基于11节点的网络开展的交直流潮流计算同时还送一篇基本类似的大lunwen 当然不是完全相同不过有很大的参考价值程序可以正常运行YID:9650672458640760......
  • 含分布式电源的三相潮流计算,程序采用前推回代法开展潮流计算
    含分布式电源的三相潮流计算,程序采用前推回代法开展潮流计算,考虑了三相不平衡的情况,通过求解,得到了三相的电压分布和相角分布,同时,还与单相的结果开展对比YID:4450652403033247......
  • JMeter 逻辑控制器、定时器、分布式、报告、并发数计算方法、性能监控
    一、逻辑控制器可以按照设定的逻辑控制取样器的执行顺序1、IF控制器(没有else,如果有其他分支,则一直加IF控制器即可)控制它下面的测试元素是否运行位置:测试计划---线程组---(右键添加)逻辑控制器---如果(IF)控制器参数: 案例:(用......
  • 计算机算法设计与分析(第5版)PDF
    《计算机算法设计与分析(第5版)》是2018年电子工业出版社出版的图书,作者是王晓东。整本书的结构是:先介绍算法设计策略思想,然后从解决经典算法问题来学习,通过实践的方式去学习算法。网络上许多的算法文章都出自于这本书,该书成为了很多开发者学习算法的典藏,网上一直找不到这本书第五......
  • 湖南省第十八届大学生计算机程序设计竞赛(HNCPC2022)
    发现没有题解,我来随便记录下湖南省第十八届大学生计算机程序设计竞赛(HNCPC2022)VP情况队友卡I占了机时导致罚时有点爆炸,也是策略的失误6题837罚时补到GH就不补个位数题J判断斐波那契区间有没有一段的和等于\(n\)由于\(n\leq10^{15}\)直接暴力即可#include<bits/stdc++.......
  • archery entered FATAL state, too many start retries too quickly
    #################################一、配置文件:supervisord.conf(venv)[root@wy3-db245archery]#catsupervisord.conf[unix_http_server]file=supervisor.sock[supervisord]logfile=logs/supervisord.lognodaemon=false[supervisorctl]serverurl=unix://supervisor.s......
  • 网络安全与网站安全及计算机安全:如何下载到各版本Kali Linux计算机操作系统
    1、KaliLinux2021.2下载http://old.kali.org/kali-images/kali-2021.2/kali-linux-2021.2-installer-amd64.iso2、KaliLinux2021.1下载http://old.kali.org/kali-images/kali-2021.1/kali-linux-2021.1-installer-amd64.iso3、KaliLinux2020.4下载http://old.kali.org/kali-imag......
  • 网络安全与网站安全及计算机安全:如何下载到Windows各版本的Nmap网络扫描神器
    1、Nmap-7.91下载https://nmap.org/dist/nmap-7.91-setup.exe2、Nmap-7.90下载https://nmap.org/dist/nmap-7.90-setup.exe3、Nmap-7.80下载https://nmap.org/dist/nmap-7.80-setup.exe4、Nmap-7.70下载https://nmap.org/dist/nmap-7.70-setup.exe5、Nmap-7.60下载https://nmap.org......