【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
我已经有两年 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 内容。
本节内容综述
- 关于 Generation 的内容,OpenAI有一篇很好的科普文:openai.com/blog/generative-models/。“不能产生,就是没有完全理解。”
- 可分为 PixelRNN 、Variational Auto Encoder(VAE)、Generative Adversarial Network。
- 首先来看 PixelRNN 。
- 接下来是Variational Auto Encoder。
- 下一节课中,详细讨论了 Why VAE ?优化目标如何来的?从意义上和数学上分别理解。最后,介绍了VAE的局限性。
- 由此,我们引出 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)=∫zP(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)=∫zq(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=∫zq(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=∫zq(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=∫zq(z∣x)log(q(z∣x)P(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{q(z|x)}{P(z|x)})dz∫zq(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≥∫zq(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相关推荐
- 【李宏毅2020 ML/DL】P59 Unsupervised Learning - Auto-encoder
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P58 Unsupervised Learning - Neighbor Embedding | LLE, t-SNE
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P57 Unsupervised Learning - Linear Methods | PCA Matrix Factorization
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P22 Unsupervised Learning - Word Embedding
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...
- 【李宏毅2020 ML/DL】P66 Self-supervised Learning
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课四十分钟,由助教 Chi-Liang Liu 讲解 Self-Supervised Lea ...
- 【李宏毅2020 ML/DL】P85 Transfer Learning
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 要做一项任务,但是数据不直接与任务相关.这就涉及到了迁移学习.在现实生活中,我们其实不断在做&q ...
- 【李宏毅2020 ML/DL】P88-96 Meta Learning – MAML | Reptile
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 元学习就是 Learn to learn ,让机器变成 a better learner .Me ...
- 【李宏毅2020 ML/DL】P8-9 Optimization for Deep Learnin | 优化器技术总结,SGDM 与 Adam 对比与使用建议
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐): https://github.com/Sakura-gh/ML-not ...
- 【李宏毅2020 ML/DL】P86-87 More about Domain Adaptation
我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 本节内容综述 本节课由助教 Chao Brian 讲解. 首先讲解些领域适配的基础内容,包括名词.定义等. 接 ...
最新文章
- Business Intelligence——SSIS项目从创建到部署的简单总结(二)
- 2018-11-02 在代码中进行中文命名实践的短期目标
- 解决:idea - maven project 中 jar 报红线
- 传统的线性降维方法效果不佳。_10分钟数据降维入门
- mysql linux改密码忘记了怎么办_linux上mysql改密码忘了怎么办?
- 如何安装python3.8.1_如何用源代码安装Python 3.8.1
- 测试POSIX、System V消息队列时延和性能
- Intel BIGDL 探索
- 计算机上什么盘放大型游戏好,大型游戏可以直接装到移动硬盘里玩吗?
- lnmp一键安装包 mysql_CentOS7下安装lnmp一键安装包
- influxdb数据过期_influxdb 清空数据库
- iOS开发中使用代码控制横竖屏的切换
- 沃尔玛承压,TJX、唯品会稳健,折扣零售是行业“抗压”能手?
- 上门洗车App 竟然是块大肥肉!
- pspice仿真过程中出现Less than 2 connections at node
- 学计算机电脑显存多少为好,【深度分析】如何配置深度学习用的电脑(显卡和内存的选择标准)...
- 学1个月爬虫就月赚6000?别被骗了,老师傅告诉你爬虫的真实情况
- 中兴服务器车间,走进中兴通讯车间 探秘智能手机生产链(多图)
- 看携程如何借助“预测式外呼”提高呼叫效率
- 爬虫:一种打破3000套限制爬取所有链家二手房源的方法
热门文章
- ITA 测试时之数据准备(大量数据导入与导出)(主键的最高位最好有值,而不是0)。
- VirtualBox – Error In supR3HardenedWinReSpawn 问题解决办法
- vue项目报错,解决Module build failed: Error: Cannot find module ‘node-sass‘ 问题
- 如何基于AngularJS部分视图动态更改标头?
- 我可以在同一个catch子句中捕获多个Java异常吗?
- Java为什么不允许覆盖静态方法?
- win11如何加快搜索速度 Windows11更改文件索引加快搜索速度的设置方法
- linux环境下启动git,linux系统安装git及git常用命令
- 树莓派python编程小车_树莓派小车教程(三)——软件代码
- Car-like Robot运动参数分析