平均场变分推断:以混合高斯模型为例

2024-09-03 18:38

本文主要是介绍平均场变分推断:以混合高斯模型为例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、贝叶斯推断的工作流
    • 二、一个业务例子
    • 三、变分推断
    • 四、平均场理论
    • 五、业务CASE的平均场变分推断求解
    • 六、代码实现

一、贝叶斯推断的工作流

在贝叶斯推断方法中,工作流可以总结为:

  1. 根据观察者的知识,做出合理假设,假设数据是如何被生成的
  2. 将数据的生成模型转化为数学模型
  3. 根据数据通过数学方法,求解模型参数
  4. 对新的数据做出预测

在这里插入图片描述

在整个pipeline中,第1点数据的生成过程,这是业务相关的,需要丰富的领域知识。第二点是连接业务领域和数学领域的桥梁,一般称之为数学建模,第3点是存粹的数学步骤,使用数学工具求解模型参数。第4步为业务应用,为业务做出预测和推断结果。

二、一个业务例子

下面以一个业务例子来实践这个pipeline。假设在我们的app中总用户数为k,并且在app的数据库中记录了用户每日使用时长的增长量,假设我们没有任何关于用户的唯一id,能观测到的只有增量值: [-6.04231708, -1.64784446, ..., 1.63898137, -4.29063685, -0.87892713] ,我们需要做的是为每个用户赋予一个用户id,并且在未来时刻给定某个用户使用时长增量,将这个时长增量归属到其用户id上,如此便可以建立每个用户的使用时长记录,以便在商业上分析用户行为。

首先,于是我们根据业务知识,知道用户产生时长增量记录的过程为:

  1. 某个用户 c k c_k ck 登录系统
  2. 用户产生一条使用时长增量记录 x i x_i xi,

然后,我们将这个过程建模为数学问题:假设登录到系统上的用户为 k ′ k' k的概率是均匀分布的,概率都为 1 k \frac{1}{k} k1,并且用户 k ′ k' k生的时长增量为一个随机变量,其符合均值为 u k u_k uk, 标准差为 1 1 1的分布,并且 u k u_{k} uk自身也是符合均值为0,方差为 σ \sigma σ的高斯分布,特别注意的是 σ \sigma σ是一个人工设定的超参数,为领域专家根据先验知识调整的。数学化的表述如下:
μ k ∼ N ( 0 , σ 2 ) , k = 1 , … , K c i ∼ Categorical ⁡ ( 1 / K , … , 1 / K ) , i = 1 , … , n x i ∣ c i , μ ∼ N ( c i ⊤ μ , 1 ) i = 1 , … , n \begin{aligned} \mu_{k} & \sim \mathcal{N}\left(0, \sigma^{2}\right), & k &=1, \ldots, K \\ c_{i} & \sim \operatorname{Categorical}(1 / K, \ldots, 1 / K), & & i=1, \ldots, n \\ x_{i} | c_{i}, \mu & \sim \mathcal{N}\left(c_{i}^{\top} \mu, 1\right) & & i=1, \ldots, n \end{aligned} μkcixici,μN(0,σ2),Categorical(1/K,,1/K),N(ciμ,1)k=1,,Ki=1,,ni=1,,n
其中 c i c_i ci为指示向量,它指明了当前这条数据 x i x_i xi是由哪个用户产生的,假如由用户1产生的,那么对应的指示向量为 c i = [ 0 , 1 , 0 , . . . , 0 , 0 ] c_i=[0,1,0,...,0,0] ci=[0,1,0,...,0,0] u u u为k维向量,每一维度为 u k u_k uk, 即 u = [ u 1 , u 2 , . . . , u k ] u=[u_1, u_2, ..., u_k] u=[u1,u2,...,uk]根据上面的描述,我们可以用python代码写出整个数据产生的过程:

def gen_data(sigma, k, n):#获取u_ku_k = np.random.normal(0, sigma, k)print(u_k)x = []c = []for i in range(n):ci = random.choice(range(k))c.append(ci)u = u_k[ci]x.append(np.random.normal(u, 1))return x, u_k, c

