VAE 变分自动编码器入门

几率论复习

熟悉的旁友直接跳过这一章节吧html

贝叶斯公式

P ( A B ) = P ( A ) × P ( B A ) P ( B ) P(A | B)=\frac{P(A) \times P(B | A)}{P(B)} web

其中P(A|B)是指在事件B发生的状况下事件A发生的几率。网络

在贝叶斯定理中,每一个名词都有约定俗成的名称:app

  • P ( A B ) P(A|B) 是已知 B B 发生后 A A 的条件几率,也因为得自 B B 的取值而被称做 A A 的后验几率。
  • P ( A ) P(A) A A 的先验几率(或边缘几率)。之因此称为"先验"是由于它不考虑任何 B B 方面的因素。
  • P ( B A ) P(B|A) 是已知 A A 发生后 B B 的条件几率,也因为得自 A A 的取值而被称做 B B 的后验几率。
  • P ( B ) P(B) B B 的先验几率或边缘几率。

按这些术语,贝叶斯定理可表述为:ide

= ( ) / 后验几率 = (似然性*先验几率)/标准化常量 svg

也就是说,后验几率与先验几率和类似度的乘积成正比。函数

另外,比例P(B|A)/P(B)也有时被称做标准似然度(standardised likelihood),贝叶斯定理可表述为:学习

= 后验几率 = 标准似然度*先验几率 优化

全几率公式编码

P ( A ) = n P ( A B n ) P ( B n ) \operatorname{P}(A)=\sum_{n} \operatorname{P}(A | B_{n}) \operatorname{P}\left(B_{n}\right)

简单的理解就是,消去 B B 事件对 A A 事件的影响

最大似然估计

在这里插入图片描述
总结起来,最大似然估计的目的就是:利用已知的样本结果,反推最有可能(最大几率)致使这样结果的参数值。

原理:极大似然估计是创建在极大似然原理的基础上的一个统计方法,是几率论在统计学中的应用。极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。经过若干次试验,观察其结果,利用试验结果获得某个参数值可以使样本出现的几率为最大,则称为极大似然估计。

因为样本集中的样本都是独立同分布,能够只考虑一类样本集 D D ,来估计参数向量 θ \theta 。记已知的样本集为:

D = { x 1 , x 2 ,   , x N } D=\left\{x_{1}, x_{2}, \cdots, x_{N}\right\}

似然函数(linkehood function):联合几率密度 p ( D θ ) p(D | \theta) 函数称为相对于 { x 1 , x 2 ,   , x N } \left\{x_{1}, x_{2}, \cdots, x_{N}\right\} θ \theta 的似然函数。

l ( θ ) = p ( D θ ) = p ( x 1 , x 2 ,   , x N θ ) = i = 1 N p ( x i θ ) l(\theta)=p(D | \theta)=p\left(x_{1}, x_{2}, \cdots, x_{N} | \theta\right)=\prod_{i=1}^{N} p\left(x_{i} | \theta\right)

若是 θ ^ \hat \theta 是参数空间中能使似然函数 l ( θ ) \mathcal l(\theta) 最大的θ值,则 θ ^ \hat \theta 应该是“最可能”的参数值,那么 θ ^ \hat \theta 就是 θ \theta 的极大似然估计量。它是样本集的函数,记做:

θ ^ = d ( x 1 , x 2 ,   , x N ) = d ( D ) \hat{\theta}=d\left(x_{1}, x_{2}, \cdots, x_{N}\right)=d(D)

极大似然函数:ML估计:求使得出现该组样本的几率最大的θ值:

θ ^ = arg max θ l ( θ ) = arg max θ i = 1 N p ( x i θ ) \hat{\theta}=\arg \max _{\theta} l(\theta)=\arg \max _{\theta} \prod_{i=1}^{N} p\left(x_{i} | \theta\right)

由于这是个连乘不太好求导,因此常常取个对数

H ( θ ) = ln l ( θ ) H(\theta)=\ln l(\theta)

