变分自编码器(一)——基本原理简介

自编码器

常用于数据压缩算法和特征提取算法

  • 包含Encoder and Decoder, 若用\phi\psi表示对应的映射为
    \phi: X \longrightarrow h
    \psi: h \longrightarrow \hat X
    目标函数是为了拟合一个恒等函数
    argmin_{\phi,\psi}L(X, (\psi .\phi)X)

变分自编码器

如何将其变化成为自编码器的形式
如何理解\mu\sigma
如何保证采样出的Z能够对应还原到原来的X
变分下界的推导,SGVB估计的原理

基本概念

  • KL散度(相对熵):用于衡量两个概率分布p(x)和q(x)之间的差异性,定义为
    KL(p(x)|q(x))=\int p(x)\log \frac{p(x)}{q(x)}dx=E_{x \sim p(x)}\log\frac{p(x)}{q(x)}
    具有非负性,仅当p(x)=q(x)时,KL散度为0
  • Monte Carlo采样: 期望可以表示为
    s=\sum_xp(x)f(x)
    s=\int p(x)f(x)dx
    如果通过从p中随机抽取n个样本来近似s,并得到一个经验平均值,那么根据大数定律,样本均值会收敛到真实的均值。
    \hat s_n = \frac{1}{n}\sum^n_{i=1}f(x^{(i)})
    E(\hat s_n)=\frac{1}{n}\sum^n_{i=1}E[f(x^{(i)})]=s

基本假设

  • 假设有一批数据样本\{X_1,X_2,...,X_n\},用X来表示,如果想得到X的分布p(X),但是数据量不足够大时,估计的是不够准确的 ,那么可以将分布形式改一改,引入隐变量Z,这样可以得到:
    p(X)=\sum_Zp(X|Z) P(Z) \tag{1}
    此处是离散形式,引入一个隐变量Z之后,比如P(Z)\sim N(0,I),然后得到X相对于随机变量Z的条件分布。如果可以实现,则是从标准正态分布中进行采样一个z,然后基于z去计算产生一个X,从而可以得到X的分布。

理论推导

基于上述假设,亟需解决的问题是如何估计隐变量z以及各分布中的参数

  • 估计参数最自然的想法是采用极大似然估计,但是目前存在两个问题:
    • 通过等式 p_{\theta}(x)=\int p_{\theta}(x|z)p_{\theta}(z)dz估计无法做到
    • 真实的后验分布p_{\theta}(z|x)=\frac{p(x|z)p(z)}{p(x)}也没办法计算

改变策略:既然我估计不了计算不出来,那我自己生成一个!
引入概率分布q_{\phi}(z|x)来逼近真实的后验分布,那么如何逼近呢? 对的!KL散度
\begin{eqnarray*} D_{KL}[q(z|x)||p(z|x)] &= &\int_{q(z|x)}q(z|x)\log \frac{q(z|x)}{p(z|x)}\\ &=&E_{q(z|x)}[log q(z|x)-\log p(z|x)]\\ &=&E_{q(z|x)}[log q(z|x)-\log p(x,z)]+\log p(x) \tag{2}\\ \end{eqnarray*}

\mathcal{L}(\theta, \phi;x)=E_{q(z|x)}[-log q(z|x)+\log p(x,z)] \tag{3}
因此
\log p(x)=\mathcal{L}(\theta, \phi;x) + D_{KL}[q(z|x)||p(z|x)]
根据KL散度的非负性,可以知道
\log p(x)\geq \mathcal{L}(\theta, \phi;x)
\mathcal{L}(\theta, \phi;x)称为变分下界(variational lower bound),因此求边际似然函数的最大值转化成为求变分下界的最大值
根据极大似然法,得到
\log p(X)=\sum^N_{i=1}\log p(x^{(i)})
其中
\log p(x^{(i)})=\mathcal{L}(\theta, \phi; x^{(i)}) + D_{KL}[q(z|x^{(i)})||p(z|x^{(i)}) ]
下面对变分下界进行推导
\begin{eqnarray*} \mathcal{L}(\theta, \phi;x) &=& E_{q(z|x)}[-\log q(z|x)+\log p(x,z)] \\ &=& E_{q(z|x)}[-\log q(z|x)+\log (p(x|z)p(z))]\\ &=& -E_{q(z|x)}[\log q(z|x)+p(z)] + E_{q(z|x)}[\log p(x|z)]\\ &=& -D_{KL}[q(z|x)||p(z)] + E_{q(z|x)} [log p(x|z)] \tag{4} \\ \end{eqnarray*}
下一部分将推导如何估计变分下界

重参数化技巧(reparameterization)

由于q(z|x)是后验分布,如果采用Monto Carlo方法进行采样估计真实分布,由于采样这个操作是不可导的,也不好在模型中进行描述,因此此处采用一个重参数化的技巧,已知 z \sim q_\phi(z|x),那么可以引入一个新的分布z = g_{\phi}(\epsilon, x), \epsilon称为辅助变量,这样在采用Monto Carlo估计的时候,就能保证他是可导的。(有疑问没关系,下面拿高斯分布的重参数技巧举例大家就会更明白一些)

随机梯度变分贝叶斯(SGVB)估计

