![生成对抗网络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=1739391041-JFGS4Sr9VxnbbzSmfzInqjXUbRDeTllc-0-7f8593177abf715f3c789724010583a5)
图2-2 判别器原理
在训练判别器时,我们面对的是一个监督学习的二分类问题:对于训练数据集中的样本,判别器应输出1;而对于生成器生成的样本,判别器应输出0,如图2-2所示。使用二分类交叉熵作为损失函数可得判别器的目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_02.jpg?sign=1739391041-C26QHtjpKSUsPmyzEyBqLmIwOH4ooHdp-0-6b092a1993eb9616da8a6a5b31e9e281)
在实际训练时,两类样本训练数据为{(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=1739391041-OCmw9Yo9BNPaYN4LzhY14rnRvd8uIQIm-0-256aa84382c9734c8a24eaf88f163024)
在训练生成器时,训练数据为{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=1739391041-Kr77RUCbcDNQ8pl8SihPAYUBhko9B3De-0-a915ec189f3316022034c289f20e1543)
图2-3 生成器原理
对于生成器,其目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_05.jpg?sign=1739391041-aza8CXjTfkk2qGHKqk7ggR9388ztJfds-0-a22609818598db7bcf10cd38d943c6c3)
而第一项相对于生成器而言为常数,故可简化为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_06.jpg?sign=1739391041-GalvEJkDw1Eh40yAWp0wHLoJmr7AuQQD-0-21fba47bad21bb8023a8b32a0185b960)
实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_07.jpg?sign=1739391041-qNTudrlWv6zEJZnLUuLxgMSEiBXXvKbW-0-4511ade4fa27bf9499ea5693091dd137)
GAN采用交替训练判别器和生成器的方式进行训练,通常先训练k次判别器,再训练1次生成器,直至目标函数收敛。整个算法流程如下所示。
GAN训练算法
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_08.jpg?sign=1739391041-HVQRgTlMxaqVnTePwrEfHQ7TioIz9YNt-0-58ad9ddb26409beea5daa0c4ffd3a526)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_01.jpg?sign=1739391041-UOn9Ledl7IZfQ6G7b4csqmWyP6mziIEp-0-c043ed387a26beb6f0a54d36a7aa29db)
实际上,在训练早期,生成器的生成能力一般比较差,而判别器的判别能力往往比较强,即D(G(z))的值普遍很小,导致生成器的梯度比较小,如图2-4中下面的曲线所示,故有时生成器会使用能在初始时提供较大梯度的目标函数:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_02.jpg?sign=1739391041-oOnSnXdlu4tzrIcUdSJ43T1ZSIz6S3Ln-0-81ec85413e896fe0082a19ca5b6b0614)
我们称之为非饱和形式(上文使用的生成器损失函数称为饱和形式)。根据图2-4在两条曲线上的样本对比可知,非饱和形式目标函数(上面的曲线)在早期能提供更多的梯度。实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_03.jpg?sign=1739391041-UdfyyHo3zsUiwHPIERl7gyoZZkMG0sP9-0-8ec7757784a543bd5b2039548e8d8e75)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_04.jpg?sign=1739391041-t44TRlqphgPC3ZiIjFd8EOh7xFlHxGnZ-0-0c4854c5262726a80acb0c08f49afef0)
图2-4 饱和形式与非饱和形式函数曲线