原理详解:
p(x)是某种分布,只是一种表示方式,不需要知道具体服从什么分布
比如用神经网络G表示,G网络学到的参数就是p(x)的分布
pr为真实分布,p(z)/G网络为生成网络的分布
D为鉴别器
Discriminator鉴别器的机制是奖励真实样本,惩罚伪造样本;所以D网络的训练过程就是迭代计算使得其loss 函数V(G,D)最大化的过程;也就是 argmax V(D,G)的过程
Having Fun
▪ https://reiinakano.github.io/gan-playground/ ▪ https://affinelayer.com/pixsrv/ ▪ https://www.youtube.com/watch?v=9reHvktowLY&feature=youtu.be ▪ https://github.com/ajbrock/Neural-Photo-Editor ▪ https://github.com/nashory/gans-awesome-applications
先固定G网络
对V(G,D)求导,可求出V(G,D)最优时D(x)对应的解
可求出D *即鉴别器停止进步时对应的D网络
G进化的目标是最小化L(G,D * ),即DJS(pr||pg) => 0
G网络最终的进化目标是pr=pg
而当pr=pg时D * = pr / (pg + pr) = 1/2
z = 100 length的vector => [1024, 4, 4]但是我们最终需要的图片要求更大如24 * 24的,这都需要用到下面的卷积方式
刚开始没有重叠部分(ovelapped)
对于Q分布x = θ,对于上图的分布,当θ不等于0时,两个分布没有重叠的部分,根据DKL
公式 X=0,y~U(0,1) 时 P(X) = 1, Q(X) = 0,DKL = +∞,而X=θ,y~U(0,1) 时 Q(X) = 1, P(X) = 0,DKL = +∞
而DJS = log 2常数
p的均值为1,q是一个可移动的分布 , u可以移动
从第二个图可以看到,当q的mean大于20时,KL-deivergency将固定不变,梯度为0
KL-deivergency是更新D网络的衡量标准,而又因为D(G(Z))一项,可以看出,G网络的更新需要通过D网络进行梯度传导,所有当一开始KL-deivergency梯度为0时,G网络不能得到更新
EMD: WD即将P分布转换为D分布最小的距离
WGAN中的f即D一样是鉴别器,不过将优化从JS=>WD/EMD
这样可以很多的解决,在train一开始,pr和pg
不重合导致的梯度消失,从而无法更新G网络的问题
但是使用WGAN,有一个要求,|f(x1) - f(x2)| <= |x1-x2|,即1-Lipschitz function,即任意的两个点X1和X2他们之间的梯度变换必须小于等于一
加这一个约束后,可以使D smooth
当满足上面的约束后Discriminator=>很好的模拟Wasserstein Distance,在train的过程中,因为一直有梯度,就会很稳定,将G引导到Preal data
为了满足1-Lipschitz function,提出了Weight Clipping,但这种解决方案存在一定的问题,可能会降低model的鉴别能力…
为了满足1-Lipschitz function即|f(x1) - f(x2)| <= |x1-x2| 即梯度属于(-1, 1)的第二种比较好的解决方案就是将偏D(X~ 对偏X~)( X~ 属于[Xr ~ Xg]即真实data到smaple*G生成点之间)加入loss函数,使其在1的附近徘徊
X1,X2来自D上任意两点
WGAN中的WD搬砖的最小距离也可以衡量两个分布的相似度