GAN02| GAN的基本原理及推导

一、GAN基本认识





1、基本流程

1.输入噪声$z$

2.连续函数$G$作为生成器,生成仿真的$\hat{x}$,不同的输入向量$z$,导致生成器生成不同的图片$\hat{x}$

3.真实的样本$x$

4.交给判别器$D$

2、基本认识

(1) 判别器$D$目标

$D(x)=P_r(x\text{为真})$ $D(x)∈[0,1]$ 即判别器$D$认为x属于真实样本的概率

$D(\hat{x})=D(G(z)) ∈[0,1]$ 即判别器$D$认为$\hat{x}$属于真实样本的概率

$D$认为$x$属于真实样本的概率越大越好 $\Rightarrow \max \limits_{D} D(x)$

$D$ 认为 $\hat{x}$ 属于真实样本的概率越小越好 $\Rightarrow \min \limits_{D} D(G(z))\Rightarrow\max \limits_{D} [1-D(G(z))]$

(2) 生成器$G$目标

$D$ 认为 $\hat{x}$ 属于真实样本的概率越大越好

$\max \limits_{G} D(G(z))\Rightarrow\min \limits_{G} [1-D(G(z))]$

二、价值函数(目标函数)

$$ \min \limits_{G} \max \limits_{D} V(G,D)=\min \limits_{G} \max \limits_{D} E_{x \sim P_{data}(x)}[log^{D(x)}]+E_{z \sim P_z(z)}[log^{(1-D(G(z)))}]$$

1、符号定义及含义

$data$→真实数据($groundtruth$)

$P_{data}$→真实数据的分布

$z$→噪音(输入数据)

$P_z$→原始噪音的分布

$P_g$→经过生成器后的数据分布

$G()$→生成映射函数

$D()$→判别映射函数

(1) 生成器$G$

生成器的结构为一个多层感知机,参数为 $\theta^{(G)}$

生成映射函数

$\hat{x}=G(z;\theta^{(G)})$

将噪音$z$映射到新的数据空间

(2) 判别器$D$

判别器也是一个多层感知机,参数为$\theta^{(D)}$

判别映射函数

$D(x;\theta^{(D)})$

输出为一个标量,表示$x$来自真实数据$data$而不是生成数据的概率

(3) 示意图





图中,黑色曲线是真实样本的概率分布函数,绿色曲线是虚假样本的概率分布函数,蓝色曲线是判别器$D$的输出,它的值越大表示这个样本越有可能是真实样本。最下方的平行线是噪声$z$,它映射到了$x$。

我们可以看到,一开始, 虽然 $G(z)$ 和 $x$ 是在同一个特征空间里的,但它们分布的差异很大,这时,虽然鉴别真实样本和虚假样本的模型 $D$ 性能也不强,但它很容易就能把两者区分开来,而随着训练的推进,虚假样本的分布逐渐与真实样本重合,$D$ 虽然也在不断更新,但也已经力不从心了。

最后,黑线和绿线最后几乎重合,模型达到了最优状态,这时 $D$ 的输出对于任意样本都是 $0.5$

(4) 目标函数等价式

$$ \min \limits_{G} \max \limits_{D} V(G,D)=\min \limits_{G} \max \limits_{D} E_{x \sim P_{data}(x)}[log^{D(x)}]+E_{x \sim P_g(x)}[log^{(1-D(x))}]$$

2、最优化问题表达

分为两项

第一项:判别器判别真实样本

$E_{x \sim P_{data}(x)}[log^{D(x)}]$

$D(x)$ 定义一个判别器$D$,以判别样本是不是从$P_{data}$分布中取出来的

其中$E$指代取期望,这一项是根据「正类」(即辨别出$x$属于真实数据$data$)的对数损失函数而构建的。最大化这一项相当于令判别器$D$在$x$服从于$data$的概率密度时能准确地预测$D(x)=1$

$D(x)=1 \text{ }when\text{ }x \sim P_{data}(x)$

第二项:判别器判别虚假样本

$E_{z \sim P_z(z)}[log^{(1-D(G(z)))}]$

$D(x)=0 \text{ }when\text{ }x \sim P_{g}(G(z))$

另一项是根据负类的对数损失函数构建的

合并

为了让其写在统一式子里必须做一些改变。比如 $\max \limits_{D}$ 与 $\min \limits_{D}$ 不能同时出现

