KL散度改写为一个可用于优化的形式
理解 KL 散度及其公式推导过程
在信息论和概率论中,KL散度(Kullback-Leibler Divergence)是衡量两个概率分布之间差异的重要工具。本文将从 KL 散度的定义入手,详细解析其公式来源以及如何将其改写为一个可用于优化的形式。
1. 什么是 KL 散度?
KL 散度是一个非对称的测度,用来衡量一个概率分布 ( p ( x ) p(x) p(x)) 与另一个近似分布 ( q ( x ) q(x) q(x)) 之间的距离。其数学定义为:
D K L ( p ∣ ∣ q ) = ∫ p ( x ) ln p ( x ) q ( x ) d x D_{KL}(p || q) = \int p(x) \ln \frac{p(x)}{q(x)} dx DKL(p∣∣q)=∫p(x)lnq(x)p(x)dx
各符号含义:
- ( p ( x ) p(x) p(x)):目标分布(通常是数据生成的真实分布)。
- ( q ( x ) q(x) q(x)):近似分布(通常是由模型参数 ( θ \theta θ) 决定的分布)。
- ( D K L ( p ∣ ∣ q ) D_{KL}(p || q) DKL(p∣∣q)):衡量 ( p ( x ) p(x) p(x)) 和 ( q ( x ) q(x) q(x)) 差异的值,越接近零表示两个分布越相似。
KL 散度具有以下性质:
- 非负性:( D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p || q) \geq 0 DKL(p∣∣q)≥0),只有当 ( p ( x ) = q ( x ) p(x) = q(x) p(x)=q(x)) 时取等号。
- 非对称性:( D K L ( p ∣ ∣ q ) ≠ D K L ( q ∣ ∣ p ) D_{KL}(p || q) \neq D_{KL}(q || p) DKL(p∣∣q)=DKL(q∣∣p))。
直观理解:
KL 散度可以理解为在分布 ( q ( x ) q(x) q(x)) 下编码 ( p ( x ) p(x) p(x)) 数据的额外开销。它回答了这样一个问题:“如果我们用 ( q ( x ) q(x) q(x)) 来近似 ( p ( x ) p(x) p(x)),会带来多大的信息损失?”
2. KL 散度的分解形式
我们可以将 KL 散度公式展开为以下形式:
D K L ( p ∣ ∣ q ) = ∫ p ( x ) ln p ( x ) d x − ∫ p ( x ) ln q ( x ) d x D_{KL}(p || q) = \int p(x) \ln p(x) dx - \int p(x) \ln q(x) dx DKL(p∣∣q)=∫p(x)lnp(x)dx−∫p(x)lnq(x)dx
两部分含义:
-
第一项:( ∫ p ( x ) ln p ( x ) d x \int p(x) \ln p(x) dx ∫p(x)lnp(x)dx)
- 表示分布 ( p ( x ) p(x) p(x)) 的熵,是一个与 ( q ( x ) q(x) q(x)) 无关的常数。
- 在优化过程中可以忽略,因为它对参数 ( θ \theta θ) 不产生影响。
-
第二项:( − ∫ p ( x ) ln q ( x ) d x -\int p(x) \ln q(x) dx −∫p(x)lnq(x)dx)
- 这一项描述了分布 ( q ( x ) q(x) q(x)) 对目标分布 ( p ( x ) p(x) p(x)) 的拟合程度,是我们关注的重点。
3. 样本均值近似的引入
在实际问题中,我们通常无法直接获得目标分布 ( p ( x ) p(x) p(x)),而是通过有限的训练样本 ( D = { x 1 , x 2 , … , x N } D = \{x_1, x_2, \ldots, x_N\} D={x1,x2,…,xN}) 来对 ( p ( x ) p(x) p(x)) 进行估计。因此,KL 散度公式中的期望 ( ∫ p ( x ) f ( x ) d x \int p(x) f(x) dx ∫p(x)f(x)dx) 可以通过样本均值进行近似:
∫ p ( x ) ln q ( x ) d x ≈ 1 N ∑ i = 1 N ln q ( x i ∣ θ ) \int p(x) \ln q(x) dx \approx \frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) ∫p(x)lnq(x)dx≈N1i=1∑Nlnq(xi∣θ)
这里:
- ( N N N):训练样本的数量。
- ( { x 1 , x 2 , … , x N } \{x_1, x_2, \ldots, x_N\} {x1,x2,…,xN}):从分布 ( p ( x ) p(x) p(x)) 中采样得到的独立同分布数据。
将上述近似代入 KL 散度公式,得到:
D K L ( p ∣ ∣ q ) ≈ − 1 N ∑ i = 1 N ln q ( x i ∣ θ ) + 常数项 D_{KL}(p || q) \approx -\frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) + \text{常数项} DKL(p∣∣q)≈−N1i=1∑Nlnq(xi∣θ)+常数项
4. 忽略常数项后的优化目标
由于第一项 ( ∫ p ( x ) ln p ( x ) d x \int p(x) \ln p(x) dx ∫p(x)lnp(x)dx) 是与参数 ( θ \theta θ) 无关的常数项,在优化过程中可以忽略。因此,KL 散度的优化目标最终简化为:
优化目标 = − 1 N ∑ i = 1 N ln q ( x i ∣ θ ) \text{优化目标} = -\frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) 优化目标=−N1i=1∑Nlnq(xi∣θ)
理解优化目标:
- 这实际上是 负对数似然函数(Negative Log-Likelihood, NLL),即用模型分布 ( q ( x ∣ θ ) q(x|\theta) q(x∣θ)) 拟合训练样本的目标。
为了方便表达,加入一项 ( 1 N ∑ i = 1 N ln p ( x i ) \frac{1}{N} \sum_{i=1}^N \ln p(x_i) N1∑i=1Nlnp(xi)),使得最终结果变为:
D K L ( p ∣ ∣ q ) ≈ 1 N ∑ i = 1 N { − ln q ( x i ∣ θ ) + ln p ( x i ) } D_{KL}(p || q) \approx \frac{1}{N} \sum_{i=1}^N \{-\ln q(x_i|\theta) + \ln p(x_i)\} DKL(p∣∣q)≈N1i=1∑N{−lnq(xi∣θ)+lnp(xi)}
5. 总结与意义
通过以上分析,我们将 KL 散度公式从理论形式逐步推导为一个可以应用于机器学习模型训练的形式。关键步骤包括:
- 利用训练样本的经验分布对积分项进行近似;
- 忽略与参数无关的常数项,聚焦于对分布 ( q ( x ∣ θ q(x|\theta q(x∣θ)) 的优化。
最终的形式表明:最小化 KL 散度实际上等同于最大化模型的对数似然函数(MLE)。
KL 散度的这一性质广泛应用于生成模型(如变分自编码器 VAE)和深度学习优化中,帮助我们更好地逼近目标分布。
6. 代码实现示例
我们还可以通过代码展示如何在实际中实现 KL 散度的计算:
import numpy as np# 假设目标分布 p 和近似分布 q
p = np.array([0.2, 0.5, 0.3]) # 目标分布
q = np.array([0.3, 0.4, 0.3]) # 近似分布# 计算 KL 散度
kl_divergence = np.sum(p * np.log(p / q))
print(f"KL散度: {kl_divergence:.4f}")
运行结果可以帮助我们直观理解 KL 散度的计算和其在概率分布拟合中的重要性。
希望这篇文章对你理解 KL 散度的公式推导过程有所帮助。
后记
2024年11月27日15点32分于上海。
相关文章:
KL散度改写为一个可用于优化的形式
理解 KL 散度及其公式推导过程 在信息论和概率论中,KL散度(Kullback-Leibler Divergence)是衡量两个概率分布之间差异的重要工具。本文将从 KL 散度的定义入手,详细解析其公式来源以及如何将其改写为一个可用于优化的形式。 1. 什…...
Java代码操作Zookeeper(使用 Apache Curator 库)
1. Zookeeper原生客户端库存在的缺点 复杂性高:原生客户端库提供了底层的 API,需要开发者手动处理很多细节,如连接管理、会话管理、异常处理等。这增加了开发的复杂性,容易出错。连接管理繁琐:使用原生客户端库时&…...
【Linux】Make/Makefile
这个3/4行的语法和1/2行是一样的。也是依赖关系和依赖方法。 make命令扫描makefile文件时,从上向下扫描,默认形成一个目标文件。 指定make clean的时候才回去执行对应的清除。 为什么要给我们的clean.PHONY:clean声明它是伪目标呢? PHONY类…...
C++练级计划->《多态》虚函数表,菱形继承多态
目录 什么是多态? 多态的条件 虚函数: 虚函数的重写: 协变 析构函数的重写 C11 final 和 override final: override: 总结: 三重对比:重载重写重定义对比 抽象类 多态的原理 虚函数…...
OkHttp3 - 2. OkHttp的核心组件与架构
1 OkHttp的工作原理 OkHttp3 的核心设计遵循以下原则: 请求与响应的分离:通过 Request 和 Response 对象解耦请求构建与结果处理。异步与同步支持:使用 Call 对象管理请求,可以同步或异步执行。高效连接复用:通过连接…...
异或操作解决一些问题
前提: 异或操作符合交换律,结合律(因为其根本上来抽象理解,就是查看所有项二进制数相同位是否有奇数个1,对运算结果二进制数而言,没有该位为0,有该位为1,与顺序无关)。 …...
操作系统之输入输出
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
Centos 安装 Node.js 和 npm
方法2:使用 NVM(Node Version Manager)安装 安装 NVM curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 重新加载配置 source ~/.bashrc 安装最新的 LTS 版本的 Node.js nvm install --lts 验证安装…...
C语言——指针初阶(一)
目录 一.什么是指针??? 指针是什么? 指针变量: 总结: 总结: 二.指针和指针类型 指针-整数: 总结: 指针的解引用 总结: 三.野指针 如何规避野指针 往期…...
React Native 原生开发指南
写在前面 React Native (RN) 是一个用于构建跨平台移动应用的框架。它允许开发者使用 JavaScript 和 React 来编写应用程序,并将其转换为原生代码。虽然 RN 提供了许多内置的组件和 API,但有时候你可能需要访问原生平台的特定功能或性能优化。为此&…...
【前端】JavaScript中的柯里化(Currying)详解及实现
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是柯里化?💯柯里化的特点💯柯里化的简单示例💯通用的柯里化实现💯柯里化让代码更易读的原因💯…...
解决 docker 部署 vsftpd 速度慢问题
解决 docker 部署 vsftpd 速度慢问题 Docker 部署 ftp version: 3.8services:ftps:image: fauria/vsftpdcontainer_name: my-ftpsenvironment:- FTP_USERyourusername- FTP_PASSyourpassword- PASV_ADDRESS192.168.0.123 # 使用环境变量或直接指定IP地址- PASV_MIN_PORT4900…...
Java基础夯实——2.9 多线程如何共享数据
在 Java 多线程编程中,共享数据通过以下几种方式实现: 1. 使用共享对象 多个线程可以通过引用同一个对象来实现数据共享。例如: class SharedData {private int count;public synchronized void increment() {count;}public synchronized …...
【Leetcode Top 100】234. 回文链表
问题背景 给你一个单链表的头节点 h e a d head head,请你判断该链表是否为 回文链表(回文 序列是向前和向后读都相同的序列)。如果是,返回 t r u e true true;否则,返回 f a l s e false false。 数据…...
GitLab指定用户分配合并权限
进入项目 -》 Project Settings Repository -》展开 Protected branches -》 添加要保护的分支,设置角色 管理用户角色权限 查看到不同用户的角色,一般设置Developer只有Merger Request权限,Maintainer还有Merge审批权限 GitLab 中的权限…...
五,[GXYCTF2019]Ping Ping Ping1
进入靶场,有提示 我们在url试着输入本地IP,返回了ping命令 既然要在url处传参,那就用postman,再输入ip127.0.0.1 & ls,试着列出目录内容 ok,好像是个脏话,它过滤了空格 试着穿越又看到了脏话࿰…...
基于STM32的智能无人机自主飞行与目标识别系统设计
目录 引言系统需求分析 2.1 功能需求 2.2 硬件需求 2.3 软件需求系统设计 3.1 总体架构 3.2 各模块设计系统实现 4.1 硬件实现 4.2 软件实现系统调试与优化总结与展望 1. 引言 随着无人机技术的快速发展,无人机在军事侦察、环境监测、物流配送等领域的应用逐渐增多…...
C 语言数组与函数:核心要点深度剖析与高效编程秘籍
我的个人主页 我的专栏:C语言,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 引言数组基础 2.1 数组的定义与初始化 2.2 一维数组的基本操作 2.3 二维数组及其应用 2.4 数组与指针的关系函数基础 3.1 函数的定义与调用 3.2…...
汽车轮毂结构分析有哪些?国产3D仿真分析实现静力学+模态分析
本文为CAD芯智库原创,未经允许请勿复制、转载! 之前分享了如何通过国产三维CAD软件如何实现「汽车/汽配行业产品设计」,兼容NX(UG)、Creo(Proe),轻松降低企业上下游图纸交互成本等。…...
解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)
报错: [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是: from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…...
【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决
提示:【若依ruoyi Vue前端线上个人服务器部署】以及常见报错问题解决 文章目录 前言一、若依ruoyi Vue前端部署常见两种错误1、404问题2、找不到….模块 二、使用步骤(正式开始)1.修改vue.config.js中的publicPath属性。2.修改router/index.j…...
Python学习第十天--处理CSV文件和JSON数据
CSV:简化的电子表格,被保存为纯文本文件 JSON:是一种数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,以JavaScript源代码的形式将信息保存在纯文本文件中 一、csv模块 CSV文件中的每行代表电…...
python基础(一)
python语言特点 解释型语言代码执行过程中通过解释器将代码转换为机器语言,并立即执行;编译型语言执行前需要经过编译整个代码文件为机器语言的可执行文件,然后执行能找出大部分错误错误处理解释型语言在运行时发现错误,编译型语…...
go-carbon v2.5.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。 carbon 目前已捐赠给 dromara 开源组织,已被 awesome-go 收录&am…...
守护进程
目录 守护进程 前台进程 后台进程 session(进程会话) 前台任务和后台任务比较好 本质 绘画和终端都关掉了,那些任务仍然在 bash也退了,然后就托孤了 编辑 守护进程化---不想受到任何用户登陆和注销的影响编辑 如何…...
学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)
前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…...
【接口自动化测试】一文从0到1详解接口测试协议!
接口自动化测试是软件开发过程中重要的环节之一。通过对接口进行测试,可以验证接口的功能和性能,确保系统正常运行。本文将从零开始详细介绍接口测试的协议和规范。 定义接口测试协议 接口测试协议是指用于描述接口测试的规范和约定。它包含了接口的请求…...
安全设备-日志审计-系统安装部署配置
3.1 系统安装部署概述 通过系统初始化安装部署,可实现对系统的基础管理工作。系统安装基本部署涉及功能有时间配置、 资产组、资产、用户组、用户、时间配置等) 3.2 系统安装部署配置举例 3.2.1 用户场景 本阶段进行系统安装,进行相关设…...
【ArcGIS Pro】实现一下完美的坐标点标注
在CAD里利用湘源可以很快点出一个完美的坐标点标注。 但是在ArcGIS Pro中要实现这个效果却并不容易。 虽然有点标题党,这里就尽量在ArcGIS Pro中实现一下。 01 标注实现方法 首先是准备工作,准备一个点要素图层,包含xy坐标字段。 在地图框…...
Unity项目性能优化列表
1、对象池 2、检查内存是否泄露。内存持续上升(闭包、委托造成泄露) 3、检查DrawCall数量,尽量减少SetPassCall 4、尽量多的利用四种合批 动态合批(Dynamic Batching)静态合批(Static Batching)GPUInstancingSRP Batcher 动态合批消耗内存把多个网格组合在一起合并…...
网站滚动的图片是怎么做的/长沙seo免费诊断
导语大家好,我是智能仓储物流技术研习社的社长,你的老朋友,老K。 本文来自高工产研研究。仅供参考。剑蓝错知识星球 * 原创电子书 * 深海社区 * 微信群 知名企业-智能仓储物流技术研习社-建立智能物流系统甲方、集成商与周边配套商共同技术语…...
哈尔滨免费建站模板/个人网站注册平台
一.角色以及入口: 角色:系统管理员,开发人员 入口:服务管理--修改服务 二.页面元素检查: 对页面初始化的检查,即页面打开后,对页面不做任何操作时的元素检查。(破页;js错;demo对比等…...
广西高端网站建设公司/百度收录提交工具
1、使用printf应当说是类型不安全的。所以才引入了C的流输入输出。 比如: #include "stdint.h" #include "iostream" using namespace std; int main() { int64_t a 1; int b 2; uint32_t uin 1; printf("%p %p\n", &a, &…...
门户网站建设方法/短视频seo询盘获客系统
芯片支持库(CSL)提供了一个用于配置和控制片上外设的C语言接口。它有各个分立的模块组成,并被编译成为库文件。每个模块对应一个单独的外设,除了个别提供通用程序支持的模块。使用CSL可以方便片上外设的使用,缩短开发周…...
专业网站建设网页推广/百度搜索风云榜排名
lsof -i :80 转载于:https://www.cnblogs.com/iosdev/p/3352067.html...
南宁市保障住房建设管理服务中心网站/360站长工具seo
1 异常 异常:Java代码在运行时期发生的问题就是异常。 1.1 异常的继承体系 Throwable:是所有错误和异常的超类。 Error:错误类。 Exception:编译期异常,进行编译Java程序时出现的问题。 RuntimeException…...