我们使用这个函数产生 ( σ = 10 , k = 10 ) (\sigma=10, k=10) (σ=10,k=10)实验室数据,采样得到的 u = [ − 34.59 , − 30.27 , − 20.69 , − 19.65 , − 8.04 , 3.0 , 13.79 , 14.6 , 15.65 , 26.56 ] u=[-34.59, -30.27, -20.69, -19.65, -8.04, 3.0, 13.79, 14.6, 15.65, 26.56] u=[34.59,30.27,20.69,19.65,8.04,3.0,13.79,14.6,15.65,26.56], 数据x分布如下图:

在这里插入图片描述

于是我们的目标是根据数据x,去计算得出 u u u,然后未来有数据 x ′ x' x到来时查看数据与 u i ∈ k u_{i\in k} uik的距离,选择距离最近的 i = a r g m i n i d i s ( u i ∈ k , x ′ ) i=argmin_{i} dis(u_{i \in k}, x') i=argminidis(uik,x)赋予该条数据作为其用户id即可。

三、变分推断

上述问题的思路很直接,就是根据条件概率公式,计算 u , c u, c u,c的后验分布,选择后验概率最大的 u , c u, c u,c即可
p ( u , c ∣ x ) = p ( u , c , x ) p ( x ) p(u, c|x)=\frac{p(u, c, x)}{p(x)} p(u,cx)=p(x)p(u,c,x)
OK, 说干就干,首先根据第二节的数学模型,写出分子部分:
p ( μ , c , x ) = p ( μ ) ∏ i = 1 n p ( c i ) p ( x i ∣ c i , μ ) (1) p(\mathbf \mu, \mathbf{c}, \mathbf{x})=p(\mu) \prod_{i=1}^{n} p\left(c_{i}\right) p\left(x_{i} | c_{i}, \mu\right) \tag{1} p(μ,c,x)=p(μ)i=1np(ci)p(xici,μ)(1)
然后写出分母部分:
p ( x ) = ∫ p ( μ ) ∏ i = 1 n ∑ c i p ( c i ) p ( x i ∣ c i , μ ) d μ p(\mathbf{x})=\int p(\boldsymbol{\mu}) \prod_{i=1}^{n} \sum_{c_{i}} p\left(c_{i}\right) p\left(x_{i} | c_{i}, \mu\right) \mathrm{d} \mu p(x)=p(μ)i=1ncip(ci)p(xici,μ)dμ
这个问题在于计算 p ( x ) p(x) p(x)存在一个对 u u u的多维积分,在这个例子中,有10个用户即意味着10维积分,计算复杂度随着 u u u的维度指数增长,在现实世界里 u u u的维度小则几千几万,大则千万上亿,计算 p ( x ) p(x) p(x)是现有计算机的计算能力无法完成的,变分推断的出现就是为了解决这个难题。