$\min \limits_{D} D(G(z))$ 可以写为 $\max \limits_{D} -D(G(z))$

无论输入为$x$ 还是 $\hat{x}$,都是$\max \limits_{D}$

依然表示为概率,正值,且$∈[0,1]$

$\max \limits_{D} 1-D(G(z))$

整个训练是一个迭代过程。其实极小极大化博弈可以分开理解,即在给定$G$的情况下先最大化$V(D,G)$而取$D$,然后固定 $D$,并最小化 $V(D,G)$而得到$G$。其中,给定$G$,最大化$V(D,G)$评估了$P_g$和$P_{data}$之间的差异或距离。

最优化问题表达为:

$G^∗=\arg \min\limits_{G} V(G,D^{∗}_{G})$

三、理论推导

1、基础知识

(1) KL散度 KL Divergence

KL散度(KL divergence),这是统计中的一个概念,是衡量两种概率分布的相似程度,其越小,表示两种概率分布越接近。

对于离散的概率分布,定义如下:

$$D_{KL}(P||Q)=\sum_{i} P(i)\log \frac{P(i)}{Q(i)}$$

对于连续的概率分布,定义如下:

$$D_{KL}(P||Q)=\int^{\infty}_{-\infty} P(x)\log \frac{P(x)}{Q(x)}dx$$

我们想要将一个随机高斯噪声$z$通过一个生成网络$G$得到一个和真的数据分布$P_{data}(x)$差不多的生成分布 $P_G(x;θ)$,其中的参数$θ$是网络的参数决定的,我们希望找到$θ$使得$P_g(x;θ)$和$P_{data}(x)$尽可能接近。

(2) 最大似然估计 Maximun Likelihood Estimation




真实数据分布

我们把整个图像分布表示为一个二维空间,蓝色区域表示为显示人脸的真实图像分布,不在这个区域的点可能就不是人脸

我们从真实数据分布$P_{data}(x)$里面取样$m$个点$x^1,x^2,⋯,x^m$根据给定的参数$θ$

我们有个分布$P_G(x;θ)$,我们想要找到可以让$P_G(x;θ)$接近$P_{data}(x)$的参数$θ$

(note:比如这个模型是高斯混合模型,那么这个参数就是高斯的均值和方差)

最大似然估计方法

我们可以计算如下的概率 $P_G(x^i;θ)$,那么生成这 $m$ 个样本数据的似然(likelihood)就是:

$$L=\prod_{i=1}^m P_G(x^i;θ)$$

我们想要做的事情就是找到 $θ^∗$ 来最大化这个似然估计:

最大化似然函数 $L$

$$θ^∗=\arg \max\limits_{θ} \prod_{i=1}^m P_G(x^i;θ)$$

对似然函数取对数,并且这一过程并不会改变最优化的结果

$$\Leftrightarrow \arg \max\limits_{θ} \log\prod_{i=1}^m P_G(x^i;θ)$$

累乘转化为累加

$$= \arg \max\limits_{θ} \sum_{i=1}^m\log P_G(x^i;θ)$$

将极大似然估计化为求 令$\log [P_G(x;θ)]$期望最大化的$θ$

$$\approx \arg \max\limits_{θ} E_{x \sim P_{data}(x)}\log [P_G(x;θ)]$$

展开期望

$$= \arg \max\limits_{θ} \int_{x} P_{data}(x)\log P_G(x;θ)dx$$

后加一项与$θ$无关的,并不影响最优化得结果

$$\Leftrightarrow \arg \max\limits_{θ} \int_{x} P_{data}(x)\log P_G(x;θ)dx - \int_{x} P_{data}(x)\log P(x)dx$$

合并这两个积分并构建类似 KL 散度的形式

$$= \arg \max\limits_{θ} \int_{x} P_{data}(x)\log \frac{P_G(x;θ)}{P_{data}(x)}dx$$

这里在前面添加一个负号,将 log 里面的分数倒一下

$$= \arg \max\limits_{θ} -\int_{x} P_{data}(x)\log \frac{P_{data}(x)}{P_G(x;θ)}dx$$

就变成了KL 散度

$$= \arg \min \limits_{θ} KL(P_{data}(x)||P_G(x;θ))$$

Maximum Likelihood Estimation = Minimize KL Divergence

(3) $P_g(x;θ)$ 的计算

$$P_g(x)=\int_{z} P_{prior}(z)I_{|G(z)=x|}dz$$

