机器学习主题模型之LDA参数求解——变分推断+EM近似

2023-11-19

由上一篇可知LDA主要有两个任务:对现有文集确定LDA模型参数α、η的值;或对一篇新文档,根据模型确定隐变量的分布p(β,z,θ|w,α,η)。由于无法直接求出这个后验分布,因此可以考虑使用Laplace近似、变分近似、MCMC、Gibbs采样法等算法求解。

 

1、变分推断(variational inference)

我们希望找到合适的α、η使对似然函数最大化,并求出隐变量的条件概率分布:

        LL(\alpha ,\eta )=\sum_{m=1}^{M}\ln p(w_{m}|\alpha ,\eta)

        p(\beta ,z,\theta |w,\alpha ,\eta )=\frac{p(\beta ,z,\theta ,w|\alpha ,\eta )}{p(w|\alpha ,\eta )}

        p(\beta ,z,\theta ,w|\alpha ,\eta )= \prod_{k=1}^{K}p(\beta _{k}|\eta )p(\theta |\alpha )\prod_{n=1}^{N}p(z_{n}|\theta )p(w_{n}|z_{n},\beta _{k})

w表示一篇文档中所有N个单词,每个单词都有唯一对应的主题,z_{n}为K维向量,当且仅当文档中第n个词的主题为k时,z_{n}^{k}=1;否则z_{n}^{k}=0

        p(w|\alpha ,\eta )\\\\=\int \int \prod_{k=1}^{K}p(\beta _{k}|\eta )p(\theta |\alpha ) \prod_{n=1}^{N}\sum_{z_{n}}^{ }p(z_{n}|\theta )p(w_{n}|z_{n},\beta _{k}) d\theta d\beta \\\\=\frac{\Gamma \left ( \sum_{k=1}^{K}\alpha _{k} \right )}{\prod_{k=1}^{K}\Gamma (\alpha _{k})}\left ( \frac{\Gamma \left ( \sum_{i=1}^{V}\eta _{i} \right )}{\prod_{i=1}^{V}\Gamma (\eta _{i})} \right )^{K}\int \int \left ( \prod_{k=1}^{K}\prod_{i=1}^{V}\beta _{ki}^{\eta _{i}-1} \right )\left ( \sum_{k=1}^{K}\theta _{k}^{\alpha _{k}-1} \right )\left ( \prod_{n=1}^{N}\prod_{k=1}^{K}\prod_{i=1}^{V}(\theta _{k}\beta _{ki})^{w_{n}^{i}} \right )d\theta d\beta

V表示词典大小,当且仅当文档中第n个词是词典中第i个词时,w_{n}^{i}=1;否则w_{n}^{i}=0

但由于隐变量θ、β之间存在耦合关系,使用EM算法时E步无法直接求解它们基于条件概率分布的期望,因此使用变分法引入mean field assumption,假设所有的隐变量都是通过各自独立的分布生成的,即去掉隐变量之间的连线和w结点,并赋予β、z、θ各自独立分布,λ、Φ、γ为变分参数。

可得隐变量β、z、θ的联合分布q为:

        q(\beta ,z,\theta |\lambda ,\phi ,\gamma )=\prod_{k=1}^{K}q(\beta _{k}|\lambda _{k})\prod_{m=1}^{M}(q(\theta _{m}|\gamma _{m})\prod_{n=1}^{N_{m}}q(z_{mn}|\phi _{mn}))

为了让变分分布q(β,z,θ|λ,Φ,γ)能够近似地表示真实后验p(β,z,θ|w,ɑ,η),则让二者的KL散度D(q||p)尽可能小:

        (\lambda ^{*},\phi ^{*},\gamma ^{*} )=\underset{\lambda ,\phi ,\gamma }{\arg min}D\left ( q(\beta ,z,\theta |\lambda ,\phi ,\gamma )||p(\beta ,z,\theta |w,\alpha ,\eta ) \right )

        D(q||p)=\sum_{x}^{ }q(x)ln\frac{q(x)}{p(x)}=E_{q(x)}[\ln q(x)-\ln p(x)]

