我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-notes

本节对应笔记:

本节内容综述

  1. 关于 Generation 的内容,OpenAI有一篇很好的科普文:openai.com/blog/generative-models/。“不能产生,就是没有完全理解。”
  2. 可分为 PixelRNN 、Variational Auto Encoder(VAE)、Generative Adversarial Network。
  3. 首先来看 PixelRNN 。
  4. 接下来是Variational Auto Encoder。
  5. 下一节课中,详细讨论了 Why VAE ?优化目标如何来的?从意义上和数学上分别理解。最后,介绍了VAE的局限性。
  6. 由此,我们引出 GAN 。Yann LeCun在17年时评价很高。这里讲讲其思想。但是,其也有局限性,如难以训练。

小细节

Pixel RNN

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上图,在不同时刻输入像素序列,得到一张图片。其效果不错。
【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,在语音上也可应用。对于视频同理。

Practicing Generation Models

做个实验,生成宝可梦图片。

要注意:

  • 用三个数表示一个像素,但是这样生成的图片有点灰(因为用的sigmoid function,最终生成的RGB都在0.5左右)。
  • 于是李老师为像素做了个 one-hot 与近似,如下图。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

如下,每一行代表一张图。只有700+的数据,效果就可以不错。李老师做了一层LSTM。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如下,在测试集上,效果还可以。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
此外,让机器随便画,生成效果如下。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

Variational Auto Encoder

在VAE中,code不再直接等于Encoder的输出。假设目标降维空间为3维,那我们让Encoder分别输出m1,m2,m3m_1,m_2,m_3σ1,σ2,σ3\sigma_1,\sigma_2,\sigma_3。并且,从正态分布中随机取出三个点e1,e2,e3e_1,e_2,e_3,将下式作为最终的编码结果:

ci=eσiei+mic_i = e^{\sigma_i}\cdot e_i+m_i

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
此外,神奇之处在于,我们不仅要最小化 input 与 output 间的差距还要最小化下式

i=13(1+σi(mi)2eσi)\sum\limits_{i=1}^3 (1+\sigma_i-(m_i)^2-e^{\sigma_i})

发现,其实用 VAE 的图,不太清楚,但是可以对生成进行“控制”。

此外,可以使用 VAE 来写诗。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

Why VAE?

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,VAE在训练中,相当于对原数据加了噪声,因此其编码有更好的泛化效果。

ci=eσiei+mic_i = e^{\sigma_i}\cdot e_i+m_i

上式中,mim_i为原编码,而eσieie^{\sigma_i}\cdot e_i为噪声。σi\sigma_i为噪声的方差,是通过学习自动改变的。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,我们之所以设置优化目标i=13(1+σi(mi)2eσi)\sum\limits_{i=1}^3 (1+\sigma_i-(m_i)^2-e^{\sigma_i}),是希望σ\sigma接近于0,且对mm做一个正则。

另一种说法(数学上)

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,把每张图片想象成高维空间中的点。VAE做的就是,估计正确的图片其概率分布。

Gaussian Mixture Model

我们可以使用混合高斯模型。

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,正常情况下,我们把xx看作从某个分布中来的数据;但是我们使用分布来表述要好于聚类的表述。具体来讲,就是用一个向量,来表示其属于各个分布的权重。

VAE就是高斯混合模型的 distributed representation 版本。【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

如上,当我们在 zz 上采样到一个点后,这个点会对应到一个高斯分布(这样就有了无穷多的高斯分布)。至于其对应哪个高斯分布,由函数决定,高斯分布符合xzN(μ(z),σ(z))x|z \sim N(\mu(z),\sigma (z))

而这个函数可以是神经网络。

因此,对于数据的概率描述就是:
P(x)=zP(z)P(xz)dzP(x) = \int_z P(z) P(x|z)dz
【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

如上,除了极大似然,我们还需要引入另一个分布q(zx)q(z|x)来表示Encoder。

我们可以进行如下数学变换(无论q(zx)q(z|x)是什么分布,下列推导都成立1):

