0%

CS231n笔记——生成模型

生成模型

监督学习

数据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想让差异升高