![生成对抗网络GAN:原理与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/116/48213116/b_48213116.jpg)
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函数。
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_01.jpg?sign=1738887131-bcXC4qAtBk5mLokat2ii87bn8jv4cwAy-0-eb5daabd134ccf06bf949e679b32407e)
图2-2 判别器原理
在训练判别器时,我们面对的是一个监督学习的二分类问题:对于训练数据集中的样本,判别器应输出1;而对于生成器生成的样本,判别器应输出0,如图2-2所示。使用二分类交叉熵作为损失函数可得判别器的目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_02.jpg?sign=1738887131-TNjnaMamjVBnGbRG8jNqtCuPcNejj0cu-0-ccb4ff6cc1ba594d41d40154806f8552)
在实际训练时,两类样本训练数据为{(x(1),1),(x(2),1),…,(x(N),1),(G(z(1)),0),(G(z(2))),0),…(G(z(N)),0)},则目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_03.jpg?sign=1738887131-kmqoxJEFTRQxjdbPjZoTRDnAxcLiqHR7-0-1ca9209c670aca3bedf0d571da0b55b6)
在训练生成器时,训练数据为{z(1),z(2),…,z(N)},如图2-3所示。
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_04.jpg?sign=1738887131-XGa2HGjS1teyB2FW4cr2uEgRhrAfuHyp-0-094dbb5b2902eb07513ff943938a543d)
图2-3 生成器原理
对于生成器,其目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_05.jpg?sign=1738887131-9UsvlTdmAvfDg9WYd3pmWIDHzfOp6fhn-0-ca57a994ea01d6dd6243954e49b88363)
而第一项相对于生成器而言为常数,故可简化为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_06.jpg?sign=1738887131-94PxfPZHiJepGDyGmairmuOLn2zdpwk6-0-78e4ef9e430c2b090dc9e86327cb3a25)
实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_07.jpg?sign=1738887131-rKJFizT2vsUWhGyRroxnZRDyZ4VprgOk-0-d5f114c97a06bf93c98723ccf91d7b0b)
GAN采用交替训练判别器和生成器的方式进行训练,通常先训练k次判别器,再训练1次生成器,直至目标函数收敛。整个算法流程如下所示。
GAN训练算法
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_08.jpg?sign=1738887131-s4dWqmjJRCvjCU2IuR3plePxWRdqtji0-0-26e0e186b49182fd3cd557aee16bd8fb)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_01.jpg?sign=1738887131-s7nGstKMXsWlEjuzluWmHDqpq5F7J0DP-0-7ddd3e52576f1d2f1207e978da981b6b)
实际上,在训练早期,生成器的生成能力一般比较差,而判别器的判别能力往往比较强,即D(G(z))的值普遍很小,导致生成器的梯度比较小,如图2-4中下面的曲线所示,故有时生成器会使用能在初始时提供较大梯度的目标函数:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_02.jpg?sign=1738887131-7Dk3c5CjzQe867mBKBjeVW7yQbbiUY6I-0-c94d80e338b22a13138edc1cb5cb3a58)
我们称之为非饱和形式(上文使用的生成器损失函数称为饱和形式)。根据图2-4在两条曲线上的样本对比可知,非饱和形式目标函数(上面的曲线)在早期能提供更多的梯度。实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_03.jpg?sign=1738887131-HHpNgDHnz3wTsRQbYE45JAXb1I9AtobD-0-67bfb55a023d8350685db5278bdedf7a)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_04.jpg?sign=1738887131-O6g7iYpx9eEhy4zJ63bzmJmrFUA53WCv-0-b4990aa34c46ea6e8601a4482af7854a)
图2-4 饱和形式与非饱和形式函数曲线