Network As Generator(网络作为生成器)
- 把Network当成生成使用;输入另加一个参数z,这个z为某个Distribution(分布)中抽取得来,不固定;
- z一般要简单,由于z不同,所以x的输出就由单一的输出变成一个复杂的Distribution(分布)
例如:x、z都为向量:输入时,直接把z接到x后边作为输入;x、z长度相同,把x+z作为输入
用途:当我们的任务需要有一定的创造力时,同样的输入需要有不同的输出。(例如:聊天机器人、画画)
Generative Adversarial Network(GAN:生成对抗网络)
例如:生成一张二次元的脸
在GAN中除了Generator(产生者)以外,还需要训练Discriminator(辨别者)用于辨别生成的结果的正确性
理解:把Generator比作制作假钞的人,Discriminator比作警察;所以假钞和警察的对抗中,假钞变的越来越像真的(Discriminator也叫激励函数)
运作方式
- Generator和Discriminator就是两个Network,在确定初始化参数后
- 定住Generator,只训练Discriminator(可以当成分类或者回归的问题解决)
- 定住Discriminator,只训练Generator(让Generator想方法骗过Discriminator)
训练技巧:WGAN
JS Divergence(JS分歧)的问题:
- 如果两个分部不重叠,JS发散总是Log2
- Pg和Pdata数据的重叠部分很少,所以当不重叠时,JS Divergence就不能训练参数(直觉:如果两个分布不重叠,二进制分类器达到100%的正确率)
换一个衡量两个分布的相似程度方式:
- Wasserstein Distance:两个分布P和Q,把P分布的图像转化成Q分布图像要移动的点的平均距离作为P和Q的相似程度:
- 有很多可能的“移动计划”,使用“移动计划”与最小平均距离来定义Wasserstein距离
计算Pg和Pdata之间的Wasserstein距离:
Evaluation Of Generation(生成评价)
- 衡量一个Generate好坏的方法:跑一个影像的分类系统,把GAN产生的图片传入其中,看产生的结果,输出为一个几率分布P(c|y),如果这个几率分布越集中越好
Mode Collapse(模式折叠):多次产生同一张图片,蓝色为真图片,黄色为生成的图片,当Generator发现Discriminator的某个盲点,就有可能多次根据盲点骗过Discriminator,所以就会多次产生同样的图片
Mode Dropping(模式下降):产生出来的图片只与全部数据的部分相似(产出照片时没有利用全部的数据)
Conditional GAN(有条件的GAN)
- 以上的Generator的输入都是一个随机的分布,现在要操控Generator的输出,在原基础上再传入一个值x,让Generator根据随机分布和x产生y
例如:生成红眼的二次元脸;输入图纸产生房子;输入白天图片产生晚上图片
Learning from Unpaired Data(从未配对数据中学习)
- 以上训练Network时,输入x输出y,需要成对的x、y才能训练,但现在有一堆x和一堆y,并且不成对,这种没有标注的资料如何训练
如果有一些有标注的资料,则可以训练一个神经网络用于标注这些没有别标注的资料
一点标注都没有的资料:
例如:影像风格转换(真人图片转换为动漫图片)
方法:训练一个输入为X域资料,输出为Y域资料的Network
问题:有可能Gx->y时,直接忽视x输出一张动漫脸,使得生成的动漫脸和真人脸没有关联:
Cycle GAN:训练两个Generator,第一个用于把X域的图转换为Y域的图,第二个用于把Y域的图还原为X域的图,让输入和输出越接近越好,Discriminator(辨别者)用于辨别第一个Generator生成的图片是否为Y域的图片
Theory Behind GAN(GAN背后的理论)
理论:如果要生成一张人脸图片,每张图片可以当成高维度空间的一个点,在整个高维空间中只有少部分的点是人脸图片,并且这些点在高维空间中有某个固定的分布,GAN做的事就是找出这个分布。
- 机器训练出的分布设为Pg,真实的最佳分布为Pdata,所以要找出那个与Pdata分歧(divergence)最小的分布Pg:
- 训练Discriminator(辨别者)给Pg和Pdata中图片打分,通过分数求出Div(Pg,Pdata)
训练Discriminator,达到分辨“假钞”的目的,让其对Pg中图片分数越低越好,对Pdata中图片分数越高越好。所以设一个函数,只与Generator和Discriminator有关,在训练Discriminator时会让Generator停止训练
图片得分为D(x):
- Pg中图片分数越低越好,所以求 (1-Pg) 分数套Log函数的期望越大越好
- Pdata中图片分数越高越好,所以求 Pdata 分数套Log函数的期望越大越好
综上,求V(G,D)最大时就训练出了Discriminator:
所以越大越好
由于Pdata(x)和Pg(x)为常数,所以求最大值:
计算方法:把后边max部分用L(G)表示:求G*:
Max V(G,D)和Min L(G)都是分段函数,求微分时也要分段求
Flow Based Generation Model(基于流的生成模型)
- change of variable theorem(变元定理):分布π转换成p之后,π上点z’相应的移动到x’,z’移动∆z后,x’相应的移动∆x,其中保证π(z’) ∆z=p(x’) ∆x;当∆x趋近于0时,变得到了π(z’)与p(x’)之间的关系
二元也相同:
利用换元定理,代入GAN得:
显然,当输入z和输出x的维度较高时, 的计算量较大,并且需要将z换成x,所以也必须知道,所以需要对G做一定的限制,让G变简单,但可以叠多层
耦合层:
方法一:G可设置为:
计算:
计算,计算右下角:
方法二:影像处理G可设置为:
计算:结果为
标签:Generator,生成式,网络,Pdata,GAN,Pg,Discriminator,对抗,图片 From: https://www.cnblogs.com/TianLiang-2000/p/17569876.html