变分推断的思路是将该问题转换为一个最优化问题,并通过现有高效的最优化方法来进行求解。首先我们将无法观测到的隐藏变量聚拢为 z = ( u , c ) z=(u, c) z=(u,c),然后使用一个分布 q ( z ) q(z) q(z)来逼近 p ( z ∣ x ) p(z|x) p(zx),两个分布之间的逼近程度用KL散度来衡量,于是我们的问题被转化成为了一个最小化 K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) KL(q(z)||p(z|x)) KL(q(z)p(zx))的最优化问题,形式化地表述为:
q ( z ) ∗ = arg ⁡ min ⁡ q ( z ) K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) q(z)^*=\mathop{\arg \min}_{q(z)} KL(q(z)||p(z|x)) q(z)=argminq(z)KL(q(z)p(zx))
我们将KL散度展开为:
KL ⁡ ( q ( z ) ∥ p ( z ∣ x ) ) = E q ( z ) [ log ⁡ q ( z ) ] − E q ( z ) [ log ⁡ p ( z ∣ x ) ] = E q ( z ) [ log ⁡ q ( z ) ] − E q ( z ) [ log ⁡ p ( z , x ) ] + log ⁡ p ( x ) \begin {aligned} \operatorname{KL}(q(\mathbf{z}) \| p(\mathbf{z} | \mathbf{x})) &= \mathbb{E}_{q(z)}[\log q(\mathbf{z})]-\mathbb{E}_{q(z)}[\log p(\mathbf{z} | \mathbf{x})] \\ &= \mathbb{E}_{q(z)}[\log q(\mathbf{z})]-\mathbb{E}_{q(z)}[\log p(\mathbf{z,x})] +\log p(x) \end {aligned} KL(q(z)p(zx))=Eq(z)[logq(z)]Eq(z)[logp(zx)]=Eq(z)[logq(z)]Eq(z)[logp(z,x)]+logp(x)
在最小化的过程中由于 log ⁡ p ( x ) \log p(x) logp(x)难以计算,于是退而求其次,稍作变换最小化目标为 E q ( z ) [ log ⁡ q ( z ) ] − E q ( z ) [ log ⁡ p ( z , x ) ] \mathbb{E}_{q(z)}[\log q(\mathbf{z})]-\mathbb{E}_{q(z)}[\log p(\mathbf{z,x})] Eq(z)[logq(z)]Eq(z)[logp(z,x)], 等同于最大化其取负后的结果,形式化地表述如下:
q ( z ) ∗ = arg ⁡ max ⁡ q ( z ) E q ( z ) [ log ⁡ p ( z , x ) ] − E q ( z ) [ log ⁡ q ( z ) ] q(z)^*=\mathop{\arg \max}_{q(z)} \mathbb{E}_{q(z)}[\log p(\mathbf{z}, \mathbf{x})]-\mathbb{E}_{q(z)}[\log q(\mathbf{z})] q(z)=argmaxq(z)Eq(z)[logp(z,x)]Eq(z)[logq(z)]
上述地优化目标被称之为evidence lower bound ,即ELBO, 国内有翻译为“证据下界”,也有翻译为“变分下界”。换个角度来看ELBO,其实 E L B O ( q ( z ) ) = log ⁡ p ( x ) − K L ( q ( z ) ∣ ∣ p ( z ∣ x ) ) ELBO(q(z))=\log p(x) - KL(q(z)||p(z|x)) ELBO(q(z))=logp(x)KL(q(z)p(zx)),因为KL散度的非负性,于是有:
log ⁡ p ( x ) ≥ E L B O ( q ( z ) ) \log p(x) \ge ELBO(q(z)) logp(x)ELBO(q(z))
所以本质上最大化ELBO就是在最大化 log ⁡ p ( x ) \log p(x) logp(x),这一点在最大似然估计和最大后验估计上思路都是相似的。最后,只要我们最后选择一个参数化的 q ( z ) q(z) q(z),然后使用最优化算法即可求解原问题。

四、平均场理论

选取合适的参数化 q ( z ) q(z) q(z)可以使得求解原问题变得简单易行,当我们取 q ( z ) = q ( z ∣ x ; θ t ) q(z)=q(z|x; \theta_t) q(z)=q(zx;θt)时,就得到了EM算法,具体展开ELBO并且迭代求解即可。但这里介绍另一种求解方法: 平均场。平均场理论并不假设具体 q ( z ) q(z) q(z)的函数形式,但它假设隐变量之间相互独立:
q ( z ) = ∏ j = 1 m q j ( z j ) q(\mathbf{z})=\prod_{j=1}^{m} q_{j}\left(z_{j}\right) q(z)=j=1mqj(zj)
这在很多场合下是符合直觉的,例如在上述场景中,用户使用时长的增量分布大都由自身兴趣爱好决定,两个用户之间对app的使用的时长程度并不相关。

