【机器学习】 贝叶斯理论的变分推理

许志永

一、说明

        贝叶斯原理,站在概率角度上似乎容易解释,但站在函数立场上就不那么容易了;然而,在高端数学模型中,必须要在函数和集合立场上有一套完整的概念,其迭代和运算才能有坚定的理论基础。

二、贝叶斯概念的难处

2.1 并不简单

         贝叶斯定理看起来天真地简单。但是,分母是在 z 上积分的分区函数,就不简单了。一般来说,它不能通过分析来解决。即使我们可以对已知分布族的先验和可能性进行建模,后验 p(z|x)总体上仍然难以解决。

        让我们用一个简单的例子来演示它的复杂性。我们使用多项式分布来选择 K 正态分布之一。然后,我们使用选定的正态分布对 xi 进行采样。如图所示,后部的复杂性已经无法控制。

从源代码修改

另一种方法是近似解。在 ML 中,有两种主要的近似方法。它们是采样和变分推理。在本文中,我们将讨论后者。

变分推理中,给定观测值 X,we 为潜在变量 z 构建概率模型 q,即 q ≈pz|X)。

上面的边际 pX) 可以计算为:

在变分推理中,我们避免计算边际 pX)。这种分区功能通常很讨厌。相反,我们选择一些易于处理的分布族q来近似p。

我们将 q 与样本数据拟合,以了解分布参数 θ。当我们为 q 做出选择时,我们确保它易于操作。例如,它的期望和归一化因子可以直接从分布参数计算。由于这个选择,我们可以用 q 代替 p 进行任何推断或分析。

2.2 概述

        虽然这个概念听起来很简单,但细节却并非如此。在本节中,我们将详细介绍著名的主题建模算法(称为潜在狄利克雷分配(LDA)的主要步骤。我们希望这能为您提供一个顶级概述,然后再深入研究细节和证明。

        以下是 LDA 的图形模型。

        该模型包含变量 α、β、θ、z 和 w。不要担心变量的含义,因为它在我们的上下文中并不重要。 w 是我们的观察结果。 θ 和 z 是我们想要发现的隐藏变量(潜在因子)。 α 和 β 在我们的讨论中是固定且已知的。图形模型中的箭头表示依赖性。例如,w 仅取决于 z 和 β。因此,p(w|α, β, θ, z) 可以简化为 p(w|z, β)。

        与许多概率模型一样,我们感兴趣的是在给定已知输入的情况下对联合分布 p(w, θ, z |α, β) 进行建模。我们应用链式法则来扩展联合概率,使其仅由单个变量的分布组成。然后,我们应用图中的依赖关系来简化每一项。我们得到:

        基于主题建模问题,θw可以用狄利克雷分布建模,z可以用多项式分布建模。我们的目标是用 近似所有隐藏变量 θ 和 z

        我们定义了一个目标来最小化 p 和 q 之间的差异。这可以通过最大化下面的ELBO(证据下限)来完成。

        即使不是那么明显,当 p 和 q 相同时,ELBO 会最大化。然而,联合概率qθ, z)仍然很难建模。我们将它分解并近似为 q(θ z) ≈ q(θ) qz)。即使它可能不完美,经验结果通常也是好的。 z 由多个变量 z₁、z₂、z₃、... 组成。并且可以分解为单个组件,如 Qz₁Qz₂)...因此,的最终模型为:

        根据主题建模问题,我们可以对具有狄利克雷分布的 θ 和具有多项分布的 zi 进行建模,并使用 γ 和 φi 对相应的分布参数进行建模。 这是一个伟大的里程碑,因为我们设法用单个隐藏变量的分布对复杂模型进行建模,并为每个隐藏变量选择一个可处理的分布。剩下的问题是如何学习γ和φi。让我们回到ELBO目标:

        在许多 ML 问题中,为了有效地对问题进行建模,隐藏变量通常相互依赖。我们无法一步优化它们。相反,我们一次优化一个变量,同时保持其他变量固定。因此,我们轮流旋转隐藏变量以交替步骤进行优化,直到解决方案收敛。在 LDA 中,z 和 θ 分别在下面的步骤 5 和 6 中进行优化。

        剩下的主要问题是如何在修复其他参数的同时优化变分参数。在每次迭代中,目标隐变量 z的最佳分布为:

        分子对除 zk 之外的所有隐藏变量进行积分。

        听起来我们正在重新引入邪恶的双胞胎:正常化因素。尽管如此,这不会成为问题。我们选择 q 作为可处理的分布。它们的期望和归一化可以从分布参数分析中得出。

        等式中的分子值得更多解释。对于正则期望 E[f(x₁, x₂, x₃)],我们评估所有变量的 f

        但是对于我们的分子,我们省略了目标变量。

