GAN阅读笔记
GAN笔记
Generative Adversarial Nets(生成对抗网络)
模型架构
generative model G(生成模型)—>captures data distribution and generative the fake data
discriminative model D(判别模型)—>estimate the probability from the training data or model G
两个模型一个产生”虚假数据”一个模型对虚假数据进行识别
graph LR A(model G)--虚假数据-->B(model D)--识别数据-->A
相关工作
过去问题:绝大部分深度生成网络(deep generative model)聚焦于对概率分布函数的参数进行识别(训练过程中通过最化对数大似然函数),通过这些工作将会导致产生一个糟糕的似然函数(intractable likelihood function)和似然梯度的许多近似值(numerous approximations to the likelihood gradient)
也就是说对于问题二在进行反向传播过程中效果是不佳的
(为什么!!!!!)
如今办法:**生成随机网络(generative stochastic network)**可以产生精确的方向传播和消除马尔科夫链(Markov chains)
对抗网络
对于数据$x$分布识别,首先定义噪声变量$p_z(z)$,然后通过$G(z;\theta_g)$作为数据空间映射,于此同时定义$D(x;\theta_d)$来($D$)表示数据来自$x$而非来自$p_g$。在训练过程中对于函数$D$:最大化判别数据来自$x$或者$G$;对于函数$G$则是最小化$log(1-D(G(z)))$。因此训练过程中优化函数为:
$$
\underset{G}{min}\quad \underset{D}{max}V(D,G)=E_{x\sim p_{data}(x)}[logD(x)]+ E_{z\sim p_z(z)}[1-log(1-D(G(z)))]
$$
注意
1、对于$logD(x)$,当判别函数$D$可以完全识别$x$时此时$logD(x)=0$,那么次数对于函数$D(G(z))==0$因为此时判别函数判别数据全部来自于$x$。
2、训练过程中尽量使得函数$D$可以将数据进行划分,而函数$G$则是尽可能的让原始数据$x$和生成数据“相似”
⭐3、在训练过程中首先对判别函数进行优化,而后去对生成函数进行优化;两个过程是交替的!!
Optimizing D to completion in the inner loop of training is computationally prohibitive, and on finite datasets would result in overfitting. Instead, we alternate between k steps of optimizing D and one step of optimizing G. This results in D being maintained near its optimal solution, so long as G changes slowly enough.
生成对抗网络训练过程:
蓝色线条代表:discriminative model
绿色线条代表:generative model
黑色线条代表:data distribution
从左到右训练:让生成模型数据尽可能的与原始数据分布进行贴合,而判别模型则是在属于原始数据部分给出“高分”生成数据部分给出“低分”。也就是说整个模型的训练过程就是让判别模型向生成模型高分区进行移动,使得判别模型无法对生成模型进行识别也就是说理想的情况下使得两个数据点来自生成模型的概率为$\frac{1}{2}$来自原始数据的概率也为$\frac{1}{2}$
而下面两条平行线和箭头则表示理想下生成数据分布的移动
算法步骤:
数学理论
$$
\begin{align}
V(G,D)&= \int_xp_{data}(x)log(D(x))dx+ \int_zp_z(z)log(1-D(g(z)))dz\
&=\int_xp_{data}(x)log(D(x))+p_g(x)log(1-D(x))dx
\end{align}
$$
因为$z$是通过生成模型得到,所以在模型中将式1直接将$p_z(z)$转化为$p_g(x)$进行表示
推荐
1、https://pytorch.org/tutorials/beginner/dcgan_faces_tutorial.html#what-is-a-gan