logP(x)=zq(zx)logP(x)dzlogP(x)=\int_z q(z|x)log P(x)dz

=zq(zx)log(P(z,x)P(zx))dz=\int_z q(z|x)log(\frac{P(z,x)}{P(z|x)})dz

=zq(zx)log(P(z,x)q(zx)q(zx)P(zx))dz=\int_z q(z|x) log(\frac{P(z,x)}{q(z|x)}\frac{q(z|x)}{P(z|x)})dz

=zq(zx)log(P(z,x)q(zx))dz+zq(zx)log(q(zx)P(zx))dz=\int_z q(z|x)log(\frac{P(z,x)}{q(z|x)})dz + \int_z q(z|x) log(\frac{q(z|x)}{P(z|x)})dz

其中,zq(zx)log(q(zx)P(zx))dz\int_z q(z|x) log(\frac{q(z|x)}{P(z|x)})dz就是KL(q(zx)P(zx))0KL(q(z|x)||P(z|x)) \ge 0

因此,上式:

zq(zx)log(P(xz)P(z)q(zx))dz\ge \int_z q(z|x) log(\frac{P(x|z)P(z)}{q(z|x)})dz

这是上式的下限 Lower Bound,LbL_b

因此,我们的最大化目标即为:

logP(x)=Lb+KL(q(zx)P(zx))logP(x) = L_b + KL(q(z|x)||P(z|x))

可以转换为:P(xz)P(x|z)q(zx)q(z|x)到让LbL_b最大。

原因如下图。
【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,我们知道,logP(x)logP(x)的大小,只与P(x)P(x)有关,但是如果把q(zx)q(z|x)增大,那么KLKL将变小(因为LbL_b大了)。

在此基础上(logP(x)KLlogP(x) \approx KL),我们把P(x)P(x)上升,就可以让目标值logP(x)logP(x)越来越大。

而且,最终将有副产物:q(zx)q(z|x)p(zx)p(z|x)是相近的。
【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
因此如上,我们最小KLKL。其是一个神经网络,对应VAE的特殊的优化目标(推导见原论文);最大另外一项,也就是 Auto Encoder 做的事。

Problems of VAE

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

VAE从来没有真的去学,如何产生一张图片。如上,右边的图片明显不对,但是对于 VAE 来说,只是多了一个像素而已。VAE 只是进行模仿而已。

GAN

拟态的演化

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,李老师将其类比为物种间的拟态的演化。
【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
要注意的是,Generator从未看过真正的图片。

GAN - Discriminator

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model

如上,将真的、假的图片输入判别器,让其拥有判别真假的能力。

GAN - Generator

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,Generator则争取骗过Discriminator。如何训练呢?我们将二者视作一个大的网络。训练Generator时,我们fix住Discriminator的参数,然后仅梯度下降Generator的参数。

Toy Example

【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
如上,我们希望生成器的数据(绿色的曲线)可以越接近真实值(黑色的点)越好。

而蓝色的线,则表示判别器认为哪里是对的。

绿色的线有没有可能移到很左部,既然判别器认为左边是对的?有可能,因此要小心地调参数。我们不知道Discriminator是不是对的。

In practical…

  • GANs are difficult to optimize.
  • No explicit signal about how good the generator is:
    • In standard NNs, we monitor loss
    • In GANs, we have to keep “well-matched in a contest”
  • When discriminator fails, it does not guarantee that generator generates realistic images
    • Just because discriminator is stupid
    • Sometimes generator find a specific example that can fail the discriminator
    • Making discriminator more robust may be helpful.

相关文章:

  • 2021-09-15
  • 2021-05-06
  • 2021-05-22
  • 2021-07-20
  • 2021-04-05
  • 2021-09-19
  • 2021-09-09
  • 2021-05-16
猜你喜欢
  • 2021-08-27
  • 2021-06-22
  • 2021-10-01
  • 2021-09-29
  • 2021-06-28
  • 2021-09-05
  • 2021-05-14
相关资源
相似解决方案