$P_{prior}(z)$ 噪声$z$的先验

里面的$I$表示示性函数,也就是:

$$I_{|G(z)=x|}=\begin{cases}{}
0,G(z) \neq x\\
1,G(z)=x
\end{cases}$$

这样我们其实根本没办法求出$P_g(x)$

所以生成模型的基本想法就是生成模型使用一个网络,生成的数据分布和真实数据分布尽可能的接近





$G* = \arg \min \limits_{G} Div(P_G,P_{data})$

Divergence between distributions $P_G$ 和 $P_{data}$

两种分布尽可能接近。

这样就会有两个问题

  • 两种分布 $P_G$ 和 $P_{data}$,并不知道真正分布

  • 也不知道怎么计算散度。

GAN的解决方案

1> 我们不知道$P_G$ 和 $P_{data}$的分布,但是我们可以从中采样





2> 计算散度





用判别器计算的结果表示散度

2、 证明

生成器$G$

$G$是一个生成器,给定先验分布$P_{prior}(z)$我们希望得到生成分布$P_G(x)$,这里很难通过极大似然估计得到结果

判别器$D$

$D$是一个函数,来衡量$P_G(x)$与$P_{data}(x)$之间的差距,这是用来取代极大似然估计

(1) 最优判别器$D^*$

在极小极大博弈的第一步中,给定生成器$G$,最大化$V(D,G)$而得出最优判别器$D$。其中,最大化$V(D,G)$评估了$P_G$ 和$P_{data}$之间的差异或距离。因为在原论文中价值函数可写为在$x$上的积分,即将数学期望展开为积分形式:

固定G 优化D

$$ V(D,G) = E_{x \sim P_{data}(x)}[log^{D(x)}]+E_{z \sim P_z(z)}[log^{(1-D(G(z)))}] $$

期望展开

$$ = \int_{x} P_{data}(x) [log^{D(x)}]dx +\int_{z} P_z(z)[log^{(1-D(G(z)))}] dz$$

一个小推导

$\hat{x}=G(z;\theta^{(G)})$ 即$\hat{x}=G(z)$

$E[log^{(1-D(G(z)))}]=E[log^{(1-D(\hat{x}))}]$

由连续性概率密度的期望定义得

$\int_{z} P_z(z)[log^{(1-D(G(z)))}] dz=\int_{\hat{x}} P_g(\hat{x})[log^{(1-D(\hat{x}))}] d\hat{x}$

代入得

$$ = \int_{x} P_{data}(x) [log^{D(x)}]dx +\int_{\hat{x}} P_g(\hat{x})[log^{(1-D(\hat{x}))}] d\hat{x}$$

变量替换 后一项$\hat{x}->x$

$$ = \int_{x} [P_{data}(x) log^{D(x)} + P_g(x)log^{(1-D(x))}] dx$$

注:在 GAN 原论文中,有一个思想和其它很多方法都不同,即生成器$G$不需要满足可逆条件。Scott Rome 认为这一点非常重要,因为实践中$G$就是不可逆的。而很多证明都忽略了这一点,他们在证明时错误地使用了积分换元公式,而积分换元却又恰好基于$G$的可逆条件。Scott 认为证明只能基于以下等式的成立性:

$$E_{z \sim P_z(z)}[log^{(1-D(G(z)))}] = E_{x \sim P_g(x)}[log^{(1-D(x))}]$$

该等式来源于测度论中的 Radon-Nikodym 定理。
有一些证明过程使用了积分换元公式,但进行积分换元就必须计算$G^{−1}$,而$G$的逆却并没有假定为存在。并且在神经网络的实践中,它也并不存在。

令 $g(x)=P_{data}(x) log^{D(x)} + P_g(x)log^{(1-D(x))}$

假定$D(x)$是任何函数,那么最大化目标函数,等价于最小化$g(x)$

在数据给定,$G$给定的前提下, $P_{data}(x)$与$P_G(x)$都可以看作是常数

令$a=P_{data}(x)$ $b=P_g(x)$ 代入 $g(x)$

$$ f(D)=a\log (D) + b \log(1-D)$$

找到微分是$0$的地方

令 $$ \frac{df(D)}{D}=0$$

$$ \frac{df(D)}{D}=a×\frac{1}{D}+b×\frac{1}{1-D}×(-1)=0$$

$$ \Leftrightarrow a \times \frac{1}{D^{∗}}=b \times \frac{1}{1-D^{\∗}}$$

