GAN基本概念
GAN由生成器和判别器组成,生成器负责生成样本,判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。
训练过程:
- 首先随机初始化生成器 G,并输入一组随机向量,以此产生一些数据,并标注成 0。同时把来自真实分布中的数据标注成 1。两者同时丢进判别器 D 中,以此来训练判别器 D 。实现当输入是真的时候,判别器给出接近于 1 的分数,而输入假的时候,判别器给出接近于 0 的低分。
- 对于生成网络,目的是生成尽可能逼真的样本。所以在训练生成网络的时候,我们需要联合判别网络一起才能达到训练的目的。也就是说,通过将两者串接的方式来产生误差从而得以训练生成网络。步骤是:我们通过随机向量(噪声数据)经由生成网络产生一组假数据,并将这些假数据都标记为 1 。然后将这些假数据输入到判别网路里边,判别器肯定会发现这些标为真实数据(标记为1)的输入都是假数据(给出低分),这样就产生了误差。在训练这个串接的网络的时候,一个很重要的操作就是固定判别网络的参数,只是把误差一直传,传到生成网络那块后更新生成网络的参数。
在完成了生成网络的训练之后,我们又可以产生新的假数据去训练判别网络了。我们把这个过程称作为单独交替训练。同时要定义一个迭代次数,交替迭代到一定次数后停止即可。
GAN的目标函数定义如下:
min G max D V ( D , G ) = E x ∼ p data ( x ) [ log D ( x ) ] + E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min _{G} \max _{D} V(D, G)=\mathrm{E}_{x \sim p_{\text {data}}(x)}[\log D(x)]+\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] GminDmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]
这个目标函数可以分为两个部分来理解:
第一部分: 判别器的优化通过 max D V ( D , G ) \mathop {\max}\limits_D V(D,G) DmaxV(D,G)实现, V ( D , G ) V(D,G) V(D,G)为判别器的目标函数。
其第一项 E x ∼ p data ( x ) [ log D ( x ) ] \mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)] Ex∼pdata (x)[logD(x)]表示:对于从真实数据分布中采用的样本 ,其被判别器判定为真实样本概率的数学期望。对于真实数据分布 中采样的样本,其预测为正样本的概率当然是越接近1越好。因此希望最大化这一项。
第二项 E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] {\rm E}_{z\sim{p_z}(z)}[\log (1 - D(G(z)))] Ez∼pz(z)[log(1−D(G(z)))]表示:对于从噪声 P z ( z ) P_z(z) Pz(z)分布当中采样得到的样本,经过生成器生成之后得到的生成图片,然后送入判别器,其预测概率的负对数的期望,这个值自然是越大越好,这个值越大, 越接近0,也就代表判别器越好。
第二部分: 生成器的优化通过 min G ( max D V ( D , G ) ) \mathop {\min }\limits_G({\mathop {\max }\limits_D V(D,G)}) Gmin(DmaxV(D,G))来实现。注意,生成器的目标不是 min G V ( D , G ) \mathop {\min }\limits_GV(D,G) GminV(D,G),即生成器不是最小化判别器的目标函数,而是最小化判别器目标函数的最大值,判别器目标函数的最大值代表的是真实数据分布与生成数据分布的JS散度,JS散度可以度量分布的相似性,两个分布越接近,JS散度越小。
判别器目标函数写成离散形式即为: V ( D , G ) = − 1 m ∑ i = 1 i = m l o g D ( x i ) − 1 m ∑ i = 1 i = m l o g ( 1 − D ( x ~ i ) ) V(D,G)=-\frac{1}{m}\sum_{i=1}^{i=m}logD(x^i)-\frac{1}{m}\sum_{i=1}^{i=m}log(1-D(\tilde{x}^i)) V(D,G)=−m1i=1∑i=mlogD(xi)−m1i=1∑i=mlog(1−D(x~i))
可以看出,这个目标函数和交叉熵是一致的,即判别器的目标是最小化交叉熵损失,生成器的目标是最小化生成数据分布和真实数据分布的JS散度。
推导
最大似然估计(Maximum Likelihood Estimation, MLE),就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!
考虑一组含有 m 个样本的的数据集 X={x(1),x(2),x(3),…,x(m)},独立的由未知参数的现实数据生成分布 pdata(x) 生成。
令 p model ( x ; θ ) p_{\text {model}}(x ; \theta) pmodel(x;θ)是一个由参数 θ (未知)确定在相同空间上的概率分布,也就是说,我们的目的就是找到一个合适的 θ 使得 p model ( x ; θ ) p_{\text {model}}(x ; \theta) pmodel(x;θ)m尽可能地去接近 p d a t a ( x ) p_{d a t a}(x) pdata(x).
我们利用真实分布 pdata(x) 中生成出来的数据集 X 去估算总体概率:
L = ∏ i = 1 m p model ( x ( i ) ; θ ) L=\prod_{i=1}^{m} p_{\text {model}}\left(x^{(i)} ; \theta\right) L=i=1∏mpmodel(x(i);θ)
对 θ 的最大似然估计被定义为:
θ M L = arg max θ p m o d e l ( X ; θ ) = arg max θ ∏ i = 1 m p m o d e l ( x ( i ) ; θ ) p model ( X ; θ ) → f ( x ( 1 ) , x ( 2 ) , x ( 3 ) , … , x ( m ) ∣ θ ) ∏ i = 1 m p model ( x ( i ) ; θ ) → f ( x ( 1 ) ∣ θ ) ⋅ f ( x ( 2 ) ∣ θ ) ⋅ f ( x ( 3 ) ∣ θ ) … f ( x ( m ) ∣ θ ) \begin{array}{c}{\theta_{M L}=\underset{\theta}{\arg \max } p_{m o d e l}(X ; \theta)=\underset{\theta}{\arg \max } \prod_{i=1}^{m} p_{m o d e l}\left(x^{(i)} ; \theta\right)} \\ {\qquad \begin{aligned} p_{\text {model}}(X ; \theta) & \rightarrow f\left(x^{(1)}, x^{(2)}, x^{(3)}, \ldots, x^{(m)} | \theta\right) \\ \prod_{i=1}^{m} p_{\text {model}}\left(x^{(i)} ; \theta\right) & \rightarrow f\left(x^{(1)} | \theta\right) \cdot f\left(x^{(2)} | \theta\right) \cdot f\left(x^{(3)} | \theta\right) \ldots f\left(x^{(m)} | \theta\right) \end{aligned}}\end{array} θML=θargmaxpmodel(X;