即,

-k 是以下的缩写:

        但是,我们不会在计算期望时执行积分。我们对 qi 的选择使我们能够简化 ELBO 最大化中的许多计算。让我们更详细地介绍一下。

在 LDA 中,q 近似为:

        其中 θ  z 分别由 γ 和 φ 建模。我们的计算涉及:

  1. 将 ELBO 扩展到单个变量
  2. 计算预期值
  3. 优化 ELBO

        展开 ELBO

        使用图形模型和链式规则,我们将ELBO扩展为:

        计算预期值

        我们不想用细节让您不知所措。因此,我们仅演示如何仅计算第一个项的期望。首先,θ 由参数为 α 的狄利克雷分布建模。

接下来,我们将计算其期望值 w.r.t. q

        这里没有证明,E[log θi] 可以直接从γ计算出来。

        我们深思熟虑地选择 q,通常使用基于问题陈述中隐藏变量属性的已知分布。数学家已经分析解决了这些期望表达式。我们甚至不担心归一化因素。

        优化 ELBO

        在我们扩展 ELBO 中所有剩余的项后,我们可以将其区分为 w.r.t. γiγ 中的第 i 个参数)和φ ni(第 n个单词中的第 i参数)。 通过将导数设置为零,我们找到了γi的最佳解:

φni 的最佳解决方案将是:

由于γφ ni之间存在依赖关系,我们将以交替的步骤迭代优化参数。

Source

以下是概述。对于其余的文章,我们将介绍变分推理、证明和详细示例中的一些主要设计决策。

三、KL-背离

        为了找到q,我们将问题变成优化问题。我们计算 q 的最佳参数,以最小化目标 p* 的反向 KL 发散。

        如前所述,KL-发散不是对称的。q的最优解只有在q复杂到足以对p进行建模时,KLp,q)和KLq,p)的最优解才会相同。这就提出了一个重要的问题,即当KL-发散KL(p,q)与p的期望更匹配时,为什么使用反向KL-散度KLq,p)。例如,当使用高斯分布对蓝色双峰分布进行建模时,反向KL散度解将是图中的红色曲线(b)或(c)。两种解决方案仅涵盖一种模式。

        但是,(a) 中的 KL 散度解将覆盖大部分原始分布,其均值将与 p* 的均值匹配。

      矩(包括均值和方差)描述了分布。KL-散度解是力矩投影(m-投影)。它将 q 与 p 的矩匹配。如果我们匹配所有矩参数,它们将完全相同。如果 q 使用指数分布族,我们可以使用 KL-散度将 q 的矩与 p* 精确匹配。这里没有太多解释,他们预期的足够统计数据将匹配。

        (即 p=q)反向KL散度是一种信息投影(i-投影),不一定产生正确的时刻。由此判断,我们可以得出结论,m投影是优越的。但是,如果一个机制可以完全匹配p*,那么这样的机制也需要完全理解p*,这首先是困难的。所以听起来并不像它可能的那样好。

        在变分推理中,使用 i 投影代替。为了证明我们的选择是合理的,让我们提出一些我们想要遵循的约束。首先,我们要避免分区函数的计算,计算困难。其次,我们希望避免计算pz),因为我们需要分区函数来计算它。因此,让我们为 p 定义一个新术语,即非规范化分布,它将分区函数分开。

        让我们将新定义代入反向KL背离。

        Z 不会改变 w.r.t. q。当我们最小化反向KL发散时,可以忽略它。

        这是个好消息。在图形模型中,非规范化的 是使用因子明确定义的。它们易于计算,并且 R.H.S. 中的目标不需要任何规范化。使用反向KL散度是一个很好的折衷方案,即使在某些情况下它可能并不完美。对于 q 与 p* 相比过于简单,结果可能会造成伤害。然而,变异推断通常显示出良好的经验结果。接下来,让我们看看如何优化反向KL发散。

