[生成对抗网络GAN入门指南](2)理解生成对抗网络

一. Generative Model

生成新数据应用:

生成超高解析度成像,将低分辨率的照片转化成高分辨率;

艺术创作:图像转换、文字到图像的转换;消费市场。

 

二. Auto-Encoder

将输入先进行编码,然后经过多层感知器的神经网络,相当于进行了降维和数据压缩。

而在生成模型中,我们仅适用压缩后编码到解码器的这一后半部分。

 

三. Variational Auto-Encoder

1. 改进自动编码器(Auto-Encoder)

自编码器无法根据新编码生成数据,所以我们对Auto-Encoder做出改进,在他学习到输入数据的隐含变量,并让这些隐含变量服从高斯分布。

即是说,VAE希望通过输入数据学习到参数的概率分布。

2. 两个损失函数

在VAE问题中,涉及到两个问题也就是两个损失函数:

第一个是描述网络还原程度的损失函数,即是输出数据和输入数据之间的均方距离

第二个是隐含变量与高斯分布相近程度的损失函数。

3. KL散度(相对熵)

KL越高,说明差异程度越大;KL低的时候,说明差异小。如果两者相同,KL=0.

4. 最终的损失函数

将上面两个损失函数相加,并优化这个最终的损失函数使得模型达到最优结果。

生成数据误差:

generation\_loss = mean(square(generated\_image - real\_image)))

隐含变量误差:

latent\_loss = KL-Divergence(latent\_variable,unit\_gaussian)

最终误差:

loss=generation\_loss+latent\_loss

5. VAE缺点

VAE模型本质在于使得输出数据与输入数据的均方误差最小化,使得VAE真正是倾向于学习得到与真实数据更接近的数据

为了优化VAE,这里GAN效果更好。

 

四. GAN数学原理

1. 最大似然估计

①首先对真实训练数据集定义一个概率分布函数P\_data(x)

②为了逼近真实数据的概率分布,生成模型定义一个概率分布函数P\_model(x;\theta),其中\theta为参数变量。

③实际过程中,我们改变参数\theta,使得生成模型分布P\_model(x;\theta)逼近真实概率分布P\_data(x)

 

P\_data(x)中取出\{x^1,x^2,\cdots ,x^m\},通过所有的真实训练样本计算在生成模型中的概率并全部相乘:

                                                              L=\prod ^m_{i=1}p_{model}(x^{(i)};\theta)

最大似然估计的目标是通过上面的式子,寻找一个\theta^*使得L最大化。

(则说明我们的生成模型在这些数据上具备最大的概率)

计算:

①取对数:这里对所有的p_{model}(x^{(i)};\theta)取一个对数,并相乘转化为相加:

                                        \theta^* & = \mathop{\arg\max}_{\theta} \prod _{i=1}^mp_{model}(x^{(i)};\theta}) \\ & = \mathop{\arg\max}_{\theta}log\prod ^m_{i=1}P_{model}(x^{(i)};\theta)\\=\mathop{\arg\max}_{\theta}\prod ^m_{i=1}log P_{model}(x^{(i)};\theta)

②积分形式:对于上述公式,把求和近似转化为求logp_{model}(x;\theta)的期望值。推导出积分的形式。

                                        \theta^*=\mathop{\arg\max}_{\theta}E_{x\sim p_{data}}logp_{model}(x;\tehta) \\ =\mathop{\arg\max}_{\theta}\int p_{data}(x)logp_{model}(x;\theta)dx

③减去一个常数项:推导出积分后减去一个与\theta没有关系的常数项\int p_{data}(x)logp_{data}(x)dx,所以我们需要找到一个\theta^*使得下面推导结果最小。

                                       \theta^*=\mathop{\arg\max}_{\theta}(\int p_{data}(x)logp_{model}(x;\theta)dx-\int p_{data}(x)dx)\\ =\mathop{\arg\max}_{\theta}\int p_{data}(x)(logp_{model}(x;\theta)-\int p_{data}(x))dx\\ =\mathop{\arg\max}_{\theta}\int p_{data}(x)log \frac{p_{model}(x;\theta)} {p_{data}(x)}dx\\ =\mathop{\arg\max}_{\theta}\int p_{data}(x)log \frac{p_{model}(x)} {p_{data}(x;\theta)}dx\\

④使用KL散度:使用KL散度对两个概率P和Q:

                                    KL(P\parallel Q)=\int p(x)log \frac{p(x)}{q(x)}dx

可以发现该公式不具有可逆性。特定情况下P看作是数据的真实分布,Q表示数据的模型分布或者近似分布

