AE
VAE
GAN
应用目标
生成式任务(生成、重建、超分辨率、风格迁移、补全、上采样等)
核心思想
生成器G和判别器D的一代代博弈
- 生成器G:生成网络,通过输入生成图像,希望生成的数据可以让D分辨不出来
- 判别器D:二分类网络,将生成器生成图像作为负样本,真实图像作为正样本,希望尽可能分辨出G生成的数据和真实数据的分布
- 判别器D训练:给定G,通过G生成图像产生负样本,并结合真实图像作为正样本来训练D
- 生成器G训练:给定D,以使得D对G生成图像的评分尽可能接近正样本作为目标来训练G
- G和D的训练过程交替进行,对抗过程使得G生成的图像越来越逼真,D分辨真假的能力越来越强
问题分析
目标函数如何分析?
先更新D参数指导G方向
公式解析:$$min_{G}max_{D}V(D,G)=E_{x\backsim p_{data}(x)}[logD(x)]+E_{z\backsim p_{z}(z)}[log(1-D(G(z)))] $$
- 先算 \(max_{D}V(D,G)=E_{x\backsim p_{data}(x)}[logD(x)]+E_{z\backsim p_{z}(z)}[log(1-D(G(z)))]\),固定G,用D区分正负样本,因此是\(max_{D}\)
- 后算 整体 ,判别式D固定不动,通过调整生成器G,希望判别器不失误,尽可能不让判别器区分出正负样本(提高生成图像的真实性)
每训练出一个生成器,就要生出一个判别器,判别器要使真实图像的值尽可能的大,生成图像的值尽可能的小。也就是说让判别器具有更强的判别能力。是个动态的问题,跟以前损失函数恒定不变的思想不同
如何生成图片?
G和D应该如何设置?
如何进行训练?
点击查看代码
for 迭代 in range(迭代总数):
for batch in range(batch_size):
新batch = input1的batch + input2的batch # (batch加倍)
for 轮数 in range(判别器总轮数):
步骤一
步骤二