四、证据下限

        让我们在下面介绍凸函数 和称为证据下界 (ELBO) 的项的詹森不等式

该图源自维基百科

        ELBO 实际上是在最后一步中对凹函数应用詹森不等式后的证据的下限(log px))。

从源代码修改

        ELBO与KL背离有关:

从源代码修改

        现在让 Z 成为边际 px)。不要将 Z 与隐藏变量 z 混淆。不幸的是,我们需要用大写字母重载符号,因为 Z 在其他文献中经常使用。

        Z 不会改变我们对 q 的建模方式。所以从优化 q 的角度来看,log Z 是一个常数。

        因此,最小化KL发散度将与最大化ELBO相同。直观地说,给定任何分布 q,ELBO 始终是 log Z 的下限。但是,当 q 等于 p* 时,差距减小到零。因此,最大化ELBO将KL发散度降低到零。

通过最大化证据下限ELBO,我们最小化了两个数据分布的差异。

        让我们将 ELBO 概括为

其中 Z 现在是一般归一化因子。

同样,如上所示,最大化ELBO与最小化KL散度相同,因为Z不会因我们对q进行建模的方式而变化。

这比KL背离带来了一个主要优势。ELBO 适用于归一化和非归一化分布,无需计算常规 KL 散度定义所需的 Z

ELBO 和图形模型(可选)

让我们演示如何使用图形模型在 ELBO 中计算非归一化分布。联合概率分布可以通过马尔可夫随机场建模为:

我们将ELBO中的非规范化p替换为上面φ因子。

因此,最小化KL发散等效于最小化吉布斯自由能。我们称之为自由能,因为它是我们可以通过改变配置来操纵的能量的一部分。如果我们使用能量模型扩展模型,则可以进一步扩展此模型。

五、平均场变分推理

(信用:证明和方程起源于这里。

        不要太快开心。我们错过了变分推理中重要而困难的一步。q的选择是什么?当 q 包含多个变量时,即 q(z) = q(z₁, z₂, z₃, ...),这可能非常困难。为了进一步降低复杂性,平均场变分推理做出了一个大胆的假设,即分布可以分解为分布,每个分布仅涉及一个隐藏变量。

然后,我们根据问题使用可处理的分布对每个分布进行建模。我们选择的分布将易于分析。例如,如果 z₁ 是多项式,我们使用多项式分布对其进行建模。如前所述,许多隐藏变量相互依赖。因此,我们将使用坐标下降来优化它。我们将隐藏变量分组为每个包含自变量的组。我们交替旋转和优化每组变量,直到解决方案收敛。

所以最后一个难题是如何在每个迭代步骤中优化qizi)。我们将首先介绍几个概念。当 x 不依赖于 z 时,概率链式规则可以写成如下:

其次,由于我们将qz)建模为独立分量qizi),我们可以将熵建模为单个熵的总和。

有了这些信息,我们扩展了ELBO

zj 在 中的排序是非常随意的。在下面的等式中,我们使 zk 成为最后一个元素。并将与 z 无关的所有内容分组到一个常量中。因此,等式变为

我们进一步删除与zk无关的项,然后以积分形式表示。

我们取导数并将其设置为零以找到优化的分布 qzk)。

最佳解决方案是

所有不断吸收并转化为Z'。我们可以用贝叶定理扩展分子。同样,相应的分母将与 zk 无关,因此被吸收为归一化因子。

这与我们在概述部分得到的等式相同。

还有其他方法可以找到优化的 q。让我们把所有内容都放在MRF的上下文中。如前所述,我们的目标是

让我们用 qx) 将其扩展为 q(x₁) qx₂) qx₃ ...

这个方程可以用类似于MAP推理的线性代数来解决。但是我们不会在这里详细说明解决方案。

六、回顾

        我们知道分布 p 的方程。但是分析或操纵它是令人讨厌的。

        因此,根据观察结果,我们将为每个单独的模型参数使用可处理的 qi 对 p 进行建模。例如

        为了最小化 p 和 q 之间的差异,我们最大化下面的 ELBO。

