生成模型
监督学习
数据x
,标签y
,目标是学习一个函数可以将x->y
(将数据 x 映射到标签 y)
无监督学习
只有数据,没有标签。目标是学习一些数据中潜在的隐含结构。 由于数据无标签,数据的成本很低,可使用的数据量很大。
生成样本
无监督学习的一类,目标是由给定的数据,从相同的数据分布中生成新的样本。 应用:
- 超分辨率
- 着色
显式密度模型: PixelRNN/CNN、Variational Autoencoder(变分自编码器) 隐式密度估计方法: GANs(生成式对抗网络)
PixelRNN/CNN
全可见信念网络,要做的是对一个密度分布显式建模 用链式法则求出与训练数据相同的分布
PixelRNN 是从图像的一个角(像素)开始,用 RNN(LSTM)逐步向下按对角线生成新的图像。但是这种方法生成序列很慢。
PixelCNN 思路和 PixelRNN 类似,区别在于使用 CNN 来代替 RNN 对所有依赖关系建模。
在每个像素点生成一个相应的 softmax 损失值,在训练时,每个像素对应一个真实的标签值(期望生成的值),训练目标是最大化所生成的训练像素的似然
变分自编码器
引入了一个隐藏向量 z 的概念,把 z 作为条件,利用条件概率的公式计算相似性。
它与自编码器息息相关。自编码器不用于生成数据,它是利用无标签数据来学习低维特征表示无监督方法。自编码器的过程类似于数据压缩。
例如,由输入数据 x,经过编码器得到特征 z 的映射。编码器通常使用神经网络(ReLU CNN)。通常 z 被限制在比 x 小(维度上比 x 小,实现降维)
降维是为了使 z 学习捕捉到数据 x 中有意义的变化因素的特征(最重要的特征)
自编码器是一个能够重构原始数据的模型
编码器将输入数据 x 映射成特性 z,再由解码器以 z 生成和 x 具有相同维度且相似的东西
自编码器训练结束后,就可以删掉解码器(因为解码器是为了计算损失(生成数据和输入数据的损失),去掉之后的自编码器就可以生成输入数据的特征映射。以此可以初始化一个监督式模型,达到数据降维的效果(提取数据中最重要的特征)。
由于 PCA 是线性的,效果远不如自编码器这种利用 CNN 的非线性降维效果好。
自编码器本质上还是判别模型,不是生成模型。
那我们是否可以以此来生成图像呢?
变分自编码器,通过向自编码器中加入随机因子获得的一种模型。
给定 x,隐藏变量的条件概率分布\(P(z|x)\),学习到这个分布后,通过对概率分布进行采样,生成不同的样本。
x 是数据,z 是数据中的某些变化因子。
这个网络中存在积分,\(intractable\)(难以应付的) 因此提出了对它进行近似的编码网络。
在近似网络中,假设隐藏特征 z 和最终样本 x 都满足高斯分布,因此用网络训练得到 z 和 x 的均值和方差,就可以构建分布函数。
事实上,vae是为每个样本构造专属的正态分布,然后采样来重构
事实上会运行多个epoch,每次的隐变量都是随机生成的,因此当epoch足够多的时候,可以保证采样的充分性。
对相似函数取\(log\),推导后发现相似函数的下界可以处理,因此选择最大化相似函数的下界。
在下界的表达式中,前一部分是在最大化与原图的相似性,后一部分是在求出与先验信息最相似的后验分布。
GAN
GAN诞生之前,变分自编码器看起来非常完美,但是生成的图片仍然可以很容易的被人类分辨。当GAN出现后,生成的图片达到了很难被分辨的程度。
之前是想求出显式的模型概论分布,现在可以用博弈论的思想来生成训练集的分布。
GAN 网络中的博弈双方是 生成网络 与 鉴别网络
- 生成网络:尽可能生成逼近真实的图像 和自编码器的Decoder类似
- 鉴别网络:从真实的图像中分辨出人工合成的图像 类似一个二分类网络,输入的训练数据有真实的数据(标签1)和生成的数据(标签0)
两者互相提高,同时学习,最后达到一个平衡点 生成网络g想让两个分布的差异程度降低,鉴别网络d想让差异升高