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

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

本节对应笔记:

  • https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-md/23_Unsupervised%20Learning%20Generation.md 不全,只有本节内容的 1-4 内容。

本节内容综述

  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
      • Practicing Generation Models
    • Variational Auto Encoder
    • Why VAE?
      • 另一种说法(数学上)
        • Gaussian Mixture Model
      • Problems of VAE
    • GAN
      • 拟态的演化
      • GAN - Discriminator
      • GAN - Generator
      • Toy Example
      • In practical...

小细节

Pixel RNN


如上图,在不同时刻输入像素序列,得到一张图片。其效果不错。

如上,在语音上也可应用。对于视频同理。

Practicing Generation Models

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

要注意:

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

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


如下,在测试集上,效果还可以。


此外,让机器随便画,生成效果如下。

Variational Auto Encoder

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

ci=eσi⋅ei+mic_i = e^{\sigma_i}\cdot e_i+m_ici​=eσi​⋅ei​+mi​


此外,神奇之处在于,我们不仅要最小化 input 与 output 间的差距还要最小化下式

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

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

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

Why VAE?


如上,VAE在训练中,相当于对原数据加了噪声,因此其编码有更好的泛化效果。

ci=eσi⋅ei+mic_i = e^{\sigma_i}\cdot e_i+m_ici​=eσi​⋅ei​+mi​

上式中,mim_imi​为原编码,而eσi⋅eie^{\sigma_i}\cdot e_ieσi​⋅ei​为噪声。σi\sigma_iσi​为噪声的方差,是通过学习自动改变的。


如上,我们之所以设置优化目标∑i=13(1+σi−(mi)2−eσi)\sum\limits_{i=1}^3 (1+\sigma_i-(m_i)^2-e^{\sigma_i})i=1∑3​(1+σi​−(mi​)2−eσi​),是希望σ\sigmaσ接近于0,且对mmm做一个正则。

另一种说法(数学上)


如上,把每张图片想象成高维空间中的点。VAE做的就是,估计正确的图片其概率分布。

Gaussian Mixture Model

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


如上,正常情况下,我们把xxx看作从某个分布中来的数据;但是我们使用分布来表述要好于聚类的表述。具体来讲,就是用一个向量,来表示其属于各个分布的权重。

VAE就是高斯混合模型的 distributed representation 版本。

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

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

因此,对于数据的概率描述就是:
P(x)=∫zP(z)P(x∣z)dzP(x) = \int_z P(z) P(x|z)dzP(x)=∫z​P(z)P(x∣z)dz

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

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

logP(x)=∫zq(z∣x)logP(x)dzlogP(x)=\int_z q(z|x)log P(x)dzlogP(x)=∫z​q(z∣x)logP(x)dz

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

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

=∫zq(z∣x)log(P(z,x)q(z∣x))dz+∫zq(z∣x)log(q(z∣x)P(z∣x))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=∫z​q(z∣x)log(q(z∣x)P(z,x)​)dz+∫z​q(z∣x)log(P(z∣x)q(z∣x)​)dz

其中,∫zq(z∣x)log(q(z∣x)P(z∣x))dz\int_z q(z|x) log(\frac{q(z|x)}{P(z|x)})dz∫z​q(z∣x)log(P(z∣x)q(z∣x)​)dz就是KL(q(z∣x)∣∣P(z∣x))≥0KL(q(z|x)||P(z|x)) \ge 0KL(q(z∣x)∣∣P(z∣x))≥0。

因此,上式:

≥∫zq(z∣x)log(P(x∣z)P(z)q(z∣x))dz\ge \int_z q(z|x) log(\frac{P(x|z)P(z)}{q(z|x)})dz≥∫z​q(z∣x)log(q(z∣x)P(x∣z)P(z)​)dz

这是上式的下限 Lower Bound,LbL_bLb​。

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

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

可以转换为:找P(x∣z)P(x|z)P(x∣z)和q(z∣x)q(z|x)q(z∣x)到让LbL_bLb​最大。

原因如下图。

如上,我们知道,logP(x)logP(x)logP(x)的大小,只与P(x)P(x)P(x)有关,但是如果把q(z∣x)q(z|x)q(z∣x)增大,那么KLKLKL将变小(因为LbL_bLb​大了)。

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

而且,最终将有副产物:q(z∣x)q(z|x)q(z∣x)与p(z∣x)p(z|x)p(z∣x)是相近的。

因此如上,我们最小KLKLKL。其是一个神经网络,对应VAE的特殊的优化目标(推导见原论文);最大另外一项,也就是 Auto Encoder 做的事。

Problems of VAE

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

GAN

拟态的演化


如上,李老师将其类比为物种间的拟态的演化。

要注意的是,Generator从未看过真正的图片。

GAN - Discriminator

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

GAN - Generator


如上,Generator则争取骗过Discriminator。如何训练呢?我们将二者视作一个大的网络。训练Generator时,我们fix住Discriminator的参数,然后仅梯度下降Generator的参数。

Toy Example


如上,我们希望生成器的数据(绿色的曲线)可以越接近真实值(黑色的点)越好。

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

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

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

  1. 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  2. 【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  3. 【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA Matrix Factorization

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  4. 【李宏毅2020 ML/DL】P22 Unsupervised Learning - Word Embedding

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  5. 【李宏毅2020 ML/DL】P66 Self-supervised Learning

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课四十分钟,由助教 Chi-Liang Liu 讲解 Self-Supervised Lea ...

  6. 【李宏毅2020 ML/DL】P85 Transfer Learning

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 要做一项任务,但是数据不直接与任务相关.这就涉及到了迁移学习.在现实生活中,我们其实不断在做&q ...

  7. 【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 元学习就是 Learn to learn ,让机器变成 a better learner .Me ...

  8. 【李宏毅2020 ML/DL】P8-9 Optimization for Deep Learnin | 优化器技术总结,SGDM 与 Adam 对比与使用建议

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...

  9. 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...

最新文章

  1. Business Intelligence——SSIS项目从创建到部署的简单总结(二)
  2. 2018-11-02 在代码中进行中文命名实践的短期目标
  3. 解决:idea - maven project 中 jar 报红线
  4. 传统的线性降维方法效果不佳。_10分钟数据降维入门
  5. mysql linux改密码忘记了怎么办_linux上mysql改密码忘了怎么办?
  6. 如何安装python3.8.1_如何用源代码安装Python 3.8.1
  7. 测试POSIX、System V消息队列时延和性能
  8. Intel BIGDL 探索
  9. 计算机上什么盘放大型游戏好,大型游戏可以直接装到移动硬盘里玩吗?
  10. lnmp一键安装包 mysql_CentOS7下安装lnmp一键安装包
  11. influxdb数据过期_influxdb 清空数据库
  12. iOS开发中使用代码控制横竖屏的切换
  13. 沃尔玛承压,TJX、唯品会稳健,折扣零售是行业“抗压”能手?
  14. 上门洗车App 竟然是块大肥肉!
  15. pspice仿真过程中出现Less than 2 connections at node
  16. 学计算机电脑显存多少为好,【深度分析】如何配置深度学习用的电脑(显卡和内存的选择标准)...
  17. 学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况
  18. 中兴服务器车间,走进中兴通讯车间 探秘智能手机生产链(多图)
  19. 看携程如何借助“预测式外呼”提高呼叫效率
  20. 爬虫:一种打破3000套限制爬取所有链家二手房源的方法

热门文章

  1. ITA 测试时之数据准备(大量数据导入与导出)(主键的最高位最好有值,而不是0)。
  2. VirtualBox – Error In supR3HardenedWinReSpawn 问题解决办法
  3. vue项目报错,解决Module build failed: Error: Cannot find module ‘node-sass‘ 问题
  4. 如何基于AngularJS部分视图动态更改标头?
  5. 我可以在同一个catch子句中捕获多个Java异常吗?
  6. Java为什么不允许覆盖静态方法?
  7. win11如何加快搜索速度 Windows11更改文件索引加快搜索速度的设置方法
  8. linux环境下启动git,linux系统安装git及git常用命令
  9. 树莓派python编程小车_树莓派小车教程(三)——软件代码
  10. Car-like Robot运动参数分析