$$ \Leftrightarrow a \times (1-D^{∗})=b \times (D^{∗})$$

$$ \Leftrightarrow D^*=\frac{a}{a+b}$$

$$ \Leftrightarrow D^*(x)=\frac{P_{data}(x)}{P_{data}(x)+P_g(x)}$$

通过验证,这个微分为$0$的点是最小值点

其实该最优的$D$在实践中并不是可计算的,但在数学上十分重要。我们并不知道先验的$P_{data}(x)$,所以我们在训练中永远不会用到它。另一方面,它的存在令我们可以证明最优的$G$是存在的,并且在训练中我们只需要逼近$D$。

(2) 最优生成器$G^*$

$$C(G)=\max \limits_{D} V(G,D)$$

$$=E_{x \sim P_{data}(x)}[log^{D^∗_G(x)}]+E_{z \sim P_z(z)}[log^{(1-D^∗_G(G(z)))}]$$

$$=E_{x \sim P_{data}(x)}[log^{D^∗_G(x)}]+E_{x \sim P_G(z)}[log^{(1-D^∗_G(x))}]$$

$D^*(x)=\frac{P_{data}(x)}{P_{data}(x)+P_g(x)}$代入

$$=E_{x \sim P_{data}(x)}[log\frac{P_{data}(x)}{P_{data}(x)+P_g(x)}]+E_{x \sim P_G(z)}[log\frac{P_g(x)}{P_{data}(x)+P_g(x)}]$$

log里面的分式上下同除2

$$=E_{x \sim P_{data}(x)}[log\frac{\frac{1}{2}P_{data}(x)}{\frac{P_{data}(x)+P_g(x)}{2}}]+E_{x \sim P_g(x)}[log\frac{\frac{1}{2}P_g(x)}{\frac{P_{data}(x)+P_g(x)}{2}}]$$

用期望定义展开

$$=\int_{x} P_{data}(x)log\frac{\frac{1}{2}P_{data}(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx+\int_{x} P_{g}(x)log\frac{\frac{1}{2}P_g(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx$$

$\frac{1}{2}$提出来

$$=-\log2\int_{x} P_{data}(x)dx-\log2\int_{x} P_{g}(x)dx+\int_{x} P_{data}(x)log\frac{P_{data}(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx+\int_{x} P_{g}(x)log\frac{P_g(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx$$

概率密度函数在定义域积分为1

$$=-\log4+\int_{x} P_{data}(x)log\frac{P_{data}(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx+\int_{x} P_{g}(x)log\frac{P_g(x)}{\frac{P_{data}(x)+P_g(x)}{2}}dx$$

$$=-\log(4) + KL(P_{data}(x) || \frac{P_{data}(x)+P_g(x)}{2})+ KL(P_{g}(x) || \frac{P_{data}(x)+P_g(x)}{2})$$

$$=-\log(4) + 2JSD(P_{data}||P_g)$$

$$\ge -\log(4)$$

当且仅当$P_{data}=P_g$时 $C(G)$达到全局最优解,上面的不等式取等号,$C(G)$取得最小值

最小目标函数的结果是JS散度

Jensen-Shannon divergence

$$JSD(P||Q)=\frac{1}{2}KL(P||M)+\frac{1}{2}KL(Q||M)$$

$$M=\frac{1}{2}(P+Q)$$

$D^* = \arg \max \limits_{D} V(G,D)$

$G^∗ = \arg \min \limits_{G} Div(P_G,P_{data}) \Leftrightarrow G^∗ = \arg \min \limits_{G} \max \limits_{D} V(G,D)$

四、训练方法

刚开始的时候生成器非常弱,$D(G(z))$ 基本接近于$0$ $1-D(G(z))$ 接近于$1$

后一项导数为 $\frac{1}{1-D(G(z))}$也接近为$1$ 梯度较小,不能传递梯度,不利于调参

训练初期,将目标函数修改为

$$ \max \limits_{G} \max \limits_{D} E_{x-P_{data}(x)}[log^{D(x)}]+E_{z-P_z(z)}[log^{(D(G(z)))}]$$

后一项导数为 $\frac{1}{D(G(z))}$也接近为$∞$

五、参考

[1]GAN专题论文研读

[2]原始GAN论文笔记及TensorFlow实现

[3]原始GAN(基本概念及理论推导)

[2]2018年台大李宏毅教授MLDS课程-GAN Theory