GAN 简介

GAN的工作原理

generator 和 discriminator相互博弈:

  • discrimiator最大化真实样例与generator样例之间的差异
  • generator根据discriminator“反馈的指导信息”,更新参数,生成“更靠谱”的样例,减小与真实样例的差异。

Minimax Game:

minGmaxDV(G,D)

在origin GAN中:
V=ExPdata[logD(x)]+ExPG[log(1D(x))]

一般而言,G是neural network, 它从一个先验分布Pz,生成x,上式写成:
V=ExPdata[logD(x)]+EzPz[log(1D(G(z)))]

GAN的应用示例

目前,Tensorflow 1.4已经提供了一些gan的实现,在tf.contrib.gan中;另外,有很多开源的GAN的实现。(示例略,可以参加mnist上的各种实验和DCGAN、WGAN等生成的图片)

GAN与ML

LR判别模型

样本实例集合:D={(xi,yi)}i=1n
利用最大似然(ML), 求解判别模型:hθ(x)=11+eθTx

θ=arg max 1ni=1nyilog hθ(xi)+(1yi)log(1hθ(xi))=arg max 1nyi=1log hθ(xi)+yj=0log(1hθ(xj))=arg max |D1|n1|D1|D1log hθ(xi)+|D0|n1|D0|D0log hθ(xj)=arg max P(y=1)ExP(x|y=1)[loghθ(x)]+P(y=0)ExP(x|y=0)[log(1hθ(x))]

事实上,当假设空间hθ(x)有足够强的表征能力,(比如真实分布确实由LR模型生成,或者hθ是深层神经网络,可以表征任意函数);通过求导,可以得到最优解为:
hθ(x)=P(y=1)P(x|y=1)P(y=1)P(x|y=1)+P(y=0)P(x|y=0)=P(x,y=1)P(x)=P(y=1|x)

(额,貌似推理了一句废话,不过这个公式正说明,当我们采用ML或者cross entropy的时候,最优解正是后验概率(条件概率),前提是hθ(x)有足够强的表征能力。推导这个式子,也可以和后面推导D相互验证)
观察式子:

  • xi是正例, hθ(xi)尽可能大,接近1
  • xj是负例, hθ(xj)尽可能小,接近0
  • 或者添加负号,可以从极小化negative log loss的角度考虑。

对于GAN而言,某种程度上,D是h:

  • xiPdata, 是“正例”,判别器D应使得D(xi)尽可能大,接近1,即极大化log(D(xi))
  • xjPG, 是“负例”,判别器D应使得D(xj)尽可能小,接近0, 即极大化 log(1D(xj))
  • 类似地,忽略先验概率,V函数定义为
    V=ExPdata[logD(x)]+ExPG[log(1D(x))]=ExPdata[logD(x)]+EzPz[log(1D(G(z)))]
    , 而D=maxDV(G,D); (这里忽略P(y),两类先验概率相等,正对应后面训练D时,进行相等数量的sample)

事实上,训练判别器D的过程,正是使用ML求解二分类问题

  • sample x1,x2xn from Pdata(x), 作为正例
  • sample x1~,x2~xn~ from PG(x) (实际是sample z), 作为负例
  • 利用最大似然求解V=1ni=1nlog D(xi)+1ni=1nlog(1D(x~i))

(同样的思想,有“NCE”, “negative sampling”)

ori-GAN和ML分别衡量不同的divergency

  • ML 衡量生成模型与真实概率分布的KL距离
  • ori-GAN衡量JS距离

ML and KL divergency

未知的真实分布:Pdata(x)
样本实例集:D={xi}i=1n, 采样自Pdata(x)
假设空间中的生成模型:PG(x;θ)来模拟Pdata(x)
根据ML原则:

θ=argmaxθi=1nPG(xi;θ)=argmaxθ1ni=1nlog PG(xi;θ)argmaxθExPdata[logPG(x;θ)]=argmaxθxPdata(x)logPG(x;θ)dxxPdata(x)logPdata(x)dx=argminθKL(Pdata(x) || PG(x;θ))

所以,对生成模型采用ML原则,实际最小化KL距离。

origin-GAN and JS Divergency

  1. 给定G, 求解D=maxDV(G,D);此时V(G,D)衡量Pdata,PG之间JS divergency

maxD V(G,D)=maxD x[Pdata(x)logD(x)+PG(x)log(1D(x))]dxD(x)=Pdata(x)Pdata(x)+PG(x)

类比前面的LR的最优解hθ(x)D表示在先验概率相等的前提下,后验概率P(xdata|x)

此时,

V(G,D)=x[Pdata(x)logPdata(x)Pdata(x)+PG(x)+PG(x)log(1Pdata(x)Pdata(x)+PG(x))]dx=x[Pdata(x)logPdata(x)(Pdata(x)+PG(x))/2+PG(x)logPG(x)(Pdata(x)+PG(x))/2]dx2log2=KL(Pdata(x)||Pdata(x)+PG(x)2)+KL(PG(x)||Pdata(x)+PG(x)2)2log2=2JSD(Pdata,PG)2log2

  1. 求解G使得 G=minGV(G,D)

GAN的训练过程

GAN的基本原理
GAN的完整训练过程。图片来自于“李宏毅 深度学习”课程)
(Ian Goodfellow, 在原始论文中改训练G为log(D(G(z))), 这个训练目标是从收敛的角度来考虑的)

