最大似然估计(Maximum Likelihood Estimation)
最大似然估计是用来估计模型参数的一种方法,给定一个包含 m m m个独立同分布的样本的数据集 x i x_{i} xi,这 m m m个样本都是从真实分布 p d a t a ( x ) p_{data}(x) pdata(x)中采样得到的(这 m m m个样本也就是训练集)。
最大似然的第一种理解
模型
p
θ
(
x
)
p_{\theta}(x)
pθ(x)在数据集上的似然概率就是
∏
i
=
1
m
p
θ
(
x
i
)
\prod_{i=1}^m p_{\theta}(x_i)
∏i=1mpθ(xi)。最大似然的原理就是通过优化模型参数
θ
\theta
θ,使得模型在训练集上的似然概率最大。
在对数空间容易优化,所以通常是优化
∑
i
=
1
m
l
o
g
p
θ
(
x
i
)
\sum_{i=1}^{m}logp_{\theta}(x_i)
∑i=1mlogpθ(xi)。使得
∑
i
=
1
m
l
o
g
p
θ
(
x
i
)
\sum_{i=1}^{m}logp_{\theta}(x_i)
∑i=1mlogpθ(xi)最大的参数
θ
\theta
θ就是最后模型的参数,用数学语言来描述就是
θ
∗
=
a
r
g
m
a
x
θ
∑
i
=
1
m
l
o
g
p
θ
(
x
i
)
(1)
\tag{1}\theta^{*} = argmax_{\theta}\sum_{i=1}^{m}logp_{\theta}(x_i)
θ∗=argmaxθi=1∑mlogpθ(xi)(1)
最大似然的第二种理解
这种方法将从
p
d
a
t
a
(
x
)
与
p
θ
(
x
)
p_{data}(x)与p_{\theta}(x)
pdata(x)与pθ(x)的KL散度入手。在实际应用中,我们无法获得
p
d
a
t
a
p_{data}
pdata本身,只能获得包含
p
d
a
t
a
的
m
个样本的训练数据集
p_{data}的m个样本的训练数据集
pdata的m个样本的训练数据集,使用这
m
m
m个样本可以定义一个经验分布
p
θ
p_{\theta}
pθ来近似
p
d
a
t
a
p_{data}
pdata,最小化
p
d
a
t
a
与
p
θ
p_{data}与p_{\theta}
pdata与pθ的KL散度等价于在训练数据集上最大化似然概率。接下来证明这个结论。
a r g m i n θ K L ( p d a t a ( x ) ∣ ∣ p θ ( x ) ) = a r g m a x θ − K L ( p d a t a ( x ) ∣ ∣ p θ ( x ) ) = a r g m a x θ ∫ p d a t a ( x ) l o g p θ ( x ) d x − ∫ p d a t a ( x ) l o g p d a t a ( x ) d x = a r g m a x θ E x ∼ p d a t a [ l o g p θ ( x ) ] = a r g m a x θ 1 m ∑ i = 1 m l o g p θ ( x ) = a r g m a x θ ∑ i = 1 m l o g p θ ( x ) (2) \begin{aligned} \tag{2} argmin_{\theta} KL(p_{data}(x)||p_{\theta}(x)) = & argmax_{\theta} -KL(p_{data}(x)||p_{\theta}(x))\\ = & argmax_{\theta} \int p_{data}(x)logp_{\theta}(x)dx - \int p_{data}(x)logp_{data}(x)dx \\ = & argmax_{\theta} E_{x \sim p_{data}}[logp_{\theta}(x)] \\ = & argmax_{\theta} {1 \over m}\sum_{i=1}^{m}logp_{\theta}(x) \\ = & argmax_{\theta} \sum_{i=1}^{m}logp_{\theta}(x) \\ \end{aligned} argminθKL(pdata(x)∣∣pθ(x))=====argmaxθ−KL(pdata(x)∣∣pθ(x))argmaxθ∫pdata(x)logpθ(x)dx−∫pdata(x)logpdata(x)dxargmaxθEx∼pdata[logpθ(x)]argmaxθm1i=1∑mlogpθ(x)argmaxθi=1∑mlogpθ(x)(2)
第二行到第三行的解释: ∫ p d a t a ( x ) l o g p d a t a ( x ) d x \int p_{data}(x)logp_{data}(x)dx ∫pdata(x)logpdata(x)dx,是因为 这一项与 θ 这一项与\theta 这一项与θ无关,在 a r g m a x argmax argmax操作中可以省去。
第三行到第四行的解释:从采样与期望一节中知道,期望可以用从分布中依概率采样的 m m m个点的均值来代替,
第四行到第五行的解释:由于是 a r g m a x argmax argmax操作,所以 m m m可乘可不乘,这里将 m m m省去。
上面推导出来了最小化
p
d
a
t
a
与
p
θ
p_{data}与p_{\theta}
pdata与pθ的KL散度等价于在训练数据集上最大化似然概率,同时又有:
H
(
p
d
a
t
a
,
p
θ
(
x
)
)
=
−
∫
p
d
a
t
a
(
x
)
l
o
g
p
θ
(
x
)
d
x
=
H
(
p
d
a
t
a
(
x
)
)
+
K
L
(
p
d
a
t
a
(
x
)
∣
∣
p
θ
(
x
)
)
\begin{aligned} H(p_{data}, p_{\theta}(x))= & -\int p_{data}(x)logp_{\theta}(x)dx \\ = & H(p_{data}(x)) + KL(p_{data}(x)||p_{\theta}(x)) \end{aligned}
H(pdata,pθ(x))==−∫pdata(x)logpθ(x)dxH(pdata(x))+KL(pdata(x)∣∣pθ(x))
而
H
(
p
d
a
t
a
(
x
)
)
H(p_{data}(x))
H(pdata(x))是一个常量,所以最小化
p
d
a
t
a
与
p
θ
p_{data}与p_{\theta}
pdata与pθ的KL散度等价于最小化交叉熵等价于最大化似然函数。
生成模型
概率生成模型(Probabilistic Generative Model)又叫做生成模型,生成模型关注的是样本分布本身,也就是关注的是 p d a t a ( x ) p_{data}(x) pdata(x)。但是 p d a t a ( x ) p_{data}(x) pdata(x)是无法得到的,幸运的是,我们可以方便得到一批从 p d a t a ( x ) p_{data}(x) pdata(x)中采样的数据,记为 X X X,定义分布 p θ ( x ) p_{\theta}(x) pθ(x)拟合数据集 X X X,如果我们能求解 p θ ( x ) p_{\theta}(x) pθ(x),那么就可以从 p θ ( x ) p_{\theta}(x) pθ(x)中采样,生成类似 p d a t a ( x ) p_{data}(x) pdata(x)分布规律的数据。 p θ ( x ) p_{\theta}(x) pθ(x)也就是前面提到的似然函数。
所以生成模型需要做两件事:
- 概率密度估计(求解似然函数 p θ ( x ) p_{\theta}(x) pθ(x))
- 生成样本(从 p θ ( x ) p_{\theta}(x) pθ(x)中采样)
这里再介绍一下判别模型,以便和生成模型对比,更好的理解生成模型。判别模型建模的是条件概率 p ( y ∣ x ) p(y|x) p(y∣x), y y y是标签,判别模型都是有监督的。逻辑回归就是判别模型,我们关注的是条件概率 p ( y = 1 ∣ x ) 或者 p ( y = 0 ∣ x ) p(y=1|x)或者p(y=0|x) p(y=1∣x)或者p(y=0∣x),这里数据 x x x本身是什么并不是特别需要关注的。
生成模型要做的第一件事就是概率密度估计,根据是否显示的建模 p θ ( x ) p_{\theta}(x) pθ(x)又分为显示密度估计(Explicit Density Estimation)和隐式密度估计(Implicit Density Estimation)。
- 显示密度估计:显示的定义 p θ ( x ) p_{\theta}(x) pθ(x)并求解参数 θ \theta θ。比如VAE
- 隐式密度估计:没有显示定义 p θ ( x ) p_{\theta}(x) pθ(x),只是学习到了如何去生成符合 p d a t a p_{data} pdata分布规律的样本。比如GAN。
由于显示密度估计显示定义了 p θ ( x ) p_{\theta}(x) pθ(x)的形式,所以可以算出生成某个样本点的概率,比如VAE的ELBO就可以看做是生成这个样本的概率的取了对数的值。但是隐式密度估计是无法算出样本点的概率的,比如GAN只能生成样本,而无法用数值去衡量生成这个样本的概率的大小。注意虽然鉴别器最后也会输出一个概率值,但这并不是 p θ ( x ) p_{\theta}(x) pθ(x),而是鉴别器认为样本是真实样本的概率,也就是 D ( x ) D(x) D(x)
显示密度估计(Explicit Density Model)
显示密度估计根据 p θ ( x ) p_{\theta}(x) pθ(x)是否容易求解(tractable)又分为tractable density 和approximate density 。
Tractable density
tractable density模型比如pixelRNN/CNN,NADE等,这类模型的概率密度都是易于求解的。
Approximate density
Approximate density常用的方法有变分近似(variational approximations)和蒙特卡洛近似(Monte Carlo)。变分近似比如VAE,蒙特卡洛近似比如玻尔兹曼机。
有很多情况下直接建模
p
θ
(
x
)
p_{\theta}(x)
pθ(x)比较困难,以VAE为例,假设
x
x
x是由一个隐变量
z
z
z生成的,通常假设
z
z
z也服从一个已知的分布
p
(
z
)
p(z)
p(z),从
p
(
z
)
p(z)
p(z)中采样得到
z
i
z_i
zi ,然后
通过
p
(
x
∣
z
i
)
通过p(x|z_i)
通过p(x∣zi)得到
x
i
x_i
xi。用贝叶斯公式来描述就是
p
θ
(
x
)
=
∫
p
θ
(
x
,
z
)
d
z
=
∫
p
θ
(
x
∣
z
)
p
(
z
)
d
z
(3)
\tag{3} p_{\theta}(x)=\int p_{\theta}(x,z)dz=\int p_{\theta}(x|z)p(z)dz
pθ(x)=∫pθ(x,z)dz=∫pθ(x∣z)p(z)dz(3)
(3)式通常会取对数,也就是
l
o
g
p
θ
(
x
)
=
l
o
g
∫
p
θ
(
x
,
z
)
d
z
=
l
o
g
∫
p
θ
(
x
∣
z
)
p
(
z
)
d
z
(4)
\tag{4} logp_{\theta}(x)=log\int p_{\theta}(x,z)dz=log \int p_{\theta}(x|z)p(z)dz
logpθ(x)=log∫pθ(x,z)dz=log∫pθ(x∣z)p(z)dz(4)
p ( z ) p(z) p(z)称为先验,既然称之为先验,那么就是已知的( p ( z ) p(z) p(z)是不含有参数的所以没有下标 θ \theta θ),所以我们只需要求解 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z)。
如何求解 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z)? 当然是极大似然的思想了,VAE也是根据(4)式推导出了ELBO,EBLO是(4)式的紧下界。根据极大似然思想,最大化(4)式,也就是最大化ELBO。从而可以求解 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z)。
- 这里的极大似然思想并不局限于极大似然估计,比如EM算法的推导也是根据极大似然来推导的。
- 使用极大似然也可以这么理解,因为我们要得到 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z),如何在训练过程中衡量 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z)的好坏?当然是能使当前的样本数据生成的概率最大的 p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z)就是最好的,当前的样本数据生成的概率不就是似然函数 p θ ( x ) p_{\theta}(x) pθ(x)吗?所以似然函数可以用来衡量生成模型的好坏,但是VAE中似然函数又没法直接求解,转而求解似然函数的下界ELBO。
隐式密度模型(Implicit Density Model)
VAE的缺点:
显示密度估计由于显示的定义了(4)式,所以要对
p
(
z
)
p(z)
p(z)和
p
θ
(
x
∣
z
)
p_{\theta}(x|z)
pθ(x∣z)的具体形式有一个假设。比如VAE在视觉方向通常假设
p
(
z
)
p(z)
p(z)是标准正态高斯,
p
θ
(
x
∣
z
)
p_{\theta}(x|z)
pθ(x∣z)是高斯分布,后验
q
ϕ
(
z
∣
x
)
q_{\phi}(z|x)
qϕ(z∣x)也是高斯分布,这样假设一方面是根据经验,另一方面也是为了模型容易求解。
但是真实的图像的分布不一定就是高斯分布,那么是否可以不对真实分布做假设,而是借助神经网络自己学习 p θ ( x ) p_{\theta}(x) pθ(x),这便是GAN的思想了。由于GAN没有显示定义 p θ ( x ) p_{\theta}(x) pθ(x),而是用神经网络去拟合,所以无法求解 p θ ( x ) p_{\theta}(x) pθ(x)的具体形式,只能让模型生成样本。
在GAN中,优化生成器时优化的是 p d a t a 和 p g 的 J S 散度, ( p g 也就是这里的 p θ ) p_{data}和p_{g}的JS散度,(p_g也就是这里的p_{\theta}) pdata和pg的JS散度,(pg也就是这里的pθ),从而拉近二者之间的距离。这种思想其实和最大似然的第二种理解不谋而合。
参考:
https://sinpycn.github.io/2017/04/29/GAN-Tutorial-How-do-generative-models-work.html
https://www.yuque.com/hellomonica/mpx5dv/sfa641
https://blog.csdn.net/Passenger_zhang/article/details/108303320