生成对抗网络(GANs)系列:KL散度和JS散度

2023-10-19 11:50

本文主要是介绍生成对抗网络(GANs)系列:KL散度和JS散度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.香农信息量、信息熵和交叉熵

只考虑连续型随机变量的情况。设p为随机变量X的概率分布,即p(x)为随机变量X在X=x处的概率密度函数值,随机变量X在x处的香农信息量定义为:

其中对数以2为底,这时香农信息量的单位为比特。香农信息量用于刻画消除随机变量X在x处的不确定性所需的信息量的大小。如随机事件“中国足球进不了世界杯”不需要多少信息量(比如要不要多观察几场球赛的表现)就可以消除不确定性,因此该随机事件的香农信息量就少。再比如“抛一个硬币出现正面”,要消除它的不确定性,通过简单计算,需要1比特信息量,这意味着随机试验完成后才能消除不确定性。

刚才定义了随机变量在一个点处的香农信息量,那么如何衡量随机变量X(或整个样本空间)的总体香农信息量呢?下面就要引出随机变量X的信息熵的概念,或概率分布p的信息熵。信息熵H(p)是香农信息量-logp(x)的数学期望,即所有X=x处的香农信息量的和,由于每一个x的出现概率不一样(用概率密度函数值p(x)衡量),需要用p(x)加权求和。因此信息熵是用于刻画消除随机变量X的不确定性所需要的总体信息量的大小。其数学定义如下:

交叉熵是什么呢?

假设q(x)是用来拟合p(x)的概率分布,x属于p的样本空间,交叉熵用于衡量q在拟合p的过程中,用于消除不确定性而充分使用的信息量大小(理解为衡量q为了拟合p所付出的努力,另外注意交叉熵定义里的“充分使用”和信息熵定义里的“所需”的区别,“充分使用”不一定能达到全部,“所需”是指全部)。由于在每一个点X=x处q的香农信息量为-logq(x),也就是在点X=x处,q消除不确定性而充分使用的信息量为-logq(x)(理解为衡量q在X=x处为了拟合p所作的努力),那么就可以计算出在整个样本空间上q消除不确定性而充分使用的总体信息量,即-logq(x)的数学期望,由于每个x的权重为p(x),因此交叉熵H(p,q)为:

2.KL散度

两个概率分布p和q的KL散度(Kullback–Leibler divergence)也称为相对熵,用于刻画概率分布q拟合概率分布p的程度。在生成对抗网络里,p为真实数据的概率分布,q为随机噪声生成数据的概率分布,对抗的目的是让q充分拟合p。在q拟合概率分布p的过程中,如果q完全拟合p,自然有H(p)=H(p,q),如果q拟合p不充分,自然产生信息损耗H(p)-H(p,q),整个信息损耗就是p和q的KL散度。因此p和q的KL散度的定义如下:

因此散度D(p||q)为信息熵H(p)与交叉熵H(p,q)的差,衡量q拟合p的过程中产生的信息损耗,损耗越少,q拟合p也就越好。很明显散度是不对称的,并不是p和q的距离。散度一些基础性质在这里不再详细罗列。

3.JS散度

KL散度的缺点是它不是距离、不对称。因此引进JS散度的概念。JS散度的定义如下:

由定义可以看出,JS散度是对称的,可以用于衡量两种不同分布之间的差异。JS散度用于生成对抗网络的数学推导上。

这篇关于生成对抗网络(GANs)系列:KL散度和JS散度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/239568

相关文章

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

使用Node.js和PostgreSQL构建数据库应用

《使用Node.js和PostgreSQL构建数据库应用》PostgreSQL是一个功能强大的开源关系型数据库,而Node.js是构建高效网络应用的理想平台,结合这两个技术,我们可以创建出色的数据驱动... 目录初始化项目与安装依赖建立数据库连接执行CRUD操作查询数据插入数据更新数据删除数据完整示例与最佳

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Vue3 如何通过json配置生成查询表单

《Vue3如何通过json配置生成查询表单》本文给大家介绍Vue3如何通过json配置生成查询表单,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录功能实现背景项目代码案例功能实现背景通过vue3实现后台管理项目一定含有表格功能,通常离不开表单

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W