θ ^ = arg max θ H ( θ ) = arg max θ ln l ( θ ) = arg max θ i = 1 N ln p ( x i θ ) \hat{\theta}=\arg \max _{\theta} H(\theta)=\arg \max _{\theta} \ln l(\theta)=\arg \max _{\theta} \sum_{i=1}^{N} \ln p\left(x_{i} | \theta\right)

这个时候就到了你们熟悉的几率论书后习题了,全是加法,对 θ \theta 求导,解出导数为0的时候的

d H ( θ ) d θ = d ln l ( θ ) d θ = 0 \frac{d H(\theta)}{d \theta}=\frac{d \ln l(\theta)}{d \theta}=0

若是 θ \theta 不止一个参数,那就求梯度吧,再议再议,有这么一个概念,下面的东西读起来可能不会出人命

KL散度

相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence),信息增益(information gain)。

KL散度是两个几率分布P和Q差异的非对称性的度量。 KL散度是用来 度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型状况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

对于离散随机变量,其几率分布P 和 Q的KL散度可按下式定义为

D K L ( P Q ) = i P ( i ) ln Q ( i ) P ( i ) D_{\mathrm{KL}}(P \| Q)=-\sum_{i} P(i) \ln \frac{Q(i)}{P(i)}

等价于

D K L ( P Q ) = i P ( i ) ln P ( i ) Q ( i ) D_{\mathrm{KL}}(P \| Q)=\sum_{i} P(i) \ln \frac{P(i)}{Q(i)}

即按几率P求得的 P P Q Q 的对数商的平均值。KL散度仅当几率 P P Q Q 各自总和均为 1 1 ,且对于任何 i i 皆知足 Q ( i ) > 0 Q(i)>0 P ( i ) > 0 P(i)>0 时,才有定义。式中出现 0 ln 0 0\ln 0 的状况,其值按 0 0 处理。

对于连续随机变量,其几率分布P和Q可按积分方式定义为

D K L ( P Q ) = p ( x ) ln p ( x ) q ( x ) d x D_{\mathrm{KL}}(P \| Q)=\int_{-\infty}^{\infty} p(x) \ln \frac{p(x)}{q(x)} \mathrm{d} x

emmm,这一段,彷佛把公式记住就够用了

自动编码器

自动编码器是是个什么玩意呢

众所周知,图片通常,按像素存的话,very large,处理起起来极其的烧显卡

自动编码器的一个idea就是把高维度的数据(i.e.图像),编码到一个低维的隐空间中,使用的方法多是如图的线性方法或者非线性的方法(i.e.深度全联通网络,卷积神经网络等等),能够简单地把这些方法看作一个函数,输入时图像 x x 输出是隐空间内的编码 z z ,这是一个编码(Encode)的的过程。
图片编码到隐空间中
z z 一般是一个比原图像 x x 尺寸小不少的一个向量,维度减小是由于隐空间里更多的存储了图像中有意义的信息(图像的特征)

那么如今问题来了,若是学习到这样一个学习图像特征的表示的方法呢?训练的特征应当能够用于还原出原始的图片,这就是所谓的“自动编码器”——编码本身
在这里插入图片描述
此时,训练这么一个编码器网络和一个解码器网络, x x 是原图像, z z 是隐空间中编码的向量, x ^ \hat x 解码器还原出的图像。很容易写出的损失函数:

L = x x ^ 2 \mathcal L = ||x - \hat x||^2

自动编码器的训练过程主要在这里。训练结束以后,咱们能够把解码器网络直接扔掉,没错,直接扔掉,想一想看一些图像处理的任务,最简单的,图像分类,直接处理隐空间的图像特征信息是否是比直接处理图像简单不少。玩一些有监督的学习,分类器之类的工做,瞬间感受舒服了许可能是不是。

在这里插入图片描述
自动编码器能够还原出图像,能够学习到图像的特征信息用于初始化一个监督学习的模型。更进一步,咱们能不能使用咱们的编码的隐空间的图像的特征信息来生成一些新的原本不存在的图像呢

变分自动编码器

