GAN 的理解

理论:

minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezp(z)[log(1D(G(z)))]\mathop{min}\limits_{G}\mathop{max}\limits_{D}V(D,G)=E_{x\sim p_{data}(x)}[logD(x)]+E_{z\sim p_(z)}[log(1-D(G(z)))]

其中VV表示Value,xx表示真实数据,zz表示噪声,G(z)G(z)表示生成器生成的样本,EE表示期望。

DD想增加这个值Value(通过对D(x)D(x)输出1,D(G(z))D(G(z))输出0,即正确分类,使V接近0),GG想减小这个值(通过让DDG(z)G(z)分为1,使V负无穷)。当二者达到纳什平衡时,它们各自达到最优。

注:D(x)(0,1)D(x)\in (0,1)V(D,G)(,0]V(D,G)\in (-∞,0]

实际:

根据前面价值函数 V(G,D) 的定义,我们需要求两个数学期望,即 E[log(D(x))] 和 E[log(1-D(G(z)))],其中 x 服从真实数据分布,z 服从初始化分布。但在实践中,我们是没有办法利用积分求这两个数学期望的,所以一般我们能从无穷的真实数据和无穷的生成器中做采样以逼近真实的数学期望,即:
minGmaxDV~(D,G)=1mi=1mlogD(xi)+1mi=1mlog(1D(G(zi)))\mathop{min}\limits_{G}\mathop{max}\limits_{D}\tilde{V}{(D,G)}=\frac{1}{m} \sum_{i=1}^{m} \log D\left(x^{i}\right)+\frac{1}{m} \sum_{i=1}^{m} \log \left(1-D\left(G(z^i)\right)\right)

训练时,分别固定GG,最大化L(D)L(D)和固定DD,最小化L(G)L(G)

伪代码:GAN 的理解
第一步我们训练D,D是希望V(G, D)越大越好,所以是加上梯度(ascending)。第二步训练G时,V(G, D)越小越好,所以是减去梯度(descending)。整个训练过程交替进行。

内循环DD的迭代次数kk也可以多于GG

参考:机器之心