为了求解模型,我们将平均场假设带入ELBO,首先处理第一部分:
E q ( z ) [ log ⁡ p ( z , x ) ] = ∫ q ( z ) log ⁡ p ( z , x ) d z = ∫ ∏ i q ( z i ) log ⁡ p ( z , x ) d z i = ∫ q ( z j ) [ ∫ ∏ i ≠ j q ( z i ) log ⁡ p ( z , x ) d z i ] d z j = ∫ q ( z j ) E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] d z j \begin {aligned} \mathbb{E}_{q(z)}[\log p(\mathbf{z}, \mathbf{x})] &= \int q(\mathbf{z}) \log p(\mathbf{z}, \mathbf{x}) d\mathbf{z} \\ &= \int \prod_{i} q(z_i) \log p(\mathbf{z}, \mathbf{x}) dz_i \\ &= \int q(z_j) \left[ \int \prod_{i \neq j} q(z_i) \log p(\mathbf{z}, \mathbf{x}) dz_i \right ] dz_j \\ &= \int q(z_j) \mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right]dz_j \end {aligned} Eq(z)[logp(z,x)]=q(z)logp(z,x)dz=iq(zi)logp(z,x)dzi=q(zj)i=jq(zi)logp(z,x)dzidzj=q(zj)Eq(zi=j)[logp(z,x)]dzj
接着处理第二部分:
E q ( z ) [ log ⁡ q ( z ) ] = E q ( z j ) [ log ⁡ q j ( z j ) ] − E q i ≠ j ( z i ) [ ∑ i ≠ j log ⁡ q i ( z i ) ] = [ ∫ q ( z j ) log ⁡ q ( z j ) d z j ] − E q i ≠ j ( z i ) [ ∑ i ≠ j log ⁡ q i ( z i ) ] \begin {aligned} \mathbb{E}_{q(z)}[\log q(\mathbf{z})] &= \underset{q\left(z_{j}\right)}{\mathbb{E}}\left[\log q_{j}\left(z_{j}\right)\right]-\underset{q_{i\neq j}\left(z_{i}\right)}{\mathbb{E}}\left[\sum_{i \neq j} \log q_{i}\left(z_{i}\right)\right] \\ &= \left[ \int q(z_j) \log q(z_j) dz_j \right] - \underset{q_{i\neq j}\left(z_{i}\right)}{\mathbb{E}}\left[\sum_{i \neq j} \log q_{i}\left(z_{i}\right)\right] \end {aligned} Eq(z)[logq(z)]=q(zj)E[logqj(zj)]qi=j(zi)Ei=jlogqi(zi)=[q(zj)logq(zj)dzj]qi=j(zi)Ei=jlogqi(zi)
两部分合起来得到:
E L B O ( q ( z ) ) = [ ∫ q ( z j ) E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] d z j ] − [ ∫ q ( z j ) log ⁡ q ( z j ) d z j ] + E q i ≠ j ( z i ) [ ∑ i ≠ j log ⁡ q i ( z i ) ] ELBO(q(\mathbf z))=\left[ \int q(z_j) \mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right]dz_j \right] - \left[ \int q(z_j) \log q(z_j) dz_j \right] + \underset{q_{i\neq j}\left(z_{i}\right)}{\mathbb{E}}\left[\sum_{i \neq j} \log q_{i}\left(z_{i}\right)\right] ELBO(q(z))=[q(zj)Eq(zi=j)[logp(z,x)]dzj][q(zj)logq(zj)dzj]+qi=j(zi)Ei=jlogqi(zi)
这里利用坐标上升法进行优化在每一轮迭代时,将 q ( z i ≠ j ) q(z_{i \neq j}) q(zi=j)固定,然后优化 q ( z j ) q(z_j) q(zj)。于是我们能把注意力集中到 q ( z j ) q(z_j) q(zj)上来,在上面式子中 q ( z i ≠ j ) q(z_{i \neq j}) q(zi=j)已经固定,这时候 E q i ≠ j ( z i ) [ ∑ i ≠ j log ⁡ q i ( z i ) ] = c \underset{q_{i\neq j}\left(z_{i}\right)}{\mathbb{E}}\left[\sum_{i \neq j} \log q_{i}\left(z_{i}\right)\right]=c qi=j(zi)E[i=jlogqi(zi)]=c为常数,于是上面式子可以简化一下:
E L B O ( q ( z j ) ) = [ ∫ q ( z j ) E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] d z j ] − [ ∫ q ( z j ) log ⁡ q ( z j ) d z j ] + c ELBO(q(z_j))=\left[ \int q(z_j) \mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right]dz_j \right] - \left[ \int q(z_j) \log q(z_j) dz_j \right] + c ELBO(q(zj))=[q(zj)Eq(zi=j)[logp(z,x)]dzj][q(zj)logq(zj)dzj]+c
最后我们令 log ⁡ D = E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] \log D=\mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right] logD=Eq(zi=j)[logp(z,x)], 于是得到:
E L B O ( q ( z j ) ) = [ ∫ q ( z j ) log ⁡ D d z j ] − [ ∫ q ( z j ) log ⁡ q ( z j ) d z j ] + c = − K L ( q ( z j ) ∣ ∣ D ) + c \begin {aligned} ELBO(q(z_j)) &= \left[ \int q(z_j) \log D dz_j \right] - \left[ \int q(z_j) \log q(z_j) dz_j \right] + c \\ &= -KL(q(z_j)||D) + c \end {aligned} ELBO(q(zj))=[q(zj)logDdzj][q(zj)logq(zj)dzj]+c=KL(q(zj)D)+c
由KL散度可以知道当取 q ( z j ) = D q(z_j)=D q(zj)=D即:
q ( z j ) = e E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] (2) q(z_j)=e^{\mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right]} \tag{2} q(zj)=eEq(zi=j)[logp(z,x)](2)

