凯鲁嘎吉
用书写铭记日常,最迷人的不在远方

变分深度嵌入(Variational Deep Embedding, VaDE)

作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/

    这篇博文主要是对论文“Variational Deep Embedding: An Unsupervised and Generative Approach to Clustering”的整理总结,阅读这篇博文的前提条件是:了解高斯混合模型用于聚类的算法,了解变分推断与变分自编码器。在知道高斯混合模型(GMM)与变分自编码器(VAE)之后,VaDE实际上是将这两者结合起来的一个产物。与VAE相比,VaDE在公式推导中多了一个变量c。与GMM相比,变量c就相当于是GMM中的隐变量z,而隐层得到的特征z相当于原来GMM中的数据x。下面主要介绍VaDE模型的变分下界(损失函数)L(x)的数学推导过程。推导过程用到了概率论与数理统计的相关知识。

1. 前提公式

计算过程中用到了正态分布的一阶矩与二阶矩计算公式。

2. VaDE损失函数公式推导过程

最终的聚类结果是由q(c|x)得到的,q(c|x)相当于GMM中的隐变量的后验概率γ。

 下面将损失函数拆成5项,并一项一项进行求解。

3. VaDE算法总体流程

4. 疑问

    1)GMM算法的参数pi并没有进行归一化处理,在更新过程中能保证pi的和始终为1吗?这个问题在作者评论里面有回答,说pi相比于参数miu, sigma来说,对结果影响不大,但又有人问了,如果遇到非平衡数据呢?这种情况下pi的影响还是比较大的。在代码里也不难实现,加一行代码,类似于pi/sum(pi)就行。

    2)后验概率γ在代码里并不参与更新,为什么不和GMM的其他参数(pi, miu, sigma)一样进行梯度下降更新呢?而是直接套公式?有什么数学依据吗?这个在作者评论里面有人提到过,但是未被回复。其实直接ELBO目标对γ求偏导令其为0,用这种求极值的方式求解γ也没有问题,最后记得对γ进行归一化。

    3)预训练到底是怎么做到的,仅仅是用SAE训练得到的结果吗?原作者代码里面只给出了预训练之后得到的具体参数,并没有给出预训练的代码。预训练这个问题在作者评论里面有被提到。预训练阶段还是非常关键的一步,当然,有人是这样做的:预训练使用VAE模型。

   4) 代码中生成z的方式与VAE一模一样,而原文中的图示以及3.1节部分中的描述是z从${\mu }_c$与${\sigma }_c$而来,而公式(14)又与VAE一致了,原文中的表述并不统一,且代码与原文部分表述不符。

        论文中说的是$\pi $、${\mu }_c$与${\sigma }_c$用GMM来初始化,代码里分别初始化为取平均、零矩阵、单位矩阵。不过问题也不大,自己改一下代码就OK。

如果能解决我的疑问,欢迎在评论区回复,一起探讨~

5. 参考文献

[1] 聚类——GMM - 凯鲁嘎吉 - 博客园

[2] 变分推断与变分自编码器 - 凯鲁嘎吉 - 博客园

[3] Jiang Z , Zheng Y , Tan H , et al. Variational Deep Embedding: An Unsupervised and Generative Approach to Clustering. 2016.

[4] VaDE代码:

     GitHub - slim1017/VaDE: Python code for paper - Variational Deep Embedding : A Generative Approach to Clustering

      GitHub - GuHongyang/VaDE-pytorch: the reproduce of Variational Deep Embedding : A Generative Approach to Clustering Requirements by pytorch

posted on 2020-05-13 15:47  凯鲁嘎吉  阅读(6350)  评论(7编辑  收藏  举报