文档数据的对数似然可以写为(省略q中的变分参数λ,Φ,γ为了书写简便):

        \ln p(w|\alpha ,\eta )\\\\=\ln \int \int \sum_{z}^{ }p(\beta ,z,\theta ,w|\alpha ,\eta )d\theta d\beta \\=\ln \int \int \sum_{z}^{ }\frac{p(\beta ,z,\theta ,w|\alpha ,\eta )q(\beta ,z,\theta )}{q(\beta ,z,\theta )}d\theta d\beta\\\geqslant \int \int \sum_{z}^{ }q(\beta ,z,\theta )\ln p(\beta ,z,\theta ,w|\alpha ,\eta )d\theta d\beta -\int \int \sum_{z}^{ }q(\beta ,z,\theta )\ln q(\beta ,z,\theta )d\theta d\beta \\\\=E_{q}[\ln p(\beta ,z,\theta ,w|\alpha ,\eta )]-E_{q}[\ln q(\beta ,z,\theta )]

由Jensen不等式可以得到对数似然的下界,上式左右两部分的差是变化的后验概率与真实后验概率之间的KL散度,令L(λ,Φ,γ;ɑ,η)表示对数似然的下界,称L为Evidence Lower BOund(ELBO),有:

        \ln p(w|\alpha ,\eta )=L(\lambda ,\phi \gamma ;\alpha ,\eta )+D(q(\beta ,z,\theta |\lambda ,\phi ,\gamma )||p(\beta ,z,\theta |w,\alpha ,\eta ))

为了让D(q||p)尽可能小,又对数似然函数不影响KL散度,则应该让L尽可能大。将L根据贝叶斯展开可得:

        L(\lambda ,\phi ,\gamma ;\alpha ,\eta )\\\\=E_{q}[\ln p(\beta ,z,\theta, w|\alpha ,\eta )]-E_{q}[\ln q(\beta ,z,\theta |\lambda ,\phi ,\gamma )]\\\\=E_{q}[\ln p(\beta|\eta )]+E_{q}[\ln p(z|\theta )]+E_{q}[\ln p(\theta|\alpha )]+E_{q}[\ln p(w|z ,\beta )]\\ -E_{q}[\ln q(\beta |\lambda )]-E_{q}[\ln q(z|\phi )]-E_{q}[\ln q(\theta|\gamma )]

第一项展开为:

        E_{q}[\ln p(\beta |\eta )]\\\\=E_{q}[\ln \prod_{k=1}^{K}\left ( \frac{\Gamma (\sum_{i=1}^{V}\eta _{i})}{\prod_{i=1}^{V}\Gamma (\eta _{i})}\prod_{i=1}^{V}\beta _{ki}^{\eta _{i}-1} \right )]\\\\=K\ln \Gamma (\sum_{i=1}^{V}\eta _{i})-K\sum_{i=1}^{V}\ln \Gamma (\eta _{i})+\sum_{k=1}^{K}E_{q}[\sum_{i=1}^{V}(\eta _{i}-1)\ln \beta _{ki}]

 

2、指数分布族的性质

对第三项的求解,需要引入指数分布族的性质。指数分布族是指分布函数满足如下形式的概率分布:

        p(x|\theta) =h(x)exp(\eta(\theta)\cdot T(x)-A(\theta))

T(x)是分布的充分统计量(sufficient statistic)。对于给定的统计推断问题,包含了原样本中关于该问题的全部有用信息的统计量;对于未知参数的估计问题,保留了原始样本中关于未知参数的全部信息的统计量,就是充分统计量(不损失信息)。

η是自然参数(natural parameter);

A(θ)是对数配分函数(partition function),即归一化因子的对数形式,使得概率分布的积分为1。

 

指数分布族包含了很多常见分布,如正态分布、伯努利分布、泊松分布、beta分布、Γ分布、Dirichlet分布等,它们的均值和方差都有简洁的表达式。指数分布族的性质有:

(1)指数分布族是唯一的充分统计量是有限大小的分布族;

(2)指数分布族是唯一存在共轭先验的分布族;

(3)指数分布族是选定限制下作的假设最少的分布族;

(4)指数分布族是广义线性模型的核心内容;