在每个迭代步骤中,相应模型参数 zj 的最佳解为:

由于每个q都被选择为易于处理的,因此可以通过分析方式找到期望值或归一化因子(如果需要),并且非常简单。

七、示例

(图片来源:这个例子和一些方程都来自这里。

        让我们用一个例子来演示变化推断。考虑下面的分布 px):

        其中μ(平均值)和τ(精度)分别由高斯分布和伽马分布建模。因此,让我们用 q(μ, τ) 近似 p(x, μ, τ)。通过方差推断,我们可以从数据中学习这两个参数。每次迭代中 μ  τ 的最优值将满足

        因此,让我们首先用链式规则扩展 px, μ, τ),然后从问题定义中扩展 的定义来评估它。

        我们的下一个任务是使用下面的平均场变分推理通过 q 近似 p

        现在,应用平均场变化推断,我们得到:

        对数 q 是二次的。所以q是高斯分布的。

        我们的下一个任务是将上面的方程与高斯定义进行匹配,以找到参数 μ 和 τ τ ⁻¹ = σ²)。

        因此,μ 和 τ 是:

        如前所述,计算归一化 Z 通常很困难,但对于这些众所周知的分布来说并非如此。如果需要,可以通过分布参数计算归一化因子。我们需要专注于查找这些参数。

        我们在计算日志 qτ) 时重复相同的过程。

        τ 是伽马分布,因为上面的分布仅依赖于 τ 和 对数 τ 伽马分布的相应参数 a 和 b 为:

        现在,我们有两个可处理的分布,我们希望找到它们的参数μτ

同样,让我们将一些术语重写为期望表单。

如前所述,数学已经通过分析解决了这些期望项。我们甚至懒得计算任何归一化因子。

μ a 可以立即解决。但是 τ 依赖于 bb 依赖于 τ

因此,我们将交替步骤迭代地解决它们。

  1. 将 τn 初始化为某个任意值。
  2. 用上面的等式求解 bn
  3. 用上面的方程求解 τn
  4. 重复最后两个步骤,直到值收敛。

八、抽样与变分推理

        抽样方法存在一个主要缺点。我们不知道目前的采样解决方案与实际情况有多远。我们希望,如果我们进行足够的采样,解决方案是接近的,但没有定量测量。为了测量这样的距离,我们需要一个目标函数。由于变分推理被表述为优化问题,因此我们确实对进展有一定的指示。但是,变分推理近似于解,而不是找到确切的解。事实上,我们的解决方案不太可能是准确的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/78558.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小研究 - 基于 MySQL 数据库的数据安全应用设计(一)

信息系统工程领域对数据安全的要求比较高,MySQL 数据库管理系统普遍应用于各种信息系统应用软件的开发之中,而角色与权限设计不仅关乎数据库中数据保密性的性能高低,也关系到用户使用数据库的最低要求。在对数据库的安全性进行设计时&#xf…

华为OD机试真题 Java 实现【快速人名查找】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

促科技创新:高德数据优化篇之OceanBase最佳实践

本文作者: 振飞(高德地图总裁) 炳蔚(高德技术服务平台负责人) 福辰(高德服务端架构师) 背景 高德成立于2002年,是中国领先的移动数字地图、导航及实时交通信息服务提供商&#xff0c…

轻量级容器管理工具 Containerd

1. 轻量级容器管理工具 Containerd 2. Containerd的两种安装方式 3. Containerd容器镜像管理 4. Containerd数据持久化和网络管理 1. 前言 早在2016年3月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底…

Stable Diffusion 硬核生存指南:WebUI 中的 CodeFormer

本篇文章聊聊 Stable Diffusion WebUI 中的核心组件,强壮的人脸图像面部画面修复模型 CodeFormer 相关的事情。 写在前面 在 Stable Diffusion WebUI 项目中,源码 modules 目录中,有一个有趣的目录叫做 CodeFormer,它就是本文的…

C++ 学习系列 1 -- 左值、右值与万能引用

1. 何为左值&#xff1f;何为右值&#xff1f; 简单的说&#xff0c;左值可以放在等号的左边&#xff0c;右值可以放在等号的右边。 左值可以取地址&#xff0c;右值不能取地址。 1.1 左值举例&#xff1a; 变量、函数或数据成员返回左值引用的表达式 如 x、x 1、cout <…

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…

