目录

机器学习(李宏毅)——GAN

一、前言

本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!

不得不说GAN真是博大精深!

二、大纲

  • GAN问世
  • 基本思想
  • 原理剖析
  • Tips of GAN
  • GAN的应用
  • Cycle GAN
  • Evaluation of GAN

三、GAN问世

2014年Goodfellow 等人在《Generative Adversarial Networks》论文中首次提出了 GAN,随后各种各样的GAN百花齐放和发展,整个GAN的大家族网站:https://github.com/hindupuravinash/the-gan-zoo。

四、基本思想

GAN由两部分组成:Generator + Discriminator,简称为G和D。

  • Generator (生成器)
  • Discriminator(判别器)

精髓:G要想办法骗过D,D则是尽量挑出G假的内容,拟人化说法就是"对抗"。
举个例子:

G是屌丝,D是白富美,D心里择偶是有一杆称就是找个高富帅G',下面就是屌丝伪装成高富帅的故事了:

第一次约会:G搞了个发型去见D,D说你衣品真差,黄了;

第二次约会:G买了套名牌西装去见D,D说你的车怎么是个共享自行车,黄了;

第三次约会:G租了一辆保驰捷911去见D,当然还搞了发型、穿了名牌西装,并说其实我一直都是高富帅,只不过家里在考验我的继承能力而已,并送出A货包包,D信了,于是两个人就在一起了。

从上面的例子看出,D每次都基于G的表现冒出一个标准,而G每次都按照D的标准重新纠正自己,反复进行下去,如果一方停下来,这场约会("对抗")也进行不下去了。

回归到图像生成这件事情上来:

具体步骤如下:

  • step1:固定G,得到输出的image(第一次都是噪点),输送给D,D根据看过的真实图片和G的假照片,训练出标准。D就像是分类器,要区分出来自G的data和real data。
  • step2:有了标准D后,接着将其固定,反过来更新G,使得G输出的image送入D,D越难区分出来越好。

    反复上述步骤1和2进行下去,以上就是GAN的基本思想和步骤,总体的流程图如下:

五、原理剖析

  • Generator
    Generator分为两种:
    1、conditional (有额外条件的输入),有额外的x资讯。

2、unconditional(没有额外条件的输入),没有额外的x作为输入。


Generator原理剖析:

1、先看G的左边:有个Normal Distribution,是个简单的正态分布(当然也可以是其他易表达的distribution),G从这个分布中抽取样本向量。

其实Normal Distribution可以理解为就是一个初始化的简单空间,还可以输入额外的条件x进行限制。

2、再看G的右边:右边就是转换后复杂的distribution,要和real data的分布越接近越好。

那如何计算两个分布的距离呢?

常见的列举以下两种:

  • JS divergence
  • KL divergence

当然还有很多方法,我们姑且称之为divergence。

因此,我们G的目标就是要找到一组参数,使得divergence最小。

于是乎,目标函数写作:

那Divergence如何计算呢,实做中很难算,比较复杂,这也是GAN遇到的难题。

这里先怀揣的着这个问题先,继续往下看下Discriminator。

  • Discriminator

Discriminator 判别器的工作原理很直觉,就是看到PG给低分,看到Pdata给高分,合起来的分数越高越好,这就是它的目标。

于是可以写作:

说明:V目标函数要最大化,其和两个参数有关,就是G和D。

V(D,G)长啥样呢?

这里直接给出公式,有兴趣的可查阅资料进行推导理解。

公式转换

巧了,发现JS divergence和max V(D,G)是相关的。

于是乎:

回答了Generator中Divergence怎么算的问题,就是统一换到V的表达方式,V的表达式又已经有了,就可以实做了。

小结:

至此,GAN的基本思想、操作过程、公式都说完了,比较难理解的应该就是公式部分,需要动手推一推。

六、Tips of GAN

JS divergence并非是合适的衡量指标,为啥呢?

因为,PG和Pdata的Distribution都是一个局部的分布,无法诠释真正的分布是长啥样,也有可能PG和Pdata重叠的部分只是冰山一角而已,而JS Divergence只要是不重叠得到的输出值就是log2,这并不合理。

从上图,显然两个分布已经是慢慢接近了,但只要不重叠就一直输出是log2。

所以,有人就提出了Wasserstein distance方法。

Wasserstein distance

Wasserstein distance 来自于WGAN,其精髓思想就是把P分布推到Q分布的距离算出来。

但是,推过去的方法有很多种,所以这里采用穷举并取最小的d作为Wasserstein Distance。

这样更好看出Distance的变化。

那如何计算Wasserstein Distance呢?这里直接给出公式:

足够平滑这件事情,实际上是定范围,让参数介于(-C,C)区间,超过就clip,还有一种Improve WGAN,提出Gradient Penalty,连接两个概率分布,算斜率,要接近于1。

比较好的方法是Spectrial Normal。

七、GAN的应用

Conditional Generation

  • 文生图

    输入:需要成对的文、图资料,还要有正样本和负样本效果才会比较好,正样本包括文、图匹配,负样本包括文不配、图清晰和文不配、图噪点情况。

  • 图生图

    输入:同样需要成对的图、图。

    supervised + GAN 效果比较好,为什么呢?GAN富想象力,常生出意料外部分,supervised比较刻板,能把GAN拉回来。

  • 音生图

    声音生成图像同样可以运作,x的条件输入换成声音即可。

  • Talking Head Generation

    输入一张图片,生成gif图,这也是很牛的技术。

八、Cycle GAN

GAN的变种,可用于图片风格的转换。

基本思想就是,当没有成对的训练资料时候,加上一个还原的过程,如下图将真实世界人脸转为卡通风格,并且期望通过另外一个G能够将卡通世界图片还原至真实世界人脸图,这样的做法目的是为了让卡通风格像输出真实世界人脸图。

D则是树立了卡通风格的标准。

同样,还可以应用在文字风格转换。

九、Evaluation of GAN

那如何评估GAN生成的图片的好坏呢?

一种办法是使用图片分类器进行评估,即输入一张图片,然后看这个图片分类器识别出多少个类别,如果类别越集中,那说明生成的图片的质量越好,如下图:

所以,整体上GAN生成的图片好不好,我们会从两方面进行衡量,即:

  • 1、高质量(越像越好);

  • 2、多样性

    那怎么评估多样性呢?

    就是看各个类别的和越平均,多样性越高。

    实际过程可能会遇到:

  • Mode Collapse

    G产生的data老是集中在某一张,重复地出现,抓到D的盲点硬打一发。

  • Mode dropping

    G产生的data多样性不够,老是集中在某一些,但是下次生成的也只是在此基础上稍加改变(比如颜色)

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
与火星的孩子对话3 分钟前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物
事变天下9 分钟前
今是科技发布全新测序仪G-seq1M:以效率与精准引领基因测序新标杆
人工智能·科技
贤小二AI13 分钟前
贤小二c#版Yolov5 yolov8 yolov10 yolov11自动标注工具 + 免python环境 GPU一键训练包
人工智能·深度学习·yolo
KarudoLee22 分钟前
AIGC7——AIGC驱动的视听内容定制化革命:从Sora到商业化落地
人工智能·aigc
Python之栈26 分钟前
PandasAI:当数据分析遇上自然语言处理
人工智能·python·数据分析·pandas
小杨40426 分钟前
python入门系列十三(多线程)
人工智能·python·pycharm
Z_W_H_32 分钟前
ArcGIS Pro/GeoScene Pro AI 助手 2.1
人工智能·arcgis·geoscene
意.远33 分钟前
在PyTorch中使用GPU加速:从基础操作到模型部署
人工智能·pytorch·python·深度学习
HelpHelp同学1 小时前
信息混乱难查找?三步搭建高效帮助中心解决难题
大数据·人工智能·知识库管理系统
羑悻的小杀马特3 小时前
OpenCV 引擎:驱动实时应用开发的科技狂飙
人工智能·科技·opencv·计算机视觉