相似的,我们得到公式得KL散度形式:

                                     \theta^*=\mathop{\arg\max}_{\tehta}KL(p_{data}(x)\parallel p_{model}(x;\theta))

实际时间中,我们几乎不可能知道真实数据的分布,因为真实数据的分布极其复杂,所以这里是使用训练数据的经验分布在逼近P_{data}(x).

在许多情况下,我们对于分布密度函数具体样子并没有太大兴趣,而我们的生成对抗网络属于隐式模型,解决了许多现有模型存在的问题。

 

2. 生成对抗网络的数学推导

1. 代价函数

对于判别器D,代价函数为J^{(D)}:

                                J^{(D)}(\theta^{(D)},\theta^{(G)})=-\frac{1}{2}E_{x \sim P_{data}}logD(x)-\frac{1}{2}E_{x\sim P_z}log(1-D(G(z)))

对于生成器来说,两者是一个零和博弈,代价综合是零,所以生成器的代价函数满足:

                                                                       J^{(G)}=-J^{(D)}

2. 价值函数

这样综合生成器和判别器的代价函数,我们设置一个价值函数V来表示J^{(G)}J^{(D)}

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

                                                             J^{(D)}=-\frac{1}{2}V(\theta^{(D)},\theta^{(G)})

                                                             J^{(G)}=\frac{1}{2}V(\theta^{(D)},\theta^{(G)})

3. 纳什均衡

在博弈中,存在一个纳什平衡点,即为对双方相对来说都较好的结果。

                                                            \mathop{\arg\min_{G}\max_DV(D,G)}

这里有个很好的例子是鞍点(saddle point)

4. 计算

在上述基础上,分别求出理想的判别器D^*和生成器G^*  

                         D^*=\mathop{\arg\max_D}V(D,G)G^*=\mathop{\arg\min_G\max_DV(D,G)}=\mathop{\arg \min_GV(D^*,G))}

对于上述的D^*,假定生成器G是固定的,令式子G(z)=x,推导如下(同样是积分化)

                        V&=E_{x\sim P_{data}}logD(x)+E_{x\sim P_z}log(1-D(G(z)))\\ &=E_{x\sim P_{data}}logD(x)+E_{x\sim P_z}log(1-D(x))\\ &=\int P_{data}(x)logD(x)dx+\int P_g(x)log(1-D(x))dx\\ =\int P_{data}(x)logD(x)+P_g(x)log(1-D(x))dx

5. 推导判别器

现在我们希望找到一个D使得V最大,对积分中的项

                          f(x)=P_{data}(x)logD(x)+P_g(x)log(1-D(x))

无论x取多大时候都能最大,已知P_{data}是固定的,也假定生成器G固定,所以P_g也是固定的。

现在我们假定x固定,f(x)D(x)进行求导:

                        \frac{df(x)}{dD(x)}=\frac{P_{data}(x)}{D(x)}=\frac{p_g(x)}{1-D(x)}=0

对于D^*(x)形式如下:

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

这里可以看见我们的判别器范围在0~1之间,则接受真实数据时候判断为1,接受生成数据判定为0.当生成数据和真实数据很接近时候,判定为1/2.

6. Jensen-Shannon散度

JS散度和KL散度相似,设定M=\frac{1}{2}(P+Q),JS散度公式为:

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

把KL公式代入展开:

                JSD(P\parallel Q)=\int p(x)log\frac{p(x)}{\frac{p(x)+q(x)}{2}}dx+\int q(x)log\frac{q(X)}{\frac{p(x)+q(x)}{}2}dx

7. 推导生成器

先把D^*(x)带入到前面的积分式子重新表示\mathop{\max_D}V(G,D):

                 \mathop{\max_D}V(G,D)=V(G,D^*)\\=\int P_{data}(x)logD^*(x)dx+\int P_g(x)log(1-D^*(x))dx\\= \int P_{data}(x)log\frac{P_{data}(x)}{P_{data}(x)+P_g(x)}dx+\int P_g(x)log\frac{P_{g}(x)}{P_{data}(x)+P_g(x)}dx
将其转化成JS散度形式:

                 \mathop{\max_D}V(G,D)=\log(4)+KL(p_{data} \parallel \frac{p_{data}+p_g}{2})+KL(p_g\parallel \frac{p_{data}+p_g}{2})\\=-log(4)+2\times JSD(p_{data}\parallel p_g)

当且仅当p_{data}=p_g时,取全局最小值-log(4),这里G^*的分布p_{data}=p_g

综上可以看到,要使得我们的生成器G^*最优时候,分布p_g=p_{data},GAN的原理从数学上得证。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值