时KL散度最小为0,有 E B L O ( q ( z j ) ) = c EBLO(q(z_j))=c EBLO(q(zj))=c最大。于是我们得到了平均场变分推断算法:

  1. 迭代计算每一个 q ( z j ) = e E q ( z i ≠ j ) [ log ⁡ p ( z , x ) ] q(z_j)=e^{\mathbb{E}_{q(z_{i\neq j})} \left[ \log p(\mathbf{z}, \mathbf{x}) \right]} q(zj)=eEq(zi=j)[logp(z,x)]
  2. 计算 E L B O ( q ( z ) ) ELBO(q(\mathbf z)) ELBO(q(z)),如果ELBO收敛,则结束,否则返回第一步

五、业务CASE的平均场变分推断求解

为了求解第三节中的问题,根据平均场变分推断的思路,我们先假设隐变量 u k u_k uk的分布满足均值为 m k m_k mk, 方差为 s k s_k sk,而隐变量 c i c_i ci由参数 φ i \varphi_i φi决定, 参数也是k维向量,每一维度指定了 c i c_i ci对应维度为1的概率,即:
q ( c i ; φ i ) = ∑ k c i k φ i k (3) q(c_i;\varphi_i)=\sum_k c_{ik}\varphi_{ik} \tag{3} q(ci;φi)=kcikφik(3)

