![生成对抗网络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=1739045167-gncryrPHj3088Pu8zr5J9pxhmy1e9i6v-0-c0fdeeacc7d864d37edc4ea653c3e4ae)
图2-2 判别器原理
在训练判别器时,我们面对的是一个监督学习的二分类问题:对于训练数据集中的样本,判别器应输出1;而对于生成器生成的样本,判别器应输出0,如图2-2所示。使用二分类交叉熵作为损失函数可得判别器的目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_02.jpg?sign=1739045167-zjeqCMD22DmR44vPH2gEGPpTkskIvgSR-0-fac2d13d5a50aba7d535470ddb833f6c)
在实际训练时,两类样本训练数据为{(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=1739045167-Rrb5fRxVk12A6BuxaMaAIB9Fe3Ilhnti-0-0f26ec08addb1ef7b20afea274351478)
在训练生成器时,训练数据为{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=1739045167-3ytuXfhxxGj6xgAltTVLng7TrdSHAsLa-0-6460cc38f1560d48560a2b1c9622b1d0)
图2-3 生成器原理
对于生成器,其目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_05.jpg?sign=1739045167-ljkzx01ixNgeiwIZXwZy39QMlYIyZdbX-0-51da5a80bdc2abd11036710bf1d88393)
而第一项相对于生成器而言为常数,故可简化为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_06.jpg?sign=1739045167-p8FcEBNcxxWzFRLO2al4bfDeFhWZ8Q2a-0-679f5c7c29a4048aea6eb810be204819)
实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_07.jpg?sign=1739045167-7K54fveIdHDrqyq6Ejb8luS2iQ2QnSb1-0-a78c947da5a824161f73a8fee2493ea5)
GAN采用交替训练判别器和生成器的方式进行训练,通常先训练k次判别器,再训练1次生成器,直至目标函数收敛。整个算法流程如下所示。
GAN训练算法
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_44_08.jpg?sign=1739045167-8V9VuZYG3sPNAfAYAREOFLMWbQBjqElV-0-d2951dedebb18efa9d444b3045d1ca04)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_01.jpg?sign=1739045167-GbHp18Zh6h1pn1NHo1Im7kDirTjZSVf6-0-bfd99a0e637b5963af681b92e9d3d336)
实际上,在训练早期,生成器的生成能力一般比较差,而判别器的判别能力往往比较强,即D(G(z))的值普遍很小,导致生成器的梯度比较小,如图2-4中下面的曲线所示,故有时生成器会使用能在初始时提供较大梯度的目标函数:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_02.jpg?sign=1739045167-dWVmIqIEF3cej4EejIxM9eRJafqi2RtX-0-c5f1e6f44acb1d0b07635ff0468a6182)
我们称之为非饱和形式(上文使用的生成器损失函数称为饱和形式)。根据图2-4在两条曲线上的样本对比可知,非饱和形式目标函数(上面的曲线)在早期能提供更多的梯度。实际使用样本训练时,目标函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_03.jpg?sign=1739045167-0REOWTrECdlD5Y8fMea6rYEiQEGI02oc-0-aca4962b2cb08c7060b1270978764ede)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_45_04.jpg?sign=1739045167-BjI5qapNrUooAE5ZnGP4UocjeJ9pvDyy-0-bc8a4c6fdb29ce1cc30604b2490b4228)
图2-4 饱和形式与非饱和形式函数曲线