![生成对抗网络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=1739287414-qWAoEGHzjRsiR4I8P2bsLGX91RJDmaWs-0-eb0cc3c42faa5f10f158aafb015f27e2)
图2-2 判别器原理
在训练判别器时,我们面对的是一个监督学习的二分类问题:对于训练数据集中的样本,判别器应输出1;而对于生成器生成的样本,判别器应输出0,如图2-2所示。使用二分类交叉熵作为损失函数可得判别器的目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_02.jpg?sign=1739287414-Al8ycMxfJTW1cb2X2StXOOqX0YxBVIzg-0-48acefc275ecca9ac00e68ccc1fc42c5)
在实际训练时,两类样本训练数据为{(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=1739287414-C1j307bh0097xOQONSyNaqOspx2E2wNz-0-3f0fea949fcb4c9e91746bdb63ae364e)
在训练生成器时,训练数据为{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=1739287414-TzTk2ffgSxI98xaZwcRAko5E0zLjQAA5-0-d149056fd324030b03f5a74aebe8a3e6)
图2-3 生成器原理
对于生成器,其目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_05.jpg?sign=1739287414-yGXDWjqPflJlwSkozMI5oOplwxZYOdH1-0-acc3872484f2ca1746b6a1add4f12488)
而第一项相对于生成器而言为常数,故可简化为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_06.jpg?sign=1739287414-8sXvYzjICmgiz4O0t4j0wqIHUpgb0CNt-0-898078b066865d1bd0b36023ed1db449)
实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_07.jpg?sign=1739287414-5Btwc3HUjOZ0V3yY4A1T2AGZcvFnU2Dz-0-8342b6423350b5e11953f6ce7589e722)
GAN采用交替训练判别器和生成器的方式进行训练,通常先训练k次判别器,再训练1次生成器,直至目标函数收敛。整个算法流程如下所示。
GAN训练算法
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_08.jpg?sign=1739287414-0q0VznvrLVHuOr4lEc6Ph7MZO4Fe6uDa-0-4a71e5fa8c9f8a821166704887b70917)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_01.jpg?sign=1739287414-65hVdKyefTPPpu07CtLTeZqHYUCYYNTw-0-748cf13f99f1175fda65c29c51ee1b1c)
实际上,在训练早期,生成器的生成能力一般比较差,而判别器的判别能力往往比较强,即D(G(z))的值普遍很小,导致生成器的梯度比较小,如图2-4中下面的曲线所示,故有时生成器会使用能在初始时提供较大梯度的目标函数:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_02.jpg?sign=1739287414-yWwdtoZJS96fzhiOn4W7qdUwM0B4RpdM-0-a949e8a38753a9374a52a0e36d376fbe)
我们称之为非饱和形式(上文使用的生成器损失函数称为饱和形式)。根据图2-4在两条曲线上的样本对比可知,非饱和形式目标函数(上面的曲线)在早期能提供更多的梯度。实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_03.jpg?sign=1739287414-7CvE5h3pvmEKXTP7wwxN2b5XWFyb0EAd-0-f2605f333399508629522448a1d172c7)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_04.jpg?sign=1739287414-QnX3fOgJTFakghv4IyPdmN58zKHFuoLC-0-e79d0ac065b3e1124352c79895f7eedb)
图2-4 饱和形式与非饱和形式函数曲线