
2.1.2 GAN模型
在对GAN有了一定的基本印象后,我们再用数学完整描述GAN的工作原理。
假设生成器和判别器均为最简单的全连接网络,其参数分别表示为θ和φ,假设训练数据集{x(1),x(2),…,x(N)}独立同分布采样于概率分布pdata(x),生成器生成的样本集满足的概率分布为pg(x)。
判别器的输入为样本x,输出为0至1之间的概率值p=D(x),表示样本x来源于训练数据集分布pdata的概率,1-p表示样本x来源于生成样本分布pg的概率。D(x)=1表示样本x完全来源于训练数据集,而D(x)=0表示样本x完全不来源于训练数据集,即完全来源于生成样本分布。注意,实际中的判别器的输出是一个“软”结果,而非之前所述的非真即假的“硬”分类结果,判别器最后一层的激活函数大多使用sigmoid函数。

图2-2 判别器原理
在训练判别器时,我们面对的是一个监督学习的二分类问题:对于训练数据集中的样本,判别器应输出1;而对于生成器生成的样本,判别器应输出0,如图2-2所示。使用二分类交叉熵作为损失函数可得判别器的目标函数为:

在实际训练时,两类样本训练数据为{(x(1),1),(x(2),1),…,(x(N),1),(G(z(1)),0),(G(z(2))),0),…(G(z(N)),0)},则目标函数为:

在训练生成器时,训练数据为{z(1),z(2),…,z(N)},如图2-3所示。

图2-3 生成器原理
对于生成器,其目标函数为:

而第一项相对于生成器而言为常数,故可简化为:

实际使用样本训练时,目标函数为:

GAN采用交替训练判别器和生成器的方式进行训练,通常先训练k次判别器,再训练1次生成器,直至目标函数收敛。整个算法流程如下所示。
GAN训练算法


实际上,在训练早期,生成器的生成能力一般比较差,而判别器的判别能力往往比较强,即D(G(z))的值普遍很小,导致生成器的梯度比较小,如图2-4中下面的曲线所示,故有时生成器会使用能在初始时提供较大梯度的目标函数:

我们称之为非饱和形式(上文使用的生成器损失函数称为饱和形式)。根据图2-4在两条曲线上的样本对比可知,非饱和形式目标函数(上面的曲线)在早期能提供更多的梯度。实际使用样本训练时,目标函数为:


图2-4 饱和形式与非饱和形式函数曲线