什么是生成式

所有的网络功能可以分为两种,一种是判别式的,给定一个输入x,其会输出一个固定的y;另一种是生成式的,此时的输入除了x,还会有一个随机性的z:

image-20250117133835580

  • 在这里z的分布应当比较简单(可以用函数式来表示)
  • 由于z随机,输出的y也具有随机性,可以看作是一个复杂的分布
  • 我们把这样的网络称为Generator生成器。

这样的网络是为了解决这种情况:同样的输入应该有不同的输出,而这些不同的输出都是正确的。或者说这个模型是带点创造力在的。


Unconditional generation:当不考虑输入x,仅考虑输入是分布z时的情况。

下面来解决二次元头像生成这个问题,我们选取的Z分布是一个正态分布(当然选其他的分布也可以,只要够简单能够用函数式来表示即可)

我们的目标是:从Z分布中sample出低维(50-100)的向量,这个向量经过Generator能够变成图片(高维向量)

在该任务中,我们除了要设计Generator,还要设计一个判别器(Discriminator)。判别器也是一个神经网络,在这个任务中其作用是判断一张图片像不像是二次元图片(即输入为一张图片,输出为一个数值,数值越大代表越像)

在GAN中的“对抗”其实就体现在这。生成器负责生成图像,而判别器负责判断生成的图像是真实的还是伪造的。两者通过对抗训练进行更新,生成器试图生成越来越真实的图像,以欺骗判别器。

生成器与判别器算法

首先要初始化Generator和Discriminator的参数,随后在每个训练阶段都要干这些事:

  • 固定Generator的所有参数,把一堆从分布Z中sample出来的向量塞进Generator,就会吐出一堆图片(一开始这些图片类似于杂讯)

    然后从二次元图库数据集中也sample出几张图片,然后就拿真正的二次元图片和Generator产生出的结果去训练Discriminator,目的是为了让Discriminator能够分辨真正的二次元图片和假的二次元图片。这样的操作可以是一个分类模型(真实图片为1,假图片为0),也可以是一个回归问题。

    image-20250119200111081

  • 固定Discriminator的所有参数,开始训练Generator。

    把某个向量丢进Generator,其得到的图片再丢进Discriminator,就能得到一个数值。而我们训练Generator的目的就在于让这个数值变大。

  • 依照以上操作反复执行,不断更新Generator和Discriminator的参数