问答总结
一、无监督学习
提到生生成模型,首先还是要提无监督学习,无监督学习和监督学习最显著的特征就是数据有无标签。监督学习不必再提。无监督学习常有以下任务。(1) 聚类: K-means
. (2) 降维:PCA
. (3) 特征学习: AE
。(4)密度估计。
二、生成模型
1、定义
生成式模型是一种无监督模型,生成式模型的特点是: 给定训练数据,我的学习一个分布,然后我们从和该分布中采样生成新数据。
生成模型的核心是学习分布
P
m
o
d
e
l
(
X
)
P_{model}(X)
Pmodel(X)去逼近真实数据分布
P
d
a
t
a
(
X
)
P_{data}(X)
Pdata(X)从而通过采样实现生成功能。因为一般来说
P
d
a
t
a
(
X
)
P_{data}(X)
Pdata(X)很复杂,因此我们自然想到使用神经网络去拟合。
2、分类
虽然最终目标是学习分布 P m o d e l ( X ) ≃ P d a t a ( X ) P_{model}(X) \simeq P_{data}(X) Pmodel(X)≃Pdata(X),但是根据是否具体定义 P m o d e l ( X ) P_{model}(X) Pmodel(X)可以进一步细分。
可以看到,生成模型主要分为两部分.(1) 显示密度估计。(2)隐式密度估计。其中VAE
属于前者,GAN
属于后者。
三、PixelRNN/CNN
首先来看显示密度估计中比较容易估计密度的一种模型。PxielRNN/CNN
。该类模型显示定义为:
P ( X ) = Π i = 1 N P ( X i ∣ X 1 , X 2 , . . . , X i − 1 ) P(X) = \Pi_{i=1}^NP(X_i|X_1,X_2,...,X_{i-1}) P(X)=Πi=1NP(Xi∣X1,X2,...,Xi−1)
这样,我们通过设定依赖顺序,原始图像通过 R N N / C N N RNN/CNN RNN/CNN, 最后接上 s o f t m a x softmax softmax,通过选择极大似然学习策略, 便可以学习到 P ( X ) P(X) P(X),下面是分别是 P i x e l R N N PixelRNN PixelRNN和 P i x e l C N N PixelCNN PixelCNN的依赖顺序图示。
生成新数据时,我们可以使得第一个点为均匀分布,进而采样第一个点,最后便可以生成新样本。
四、变分自编码器VAE
说道VAE,自然应该先说一下AE,AE框架如下所示:
AE将每一个数据
x
x
x编码为一个隐向量
z
z
z, 再用
z
z
z重构
x
x
x。
x
x
x与
z
z
z之间一一对应,没有一点随机性。但是,如果我们希望生成新数据呢?,我们如何构建一个靠谱的
z
z
z呢? 我们无从下手。
从这个问题出发,如果我们将解码部分转变为编码两个概率分布之间的映射,并且我们规定
z
∼
N
(
0
,
1
)
z \sim \mathcal{N}(0,1)
z∼N(0,1),那么我们不就可以从分布中采样靠谱的
z
z
z,从而便能够生成新数据了吗。这也是[1]中的观点: VAE目的是进行分布之间的变换
关于为什么要假定 z ∼ N ( 0 , 1 ) z \sim N(0,1) z∼N(0,1). (1) 为了计算方便。 (2) 为了现实意义,比如 z z z的特征可以表示笑意有几分,脸大小程度等等,由于现实生活中高斯分布很常见,因此这是符合现实规律的。
因此改造AE网络,使其编码解码分布,我们得到VAE框架:
得到整个模型框架。我们使用极大似然的学习策略学习整个模型。具体如何根据最大似然转变为网络的学习,可以参看[2]种82页的推导,并结合[1]理解每一项损失的物理意义。其中学习的细节可以参看[3]。
这样,训练好整个网络后,我们就得到了编码器 q ϕ ( z ∣ x ) q_{\phi(z|x)} qϕ(z∣x)和解码器(概率分布映射) p θ ( x ∣ z ) p_{\theta}(x|z) pθ(x∣z),用编码器,我们可以进行一些模型的底层特征加工,当然这一点AE也能做。而我们拥有了解码器,我们就能够通过从 z ∼ N ( 0 , 1 ) z \sim \mathcal{N}(0,1) z∼N(0,1)中采样到靠谱的隐向量,从而生成好的新数据。如下图所示: (隐向量z含有一定的物理意义)
[4] 是一个很好的VAE的小项目,可以帮助理解VAE过程
五、生成对抗网络GAN
GAN分为两个部分,一个是生成器,一个是判别器。生成器目的仍然是为了学习两个概率分布之间的变换。GAN和PixelCNN和VAE不同,其放弃了显示定义概率密度函数,而进行采样进行学习。
(PixelCNN: P ( X ) = Π i = 1 N P ( X i ∣ X 1 , X 2 , . . . , X i − 1 ) P(X) = \Pi_{i=1}^NP(X_i|X_1,X_2,...,X_{i-1}) P(X)=Πi=1NP(Xi∣X1,X2,...,Xi−1), VAE: P ( X ) = ∫ p ( Z ) p ( X ∣ Z ) d Z P(X) = \int p(Z)p(X|Z)dZ P(X)=∫p(Z)p(X∣Z)dZ)
GAN框架如下:
其目标函数如下:
目标函数物理意义很明显,判别器希望真实数据得分高,虚假数据得分低,生成器反之。 GAN的训练策略是交替训练两个网络。具体细节在这里就不赘述了。
训练GAN有很多技巧,这里有一个网址总结了一些: https://github.com/soumith/ganhacks
参考资料
- [1] 苏剑林. (2018, Mar 18). 《变分自编码器(一):原来是这么一回事 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/5253
- [2] CS231n官方PDF
- [3] 苏剑林. (2018, Mar 28). 《变分自编码器(二):从贝叶斯观点出发 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/5343
- [4] 苏剑林. (2018, Mar 24). 《基于CNN和VAE的作诗机器人:随机成诗 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/5332