前言
生成式对抗网络GAN(一)基本介绍
一、GAN
以前都是给定x,输出y。现在添加一个z,输入是x和z。z是不固定的,每次随机生成,来自一个简单的分布。从而y变成一个复杂的分布。这种network叫做generator。当任务需要一点创造性的时候(同一个输入可能有多个输出的时候),会需要这种做法,让输出是根据概率输出。
以二次元图片输出为例,向量通过generator之后,输出一个图片。z一般是一个低纬度向量(维度是自己来定的),而图片是一个高纬度向量。
在GAN里面除了要训练generator之外,还要训练一个discriminator,discriminator输入一张图片输出一个数值,输出得值越大,表示输入的图片越像是真的。
二、大致训练过程
Discriminator就像Generator的天敌。
一开始的generator参数是随机的,画出来的也是杂乱的,discriminator的目标就是分辨出和真正的二次元图片的区别。之后第二代的generator调整参数,目的是骗过第一代的discriminator,discriminator也会进化,不断重复。
Generator和discriminator是两个network,假设这两个都初始化了,
第一步:不动generator,训练discriminator。
丢一堆向量给generator,输出是乱七八糟的和正常图片不像。从数据库中抽样几个正常图片,训练discriminator,目的是分辨真正的和generator产生的。把真的当做1,产生的当做0。分辨可以当做分类问题也可以当做regression问题来做。
第二步:不动discriminator,训练generator。
希望generator产生的,欺骗discriminator。向量经过generator产生图片后,让discriminator的分数越高越好。训练方法和之前gradient descent一样,不过这里是要让discriminator的loss越大越好,让discriminator的输出越大越好。
第三步:反复进行第一步和第二步。
总结
学习视频地址:https://www.bilibili.com/video/BV13Z4y1P7D7/?p=14&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=3a369b537e1d34ff9ba8f8ab23afedec