HIVE学习

1.什么是HIVE 1.HIVE是什么? Hive是由Facebook开源&#xff0c;基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能。 大白话: HIVE就是一个类似于Navicat的可视化客户端, 2.HIVE本质 Hive是一个Hadoop客户端&a…

动手学深度学习—深度学习计算(层和块、参数管理、自定义层和读写文件)

目录 1. 层和块1.1 自定义块1.2 顺序块1.3 在前向传播函数中执行代码 2. 参数管理2.1 参数访问2.1.1 目标参数2.1.2 一次性访问所有参数2.1.3 从嵌套块收集参数 2.2 参数初始化2.2.1 内置初始化2.2.2 自定义初始化 2.3 参数绑定 3. 自定义层3.1 不带参数的层3.2 带参数的层 4. …

AI介绍——chat gpt/文心一言/claude/bard/星火大模型/bing AI

AI体验 1. AI 介绍&#xff08;注册和使用&#xff09;1.1 Chat GPT1.2 文心一言1.3 Slack 上的 Claude1.3.1 Claude 介绍1.3.2 Claude 使用 1.4 Google的Bard1.4.1 Bard 介绍1.4.2 Bard 使用 1.5 科大讯飞的星火大模型1.5.1 星火大模型 介绍1.5.2 星火大模型 使用 1.6 new bin…

【100天精通python】Day23:正则表达式,基本语法与re模块详解示例

目录 专栏导读 1 正则表达式概述 2 正则表达式语法 2.1 正则表达式语法元素 2.2 正则表达式的分组操作 3 re 模块详解与示例 4 正则表达式修饰符 专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 正则表达式概述 python 的…

使用 GitHub Copilot 进行 Prompt Engineering 的初学者指南(译)

文章目录 什么是 GitHub Copilot ?GitHub Copilot 可以自己编码吗&#xff1f;GitHub Copilot 的底层是如何工作的&#xff1f;什么是 prompt engineering?这是 prompt engineering 的另一个例子 使用 GitHub Copilot 进行 prompt engineering 的最佳实践提供高级上下文&…

栈和内存溢出

7 栈 线程运行需要的内存空间。 一个栈内由多个栈帧组成&#xff0c;一个栈帧代表一次方法的调用。 栈帧&#xff1a;每个方法运行时需要的内存。 方法内&#xff1a;参数&#xff0c;局部变量&#xff0c;返回地址。方法执行结束&#xff0c;出栈。 方法一调用了方法二。 方法…

【数据挖掘torch】 基于LSTM电力系统负荷预测分析(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【沁恒蓝牙mesh】CH58x系统时钟配置与计算

本文主要记录了【沁恒蓝牙mesh】CH58x系统时钟配置与计算 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;欢迎访问我的 Ethernet_Comm 博客主页&#x1f525;&#x1f389; 支持我&am…

[Flask]SSTI1

根据题目提示&#xff0c;这关应该是基于Python flask的模版注入&#xff0c;进入靶场环境后就是一段字符串&#xff0c;而且没有任何提示&#xff0c;有点难受&#xff0c;主要是没有提示注入点 随机尝试一下咯&#xff0c;首先尝试一下guest&#xff0c;GET传参 但是没有反应…

Windows上安装 jdk 环境并配置环境变量 (超详细教程)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

Kali中AWD靶机环境搭建

Kali中AWD靶机环境搭建 1、kali安装docker2、克隆项目&#xff08;400多M&#xff0c;下载会有点久&#xff09;3、进入项目4、下载镜像5、改镜像名6、比赛环境搭建6.1 启动靶机6.2 连接裁判机&#xff0c;启动check脚本6.3 关闭环境命令 7、 靶机访问方式7.1 web界面访问7.2 s…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig与zag/左右双旋/3+4重构)

本文目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 06.代码注意插入算法删除算法完整代码&#xff1a…

spring security + oauth2 使用RedisTokenStore 以json格式存储

1.项目架构 2.自己对 TokenStore 的 redis实现 package com.enterprise.auth.config;import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis…