GANs入门系列二

该博客是根据台大李宏毅老师的关于GAN的****所整理的笔记,建议大家可以直接看这个老师的视频(因在youtube,故需翻墙)

Generative Adversarial Network

回顾

Auto-encoder (AE)

GANs入门系列二

简单,但生成的图像的质量很no realistic,视觉上看会很模糊,更像是图像的求均运算

Variational Auto encoder (VAE)

GANs入门系列二

NN Encoder会产生两个向量m,σR3m, \sigma \in R^3, 然后再从一个正态分布中采样一个噪声 eR3e \in R^3,做 c=exp(σ)e+mR3c=\exp{(\sigma)} \odot e + m \in R^3 ,最后将 cc 输入到NN Decoder中生成图像。优化的目标是使得 output 与 input 要尽可能地接近,同时为了引入正则项的目的是为了让 σ,m\sigma, m 尽可能地接近于 0,这样在测试时就可以去掉NN Encoder而直接使用 ee 作为NN Decoder的输入了。

AE/VAE存在的问题:

GANs入门系列二

即NN Decoder并不会产生真正realisctic的数据。例如图中的两张“7”,二者仅差了一个像素点,人会偏爱左边的,但对该模型来说,二者与真实的“7”均差了一个像素点,故无优劣之分

GAN

