[2022]李宏毅深度学习与机器学习第六讲(必修)-GAN
[2022]李宏毅深度学习与机器学习第六讲(必修)-GAN
- 做笔记的目的
- GAN
- generator
- Unconditional generator
- Theory Behind
- Tips for GAN
- WGAN
- 如何评价 GAN
- Conditional Generation
- Cycle GAN
做笔记的目的
1、监督自己把50多个小时的视频看下去,所以每看一部分内容做一下笔记,我认为这是比较有意义的一件事情。
2、路漫漫其修远兮,学习是不断重复和积累的过程。怕自己看完视频不及时做笔记,学习效果不好,因此想着做笔记,提高学习效果。
3、因为刚刚入门深度学习,听课的过程中,理解难免有偏差,也希望各位大佬指正。
GAN
generator
输入一个分布,同时输入(不输入也可以)一个x,之后输出一个复杂的分布,就是generator。Generator有很多应用,而GAN就是训练generator的方法。
但是为什么输出有的时候需要是一个分布那?下面这个例子是给出一个游戏画面,预测下一个游戏画面,因为有很多种可能(turn right or turn left),如果是预测模型,模型就会两个都选,即turn right and turn left,这样预测的游戏画面就会出错。因为不可能同时向左转又向右转。
所以当我们任务需要创造力的时候需要生成式模型,同样的输入有不同的输出,所以就要加一个Simple Distribution。比如写诗比如画画比如聊天机器人。
Unconditional generator
这里选的分布是高斯分布,但是实际上不同的分布差距也不是很大。
生成图片之后在进入判别器,判断是真的还是假的。两个都在不断进化,第一代Generator 不知道如何画,Discriminator 也不是很强,两个相互进化。
这里训练的步骤就是,先让生成器随便生成,然后判别器判断,两个分开update。
- 固定generator G 更新discriminator D,
- 固定discriminator D,之后更新generator G
- 不断重复过程1和过程2,提高网络性能。
Theory Behind
生成器的目标是,让生成的分布和真是分布尽可能地相近,这里就有很多不同的方法衡量,比如,Js Divergence、KL Divergence,但是要如何计算就成了一个问题,因为我们不知道两个是什么分布。Gan让我们可以计算出Div。
虽然我们不知道,两个分布是什么,但是我们可以sample出一些样例。
我们在看看Discriminator,他的目标方程就很类似于2分类,而他的目标方程和JS divergence有关系,所以可以用这个代替,具体做法如下图:
large divergence 对应大的 m a x V ( D , G ) maxV(D,G) maxV(D,G),反之对应小的。
所以做法是如下图,将目标做了一个转化。
这里不是一定要用js divergence,可以用不同的divergence,不同的divergence有对应不同的方法去设计目标函数。
Tips for GAN
WGAN
GAN是以不好训练而闻名,所以训练GAN需要一些小技巧。首先提出一个问题,JS divergence 可能并不是非常适合。可以看出,原始的data和生成的data的分布其实并不重合。如果sampling 的不够多那么判别器可以画一条线分开,所以两个分布不重合,但是JS divergence 如果不重合就一直是log2。
上面这种图就暴露出来了问题,当两个分布不重合时,计算距离在变小但是JS divergence并不变。所以可能需要另外一种衡量方法,比如Wasserstein distance:一个分布变到另一个分布需要走多少路程。
但是可以从下面的这个图片看出来,不同的moving plans,计算出来的值并不相同。作者这里介绍的是,选出距离最小的作为Wasserstein distance。但是这是一个优化问题,不过先把这个问题放一放,我们继续往后看。
这样就可以正确的衡量了,这种方法就是WGan。
但是如何计算Wasserstein distance,是一个问题,这里直接说结论,如下图,然后D必须要平滑,但如何做到这个1-Lipschitz那?
方法如下:
原始的方法,就是限制weight,这样能让方程更加平滑。
也可以第二个方法,用Spectral Normalization Gan结果会比较好,就算有SNGAN,GAN也不是很好训练。
因为两个模型是互动的,一旦一个出现问题,那么train 可能就停下来了,两个模型一定要棋逢对手,这是一个前瞻的技术,有待解决。train GAN不是一个容易的事情,但是研究的人很多。
用GAN生成文字是最困难的
这里训练是用梯度下降来训练,但是不能算微分,因为这个改变了一些值,输出可能不会改变,因为取了一个max。所以可以用强化学习来做,但是强化学习很难训练,GAN也很难训练,所以用GAN产生文字很难。
不够谷歌发的一篇论文效果还可以,ScrachGAN。
如何评价 GAN
很长时间GAN是用人眼来衡量的,但是人眼去判断并不一定非常可观。所以如何评价GAN的好坏,也是一个有待研究的课题。
可以跑一个分类器,对于单张图片,如果分类器的分布越密集,那么说明效果非常好。
将产生的东西放到一个分类,如果分布比较集中,那么效果就不错,但是这种方法不一定有用,可能会出现model collapse,可能他产生的图片一直是某几张,Diversity比较小。今天还没有很好的办法如何避免mode collapse,但是这个问题是可以看出来的。
但是这个问题是可以看出来的,mode Dropping产生的资料也够,但是分布没有资料的大,这样很难发现,而且mode Dropping现在并没有解决。
如何衡量生成器的Diversity,可以用一个分类器,对生成的图像分类,把所有的分类统计一下,如果分布均匀就说明Diversity可以。Quality 看的是一张图片,但是diversity看的是整个图片。
一般使用Inception Score,用Inception去衡量。可以去最后一层,取出向量看距离,sample很多,然后看看数据的分布。
FID算是一个比较常用的评价指标,从下图看,看起来所有的GAN都差不多。但是这个是实验的时候,用的是同一个网络架构,但是可能不同的gan适配不同的网络架构。
有时候GAN很好,但是不一定很好,所以Gan的评估很困难。
Conditional Generation
之前讲的都是随机的分布,这里可以给一个X。输出文字,然后根据z的不同,生成的图片也不同。
之前的判别器,不管用了。
可以修改一下判别器,输入两个。这个需要成对的资料,但是这样是不够的,还要加,文字和图片不配对。
Conditional GAN,也可以看一个文字产生图片,也可以是看一个图片,产生图片。
GAN虽然更真实,但是想象力更加丰富,所以一般是GAN+supervised。
Cycle GAN
普通的网络比较难处理没有配对的资料,但是GAN可以。
原始的GAN
可以看到原始的GAN,并不是很管用,因为输出和输入没有关系,可以用Cycle GAN。增加一个新的目标,这样就限制了第一个G的输出。
把他弄成双向的,这个就是cycle GAN。
Cycle GAN也可以文字风格转换,不仅仅是图像风格转换。
[2022]李宏毅深度学习与机器学习第六讲(必修)-GAN相关推荐
- [2022]李宏毅深度学习与机器学习第四讲(选修)-GNN
[2022]李宏毅深度学习与机器学习第四讲(选修)-GNN 做笔记的目的 GNN NN4G DCNN MoNET GTA GIN 做笔记的目的 1.监督自己把50多个小时的视频看下去,所以每看一部分内 ...
- [2022]李宏毅深度学习与机器学习课程内容总结
[2022]李宏毅深度学习与机器学习课程内容总结 课程感受 第一讲必修 ML的三个步骤 第一讲选修 深度学习发展趋势 反向传播 从线性模型到神经网络 为什么要用正则化技术 为什么分类是用交叉熵损失函数 ...
- [2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL
[2022]李宏毅深度学习与机器学习第十二讲(必修)-Reinforcement Learning RL 做笔记的目的 What is RL Policy Gradient Version 1 Ver ...
- 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Deep Learning Task Tips
文章目录 一.深度学习步骤回顾 二.常规指导 三.训练过程中Loss很大 3.1 原因1:模型过于简单 3.2 原因2:优化得不好 3.3 原因1 or 原因2 ? 四.训练过程Loss小.测试过程L ...
- 【深度学习】李宏毅2021/2022春深度学习课程笔记 - Convolutional Neural NetWork(CNN)
文章目录 一.图片分类问题 二.观察图片分类问题的特性 2.1 观察1 2.2 简化1:卷积 2.3 观察2 2.4 简化2:共享参数 - 卷积核 2.5 观察3 2.6 简化3:池化 2.6.1 M ...
- 李宏毅深度学习笔记——呕心整理版
李宏毅深度学习笔记--呕心整理版 闲谈叨叨叨: 之前看过吴恩达的一部分课程,所以有一定理论基础,再看李宏毅的课程会有新的理解.我先以有基础的情况写完学习过程,后续再以零基础的角度补充细节概念(估计不会 ...
- 深度学习vs机器学习 | 这些本质区别你知道多少?
作者 | Walker [磐创AI导读]:深度学习和机器学习已经变得无处不在,那它们之间到底有什么区别呢?本文我们为大家总结了深度学习VS机器学习的六大本质区别.欢迎大家点击上方蓝字关注公众号:磐创A ...
- 深度学习入门笔记(六):误差反向传播算法
专栏--深度学习入门笔记 推荐文章 深度学习入门笔记(一):机器学习基础 深度学习入门笔记(二):神经网络基础 深度学习入门笔记(三):感知机 深度学习入门笔记(四):神经网络 深度学习入门笔记(五) ...
- 2020李宏毅深度学习hw1
2020李宏毅深度学习hw1 1.导入包 import sys import pandas as pd import numpy as np 2.加载数据 data = pd.read_csv('tr ...
最新文章
- 在C ++中检查一个数组是否是另一个数组的子数组
- 表视图(UITableView)与表视图控制器(UITableViewController)
- Flash 与数学:圆的切线(2)
- js小学生图区_js实现图片区域可点击大小随意改变(适用移动端)代码实例
- Hive map阶段缓慢,优化过程详细分析
- hdu 1754 线段树 水题 单点更新 区间查询
- jmeter接口测试json详解
- c语言个人日记本系统的设计,[设计]c语言程序课程设计日记本管理系统.doc
- 在多媒体计算机系统中图像的颜色是,图像量化位数越大,记录图像中每个像素点的颜色种类就越多。() - 试题答案网问答...
- 手机局域网关闭计算机的方法,用手机控制电脑关机 方法介绍【图文】
- java 100以内的偶数的和_java 2.3 循环语句计算100以内的偶数和(五种方法)
- CleanMyMac最新4.10.5版本 智能一键扫描清理工具
- What‘s next for AlphaFold and the AI protein-folding revolution / 什么是AlphaFold和AI蛋白质折叠革命的下一步?
- Mybatis Plus 看这篇就够了,通俗易懂,一发入魂
- three.js 构建简单的房间
- 用bat批量启动多个软件/程序
- python.plt 画三维图像
- 【错误异常大全】:正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。
- 陈景润定理与哥德巴赫猜想
- HDU 2112-HDU Today