于是根据平均场假设有:
p ( μ , c ) = ∏ k q ( μ k ; m k , s k ) ∏ i q ( c i ; φ i ) p(\mathbf \mu, \mathbf c)=\prod_{k}q(\mu_k;m_k,s_k)\prod_iq(c_i;\varphi_i) p(μ,c)=kq(μk;mk,sk)iq(ci;φi)
式子(1)被重写为:
p ( μ , c , x ) = ∏ k p ( μ k ; m k , s k ) ∏ i p ( c i ; φ i ) p ( x i ∣ c i , μ ) p(\mathbf \mu, \mathbf c, \mathbf x) = \prod_k p(\mu_k;m_k,s_k) \prod_i p(c_i;\varphi_i) p(x_i|c_i,\mathbf \mu) p(μ,c,x)=kp(μk;mk,sk)ip(ci;φi)p(xici,μ)
于是ELBO为:
E L B O ( m , s , φ ) = ∑ k E q ( μ k ; m k , s k ) [ log ⁡ p ( u k ; m k , s k ) ] + ∑ i ( E q ( c i ; φ i ) [ log ⁡ p ( c i ; φ i ) ] + E q ( c i ; φ i ) [ log ⁡ p ( x i ∣ c i , μ ; m , s , φ i ) ] ) − ∑ k E q ( μ k ; m k , s k ) [ log ⁡ q ( μ k ; m k , s k ) ] − ∑ i E q ( c i ; φ i ) [ log ⁡ q ( c i ; φ i ) ] (4) \begin {aligned} ELBO(\mathbf m, \mathbf s,\mathbf \varphi) &= \sum_k \mathbb E_{q(\mu_k;m_k,s_k)} \left[ \log p(u_k;m_k,s_k) \right] \\ &+ \sum_i \left( \mathbb E_{q(c_i;\varphi_i)} \left[ \log p(c_i; \varphi_i) \right] + \mathbb E_{q(c_i;\varphi_i)} \left[ \log p(x_i|c_i,\mathbf \mu; \mathbf m, \mathbf s, \varphi_i) \right] \right) \\ & - \sum_k \mathbb E_{q(\mu_k;m_k,s_k)}\left[ \log q(\mu_k;m_k, s_k) \right] \\ & - \sum_i \mathbb E_{q(c_i;\varphi_i)} \left[ \log q(c_i; \varphi_i) \right] \end {aligned} \tag{4} ELBO(m,s,φ)=kEq(μk;mk,sk)[logp(uk;mk,sk)]+i(Eq(ci;φi)[logp(ci;φi)]+Eq(ci;φi)[logp(xici,μ;m,s,φi)])kEq(μk;mk,sk)[logq(μk;mk,sk)]iEq(ci;φi)[logq(ci;φi)](4)
在算法运行的每一轮迭代中,先求解 q ( c i ; φ i ) q(c_i; \varphi_i) q(ci;φi)
log ⁡ q ( c i ; φ i ) = E q ( μ ; m , s ) [ log ⁡ p ( c , μ , x ) ] = log ⁡ p ( c i ) + E q ( μ ; m , s ) [ log ⁡ p ( x i ∣ c i , μ ; m , s , φ i ) ] \begin {aligned} \log q(c_i; \varphi_i) &= \mathbb{E}_{q(\mathbf \mu;\mathbf m,\mathbf s)} \left[ \log p(\mathbf c, \mathbf{\mu}, \mathbf{x}) \right] \\ &= \log p(c_i) + \mathbb{E}_{q(\mathbf \mu;\mathbf m,\mathbf s)} \left[ \log p(x_i|c_i,\mathbf \mu; \mathbf m, \mathbf s, \varphi_i) \right] \end {aligned} logq(ci;φi)=Eq(μ;m,s)[logp(c,μ,x)]=logp(ci)+Eq(μ;m,s)[logp(xici,μ;m,s,φi)]
根据业务上的定义 log ⁡ p ( c i ) = − log ⁡ k \log p(c_i)=-\log k logp(ci)=logk为常数,并且根据 c i c_i ci的定义有 p ( x i ∣ c i , μ ) = ∏ k p ( x ∣ μ k ) c i k p(x_i|c_i, \mathbf \mu)=\prod_k p(x|\mu_k)^{c_{ik}} p(xici,μ)=kp(xμk)cik, 其中 c i k c_{ik} cik c i c_i ci的第k维值,于是
log ⁡ q ( c i ; φ i ) = E q ( μ ; m , s ) [ log ⁡ p ( x i ∣ c i , μ ; m , s , φ i ) ] + c o n s t = ∑ k c i k E q ( μ k ; m k , s k ) [ log ⁡ p ( x i ∣ μ k ; m k , s k ) ] + c o n s t = ∑ k c i k E q ( μ k ; m k , s k ) [ − ( x i − μ k ) 2 2 ; m k , s k ] + c o n s t = ∑ k c i k ( E q ( μ k ; m k , s k ) [ μ k ; m k , s k ] x i − 1 2 E q ( μ k ; m k , s k ) [ μ k 2 ; m k , s k ] ) + c o n s t (5) \begin{aligned} \log q(c_i; \varphi_i) &= \mathbb{E}_{q(\mathbf \mu;\mathbf m,\mathbf s)} \left[ \log p(x_i|c_i,\mathbf \mu; \mathbf m, \mathbf s, \varphi_i) \right] + const\\ &= \sum_k c_{ik}\mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[ \log p(x_i|\mathbf \mu_k; m_k, s_k) \right] + const \\ &= \sum_k c_{ik}\mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[ \frac{-(x_i-\mu_k)^2}{2}; m_k, s_k \right] + const \\ &= \sum_k c_{ik} \left( \mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[ \mu_k;m_k, s_k \right]x_i - \frac{1}{2} \mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[\mu_k^2;m_k,s_k\right] \right) + const \end{aligned} \tag{5} logq(ci;φi)=Eq(μ;m,s)[logp(xici,μ;m,s,φi)]+const=kcikEq(μk;mk,sk)[logp(xiμk;mk,sk)]+const=kcikEq(μk;mk,sk)[2(xiμk)2;mk,sk]+const=kcik(Eq(μk;mk,sk)[μk;mk,sk]xi21Eq(μk;mk,sk)[μk2;mk,sk])+const(5)
对比式子(3)和(5), 很显然有:
φ i k = e E q ( μ k ; m k , s k ) [ μ k ; m k , s k ] x i − 1 2 E q ( μ k ; m k , s k ) [ μ k 2 ; m k , s k ] \varphi_{ik} = e^{\mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[ \mu_k;m_k, s_k \right]x_i - \frac{1}{2} \mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[\mu_k^2;m_k,s_k\right]} φik=eEq(μk;mk,sk)[μk;mk,sk]xi21Eq(μk;mk,sk)[μk2;mk,sk]
在这里根据 q ( μ k ; m k , s k ) q(\mu_k;m_k,s_k) q(μk;mk,sk)的定义,可以知道 E q ( μ k ; m k , s k ) [ μ k ; m k , s k ] x i = m k x i \mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[ \mu_k;m_k, s_k \right]x_i=m_kx_i Eq(μk;mk,sk)[μk;mk,sk]xi=mkxi E q ( μ k ; m k , s k ) [ μ k 2 ; m k , s k ] = s k 2 + m k 2 \mathbb{E}_{q(\mathbf \mu_k;m_k,s_k)} \left[\mu_k^2;m_k,s_k\right]=s_k^2+m_k^2 Eq(μk;mk,sk)[μk2;mk,sk]=sk2+mk2于是:
φ i k = m k − 1 2 ( s k 2 + m k 2 ) (6) \varphi_{ik}=m_k-\frac{1}{2}(s_k^2+m_k^2) \tag{6} φik=mk21(sk2+mk2)(6)