(5)指数分布族是变分推断的核心内容。

        \frac{d}{d\eta (\theta)}A(\theta)\\=\frac{d}{d\eta (\theta)}\ln \left ( \int h(x)exp(\eta(\theta)\cdot T(x))dx \right )\\\\=\frac{\int T(x)h(x)exp(\eta(\theta)\cdot T(x))dx}{\int h(x)exp(\eta(\theta)\cdot T(x))dx}\\\\=\frac{\int T(x)h(x)exp(\eta(\theta)\cdot T(x))dx}{exp(A(\theta))}\\\\=\int T(x)h(x)exp(\eta(\theta)\cdot T(x)-A(\theta ))dx\\\\=E_{p(x|\theta)}[T(x)]

 

3、极大化ELBO求解变分参数

由指数分布族的性质可知E_{q}[\ln p(\beta |\eta )] 第三项可写为:

       \sum_{k=1}^{K}E_{q}[\sum_{i=1}^{V}(\eta _{i}-1)\ln \beta _{ki}]\\\\=\sum_{k=1}^{K}\sum_{i=1}^{V}(\eta _{i}-1)E_{q(\beta _{k}|\lambda _{k})}[\ln \beta _{ki}]\\\\=\sum_{k=1}^{K}\sum_{i=1}^{V}(\eta _{i}-1)(\ln \Gamma (\lambda _{ki})-\ln \Gamma (\sum_{i'=1}^{V}\lambda _{ki'}))'\\\\=\sum_{k=1}^{K}\sum_{i=1}^{V}(\eta _{i}-1)(\Psi (\lambda _{ki})-\Psi (\sum_{i'=1}^{V}\lambda _{ki'}))

其中\Psi (x)=\frac{d}{dx}\ln \Gamma (x)=\frac{\Gamma '(x)}{\Gamma (x)}

因此L的所有7个子项展开分别为:

       

以上7个式子相加得到L后,使用EM算法求解变分参数和模型参数:

    E步关于λ,Φ,γ极大化L得到真实后验分布的近似分布q;

    M步固定变分参数ɑ,η极大化L,反复迭代直到收敛。

 

4、EM算法E步求解变分参数

通过对L的各个变分参数λ,Φ,γ分别求导并令偏导等于0,可以得到迭代表达式,多次迭代收敛后即为最佳变分参数。

(1)只考虑L含有Φ的部分,根据限制条件\sum_{k}^{ }\phi _{nk}=1构造Lagrange函数并令L对Φ的偏导=0可得:

       

        注意其中的w_{n}^{i}=1当且仅当文档中第n个词为词典中的第i个词,因此上式中的第一项的求和只计算了一项。

 

(2)只考虑L含有γ的部分,并令L对γ的偏导=0可得:

       

(3)只考虑L含有λ的部分,并令L对γ的偏导=0可得:

       

        参数λ决定了β分布,对于整个训练文集是共有的,因此参数λ实际应按照如下方式更新:

        \lambda _{ki}=\eta _{i}+\sum_{m=1}^{M}\sum_{n=1}^{N}\phi _{mnk}w_{mn}^{i}

 

E步的过程就是循环计算\phi _{nk}\gamma _{k}\lambda _{ki}直到收敛。

 

5、EM算法M步更新模型参数

M步固定变分参数,极大化ELBO得到最优模型参数。求解最优的模型参数ɑ、η方法有很多,如梯度下降法、牛顿法等,LDA一般使用牛顿法,即通过求L关于ɑ、η的一阶导数和二阶导数的表达式,迭代求解ɑ、η在M步的最优解。

(1)基于整个文集M篇文档只考虑L含有ɑ的部分,并求L对ɑ求二阶导为:

       

        其中当且仅当k=j时,δ(k,j)=1,否则δ(k,j)=0。

 

(2)类似ɑ的处理过程,只考虑L含有η的部分,并求L对η求二阶导为:

       

        其中当且仅当k=j时,δ(k,j)=1,否则δ(k,j)=0。

 

6、LDA变分推断EM算法流程总结

输入:主题总数K、文集D,D中含有M个文档与相应的词典V。

initialize \alpha _{k} and \eta _{i} for all k and i

while not converged do:

        // E-step

        initialize \phi _{mnk}^{0}:=\frac{1}{K}   for all m,n,k

        initialize \gamma _{mk}^{0}:=\alpha _{k}+\frac{N_{m}}{K}  for all m,k

        initialize \lambda _{ki}^{0}  for all k,i

        repeat

                for m=1 to M:

                        for n=1 to N_{m}:

                                for k=1 to K:

                                        \phi _{mnk}^{t+1}:=exp\left ( \sum_{i=1}^{V}w_{n}^{i}(\Psi (\lambda _{ki}^{t}))+\Psi (\gamma _{mk}^{t}) \right )

                                normalize \phi _{mn}^{t+1}  to sum to 1

                        \gamma _{mk}^{k+1}:=\alpha _{k}+\sum_{n=1}^{N}\phi _{mn}^{t+1}

                for k=1 to K:

                        for i=1 to V:

                                \lambda _{ki}^{k+1}:=\eta _{i}+\sum_{m=1}^{M}\sum_{n=1}^{N_{m}}\phi _{mnk}^{t+1}w_{mn}^{i}

        until convergence

        // M-step

        update α and η using Newton-Raphson method with the newly estimated variational parameters fixed.

        \alpha _{k+1}:=\alpha _{k}+\frac{ \triangledown _{\alpha _{k}}L}{\triangledown \alpha_{k} \alpha _{j}L}

        \eta _{i+1}:=\eta _{i}+\frac{ \triangledown _{\eta _{i}}L}{\triangledown \eta_{i} \eta _{j}L}

参考资料

Blei 03 LDA implementation

https://blog.csdn.net/u011414416/article/details/51168242

http://www.cnblogs.com/pinard/p/6873703.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习主题模型之LDA参数求解——变分推断+EM近似 的相关文章

  • 网络环境下促进有效学习发生的策略

    1 构建良好的网络学习环境 学习者在网络中的学习 必须在一定的 适合学习的环境中进行 构建和谐和 宽松的学习环境是激发学习者有效学习的前提 在这样的环境中 应该有学习者学 习所需要的一些网络资源 如各种教学网站 电子期刊等 也需要有一定的认
  • nginx之proxy_pass代理后端https请求

    本文转载自 https my oschina net foreverich blog 1517128 前言本文解释了怎么对nginx和后端服务器组或代理服务器进行加密http通信 内容提纲前提条件获取SSL服务端证书获取SSL客户端证书配置

随机推荐

  • MySQL Error Code: 2013. Lost connection to MySQL server during query解决

    如果你出现了这个问题 先尝试判断你是哪种情况 你的SQL语句需要执行很久 超过默认的时长 gt 方案1 你的SQL语句很简单 但就是执行不了 gt 方案2 解决方法1 尝试打开设置调整超时时间后重试 解决方法2 如果你在尝试修改空表都发生了
  • 2. Java枚举(enum)

    Java枚举是一个特殊的类 一般表示一组常量 使用enum关键字来定义 各个常量使用逗号 来分割 实例 public enum BizErrorInfo USER NOT FOUND codeValue 1004 message 用户不存在
  • Springboot +mybatis-plus 实现公共字段自动填充

    本文讲述了在SpringBoot 中使用Mybatis Plus如何实现一个自动填充功能 目录 一 应用场景 二 代码实现步骤 1 建数据库表 t user 2 创建spring boot项目集成mybatis plus实现字段自动填充 2
  • 少儿机器人编程主要使用的语言有啥

    少儿机器人编程主要使用的语言 说起孩子的学习 想必家长们都是非常的有发言权的 很多的家长在培养孩子的学习方面也可以说相当的耐心的 他们会给孩子选择一些能够有利于孩子成长的课程 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对
  • PHP开源大全

    WordPress PHP开源 博客Blog WordPress是最热门的开源个人信息发布系统 Blog 之一 基于PHP MySQL构建 WordPress提供的功能包括 1 文章发布 分类 归档 2 提供文章 评论 分类等多种形式的RS
  • MySQL数据库数据导出出现1290(secure_file_priv)错误解决方法

    目录 解决方案 测试效果 解决方案 secure file priv是用来限制mysql数据库导出的位置 目录 算是一直安全保护系统 我们可以去通过show variables like secure 这个指令去查看secure file
  • 2021-05-08记录一次最新版小红书逆向细节

    预备工具 ida7 5 piexl 手机 jadx jeb 某书是有TracerPid反调试 先过反调试 这有两个方法 1 Frida hook fopen 过滤 2 修改安卓源码去掉TracerPid 1 Frida hook脚本 fun
  • Python入门到实战(十一)无监督学习、KMeans、KNN、实现图像分割、监督学习VS无监督学习

    Python入门到实战 十一 无监督学习 KMeans KNN 实现图像分割 监督学习VS无监督学习 无监督学习unsupervised learning 特点 应用 K均值聚类 核心流程 核心公式 KMeans VS KNN 实战 KMe
  • 深度遍历 和 广度遍历

    深度dfs 用到了递归 先把根节点 输出根节点 然后遍历根节点的孩子 const fun1 root gt console log root val root children forEach fun1 fun1 tree 广度遍历 每次遍
  • java 集成MinIo

    1 引入maven包 注意jar包冲突
  • 在springboot打包成jar后,无法读取自定义文件的解决办法

    前两天在做springcloud框架下的项目的时候 用到有一个框架之外的文件需要进行读取 当时在eclipse中编码时通过this getClass getResource来获取文件的路径 没有任何的问题 但是在打成jar以后 这是是打成j
  • c++3之static、const、friend关键字

    1 1static 修饰局部变量 延长生命周期 由栈区 gt 静态区 修饰全局变量或函数 限制作用域 只能用于本文件中使用 static 成员变量 1 static成员变量不占class的空间 修饰成员变量 需要在外部单独定义 要加来源 A
  • Think-on-Graph: Deep and Responsible Reasoning of Large Language Model with Knowledge Graph

    本文是LLM系列文章 针对 Think on Graph Deep and Responsible Reasoning of Large Language Model with Knowledge Graph 的翻译 对图的思考 基于知识图
  • TensorFlow时间序列tfts-seq2seq

    关注我的公众号YueTan进行交流探讨 欢迎关注时间序列仓库 https github com LongxingTan Time series prediction 时间序列1 概述 时间序列2 transformers 时间序列3 seq
  • Windows11 安卓子系统安装(附apk安装步骤)

    Windows11 安卓子系统安装 附apk安装步骤 系列 Android 前言 Win11安卓子系统 Windows Subsystem for Android 是一个组件 以帮助通过亚马逊商店在其上运行Android 应用程序 在最新的
  • Golang适合高并发场景的原因分析

    典型的两个现实案例 我们先看两个用Go做消息推送的案例实际处理能力 360消息推送的数据 16台机器 标配 24个硬件线程 64GB内存 Linux Kernel 2 6 32 x86 64 单机80万并发连接 load 0 2 0 4 C
  • VBA-选择文件对话框

    打开选择路径对话框 strTitle 对话框标题名 strTypesDec 选择文件类型名 多文件名时用 连接 Images All files strExten 选择文件类型 一个文件名有多个读取类型时用 连接 多个文件名用 连接 gif
  • c++ extern的用处(转载)

    转自chao yu cnblog com 1 基本解释 extern可以置于变量或者函数前 以标示变量或者函数的定义在别的文件中 提示编译器遇到此变量和函数时在其他模块中寻找其定义 此外extern也可用来进行链接指定 也就是说extern
  • ext4 mballoc之buddy算法

    buddy bitmap 根据 Ext4文件系统介绍 理论篇 nginux的博客 CSDN博客 我们知道磁盘上有1block 大小 默认4K data block bitmap 每bit位代表一个block的使用情况 1代表占用 0代表空闲
  • 机器学习主题模型之LDA参数求解——变分推断+EM近似

    由上一篇可知LDA主要有两个任务 对现有文集确定LDA模型参数 的值 或对一篇新文档 根据模型确定隐变量的分布p z w 由于无法直接求出这个后验分布 因此可以考虑使用Laplace近似 变分近似 MCMC Gibbs采样法等算法求解 1