⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

第20章 潜在狄利克雷分配

习题20.1

  推导狄利克雷分布数学期望公式。

解答:

解答思路:

  1. 给出狄利克雷分布
  2. 写出狄利克雷分布的数学期望计算公式
  3. 利用概率分布的归一化性质,推导规范化因子的形式
  4. 将规范化因子代入原式,分别计算多元随机变量每个分量的期望

解答步骤:

第1步:狄利克雷分布

  根据书中第20章的定义20.2的狄利克雷分布的定义:

  定义20.2(狄利克雷分布) 若多元连续随机变量θ=(θ1,θ2,,θk)的概率密度函数为

(20.2)p(θ|α)=Γ(i=1kαi)i=1kΓ(αi)i=1kθiαi1

其中i=1kθi=1, θi0, α=(α1,α2,,αk), αi>0, i=1,2,,k,则称随机变量θ服从参数为α的狄利克雷分布,记作θDir(α)

  令

(20.3)B(α)=i=1kΓ(αi)Γ(i=1kαi)

则狄利克雷分布的密度函数可以写成

(20.4)p(θ|α)=1B(α)i=1kθiαi1

第2步:写出狄利克雷分布的数学期望计算公式

  已知概率分布p(x)数学期望的计算公式,即函数x在概率分布p(x)下的期望:E[p(x)]=xp(x)dx

  可得,狄利克雷分布的数学期望

E[p(θ|α)]=θp(θ|α)dθ=θ1B(α)i=1kθiαi1dθ

其中,多元连续随机变量θ=(θ1,θ2,,θk),α=(α1,α2,,αk)

  分别计算 θ 在每个分量上的期望,即

E[p(θ|α)]=(E[p(θ1|α)],E[p(θ2|α)],,E[p(θk|α)])

第3步:利用概率分布的归一化性质,推导规范化因子的形式

  对于每个分量θi的期望:

(1)E[p(θi|α)]=θi1B(α)j=1kθjαj1dθi=1B(α)θ1α11θ2α21θiαiθkαk1dθi

  记上式右边的积分部可对应如下狄利克雷分布的密度函数

p(θi|α)=1B(α)θ1α11θ2α21θiαiθkαk1=Γ(α1+α2++αi+1++αk)Γ(α1)Γ(α2)Γ(αi+1)Γ(αk)θ1α11θ2α21θiαiθkαk1

其中α=(α1,α2,,αi+1,,αk)

  根据归一化条件:

p(θi|α)dθ=1

  可得:

(2)B(α)=θ1α11θ2α21θiαiθkαk1dθ

第3步:将规范化因子代入原式,分别计算多元随机变量每个分量的期望。

  将公式(2)代入公式(1),可得分量θi的期望:

E[p(θi|α)]=B(α)B(α)=Γ(α1)Γ(α2)Γ(αi+1)Γ(αk)Γ(α1+α2++αi+1++αk)Γ(α1+α2++αi++αk)Γ(α1)Γ(α2)Γ(αi)Γ(αk)=αij=1kΓ(αj)j=1kαjΓ(j=1kαj)Γ(j=1kαj)j=1kΓ(αj)=αij=1kαj

  因此,狄利克雷分布的数学期望:

E[p(θ|α)]=(E[p(θ1|α)],E[p(θ2|α)],,E[p(θk|α)])=(α1i=1kαi,α2i=1kαi,,αki=1kαi)

习题20.2

  针对17.2.2节的文本例子,使用LDA模型进行话题分析。

解答:

解答思路:

  1. 给出LDA吉布斯抽样算法
  2. 自编程实现基于吉布斯抽样算法的LDA模型
  3. 针对17.2.2节的文本例子,使用LDA模型进行话题分析

解答步骤:

第1步:LDA吉布斯抽样算法

  根据书中第20章的算法20.2的LDA吉布斯抽样算法:

算法20.2(LDA吉布斯抽样算法)
输入:文本的单词序列w={w1,w2,,wm,,wM}, wm=(wm1,wm2,,wmn,,wmNm)
输出:文本的话题序列z={z1,z2,,zm,,zM}, zm=(zm1,zm2,,zmn,,zmNm)的后验概率分布p(z|w,α,β)的样本计数,模型的参数φθ的估计值;
参数:超参数αβ,话题个数K
(1)设所有计数矩阵的元素nmk,nkv,计数向量的元素nm,nk初值为0;
(2)对所有文本wm, m=1,2,,M,对第m个文本中的所有单词wmn, n=1,2,,Nm,抽样话题zmn=zkMult(1K);增加文本-话题计数nmk=nmk+1,增加文本-话题和计数nm=nm+1,增加话题-单词计数nkv=nkv+1,增加话题-单词和计数nk=nk+1
(3)循环执行以下操作,直到进入燃烧期。对所有文本wm,m=1,2,,M,对第m个文本中的所有单词wmn,n=1,2,,Nm
    (a)当前的单词wmn是第v个单词,话题指派zmn是第k个话题;减少计数nmk=nmk1,nm=nm1,nkv=nkv1,nk=nk1
    (b)按照满条件分布进行抽样

p(zi|zi,w,α,β)nkv+βvv=1V(nkv+βv)nmk+αkk=1K(nmk+αk)

得到新的第k个话题,分配给zmn
    (c)增加计数nmk=nmk+1,nm=nm+1,nkv=nkv+1,nk=nk+1
    (d)得到更新的两个计数矩阵NK×V=[nkv]NM×K=[nmk],表示后验概率分布p(z|w,α,β)的样本计数;
(4)利用得到的样本计数,计算模型参数

θmk=nmk+αkk=1K(nmk+αk)φkv=nkv+βvv=1V(nkv+βv)

第2步:自编程实现基于吉布斯抽样算法的LDA模型

python
import numpy as np


class GibbsSamplingLDA:
    def __init__(self, iter_max=1000):
        self.iter_max = iter_max
        self.weights_ = []

    def fit(self, words, K):
        """
        :param words: 单词-文本矩阵
        :param K: 话题个数
        :return: 文本话题序列z
        """
        # M, Nm分别为文本个数和单词个数
        words = words.T
        M, Nm = words.shape

        # 初始化超参数alpha, beta,其中alpha为文本的话题分布相关参数
        # beta为话题的单词分布相关参数
        alpha = np.array([1 / K] * K)
        beta = np.array([1 / Nm] * Nm)

        # 初始化参数theta, varphi,其中theta为文本关于话题的多项分布参数,
        # varphi为话题关于单词的多项分布参数
        theta = np.zeros([M, K])
        varphi = np.zeros([K, Nm])

        # 输出文本的话题序列z
        z = np.zeros(words.shape, dtype='int')

        # (1)设所有计数矩阵的元素n_mk、n_kv,计数向量的元素n_m、n_k初值为 0
        n_mk = np.zeros([M, K])
        n_kv = np.zeros([K, Nm])
        n_m = np.zeros(M)
        n_k = np.zeros(K)

        # (2)对所有M个文本中的所有单词进行循环
        for m in range(M):
            for v in range(Nm):
                # 如果单词v存在于文本m
                if words[m, v] != 0:
                    # (2.a)抽样话题
                    z[m, v] = np.random.choice(list(range(K)))
                    # 增加文本-话题计数
                    n_mk[m, z[m, v]] += 1
                    # 增加文本-话题和计数
                    n_m[m] += 1
                    # 增加话题-单词计数
                    n_kv[z[m, v], v] += 1
                    # 增加话题-单词和计数
                    n_k[z[m, v]] += 1

        # (3)对所有M个文本中的所有单词进行循环,直到进入燃烧期
        zi = 0
        for i in range(self.iter_max):
            for m in range(M):
                for v in range(Nm):
                    # (3.a)如果单词v存在于文本m,那么当前单词是第v个单词,
                    # 话题指派z_mv是第k个话题
                    if words[m, v] != 0:
                        # 减少计数
                        n_mk[m, z[m, v]] -= 1
                        n_m[m] -= 1
                        n_kv[z[m, v], v] -= 1
                        n_k[z[m, v]] -= 1

                        # (3.b)按照满条件分布进行抽样
                        max_zi_value, max_zi_index = -float('inf'), z[m, v]
                        for k in range(K):
                            zi = ((n_kv[k, v] + beta[v]) / (n_kv[k, :].sum() + beta.sum())) * \
                                 ((n_mk[m, k] + alpha[k]) / (n_mk[m, :].sum() + alpha.sum()))

                        # 得到新的第 k‘个话题,分配给 z_mv
                        if max_zi_value < zi:
                            max_zi_value, max_zi_index = zi, k
                            z[m, v] = max_zi_index

                        # (3.c) (3.d)增加计数并得到两个更新的计数矩阵的n_kv和n_mk
                        n_mk[m, z[m, v]] += 1
                        n_m[m] += 1
                        n_kv[z[m, v], v] += 1
                        n_k[z[m, v]] += 1

        # (4)利用得到的样本计数,计算模型参数
        for m in range(M):
            for k in range(K):
                theta[m, k] = (n_mk[m, k] + alpha[k]) / (n_mk[m, :].sum() + alpha.sum())

        for k in range(K):
            for v in range(Nm):
                varphi[k, v] = (n_kv[k, v] + beta[v]) / (n_kv[k, :].sum() + beta.sum())

        self.weights_ = [varphi, theta]
        return z.T, n_kv, n_mk

第3步:针对17.2.2节的文本例子,使用LDA模型进行话题分析

  17.2.2节的文本例子中的数据如下:

  使用LDA模型进行话题分析:

python
gibbs_sampling_lda = GibbsSamplingLDA(iter_max=1000)

# 输入文本-单词矩阵,共有9个文本,11个单词
words = np.array([[0, 0, 1, 1, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 1, 0, 0, 1],
                  [0, 1, 0, 0, 0, 0, 0, 1, 0],
                  [0, 0, 0, 0, 0, 0, 1, 0, 1],
                  [1, 0, 0, 0, 0, 1, 0, 0, 0],
                  [1, 1, 1, 1, 1, 1, 1, 1, 1],
                  [1, 0, 1, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 1, 0, 1],
                  [0, 0, 0, 0, 0, 2, 0, 0, 1],
                  [1, 0, 1, 0, 0, 0, 0, 1, 0],
                  [0, 0, 0, 1, 1, 0, 0, 0, 0]])

K = 3  # 假设话题数量为3

# 设置精度为3
np.set_printoptions(precision=3, suppress=True)

z, n_kv, n_mk = gibbs_sampling_lda.fit(words, K)
varphi = gibbs_sampling_lda.weights_[0]
theta = gibbs_sampling_lda.weights_[1]

print("文本的话题序列z:")
print(z)
print("样本的计数矩阵N_KV:")
print(n_kv)
print("样本的计数矩阵N_MK:")
print(n_mk)
print("模型参数varphi:")
print(varphi)
print("模型参数theta:")
print(theta)
文本的话题序列z:
[[0 0 2 2 0 0 0 0 0]
 [0 0 0 0 0 2 0 0 2]
 [0 2 0 0 0 0 0 2 0]
 [0 0 0 0 0 0 2 0 2]
 [2 0 0 0 0 2 0 0 0]
 [2 2 2 2 2 2 2 2 2]
 [2 0 2 0 0 0 0 0 0]
 [0 0 0 0 0 0 2 0 2]
 [0 0 0 0 0 2 0 0 2]
 [2 0 2 0 0 0 0 2 0]
 [0 0 0 2 2 0 0 0 0]]
样本的计数矩阵N_KV:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [2. 2. 2. 2. 2. 9. 2. 2. 2. 3. 2.]]
样本的计数矩阵N_MK:
[[0. 0. 4.]
 [0. 0. 2.]
 [0. 0. 4.]
 [0. 0. 3.]
 [0. 0. 2.]
 [0. 0. 4.]
 [0. 0. 3.]
 [0. 0. 3.]
 [0. 0. 5.]]
模型参数varphi:
[[0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091]
 [0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091 0.091]
 [0.067 0.067 0.067 0.067 0.067 0.293 0.067 0.067 0.067 0.1   0.067]]
模型参数theta:
[[0.067 0.067 0.867]
 [0.111 0.111 0.778]
 [0.067 0.067 0.867]
 [0.083 0.083 0.833]
 [0.111 0.111 0.778]
 [0.067 0.067 0.867]
 [0.083 0.083 0.833]
 [0.083 0.083 0.833]
 [0.056 0.056 0.889]]

习题20.3

  找出LDA的吉布斯抽样算法、变分EM算法中利用狄利克雷分布的部分,思考LDA中使用狄利克雷分布的重要性。

解答:

解答思路:

  1. 写出LDA的吉布斯抽样算法中利用狄利克雷分布的部分
  2. 写出变分EM算法中利用狄利克雷分布的部分
  3. 写出LDA中使用狄利克雷分布的重要性

解答步骤:

  在话题模型中,假设话题是单词的多项分布,文本是话题的多项分布,而狄利克雷分布是多项分布的先验,在进行贝叶斯学习时,需要使用狄利克雷分布作为先验分布,因此要先找出LDA的吉布斯抽样算法和变分EM算法中的多项分布,再找出对应的狄利克雷分布。

第1步:LDA的吉布斯抽样算法

  根据书中第20.3节的LDA模型基本想法:

  LDA模型的学习通常采用收缩的吉布斯抽样方法,基本想法是,通过对隐变量θφ积分,得到边缘概率分布p(w,z|α,β)(也是联合分布),其中变量w是可观测的,变量z是不可观测的;对后验概率分布p(z|w,α,β)进行吉布斯抽样,得到分布p(z|w,α,β)的样本集合;再利用这个样本集合对参数θφ进行估计,最终得到LDA模型p(z|w,α,β)的所有参数估计。

  根据书中第20.3.2节的抽样分布的表达式:

p(w,z|α,β)=p(w|z,α,β)p(z|α,β)=p(w|z,β)p(z|α)

  1. 处理第一个因子p(w|z,β)

  该分布表示在给定话题z和话题-单词分布参数φ下的文本的分布,是一个多项分布。

  根据书中第20.3.2节的公式(20.22):

p(w|z,φ)=k=1Kv=1Vφkvnkv

其中φkv表示第k个话题生成单词集合第v个单词的概率,nkv是数据中第k个话题生成第v个单词的次数。

  现引入该多项分布的共轭先验,有

p(w,φ|z,β)p(w|z,φ)p(φ|β)

  对上式两边求φ的积分得:

p(w|z,β)=p(w,φ|z,β)dφ=p(w|z,φ)p(φ|β)dφ=k=1KB(nk+β)B(β)

  根据假设 p(w|z,β),p(φ|β) 均是多项分布,其中第k个话题的单词分布参数φk的先验分布为

p(φk|β)=Dir(φk|β)

  根据书中第20.3.3节的公式(20.32):

  1. 参数φ={φk}的估计
    后验概率满足
p(φk|w,z,β)=Dir(φk|nk+β)

这里nk={nk1,nk2,,nkV}是第k个话题的单词的计数。

  1. 处理第二个因子 p(z|α)

  该分布表示在给定文本的话题分布参数θ下话题的分布,是一个多项分布。

  根据书中第20.3.2节的公式(20.24):

p(z|θ)=m=1Mk=1Kθmknmk

其中θmk表示第m个文本生成第k个话题的概率,nmk是数据中第m个文本生成第k个话题的次数。

  现引入该多项分布的共轭先验,有

p(z,θ|α)p(z|θ)p(θ|α)

  对上式两边求θ积分得:

p(z|α)=p(z,θ|α)dθ=p(z|θ)p(θ|α)dθ=m=1MB(nm+α)B(α)

  根据假设 p(z,θ|α),p(θ|α)均是多项分布,其中第m个文本的话题分布参数θm的先验分布为

p(θm|α)=Dir(θm|α)

  根据书中第20.3.3节的公式(20.30):

  1. 参数θ={θm}的估计
    后验概率满足
(20.30)p(θm|zm,α)=Dir(θm|nm+α)

这里nm={nm1,nm2,,nmK}是第m个文本的话题的计数。

第2步:LDA的变分EM算法

  根据书中第20.4.3节的变分EM算法:

  将变分EM算法应用到LDA模型的学习上,首先定义具体的变分分布,推导证据下界的表达式,接着推导变分分布的参数和LDA模型的参数估计,最后给出LDA模型的变分EM算法。 为简单起见,一次只考虑一个文本,记作w。文本的单词序列w=(w1,,wn,,wN),对应的话题序列z=(z1,,zn,,zN),以及话题分布θ,随机变量wzθ的联合分布是

(20.42)p(θ,z,w|α,φ)=p(θ|α)n=1Np(zn|θ)p(wn|zn,φ)

其中w是可观测变量,θz是隐变量,αφ是参数。

  根据第1步已证明p(θ|α)是狄利克雷分布,即

p(θ|α)=Dir(θ|α)

  另一部分n=1Np(zn|θ)p(wn|zn,φ)表示给定话题分布θ产生第n个文本的话题序列 p(zn|θ)的概率以及给定话题单词分布参数φ和第n个文本的话题序列zn下产生第n个文本wn的概率,根据第1步已证明均为多项分布。

  根据书中第20.4.3节的公式(20.43):

(20.43)q(θ,z|γ,η)=q(θ|γ)n=1Nq(zn|ηn)

其中γ是狄利克雷分布参数,η=(η1,η2,,ηn)是多项分布参数,变量θz的各个分量都是条件独立的。

  由于 w是可观测变量,变分EM算法就是利用上式的变分分布q(θ,z|γ,η)来近似后验分布p(θ,z|w,α,φ)

  根据书中第20.4.3节的公式(20.44):

  由此得到一个文本的证据下界

L(γ,η,α,φ)=Eq[logp(θ,z,w|α,φ)]Eq[logq(θ,z|γ,η)]

展开证据下界式

L(γ,η,α,φ)=Eq[logp(θ|α)]+Eq[logp(z|θ)]+Eq[logp(w|z,φ)]Eq[logq(θ|γ)]Eq[logq(z|η)]

  每一项都是对应的概率分布关于变分分布q(θ,z|γ,η)的期望,逐一分析:

  1. 第一项包含p(θ|α),含有狄利克雷分布;
  2. 第二项p(z|θ)为多项分布,其中参数θ在变分分布中已假设为狄利克雷分布q(θ|γ)=Dir(θ|γ),含有狄利克雷分布;
  3. 第三项p(w|z,φ)为多项分布,其中参数θ的分布可以根据归一化性质消掉,剩余部分均为多项分布,因此不含狄利克雷分布;
  4. 第四项q(θ|γ) 已假设为狄利克雷分布;
  5. 第五项q(z|η),其中参数θ 的分布根据归一化性质消掉,剩余均为多项分布,故不含狄利克雷分布。

第3步:LDA中使用狄利克雷分布的重要性

  由于LDA话题模型天然具备多项分布的性质,因此在进行贝叶斯学习时,则不可避免地需要引入狄利克雷分布作为多项分布的共轭先验,没有狄利克雷分布就无法进行话题模型的贝叶斯估计。

习题20.4

  给出LDA的吉布斯抽样算法和变分EM算法的算法复杂度。

解答:

解答思路:

  1. 计算LDA的吉布斯抽样算法的算法复杂度

  2. 计算LDA的变分EM算法的算法复杂度:根据书上409页算法20.4和411页算法20.5,同样计算循环次数以及每次循环的代价,注意这里需要分别考虑 E 步和 M 步的代价,最后加起来即为 LDA 变分EM算法的复杂度。

解答步骤:

第1步:LDA的吉布斯抽样算法的算法复杂度

  根据书中第20章的算法20.2(LDA吉布斯抽样算法),假设迭代次数为T

  1. 第1、2步均为初始化相关,对于所有文本 wm,需要进行M次循环,即文本数量;对于第m个文本中的所有单词 wmn,需要进行Nm次循环,即第m个文本包含的单词数,因此一共进行TMNm次循环,故复杂度为TMNm

  2. 第3步为迭代,每次循环过程中,第3.a、3.c和3.d步均为固定更新,算法复杂度均为1

  3. 第3.b步涉及到随机采样,该公式第一个因子表示话题生成该位置单词的概率,计算复杂度为V,即词典大小;第二个因子表示该位置的文本生成话题的概率,计算复杂度为K,即话题数量;由于词典大小远大于话题数量,这里可以近似认为计算复杂度为V

  因此,总算法复杂度为TMNmV

第2步:LDA的变分EM算法

  根据书中第20章的算法20.5(LDA的变分EM算法),假设迭代次数为T

  1. E步:估计变分参数γ,η,假设重复 NE 次后收敛,根据书中第409页算法20.4(LDA的变分参数估计算法)中的第4、5步的循环次数为 NENK次;第6步在计算Ψ(l=1Kγl(t))时的算法复杂度为K,其余计算的复杂度均为1
    则每次总算法复杂度为NENKK

  2. M步:估计模型参数 α,φ,根据书中公式(20.63)

L[φw]=m=1Mn=1Nmk=1Kv=1Vηmnkwmnvlogφkv+k=1Kλk(v=1Vφkv1)