接下来 继续来求解 q ( μ k ; m k , s k ) q(\mu_k;m_k,s_k) q(μk;mk,sk)
log ⁡ q ( μ k ; m k , s k ) = log ⁡ p ( μ k ) + ∑ i E q ( c i , μ k ) [ log ⁡ p ( x i ∣ c i , μ k ; φ i , m − k , s − k ) ] = − μ k 2 2 σ 2 + ∑ i φ i k ( − ( x i − u k ) 2 2 ) + c o n s t = μ k ( ∑ i φ i k x i ) − μ k 2 ( 1 2 σ 2 + ∑ i φ i k 2 ) + c o n s t (7) \begin {aligned} \log q(\mu_k;m_k,s_k) &= \log p(\mu_k) + \sum_i \mathbb E_{q(c_i,\mathbf \mu_{k})}\left[ \log p(x_i|c_i, \mathbf \mu_k; \varphi_i, \mathbf m_{-k}, \mathbf s_{-k}) \right] \\ &= -\frac{\mu_k^2}{2\sigma^2} + \sum_i \varphi_{ik} \left(\frac{-(x_i-u_k)^2}{2} \right) + const \\ &= \mu_k \left( \sum_i\varphi_{ik}x_i \right) - \mu_k^2 \left( \frac{1}{2\sigma^2} + \sum_i \frac{\varphi_{ik}}{2} \right) + const \end {aligned} \tag{7} logq(μk;mk,sk)=logp(μk)+iEq(ci,μk)[logp(xici,μk;φi,mk,sk)]=2σ2μk2+iφik(2(xiuk)2)+const=μk(iφikxi)μk2(2σ21+i2φik)+const(7)
观察高斯分布的形式 p ( x ) = 1 2 π s e − ( x − μ ) 2 2 s 2 p(x)=\frac{1}{\sqrt{2\pi}s}e^{\frac{-(x-\mu)^2}{2s^2}} p(x)=2π s1e2s2(xμ)2于是有:
log ⁡ p ( x ) = − log ⁡ ( 2 π s ) − ( x − μ ) 2 2 s 2 = − log ⁡ ( 2 π s ) − x 2 2 s 2 − μ 2 2 s 2 + x μ s 2 (8) \begin{aligned} \log p(x) &= -\log (\sqrt{2\pi}s) - \frac{(x-\mu)^2}{2s^2} \\ &= -\log (\sqrt{2\pi}s) - \frac{x^2}{2s^2}-\frac{\mu^2}{2s^2} + \frac{x\mu}{s^2} \end{aligned} \tag{8} logp(x)=log(2π s)2s2(xμ)2=log(2π s)2s2x22s2μ2+s2xμ(8)
对比(7)和(8)式,可见实际上 q ( u k ; m k , s k ) q(u_k;m_k, s_k) q(uk;mk,sk)是一个高斯分布,于是可以令:
1 2 s k 2 = 1 2 σ 2 + ∑ i φ i k 2 \frac{1}{2s_k^2}=\frac{1}{2\sigma^2} + \sum_i \frac{\varphi_{ik}}{2} 2sk21=2σ21+i2φik
可以解出来:
s k = 1 1 σ 2 + ∑ i φ i k (9) s_k= \frac{1}{\sqrt{\frac{1}{\sigma^2}+\sum_i \varphi_{ik}}} \tag{9} sk=σ21+iφik 1(9)
同理可以令:
m k s k 2 = ∑ i φ i k x i (10) \frac{m_k}{s_k^2}=\sum_i \varphi_{ik}x_i \tag{10} sk2mk=iφikxi(10)
把(9)带入即可解得:
m k = ∑ i φ i k x i 1 σ 2 + ∑ i φ 1 k (11) m_k=\frac{\sum_i \varphi_{ik}x_i}{\frac{1}{\sigma^2}+\sum_i \varphi_{1k}} \tag{11} mk=σ21+iφ1kiφikxi(11)
最后我们得到了所有参数的更新公式,总结求解过程为:

  1. 随机初始化所有参数 φ , m , s \mathbf \varphi, \mathbf m, \mathbf s φ,m,s
  2. 按照(6)式子更新每一个参数参数 φ i \varphi_i φi
  3. 按照(9)式更新每一个参数 s k s_k sk
  4. 按照(10)式更新每一个参数 m k m_k mk
  5. 按照(4)式计算ELBO, 如果ELBO收敛则结束,否则返回第1步