GAN的特别之处在哪里?

  • ML的训练会可能很麻烦:采用显式的概率分布(模型空间可能不够准确);采用隐式的概率推断会涉及比较复杂的方法
  • GAN提供了另外一种方案,它直接利用BP来优化概率分布距离的方法:求解generator和discriminator的minimax博弈。generator和discriminator都采用neural network,有足够强大的表征能力(给一个表征能力的实验)。
  • GAN提供了一个框架,可以将ML纳入进来,甚至可以按需设计其它的函数V(参见fGAN)

那么能否在GAN的框架下,将ML与原始GAN统一起来?能否使用其它的概率距离度量?

fGAN: GAN的统一框架

f-divergency

定义:

Df(P||Q)=xq(x)f(p(x)q(x))dx,fconvex,f(1)=0

例子:

  • f=xlogx,Df(P||Q)=KL(P||Q)
  • f=logx,Df(P||Q)=revserse KL(P||Q)
  • f=ulogu(u+1)log(u+1),Df(P||Q)=2JS(P||Q)2log2

  • f=ulogu-(u+1)log(u+1), D_f(P||Q) =2JS(P||Q) - 2log2$

Fenchel Conjugate:

f(t)=maxxDom(f){xtf(x)}

f(x)=maxtDom(f){xtf(t)}

(注:f(t)也是convex, 它是一系列仿射函数的max)

事实上,Fenchel Conjugate定义了“斜率(梯度)到截距”的一种映射
当固定t, f(t)=maxxDom(f){xtf(x)}, 通过对x求导得到:

t=f(x),f(t)=xf(x)f(x)

上式可以看做参数方程的形式定义了f,它的几何意义:对任意的x,作f(x)的切线,斜率为t, 与y的截距的负数为f(t); 它定义了斜率和负截距的映射关系。

重要的是,上述映射关系的对偶性质!

与GAN的联系

Df(P||Q)=xq(x)f(p(x)q(x))dx=xq(x)maxtdom(f){tp(x)q(x)f(t)}dxmaxtdom(f)xp(x)tdxxq(x)f(t)dx

这里,令D(x) = t, 上式的下界可以写作:

maxDxp(x)D(x)dxxq(x)f(D(x))dx=maxD{Exp[D(x)]Exq[f(D(x))]}

(事实上,如果D(x)表征能力足够强,最优解为D(x)=f(p(x)q(x)),但是这个无法直接求解 )
对于GAN而言:
Df(Pdata||PG)maxD{ExPdata[D(x)]ExPG[f(D(x))]}

写成minimax形式:
G=argminGmaxDV(G,D)

按需挑选不同的f-divergency:

GAN的基本原理
GAN的基本原理
(不同的f-divergency对应的GAN, 图片来自于论文 f-GAN)

WGAN:解决收敛性问题

origin-GAN面临的收敛问题

理想情况:D 指导PG往真实分布Pdata(dashed)运动

GAN的基本原理
实际情况:D训练越好,完美区分,梯度消失,无指导能力
GAN的基本原理

考虑”parallel lines distribution”, 二维分布Pdata:(0,Z),ZU[0,1], PG:(θ,Z):

  • JS(Pdata,PG)=|θ|
  • KL(Pdata||PG)=KL(PG||Pdata)=+(θ0),0(θ=0)
  • Discriminator D往往能将Pdata,PG完美分开
  • 如上图所示,在D看来,d0,d50的JSD都是log2; D没有动力,让PG往“期望的方向”移动,会导致收敛问题
  • 事实上,像生物进化一样,进化(比如眼睛)往往不是一蹴而就的;应该有更合适的度量方式,使得PGPdata“靠拢”(虽然此时JSD看来,generator并没有改善)

Earth Mover’s Distance

定义:对于概率分布P,Q,average distance of a plan γ:

B(γ)=xp,xqγ(xp,xq)||xp,xq||

Earth Mover’s Distance:
W(P,Q)=minγΠB(γ)

示意图如下:
本质上,γ就是一个联合概率,它的边缘分布分别为P,Q
GAN的基本原理
Moving Plan, 图片来自于“李宏毅 深度学习”)
在上面的parallel line distribution例子里,

  • W(Pdata,PG)=|θ|

WGAN

论文中证明,当我们采用Earth Mover’s Distance来度量Pdata,PG距离,相应的GAN形式如下(Kantorovich-Rubinstein duality, 来自论文“Optimal Transport: Old and New”):

W(Pdata,PG)=maxD1lipschitz{ExPdata[D(x)]ExPG[D(x)]}

其中,1-lipschitz 是指:
||D(x1)D(x2)||||x1x2||

该条件的限制,防止了D(x)的变化过于剧烈。这里,整个优化目标有点“返璞归真”的意思了。
WGAN的论文中,使用weight-clipping近似1-lipschitz 条件

  • 权重|w|>c|w|=c
  • 实际使用的是k-lipschitz
    GAN的基本原理
  • 可以看到origin GAN 会存在梯度消失,无法有效指导PG的方向
  • WGAN可以提供有效信息。
  • W(Pdata,PG)的值可以作为训练好坏的参考

improved WGAN

将WGAN的1-lipschitz条件以惩罚项的形式引入:

W(Pdata,PG)=maxD{ExPdata[D(x)]ExPG[D(x)]}λExPpenalty[(||xD(x)||1)2]

Ppenalty的生成:对于xPdata,x~PG, 计算xx~之间的随机点,作为xPpenalty

GAN的家族

Modify the optimization of GAN Different structure from the original GAN
fGAN Conditional GAN
WGAN Semi-GAN
Least-square GAN InfoGAN
Loss Sensitive GAN BiGAN
Energy-based GAN Cycle GAN
Boundary-Seeking GAN IRGAN
Unroll GAN VAE GAN

相关文章: