Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

Hiroki

大部分笔记已经转移到 https://github.com/hschen0712/machine_learning_notes ,QQ:357033150, 欢迎交流

指数分布族的变分推断

指数分布族的变分推理

回顾一下上节课变分推断讲的内容。
与MCMC,Gibbs Sampling等基于抽样来估计未知分布的方法不同,变分推断通过一个优化过程来近似隐变量的后验概率分布。给定一组隐变量 Z={z1,...,zM},其中M表示Z可以分解为M个独立成分。变分推断用一个变分分布q(Z)估计后验分布P(Z|X),通过最大化如下的ELBO来完成近似过程:

L(q(Z))=Eq(Z)[ln p(X,Z)]Eq(Z)[ln q(Z)]

最优的近似分布为

q(Z)=argmax

根据 meanfield假设,我们可以对q(Z)进行分解:

q(Z)=\prod_{i=1}^M q_i(Z_i)

与上一堂课所用方法不同,这次我们假设q_i(Z_i),(i=1,2,...,M)属于指数分布族 ,这些分布的超参数是超参数\lambda_i,(i=1,2,...,M),这样做的好处是将泛函优化问题简化为了超参数优化问题。

我们可以用一个概率图模型来表示上一节课的模型:

由于Z_1,Z_2,...,Z_M都是X的co-parents,根据概率图模型理论,要估计Z_i的后验,我们不仅需要知道X的信息,还需要知道\{Z_1,...,Z_{i-1},Z_{i+1},...,Z_M\}的信息,即Z_i的后验同时取决于X和其他的Z_j,可以将其表示为P(Z_i|X,Z_1,...,Z_{i-1},Z_{i+1},...,Z_M)
为了数学上表示的方便,我们将\{Z_1,...,Z_{i-1},Z_{i+1},...,Z_M\}简记为Z_{-i}。我们假设Z_i的后验属于指数分布族:

p(Z_i|X,Z_{-i})=h(Z_i)\exp(T(Z_i)^T\eta(X,Z_{-i})-A_g(\eta(X,Z_{-i}))

其中T(Z_i)Z_i的充分统计量,\eta(X,Z_{-i})是其自然参数,它是关于X,Z_{-i}的函数,特别地,对于广义线性模型来说这个函数是线性的。

同样地,我们假设每个近似分布q_i(Z_i)也是指数分布族:

q_i(Z_i|\lambda_i)=h(Z_i)\exp(T(Z_i)^T\lambda_i-A_\ell(\lambda_i))

其中\lambda_iZ_i的超参数。为了方便,记\lambda_{-i}=\{\lambda_1,...,\lambda_{i-1},\lambda_{i+1},...,\lambda_{M}\}

通过引入超参我们可以将问题转化为一个参数优化问题:

\lambda^*_1,...,\lambda^*_M=\arg\max_{\lambda_1,...,\lambda_M} \mathcal{L}(\lambda_1,...,\lambda_M)

用贝叶斯公式给目标函数做个变形:

\mathcal{L}(q(Z))=\mathbb{E}_{q(Z)}[\ln P(Z_i|X,Z_{-i}) +\ln P(Z_{-i}|X) + \ln P(X)]-\mathbb{E}_{q(Z)}[\ln q(Z)]

其参数化形式为:

\begin{aligned}\mathcal{L}(\lambda_1,...,\lambda_M)&= \mathbb{E}_{q(Z|\lambda)}[\ln P(Z_i|X,Z_{-i}) +\ln P(Z_{-i}|X) + \ln P(X)]-\mathbb{E}_{q(Z|\lambda)}[\ln q_i(Z_i|\lambda_i)]-\mathbb{E}_{q(Z|\lambda)}[\sum_{j\neq i} \ln q_j(Z_j|\lambda_j)]\\&= \mathbb{E}_{q(Z|\lambda)}[\ln P(Z_i|X,Z_{-i})]-\mathbb{E}_{q(Z|\lambda)}[\ln q_i(Z_i|\lambda_i)]+const\end{aligned}

其中\mathbb{E}_{q(Z|\lambda)}[\ln P(Z_{-i}|X)],\mathbb{E}_{q(Z|\lambda)}[\ln P(X)]\mathbb{E}_{q(Z|\lambda)}[\sum_{j\neq i} \ln q_j(Z_j|\lambda_j)]都是常数。一开始不太理解为什么\mathbb{E}_{q(Z|\lambda)}[\ln P(Z_{-i}|X)]是常数,后来经过如下的计算想通了。

\begin{aligned}\mathbb{E}_{q(Z|\lambda)}[\ln P(Z_{-i}|X)]&= \int_{Z_i} \bigg[\int_{Z_{j\neq i}} \ln P(Z_{-i}|X)\prod_{j\neq i}q_j(Z_j|\lambda_j) dZ_j\bigg] q_i(Z_i|\lambda_i) dZ_i\\&=\int_{Z_{j\neq i}} \ln P(Z_{-i}|X)\prod_{j\neq i}q_j(Z_j|\lambda_j) dZ_j \int_{Z_i} q_i(Z_i|\lambda_i) dZ_i\\&=\int_{Z_{j\neq i}} \ln P(Z_{-i}|X)\prod_{j\neq i}q_j(Z_j|\lambda_j) dZ_j =constant(\mbox{因为$\lambda_{-i}$已知})\end{aligned}

代入指数分布式子有

\begin{aligned}\mathcal{L}(\lambda_1,...,\lambda_M)&= \mathbb{E}_{q(Z|\lambda)}[\ln P(Z_i|X,Z_{-i})]-\mathbb{E}_{q(Z|\lambda)}[\ln q_i(Z_i|\lambda_i)]+const\\&= \mathbb{E}_{q(Z|\lambda)}[\ln h(Z_i)]+\mathbb{E}_{q(Z|\lambda)}[T(Z_i)^T\eta(X,Z_{-i})]-\underbrace{\mathbb{E}_{q(Z|\lambda)}[A_g(\eta(X,Z_{-i}))]}_{const}\\&\quad-\mathbb{E}_{q(Z|\lambda)}[\ln h(Z_i)]-\mathbb{E}_{q(Z|\lambda)}[T(Z_i)^T\lambda_i]+\mathbb{E}_{q(Z|\lambda)}[A_\ell(\lambda_i)]+const\\&=\mathbb{E}_{q(Z|\lambda)}[T(Z_i)^T(\eta(X,Z_{-i})-\lambda_i)]+\mathbb{E}_{q(Z|\lambda)}[A_\ell(\lambda_i)]+const\\ &=\mathbb{E}_{q_i(Z_i|\lambda_i)}[T(Z_i)]^T\cdot \mathbb{E}_{q_{-i}(Z_{-i}|\lambda_{-i})}[\eta(X,Z_{-i})-\lambda_i]+\mathbb{E}_{q(Z|\lambda)}[A_\ell(\lambda_i)]+const\\&=A'_\ell(\lambda_i)^T\mathbb{E}_{q_{-i}(Z_{-i}|\lambda_{-i})}[\eta(X,Z_{-i})-\lambda_i]+\mathbb{E}_{q(Z|\lambda)}[A_\ell(\lambda_i)]+const\\&=A'_\ell(\lambda_i)^T(\mathbb{E}_{q_{-i}(Z_{-i}|\lambda_{-i})}[\eta(X,Z_{-i})]-\lambda_i)+A_\ell(\lambda_i)+const\end{aligned}

接着对\lambda_i求导:

\frac{\partial \mathcal{L}}{\partial \lambda_i}=A_\ell''(\lambda_i)(\mathbb{E}_{q_{-i}(Z_{-i}|\lambda_{-i})}[\eta(X,Z_{-i})]-\lambda_i)-A'_\ell(\lambda_i)+A'_\ell(\lambda_i)=0

一般来说A_\ell''(\lambda_i)\neq 0,于是我们有

\lambda^*_i=\mathbb{E}_{q_{-i}(Z_{-i}|\lambda_{-i})}[\eta(X,Z_{-i})]

有了这个更新式,只要我们遍历\lambda_i固定其他参数,就可以迭代地对ELBO进行优化,获得后验概率分布的估计。

posted on   Hiroki  阅读(1066)  评论(0编辑  收藏  举报

编辑推荐:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示