六、代码实现

根据上述算法的描述,可以写出实现代码,但第5步可以不需要计算ELBO, 直接迭代n步之后结束即可,具体代码如下:

def solve(x, k, sigma, ephco=20):"""x: 输入数据k: 超参数k,c_i的维度,在业务CASE中等于用户数sigma: 超参数,需要人工调整"""n = len(x)phis = np.random.random([n, k])mk = np.random.random([k])sk = np.random.random([k])for _ in range(epoch):for i in range(n):phi_i_k = []for _k in range(k):#根据公式(6)更新参数phi_ikphi_i_k.append(np.exp(mk[_k]*x[i] - (sk[_k]**2 + mk[_k]**2)/2))sum_phi = sum(phi_i_k)phi_i_k = [phi/sum_phi for phi in phi_i_k]phis[i] = phi_i_kden = np.sum(phis, axis=0) + 1/(sigma**2)#根据公式(10)更新m_kmk = np.matmul(x, phis)/den#根据公式(11)更新s_ksk = np.sqrt(1/den)return mk, sk, phis

输入第二节中生成的数据x和超参数后,求解得到 m = [ − 32.44 , − 20.15 , − 8.14 , − 7.89 , 2.79 , 3.15 , 13.78 , 14.72 , 15.65 , 26.58 ] m=[-32.44, -20.15, -8.14, -7.89, 2.79, 3.15, 13.78, 14.72, 15.65, 26.58] m=[32.44,20.15,8.14,7.89,2.79,3.15,13.78,14.72,15.65,26.58], 对比第二节的真实参数 u u u十分接近。从图像上, 根据求解出来的参数 m , s , φ \mathbf m, \mathbf s, \mathbf \varphi m,s,φ模拟采样数据,得到的数据分布也与真实数据分布十分接近(蓝色为真实数据,橙色为模拟采样数据)

在这里插入图片描述

这篇关于平均场变分推断:以混合高斯模型为例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1133730

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者