GAN - glqglq/ml_dl_wiki GitHub Wiki

基本GAN

  • 模型:由生成器generator和判别器disciminator组成,二者互相对抗(敌人)、学习(朋友),要求D走在G前面。

    • generator是NN,输入向量(可是随机、可是有意义的)经过generator生成代表图像、句子的高维向量。输入的每个dimension代表生成器生成图像的某些特征。
    • discriminator是NN,输入图像or句子经过discriminator生成数值,数值越高代表生成的越真实,其用于判断输入图像or句子是generator生成的还是真实的。
  • 损失函数:交叉熵损失。

  • 算法:

    • 初始化生成器、判别器为G、D。
    • 在每轮执行:
      • 正向传播G:G输入随机向量生成输出o_G。
      • 正向传播D:将o_G和真实图片输入D。
      • 计算D损失:损失函数要求o_G的输出是0、真实图片的输出是1。
      • 训练D:固定G,调节D。
      • 计算G损失:损失函数要求o_G的输出是1。
      • 训练G:固定D,调节G。
  • 问题:

    • generator为啥不自己学习?——因为输入向量难以生成。
    • 为啥不用autoencoder来输入图像、中间生成向量、最后生成该图像?——其实这里的decoder就是generator,但是其面临的问题是training data数量有限,生成图片难以学习到像素点之间的关系。
    • 为啥不用Variational autoencoder(exp(alpha)*e+m)?——
    • discriminator为啥不自己做?——可以自己做,判别图片是否real能学习到像素点之间的关系。但是数据集只有real的图片,没有fake图片,很难找负例。
  • Metric:

  • Structured Learning:区别与回归、分类,其输出是sequence、matrix、graph、tree,可以视为one-shot/zero-shot learning。

  • 应用:视频增强、文本生成、图像生成、超分、声音去噪

Conditional GAN:

  • 模型:除了从normal distribution采样出来的输入z输入G,还增加一个确定的输入c;D输入除了G的输出x,还增加了一个确定的输入c。有两种架构: conditional
  • 损失函数:
    • Loss1:判断输入x是否是真实的。
    • Loss2:判断输入c和x是不是对应关系。

Stack GAN

  • 两个GAN叠加,一次生成不好就两次 Stack Gan

参考资料