φkv求偏导并令其为零,归一化求解,得到参数φkv的估计值

φkvm=1Mn=1Nmηmnkwmmv

其算法复杂度为MNm
再通过证据下界的最大化估计参数 α,根据公式(20.65)

L|α|=m=1M{logΓ(l=1Kαl)k=1KlogΓ(αk)+k=1K(αk1)[Ψ(γmk)Ψ(l=1Kγml)]}

计算其关于α的Hessian矩阵,然后应用牛顿法求该函数的最大化,假设牛顿法迭代次数为NMα包含K个话题的狄利克雷分布参数,牛顿法的计算复杂度为NMKK
则每次总算法复杂度为MNm+NMKK

  最后一共进行了 T 次 EM 算法的迭代,因此,总算法复杂度为T(NENKK+MNm+NMKK)

习题20.5

  证明变分EM算法收敛。

解答:

解答思路:

  1. 给出变分EM算法
  2. 给出EM算法的收敛性
  3. 证明在变分EM算法中,证据下界随着迭代进行单调递增

解答步骤:

第1步:变分EM算法

  根据书中第20章的算法20.3:

  假设模型式联合概率分布p(x,z|θ),其中x是观测变量,z是隐变量,θ是参数。目标是通过观测数据的概率(证据)logp(x|θ)的最大化,估计模型的参数θ。使用变分推理,导入平均场q(z)=i=1nq(zi),定义证据下界

(20.39)L(q,θ)=Eq[logp(x,z|θ)]Eq[logq(z)]

通过迭代,分别以qθ为变量时对证据下界进行最大化,就得到变分EM算法。

算法20.3(变分EM算法)
循环执行以下E步和M步,直到收敛。
(1)E步:固定θ,求L(q,θ)q的最大化。
(2)M步:固定q,求L(q,θ)θ的最大化。
给出模型参数θ的估计值。

第2步:EM算法的收敛性

  根据书中第9.2节的定理9.1:

  定理9.1P(Y|θ)为观测数据的似然函数,θ(i)(i=1,2,)为EM算法得到的参数估计序列,P(Y|θ(i))(i=1,2,)为对应的似然函数序列,则P(Y|θi)是单调递增的,即

P(Y|θ(i+1))P(Y|θ(i))

  根据书中第9.2节的定理9.2:

  定理9.2L(θ)=logP(Y|θ)为观测数据的对数似然函数,θ(i)(i=1,2,)为EM算法得到的参数估计序列,L(θ(i))(i=1,2,)为对应的对数似然函数序列。
  (1)如果P(Y|θ)有上界,则L(θ(i))=logP(Y|θ(i))收敛到某一值L
  (2)在函数Q(θ,θ)L(θ)满足一定条件下,由EM算法得到的参数估计序列θ(i)的收敛值θL(θ)的稳定点。

第3步:证明在变分EM算法中,证据下界随着迭代进行单调递增

  对于证据下界

(1)L(q,θ)=Eq[logp(x,z|θ)]Eq[logq(z)]

  假设迭代次数从tt1

  1. E步:固定θ,求L(q,θ(t1))q的最大化,由于 logp(x|θ)并不依赖于q(z),所以 L(q(t),θ(t1))的最大值出现在KL散度等于0的时候,即q(z)与后验概率分布q(z|x,θ(t1))相等的时候,此时有证据下界等于对数似然函数,即
(2)logp(x|θ(t1))=L(q(t),θ(t1))

  如下图所示

  1. M步:固定q(z)L(q,θ)θ的最大化,更新模型参数θ,此时下界L(q,θ) 增⼤,有
(3)L(q(t),θ(t1))L(q(t),θ(t))

  由于 q 由模型参数 θ(t1) 确定,并且在 M 步中固定,所以它不会等于更新新的后验概率分布 p(z|x,θ(t)), 因此 KL 散度⾮零,对数似然函数的增量⼤于证据下界的增量,即

(4)L(q(t),θ(t))logp(x|θ(t))

  如下图所示

  结合公式(2)、(3)、(4),可得

logp(x|θ(t1))logp(x|θ(t))

  即证得在变分EM算法中,logp(x|θ)每次迭代都保证单调递增,根据第2步的定理9.1和定理9.2,因此最后一定收敛。