好了,如今咱们的想法是想要一个生成模型。假设咱们的训练数据 { x ( i ) } i = 1 N \{ x^{(i)}\}_{i=1}^N 是从隐空间的分布 z z 中生成的

在这里插入图片描述
注意上图中 x ( i ) x{(i)} 是一张图片, z z 是 隐空间中用于生成 x x 的变量。对于这样一个生成模型,咱们想要估计 z z 的真实分布的参数 θ \theta 。该如何表示这个模型呢。

众所周知,万事万物不少东西都服从高斯分布,咱们简单的将这个 z z 伪装它是个高斯分布(为何能够这么假设???可能这就是高斯分布牛逼的地方了吧)。条件几率 p ( x z ) p(x|z) 是一个比较复杂的,从隐空间生成图片的一个神经网络, θ \theta^* 是这个网络的真实参数。

隐空间中的图片 z z 服从一个先验分布 p θ ( z ) p_{\theta^{*}}(z) ,完美的解码器即为 p θ ( x z ( i ) ) p_{\theta^{*}}(x | z^{(i)}) 。如今的问题是如何训练这个 θ \theta^{*} 。注意这是一个生成模型,咱们最终的目标是生成 x x ,那直接求 x x 的最大似然:

p θ ( x ) = p θ ( z ) p θ ( x z ) d z p_{\theta}(x)=\int p_{\theta}(z) p_{\theta}(x | z) d z

这里的 p θ ( z ) p_\theta(z) 是一个简单的高斯分布, p θ ( x z ) p_\theta(x|z) 是解码器的神经网络,可是没法对全部 的 z z 求积分。故此路不通,尝试使用贝叶斯公式:

p θ ( x ) = p θ ( x z ) p θ ( z ) p θ ( z x ) p_{\theta}(x)= \frac {p_{\theta}(x | z) p_{\theta}(z)} {p_{\theta}(z|x)}

分子易得,则须要求 p θ ( z x ) p_{\theta}(z | x)

p θ ( z x ) = p θ ( x z ) p θ ( z ) / p θ ( x ) p_{\theta}(z | x)=p_{\theta}(x | z) p_{\theta}(z) / p_{\theta}(x)

咱们发现此处再一次出现了原问题 p θ ( x ) p_{\theta}(x) ,这已是一个死循环了,必须有一些平如的操做才能继续算下去。引入一个额外的编码器 q ϕ ( z x ) q_{\phi}(z | x) 来估计 p θ ( z x ) \mathrm{p}_{\theta}(\mathrm{z} | \mathrm{x}) ,此时咱们有图 \ref{vae_pq}中的两个网络:解码器网络记为 q ϕ ( z x ) q_{\phi}(z | x) ,编码器网络记为 p θ ( z x ) \mathrm{p}_{\theta}(\mathrm{z} | \mathrm{x})

编码器和解码器被表示成了两个网络

此时对于个数据集 X X 里的一张图片 x ( i ) x^{(i)} ,咱们能够求解 l o g log 数据似然:

