[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】

从零开始GAN

  • 1、生成式对抗网络 - 基本概念介绍
    • 1.1、引入生成式对抗网络
    • 1.2、Generative Adversarial Network(GAN)
  • 2、GAN理论介绍+WGAN


上上个星期连续干了一周的深度学习视频,狂写手写笔记,居然每个观看量也才100+,好吧好吧,我承认,这段时间确实没有好好学习,CSDN都看出来了(汗颜)

时隔一个星期(摆大烂一周后),今天终于瞅到了GAN,那就开干吧!

老规矩了,先把GitHub上面之前的pdf发出来:https://github.com/Bessie-Lee/Deep-Learning-Recodes-LiHongyi

注:本文中的全部图片来源于李宏毅老师2021/2022年春的讲课视频,有些言语也是李宏毅老师的官方原话(我只是李宏毅老师文字理解搬运工[还是没有被正主认可的袴])

今天不一样的是,全手工敲入内容,不想写字了,极其麻烦

1、生成式对抗网络 - 基本概念介绍

1.1、引入生成式对抗网络

在李宏毅老师的视频中,并没有一开始就讲解什么是GAN,他先引入一个问题,为什么会有生成式对抗网络呢?

他采用了一个小游戏进行介绍。

游戏说明:一个小精灵可以从一个出发点出发到任意画面的位置去,我们根据小精灵的到达位置去训练一个network模型,从而预测到小精灵的位置。

然而,出现了一个很离谱的画面:

小精灵在转弯的时候居然分裂成了两个,还带上了虚影(??这是什么离谱位置,转弯不成,直接分裂人物??)

为什么会有这种分裂的问题出现呢?

因为在预测的时候,有可能出现向左向右的概率是0.5和0.5,导致预测也不知道应该是左边还是右边,然后它干脆就直接分裂了(确实蛮"拟人化"的hhha)

  • 出现概率相同的原因是:训练集中有可能给的数据就是在这个拐角,存在向左向右的选择,而模型训练的时候正好也训练到了,故而出现这种原因

于是乎,就有人提出在输入的时候加上一些东西,让模型不是单一的输出,而是输出一个概率的分布,如图1所示。
[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第1张图片

图1:加入对抗后输出结果图

好的,现在已经有一个小例子去表示生成对抗网络大概是什么,那具体我们在什么时候需要用到呢?如图2所示

  • 一般来说,当我们的任务需要一些创造力的时候(拟人化的说法hhha)
  • 官方来讲,相同的输入有着不同的输出的时候,我们便会使用生成对抗网络

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第2张图片

图2:何时需要加入对抗

1.2、Generative Adversarial Network(GAN)

无条件生成[见图3]

什么是无条件生成?

原本输入的应该是X+Z经过一个Generator得到最后的概率分布Y,但是在无条件生成里面删去了X,只保留Z的输入

在本文的例子中,Z是一个Normal Distribution(正态分布),当然可以使用其他的分布,如均匀分布,伽马分布等,在后文中,我们都将采用正态分布进行例子介绍。

图片是如何根据向量进行输出呢?

输入的是一个低纬度的向量(维度可自己控制),Generator的目的是将低纬度的向量转换成高纬度的向量,从而达到输出彩色图片的要求(彩色图片是RGB格式,有三层)

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第3张图片

图3:无条件生成

对于GAN而言,比前面讲的无条件生成多一个Discriminator部分,这个部分是将一个图片通过Discriminator后生成一个数值(数值越大结果越好

Discriminator是一个function(函数),一般这个function可以依据所需进行选取,比如如果是做图像的可以采用CNN(如图4所示),如果是做文字的可以采用transformer。

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第4张图片

图4:Discriminator - 图像任务

GAN的通俗理解:

可以将Generator理解为小偷,Discriminator理解为警察,小偷不断的偷东西,警察不断的抓小偷,小偷为了躲避警察的追捕会进行战术更新,警察为了抓住小偷也进行战术改进

但是其实Generator与Discriminator是亦师亦友的关系,互相进步。

对图5进行解释:

第一代Generator绘制的图片,通过第一代Discriminator进行真实图片对比,假设对比用的是有没有眼球,效果并不好;

随后第二代Generator进行改进,输出的图片都有眼球,此时骗过了第一代Discriminator,但是效果还是不行,第一代Discriminator发现大事不妙,被骗了?!于是第二代Discriminator在原来的基础上对鼻子、嘴巴进行进一步对比;

第二代Generator无法骗过第二代Discriminator,于是变更新为第三代Generator(重点对鼻子、嘴巴部分)骗过第二代Discriminator,第二代Discriminator不甘心又进行更新,变成第三代Discriminator(对头发进行对比),成功抓住第二代Generator把柄

就这样一次一次的循环重复操作,直到最后这个第n代的Generator效果极其的好,可以骗过目前全部的Discriminator为止(这可是一个无尽的坑hhhha)

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第5张图片

图5:亦师亦友的Generator与Discriminator

具体的GAN步骤:

  • 随机初始化generator和discriminator
  • 在每一个训练中
    • step1:定住G,更新D【如图6】
      • 详细步骤:对于G而言,因为是随机的例子,所以说输出一堆随机的图片;在一个真实的database里面将图片进行样例输入,D要做的就是区分G输出的图片与真实的图片
      • 一般是将真实图片作为1,G输出的图片为0,放入D中,如果是分类问题,就是输出0和1,也可以看作回归问题,这都是看具体要求
    • step2: 定住D,更新G【如图7】
      • 详细步骤:将输入的vector(向量)过一层Generator的network(网络结构),输出图片,将图片输入到Discriminator的network中进行对比,得到结果,结果越高越大越好。
      • 我们也可以将Generator与Discriminator理解为一个大的网络,输出的图片只是其中一层network输出的结果(一个hidden layer层而已)将这个hidden layer层结果×3(因为图片是RGB三层),我们要做的就是让Generator的loss尽可能的小,让Discriminator的结果尽可能的大。
    • step3:反复执行step1和step2【如图8】

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第6张图片

图6:step1:定住G,更新D

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第7张图片

图7:step2:定住D,更新G

[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第8张图片

图8:step3:反复执行step1和step2

GAN的真实例子:

左边右边的都是真人,中间是输出的假人,依次递进,严肃的男人到喜笑颜开的女人哈哈哈哈,输出就是笑容逐渐递增[李宏毅老师深度学习视频] 生成式对抗网络(GAN)【持续更新】_第9张图片

有些生成的比较奇奇怪怪hhhhhha~

2、GAN理论介绍+WGAN

你可能感兴趣的:(学习ML+DL,深度学习,生成对抗网络,人工智能,GAN)