GAN怎么开干(gan)
生成对抗网络(Generative Adversarial Networks,GAN)主要由两个神经网络构成,分别是生成器G (Generator)和判别器D (Discriminator)。
生成器的目标是生成服从于真实数据分布的样本,而判别器的目标则是区分输入的数据是真实数据还是生成数据。
可见,二者的训练目标的存在对抗性的,而二者也正是通过这样不断的对抗训练——极小极大博弈(Minimax Game),使得模型能在所有可能的 G 和 D 中,求出唯一的均衡解:最终 G 足以生成与训练样本相同分布的数据,相对地,D 的判别结果则稳定在了1/2。
根据GAN的基本原理,可简单绘制出其基本的模型结构。
对于服从于任意的某种分布Pz(z) 的噪声z,经过生成器G 后得到数据G(z)。我们假设G(z)服从的分布为PG(G(z)) ,而真实数据(即数据集给出的数据)服从于Pdata(x),所以我们需要训练使得两种分布尽可能地一致。
【插入图片】
数学表示与证明
信息熵
信息熵(Information Entropy)是度量样本集合纯度最常用的一种指标。
对于离散随机变量X 的一个事件X=xi,定义其信息量* 为:
I(xi)=−log(p(xi)),∀i,xi∈χ,i=1,2,...,n
其中χ={x1,x2,⋯,xn} 为随机变量X 可能的取值范围。p(xi)=P{X=xi} 表示事件X=xi 发生的概率。
离散随机变量X 的信息熵 被定义为其事件信息量的期望:
H(X)=−E(logp(x))=−i=1∑np(xi)log(p(xi))
规定:当p(xi)=0 时,p(xi)log(p(xi))=0。
若信息熵H(X) 越小,则说明X 的纯度越高,事件发生的情况更稳定。
相对熵/KL散度
相对熵(Relative Entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence)或信息散度(Information Divergence),是两个概率分布间差异的非对称性度量。在信息理论中,相对熵等价于两个概率分布的信息熵的差值。
相对熵是一些优化算法,例如最大期望算法(Expectation-Maximization algorithm, EM)的损失函数 。此时参与计算的一个概率分布为真实分布,另一个为理论(拟合)分布,相对熵表示使用理论分布拟合真实分布时产生的信息损耗。
对于概率分布p(x),q(x),它们的 KL 散度为:
KL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
https://hsinjhao.github.io/2019/05/22/KL-DivergenceIntroduction/
非负矩阵分解(1):准则函数及KL散度 - LeeLIn。 - 博客园 (cnblogs.com)
JS散度
为了解决KL散度非对称性的问题,在KL散度的基础上又提出了JS散度(Jensen-Shannon Divergence),作为另一种度量两个概率分布相似度的方法:
JS(P∣∣Q)=21KL(P∣∣M)+21KL(Q∣∣M)
其中,M=2P+Q。
https://www.cnblogs.com/MorStar/p/14882813.html
价值函数与证明
为了指导实现G 与D 的参数调整,我们需要定义适当的价值函数V(G,D) 用来训练,Wang等人则是通过引入信息熵的概念来实现其定义。
不难得出,判别器对真实数据的信息熵Ex∼Pdata(x)[logD(x)] 越大则表示判别器D 识别真实数据的能力越强,而判别器对生成数据的信息熵Ez∼Pz(z)[logD(G(z))] 越小则表示判别器D 将假数据误判成真数据的可能性越低;相反,若它的值越大则说明D 容易误判,也即G(z) 更接近真实数据。于是,可得到优化目标函数如下:
GminDmaxV(G,D)=Ex∼Pdata(x)[logD(x)]+Ez∼Pz(z)[log(1−D(G(z)))]
其中,将Ez∼Pz(z)[log(1−D(G(z)))] 代替Ez∼Pz(z)[logD(G(z))] 可以更好统一函数。
上述目标函数的求解过程主要分为两步:
- 固定G 优化判别器D ,使得最终得到的判别器D∗=argDmaxV(G,D)。
- 固定D 优化生成器G,使得最终得到的生成器器G∗=argGminV(G,D)。
首先对目标函数V(G,D) 化简如下,
V(G,D)=Ex∼Pdata(x)[logD(x)]+Ez∼Pz(z)[log(1−D(G(z)))]=∫xPdata(x)logD(x)dx+∫zPz(z)log(1−D(G(z)))dz=∫xPdata(x)logD(x)dx+∫xPG(x)log(1−D(x))dx=∫x[Pdata(x)logD(x)+PG(x)log(1−D(x))]dx
从而求解DmaxV(G,D) 等价于对其被积函数,记为Φ(D) 做优化。有
⇒dDdΦ(D)=D(x)Pdata(x)−1−D(x)PG(x)=0D∗(x)=Pdata(x)+PG(x)Pdata(x)
将D∗ 带入V(G,D),求解GminV(G,D∗)。此时
V(G,D∗)=∫x[Pdata(x)logPdata(x)+PG(x)Pdata(x)+PG(x)logPdata(x)+PG(x)PG(x)]dx=−2log2+KL(Pdata2Pdata+PG)+KL(PG2Pdata+PG)=−2log2+2JS(Pdata∣∣PG)
从而,当且仅当Pdata(x)=PG(x) 时,V(G,D∗) 取得最小。
算法实现
Fake图像生成
数据不够,生成来凑
有哪些GAN
图像质量指标
PSNR
SSIM
VainF/pytorch-msssim: Fast and differentiable MS-SSIM and SSIM for pytorch. (github.com)
【python】ssim原理简介及代码实现_python ssim-CSDN博客
本文相关引用
- GAN 生成对抗网络合集|bilibili
- GAN完整理论推导与实现,Perfect!|机器之心