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

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 散度具有以下性质:

  1. 非负性:( 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)) 时取等号。
  2. 非对称性:( 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)dxp(x)lnq(x)dx

两部分含义:
  1. 第一项:( ∫ 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 θ) 不产生影响。
  2. 第二项:( − ∫ 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)dxN1i=1Nlnq(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=1Nlnq(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=1Nlnq(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) N1i=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=1N{lnq(xiθ)+lnp(xi)}

5. 总结与意义

通过以上分析,我们将 KL 散度公式从理论形式逐步推导为一个可以应用于机器学习模型训练的形式。关键步骤包括:

  1. 利用训练样本的经验分布对积分项进行近似;
  2. 忽略与参数无关的常数项,聚焦于对分布 ( 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)详解及实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是柯里化?💯柯里化的特点💯柯里化的简单示例💯通用的柯里化实现💯柯里化让代码更易读的原因&#x1f4af…...

解决 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,好像是个脏话,它过滤了空格 试着穿越又看到了脏话&#xff0…...

基于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…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...