Maximum Likelihood Estimation

  • Given a data distribution Pdata(x)P_{data}(x)
  • We have a distribution PG(x;θ)P_G(x; \theta) parameterized by θ\theta
    • E.g. PG(x;θ)\it{E.g.}\ P_G(x; \theta) is a Gaussian Mixture Model, then θ\theta are means and variances of the mixture Gaussian. GANs入门系列二
    • goal: find θ\theta that PG(x;θ)P_G(x; \theta) close to Pdata(x)P_{data}(x)
    • note: the x here donates the data sampling from (output of) distribution Pdata(PG), not the input.\color{#F00}{\text{the }x\text{ here donates the data sampling from (output of) distribution }P_{data} (P_G)\text{, not the input}}.

Sampling {x1,x2,,xm}\{x^1,x^2,\dots,x^m\} from Pdata(x)P_{data}(x), we can compute PG(xi;θ),i=1,2,,mP_G(x^i;\theta), i=1,2,\dots,m. Then Likelihood of generating the samples is: L=i=1mPG(xi;θ)L=\prod_{i=1}^mP_G(x^i;\theta). Our goal is to find θ\theta^* maximizing the likelihood:
θ=argmaxθi=1mPG(xi;θ)=argmaxθlogi=1mPG(xi;θ)=argmaxθi=1mlogPG(xi;θ) ({xi,,xm} from Pdata)argmaxθExPdatalogPG(x;θ) (when m=+)=argmaxθxPdata(x)logPG(x;θ)dxxPdata(x)logPdata(x)dxθθ=argmaxθxPdata(x)logPdata(x)PG(x;θ)dx=argminθKL(Pdata(x)PG(x;θ)) \begin{array}{lll} \theta^* &=& \arg\max_{\theta} \prod_{i=1}^m P_G(x^i; \theta) \\ &=& \arg\max_{\theta} \log \prod_{i=1}^m P_G(x^i; \theta) \\ &=& \arg\max_{\theta} \sum_{i=1}^m \log P_G(x^i;\theta)\ (\because \{x^i,\dots,x^m\}\text{ from }P_{data}) \\ &\approx& \arg\max_{\theta} E_{x \sim P_{data}}\log P_G(x;\theta)\ (\text{when }m=+\infty) \\ &=& \arg\max_{\theta} \int_x P_{data}(x) \log P_G(x;\theta) dx - \underbrace{\int_x P_{data}(x) \log P_{data}(x) dx}_{与\theta无关,为一个常数项,不会影响\theta^*的求值} \\ &=& \arg\max_{\theta} \int_x -P_{data}(x) \log \frac{P_{data}(x)}{P_G(x;\theta)}dx\\ &=& \arg\min_{\theta} \text{KL}(P_{data}(x) \|P_G(x;\theta)) \end{array}
θ\theta^* 其实就是使得 Pdata(x)P_{data}(x)PG(x)P_G(x) 尽可能的接近。在实际中,Gaussian mixture model无法完全拟合 PdataP_{data},故用 NN 来生成 PGP_G 从而来拟合 PdataP_{data}

GANs入门系列二

然而,这会很难计算 likelihood(因为 PdataP_{data}PGP_G 均是未知的),而 GAN 则可解决该问题

Baisc Idea of GAN

  • Generator GG

    • GG is a function, input zz, output xx
    • Given a prior discribution Pprior(z)P_\text{prior}(z), a probability discribution PG(x)P_G(x) is defined by GG
  • Discriminator DD

    • DD is a function, input xx, output a scalar probability whether xx comes from a real dataset or not, i.e.\it{i.e.}, from Pdata(x)P_{data}(x) or PG(x)P_G(x)
  • Optimization function:
    (1)argminGmaxDExPdata[logD(x)]+ExPG[log(1D(x))]=argminGmaxDV(G,D) \begin{array}{ll} &\arg \min_G \max_D E_{x \sim P_{data}}[\log D(x)] + E_{x \sim P_G}[\log(1-D(x))] \\ =&\arg \min_G \max_D V(G, D) \end{array} \tag{1}

    • 给定 GG,求解 DD^* 使其最大化 V(G,V)V(G,V)
      (2)maxDV=maxDExPdata[logD(x)]+ExPG[log(1D(x))]=maxDxPdata(x)logD(x)+PG(x)log(1D(x))dx(积分号可合并的原因:理想中,PGPdata,即分别来自 Pdata 和 PG 的 x 可视为同一个 x )=maxDf(D) \begin{array}{lll} \max_D V &=& \max_D E_{x \sim P_{data}}[\log D(x)] + E_{x \sim P_G}[\log(1-D(x))] \\ &=& \max_D \int_x P_{data}(x) \log D(x) + P_G(x) \log(1-D(x)) dx \\ & & (\text{积分号可合并的原因:理想中,$P_G \approx P_{data}$,即分别来自 $P_{data}$ 和 $P_G$ 的 $x$ 可视为同一个 $x$ }) \\ &=& \max_D f(D) \end{array} \tag{2}
      然后对 f(D)f(D) 对于自变量 DD 求导使其为0即可求解出DD^*,结果为 D(x)=Pdata(x)Pdata(x)+PG(x)D^*(x)=\displaystyle\frac{P_{data}(x)}{P_{data}(x)+P_G(x)}

    • 在得出 DD^* 后,将其代入 V(G,D)V(G,D) 然后求解 GG^* 使其最小化 V(G,D)V(G,D^*)
      (3)minGV(G,D)=minGExPdata[logD(x)]+ExPG[log(1D(x))]=2log2+minGxPdata(x)logPdata(x)(Pdata(x)+PG(x))/2+PG(x)logPG(x)(Pdata(x)+PG(x))/2dx=2log2+minG(KL(Pdata(x)Pdata(x)+PG(x)2)+KL(PG(x)Pdata(x)+PG(x)2))=2log2+minG2JSD(Pdata(x)PG(x))0 \begin{array}{lll} \min_G V(G, D^*) &=& \min_G E_{x \sim P_{data}}[\log D^*(x)] + E_{x \sim P_G}[\log(1-D^*(x))] \\[.6em] &=& -2 \log 2 + \min_G \int_x P_{data}(x) \log \frac{P_{data}(x)}{(P_{data}(x)+P_G(x))/2} + P_G(x) \log \frac{P_G(x)}{(P_{data}(x)+P_G(x))/2} dx \\[.6em] &= &-2 \log 2 + \min_G (\text{KL}(P_{data}(x)\|\frac{P_{data}(x)+P_G(x)}{2}) + \text{KL}(P_G(x)\|\frac{P_{data}(x)+P_G(x)}{2})) \\[.6em] &=& -2 \log 2 + \min_G 2 \text{JSD}(P_{data}(x)\|P_G(x)) \leq 0 \end{array} \tag{3}
      其中 JSD(PQ)=12KL(PM)+12KL(QM), M=P+Q2\text{JSD}(P\|Q)=\frac{1}{2} \text{KL}(P\|M) + \frac{1}{2} \text{KL}(Q\|M),\ M=\frac{P+Q}{2},它是对称的,其值域为[0,log2][0,\log2],若 P,QP,Q完全一样,则值为0,若完全无关,则为log2\log2。相反,KL\text{KL} 是非对称的。注意。从该式上看,最小化 GG 其实就是使得 PGPdataP_G \to P_{data}

上面是从理论上进行的求解分析,而在实际中,无需那么复杂,实际的优化过程如下:
GANs入门系列二
GANs入门系列二

存在问题

  1. Discriminator通过JS散度能告诉Generator的有效信息很少。在实际的训练中可发现,即使generator能产生相对realistic的图片,discriminator也总是能够区分出哪些是真实的图片,哪些是伪造的图片。同时,随着迭代进行,即使generator以及能够产生越来越realistic的图片,它的loss其实会维持在一个特定的值,如下图所示:
    GANs入门系列二
    这会造成在实际中难以确定合适的迭代次数,且无法让generator提高效果。原因如下:
    在实际中,开始训练时,PdataPGP_{data} \cap P_G \to \empty,即两个分布几乎没有交集,这就造成JSD(PdataPG)=log2\text{JSD}(P_{data}\|P_G)=\log2,即公式(3)的 minGV(G,D)=0\min_GV(G,D^*)=0,因此 G 就无法得到优化:
    GANs入门系列二
    一种比较常见的解决方案:
    GANs入门系列二
  2. Mode Collapse. 模型坍塌,即许多个不同的noise会生成同样一幅图片(即generator只会生成一些简单的、重复的样本,缺乏多样性)。例如,原数据集中10个类,但Generator只会生成其中1/2个类的图片,此时就称出现了模型坍塌问题
    GANs入门系列二