[DL笔记] 生成对抗网路 GAN介绍 李宏毅深度学习

来自台大李宏毅老师深度学习开放式课程,以及我在medium的笔记内容

原文link(建议阅读此篇,有图比较好看,要fq):DL笔记:生成对抗网络GAN


GAN的分类

  1. Typical GAN
    找一个generator(即一个function),输入随机向量,输出为向量转换生成的结果。例:收集很多动画人物的头像,把这些头像喂给generator,generator学会产生出新的动画人物头像。
  2. Conditional GAN
    例:给generator一段代表情境的文字,让他产生符合情境的图片
  3. Unsupervised Conditional GAN

Typical GAN:以产生动画人物图片为例

训练两个NN

  • 架构取决于任务。例如:产生图片的话NN架构通常会是CNN,产生文字、句子的NN架构通常会是RNN、LSTM等等
  • 参数随机初始化
  • Generator:将低维向量转换成高维向量
  • Discriminator:输入高维向量(图片),输出分数,代表现在输入的这张图片是否人为产生(real or fake)

训练方法:

固定住Generator(以下简称G)
  • 只训练Discriminator(以下简称D),让他看到偏真实的图片就给高分,看到偏向不真实的图片给低分。
  • 好图片:将DB中的真实图片随机取样喂给D,D对这些真实图片打高分,
  • 不好的图片:第一次G产生的图片很大机率是不好的,因为参数随机初始化,还没训练过,这些图片对D来说就是不好的图片
  • D的学习目标就是:将好图片给高分,将不好图片给低分。 训练方式跟训练NN方式一样,也可以当作回归问题或是分类(binary classifier)问题来做。 跟传统二元分类不同的地方只在于label是机器标注而不是人工标注。
固定住D,只训练G
  • Generator学习骗过Discriminator,而不是人订出来的objective function(目标函数)

  • 让G产生的图片丢进D中,让固定住的D打分数,然后把G和D串在一起,视为两个NN组成的巨大NN

  • 将巨大NN输入视为一个向量,输出为一个分数

  • 在这个NN的中间某一维,把他的的hidden layer的output拿出来看作是一张图片(也就是G产生的结果)

  • 巨大NN的目标:让最终输出的score越高越好:用Backpropagation去找,只是会固定住D中对应的几个维度,只调整G中对应的几个维度

  • 调整完Generator后,G的新输出会有变化,会使D给这个新的图片比原先旧的比较不好的图片还高的分数。

  • 总结:实际在训练的时候,是D和G交替训练

  • 改进的GAN:WGAN、improved WGAN…

Conditional GAN

根据输入产生对应的输出的generator

一开始的想法:想要输入一些情境文字,让G产生对应情景的输出e.g. 输入”红发女生”,G会产生一个红发女生图片

  • 直觉的方法:Traditional supervised approach
    • 发现效果并不如想像中好。
    • 比如说输入文字:”train”代表火车,训练的已标注图片可能有正面的火车、侧面的火车,但都属于火车,如果对Network来说正确答案有很多个,他会采取正确答案的平均,这样子输出结果就会很模糊,是一个四不像
  • Conditional GAN
    • 一般来说也需要paired data(输入文字和图片的对应关系),所以是supervised,也可以是unsupervised,但也跟传统方法不太一样。
    • G不去看ground truth,看的是D,根据Discriminator学的=>所以D需要输入一组Condition c和一组高维向量x,输出的是一个scalar,判断x是否为真实图片以及c、x是否情境匹配

D训练的方法:

  • Positive sample 给高分的情况:Good pair(DB中有label的data),告诉D要给他们高分。即:
    case1:好的图片+正确文字
  • Negative sample 给低分的情况:
    一般GAN的想法:把一段文字输入给G,产生图片,这次产生出来的pair给低分=>会造成问题,D就会倾向于只判断图片的好坏,所以还要引入好图片+错误情境文字的sample
    case2:不好的图片+正确文字
    case3:好的图片+错误文字

Conditional GAN的应用

  1. 声音转换为影像
    自己实作的效果不太好
  2. 影像转换为文字
    把多分类问题”一张图片可以同时属于多个不同的类别“用Conditional
    发现各种模型(VGG、Resnet等)加上GAN的话效果都有提升
    因为GAN可以帮助发现label和label之间的依赖关系
  3. Samsung做的Talking Head,让蒙娜丽莎互动蒙娜丽莎会动

Unsupervised Conditional GAN

想法:
使用unpaired data,最常看到的应用是图片风格的转换。图片DB有属于不同domain的图片,领域x的跟领域y没有任何对应关系。
训练一个Generator,目标:以将真实照片风格转换为梵谷画风格的图片为例子

Cycle GAN

[img]

  • Domain X代表的是属于真实照片的图片
  • Domain Y代表的是属于梵谷画的画作图片
  • 用Domain Y训练𝐷𝑌DY,为属于Domain Y的图片打分数
  • 用Domain X训练𝐺𝑋→𝑌GX→Y,学习骗过Discriminator, 让他产生出来的画作要能让D以为是Domain Y的图=>有个问题:Generator可能很快就会发现可能很快就会发现D判断只是G的输出,可能会只产生单一梵谷风格图片就无视输入,不再转换其他照片为梵谷风格图片了=>再加上一个Generator 𝐺𝑌→𝑋GY→X

[img]
[img]

第二个Generator将第一个G的输出还原为原本的照片,希望输入输出越接近越好=>第一个Generator有了约束,就会想办法改成梵谷画风
双向 Cycle GAN

[img]

除了把真实照片转换为有风格的图片,再加上一个反向的Generator,把梵谷风格图片转换越像真实照片越好,再把这个像真实照片的梵谷图片转换成原本的梵谷画作图片

还可以应用在文字或语音上,转换文字风格(配合seq2seq+BP)或是让机器说话、unsupervised语音辨识


个人总结:以往只有听说过GAN,没去了解过,直到这几天,这是2019年李宏毅老师开设在台大的深度学习课程中介绍GAN的部分。李老师在GAN这一块介绍的非常详细,这篇笔记只是撷取他的quickview去做笔记而已,其他更详细的可以参考他的youtube频道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值