对于上述的变分下界,我们采用重参数化技巧及Monto Carlo估计得到
E_{q(z|x^{i})}[f(z)]=E_{p(\epsilon)}[f(g_\phi(\epsilon, x^{(i)}))]\simeq\frac{1}{L}\sum^L_{l=1}f(g_\phi(\epsilon^{(l)},x^{(i)}))
其中 \epsilon^{(l)} \sim p(\epsilon)
因此,我们可以根据式(3)得到第一个版本的随机梯度变分贝叶斯估计\tilde{ \mathcal{L}}^A(\theta, \phi, x^{(i)}),即
\tilde{ \mathcal{L}}^A(\theta, \phi, x^{(i)})=\frac{1}{L}\sum^L_{l=1}\log p(x^{(i)},z^{(i,l)})-\log q(z^{(i,l)}| x^{(i)})
其中 z^{(i,l)}=g_\phi(\epsilon^{(i.l)},x^{(i)}),~~\epsilon^{(l)}\sim p(\epsilon)
但实际上,变分下界(4)中的第一项往往是可以直接求出来的,因此可以只对第二项进行Monto Carlo估计,从而得到第二个版本的SGVB估计.
\tilde{ \mathcal{L}}^B(\theta, \phi, x^{(i)})=-D_{KL}(q(z|x^{(i)})||p(z))+\frac{1}{L}\sum^L_{i=1}(\log p(x^{(i)}|z^{(i,l)}))

本部分确定了变分下界的计算方式,也就是说,\mathcal{L}可进行计算,而最大似然估计进行求解转化为对变分下界去求最大值即可,此时保证了我们生成的后验分布q(z|x)能够尽可能地接近真实分布p(z|x)

具体形式

首先,对于开头的假设,隐变量服从 p(Z) \sim \mathcal{N}(z; 0,I),并且在此假设生成的后验分布q(z|x)为多元高斯分布,即
\log q_\phi(z|x^{(i)})=\log \mathcal{N}(z;\mu^{(i)},\sigma^{2(i)}I)
此时,(4)中的第一项可以先计算出来,假设z的维度为J,下面推导主要用到了E(X^2)= \mu^2 + \sigma^2
\begin{eqnarray*} -D_{KL}[q(z|x)||p(z)] &=& -\int q(z|x)\log \frac{q(z|x)}{p(z)}\\ &=& -\int q(z|x)\log q(z|x)dz +\int q(z|x)\log {p(z)}dz\\ &=& \int \mathcal{N}(z;\mu,\sigma^{2})\log \mathcal{N}(z;0,I)dz - \int \mathcal{N}(z;\mu,\sigma^{2})\log \mathcal{N}(z;\mu,\sigma^2)dz \\ &=& -\frac{J}{2}\log (2\pi) -\frac{1}{2}\sum^J_{j=1}(\mu_j^2+\sigma_j^2)-(-\frac {J}{2}\log (2\pi) - \frac{1}{2} \sum^J_{j=1}(1+\log \sigma_j^2))\\ &=& \frac{1}{2}\sum^J_{j=1}(1 + log ((\sigma_j^2))- (\mu_j^2)- (\sigma_j^2)) \tag{5} \end{eqnarray*}
现在变分下界中只剩下第二项生成模型需要计算,在原文中,作者假设生成模型p(x|z)是高斯分布(连续)或者伯努利分布(离散),首先考虑离散形式的分布伯努利分布,此时
p(x|z) = \Pi^D_{k=1}(\rho_{(k)}(z))^{x(k)}(1- \rho_{(k)})^{1-x(k)}
从而可以计算出
-\ln p(x|z) = \sum^D_{k=1}[-x_{(k)}\ln \rho_{(k)}(z)- (1-x_{(k)})\ln (1- \rho_{(k)}(z))]
对于高斯分布有
p(x|z) = \frac{1}{\Pi^D_{i=1}\sqrt{2\pi \sigma_{(k)}^2(z)}} e^{(-\frac{1}{2}||\frac{x-\mu(z)}{\sigma(z)}||^2)}
其中\mu(z),\sigma(z)是前述后验概率产生的均值和方差,从而可以计算出
-\ln p(x|z) =\frac{1}{2} ||\frac{x-\mu(z)}{\sigma(z)}||^2 + \frac{D}{2}\ln 2\pi + \frac{1}{2}\sum^D_{k=1}ln \sigma^2_{(k)}(z)
通常在使用的时候,会固定方差为一个常数 \sigma^2,此时
-\ln q(x|z) \sim \frac{1}{2}||\frac{x-\mu(z)}{\sigma}||^2
到这里是不是很眼熟?这不是均方差(MSE)吗?

总结,对于二值数据,采用伯努利分布,decoder采用sigmoid函数进行激活,交叉熵为损失函数;对于连续数据,则采用高斯分布,用MSE作为损失函数,注意此时对应的是方差固定的情况!!!

  • AEVB算法


    AEVB算法

总结及反思

变分自编码器架构

回到最初理论推导中的几个疑问

  • 为什么采样出的Z能够对应还原出X
    由于前面后验概率编码过程中,假设的是相对于每一个x都有对应的高斯分布,因此,数据集中每一个样本都有专有的高斯分布
  • 换个角度看变分下界\mathcal{L}
    变分自编码器从结构上是对每个样本生成对应的高斯分布,然后采样进行恢复,首先一般的编码器目标函数是想要重构的X和原来的X差别尽量小,但是由于Z_k是重新采样过的,也就是说方差可以看成是噪声的强度,我们肯定希望噪声越小越好,但是这样就会退化成普通的自编码器,而变分自编码器中(5)式只有当\mu趋近于0,\sigma趋近于1的时候会最小,此时保证了噪声强度趋近于1,保证了生成能力,此时后验分布 p(Z|X)趋近于N(0,I)
  • 为什么Mini-batch Version中采样一次就足够了?
    事实上会运行多个epoch,每次的隐变量都是随机生成的,因此当epoch足够多的时候,可以保证采样的充分性。

参考自
苏剑林. (2018, Mar 18). 《变分自编码器(一):原来是这么一回事 》及二三
《Auto-Encoding Variational Bayes》
https://blog.csdn.net/NeutronT/article/details/78086340

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342