log p θ ( x ( i ) ) = E z q ϕ ( z x ( i ) ) [ log p θ ( x ( i ) ) ] ( p θ ( x ( i ) )  不依赖于  z ) = E z [ log p θ ( x ( i ) z ) p θ ( z ) p θ ( z x ( i ) ) ] ( ) = E z [ log p θ ( x ( i ) z ) p θ ( z ) p θ ( z x ( i ) ) q ϕ ( z x ( i ) ) q ϕ ( z x ( i ) ) ] ( ) = E z [ log p θ ( x ( i ) z ) ] E z [ log q ϕ ( z x ( i ) ) p θ ( z ) ] + E z [ log q ϕ ( z x ( i ) ) p θ ( z x ( i ) ) ] ( l o g ) = E z [ log p θ ( x ( i ) z ) ] D K L ( q ϕ ( z x ( i ) ) p θ ( z ) ) + D K L ( q ϕ ( z x ( i ) ) p θ ( z x ( i ) ) ) \begin{aligned} \log p_{\theta}\left(x^{(i)}\right) &=\mathbf{E}_{z \sim q_{\phi}(z | x(i))}\left[\log p_{\theta}\left(x^{(i)}\right)\right] \left(p_{\theta}\left(x^{(i)}\right) \text { 不依赖于 } z\right) \\ &=\mathbf{E}_{z}\left[\log \frac{p_{\theta}\left(x^{(i)} | z\right) p_{\theta}(z)}{p_{\theta}(z | x^{(i)})}\right] \left(贝叶斯公式\right)\\ &=\mathbf{E}_{z}\left[\log \frac{p_{\theta}\left(x^{(i)} | z\right) p_{\theta}(z)}{p_{\theta}(z | x^{(i)})} \frac{q_{\phi}(z | x^{(i)})}{q_{\phi}(z | x^{(i)})}\right] \quad \left( 乘一个常数 \right)\\ &=\mathbf{E}_{z}\left[\log p_{\theta}\left(x^{(i)} | z\right)\right]-\mathbf{E}_{z}\left[\log \frac{q_{\phi}(z | x^{(i)})}{p_{\theta}(z)}\right]+\mathbf{E}_{z}\left[\log \frac{q_{\phi}(z | x^{(i)})}{p_{\theta}(z | x^{(i)})}\right] \left(log展开\right)\\ &=\mathbf{E}_{z}\left[\log p_{\theta}\left(x^{(i)} | z\right)\right]-D_{K L}\left(q_{\phi}(z | x^{(i)}) \| p_{\theta}(z)\right)+D_{K L}\left(q_{\phi}(z | x^{(i)}) \| p_{\theta}(z | x^{(i)})\right) \end{aligned}

这里第一项中的 p θ ( x ( i ) z ) p_{\theta}\left(x^{(i)} | z\right) 由解码器网络提供, D K L ( q ϕ ( z x ( i ) ) p θ ( z ) ) D_{K L}\left(q_{\phi}(z | x^{(i)}) \| p_{\theta}(z)\right) 则是编码器和 z z 的先验分布(正态分布)的KL散度,最后一项包含 p θ ( z x ( i ) ) p_{\theta}(z | x^{(i)}) 没法计算,可是咱们知道任意的KL散度是非负的。因此咱们领损失函数:

L ( x ( i ) , θ , ϕ ) = E z [ log p θ ( x ( i ) z ) ] D K L ( q ϕ ( z x ( i ) ) p θ ( z ) ) \mathcal{L}\left(x^{(i)}, \theta, \phi\right)=\mathbf{E}_{z}\left[\log p_{\theta}\left(x^{(i)} | z\right)\right]-D_{K L}\left(q_{\phi}(z | x^{(i)}) \| p_{\theta}(z)\right)

该式即为数据似然的下界,即:

log p θ ( x ( i ) ) L ( x ( i ) , θ , ϕ ) \log p_{\theta}\left(x^{(i)}\right) \geq \mathcal{L}\left(x^{(i)}, \theta, \phi\right)

因此咱们的优化目标:

θ , ϕ = arg max θ , ϕ i = 1 N L ( x ( i ) , θ , ϕ ) \theta^{*}, \phi^{*}=\arg \max _{\theta, \phi} \sum_{i=1}^{N} \mathcal{L}\left(x^{(i)}, \theta, \phi\right)

损失函数前一项为解码器,从隐空间中从新构造出了输入图像,后一项使得编码器与先验分布类似。此时咱们的VAE的结构如图 \ref{vae_struct}中左图所示。右图展现了训练完成的VAE,VAE本质是一个生成模型,咱们的 z z 是服从高斯分布的,而任意高斯分布能够从 0 0 - 1 1 高斯分布转化而得。因此生成图片的过程等价于从 0 0 - 1 1 高斯分布中采样,这是VAE实现高效采样的根本缘由。

(左图)VAE的整体结构;(右图)在-高斯分布中采样

Reference

Appendix

草稿纸,推导过程

在这里插入图片描述