生成对抗网络(GAN)简单认识

本文简单介绍生成对抗网络的来源及逻辑。
假设我们想训练一个生成器 G ( z ) G(z) G(z),使得生成器的输出 x x x尽可能真实自然,但是是否真实自然这个损失函数很难设计。于是我们想到可以利用一个判别器 D ( x ) D(x) D(x)来判断生成样本 x x x的真假。但问题是这个判别器从何而来?既然很难设计,那就不妨训练一个这样的判别器。训练数据分为两类,正例是真实的天然样本,负例是伪造的生成的样本。天然样本当然好获取,那么伪造的生成样本哪里来呢?既然生成器 G ( z ) G(z) G(z)生成的样本不够真实,那么恰好可以被拿来当做负例。这样就有两类样本来训练判别器 D ( x ) D(x) D(x).

假设{X,T}为样本集, X = { x 1 , . . , x N } X=\{x_1,..,x_N\} X={x1,..,xN} T = { t 1 , . . , t N } T=\{t_1,..,t_N\} T={t1,..,tN}, t i ∈ { 0 , 1 } t_i\in\{0,1\} ti{0,1}。标签 0 0 0代表样本来自于生成器 G ( x ) G(x) G(x),标签 1 1 1代表样本来自于天然样本集。

对于二分类问题,类似与逻辑回归, D ( x ) D(x) D(x)只需要一个输出节点 y y y,输出的就是样本为真的概率。

则对数似然函数:
l o g L ( X , T ∣ θ D ) = l o g ∏ i = 1 N P ( t i ∣ x i ) = l o g ∏ i = 1 N y i t i ( 1 − y i ) 1 − t i logL({X,T}|\theta_D)=log\prod\limits_{i=1}^NP(t_i|x_i)=log\prod\limits_{i=1}^Ny_i^{t_i}(1-y_i)^{1-t_i} logL(X,TθD)=logi=1NP(tixi)=logi=1Nyiti(1yi)1ti
注意: P ( t i ∣ x i ) P(t_i|x_i) P(tixi)可以看成关于变量 t i , x i t_i, x_i ti,xi的二元函数,输出为概率。且:
P ( t i = 1 ∣ x i ) = y i = D ( x i ) P(t_i=1|x_i)=y_i=D(x_i) P(ti=1xi)=yi=D(xi),
P ( t i = 0 ∣ x i ) = 1 − y i = 1 − D ( x i ) P(t_i=0|x_i)=1-y_i=1-D(x_i) P(ti=0xi)=1yi=1D(xi)
所以有:
l o g L ( X , T ∣ θ D ) = l o g ∏ i = 1 N y i t i ( 1 − y i ) 1 − t i = ∑ i = 1 N { t i l o g D ( x i ) + ( 1 − t i ) l o g ( 1 − D ( x i ) ) } = ∑ i = 1 N t i l o g D ( x i ) + ∑ i = 1 N ( 1 − t i ) l o g ( 1 − D ( x i ) ) logL({X,T}|\theta_D)=log\prod\limits_{i=1}^Ny_i^{t_i}(1-y_i)^{1-t_i} \\=\sum\limits_{i=1}^N\{t_ilogD(x_i)+(1-t_i)log(1-D(x_i))\} \\=\sum\limits_{i=1}^Nt_ilogD(x_i)+\sum\limits_{i=1}^N(1-t_i)log(1-D(x_i)) logL(X,TθD)=logi=1Nyiti(1yi)1ti=i=1N{tilogD(xi)+(1ti)log(1D(xi))}=i=1NtilogD(xi)+i=1N(1ti)log(1D(xi))
因为真样本来自于天然数据集,假样本来自于生成器,所以有:

max ⁡ D E x ∼ p d a t a l o g ( D ( x ) ) + E x ∼ p m o d e l l o g ( 1 − D ( x ) ) \max\limits_{D}E_{x\sim p_{data}}log(D(x))+E_{x\sim p_{model}}log(1-D(x)) DmaxExpdatalog(D(x))+Expmodellog(1D(x))
这样就可以最大化 l o g L ( X , T ∣ θ D ) logL({X,T}|\theta_D) logL(X,TθD),训练得到 D ( x ) D(x) D(x)。得到 D ( x ) D(x) D(x)后,我们的任务才开始,因为我们的目标是让 G ( z ) G(z) G(z)生成尽可能真的样本。现在我们已经有了训练好的判别器D(x)。我们考虑如何构造损失函数来训练 G ( z ) G(z) G(z)呢?

首先我们的思路就是把 G ( z ) G(z) G(z)的输出直接输入到 D ( x ) D(x) D(x),并设置监督信号为“真实图片”。这样一来,如果 D ( x ) D(x) D(x)预测x为真实图片,则说明 G ( z ) G(z) G(z)生成的样本很真,符合要求,不返回误差;如果 D ( x ) D(x) D(x)预测x为假,则说明 G ( z ) G(z) G(z)生成的样本很假,需要返回误差更新 G ( z ) G(z) G(z)的权重。也就是说,训练 D ( x ) D(x) D(x)时,真实图片被标记为真,生成图片被标记为假,训练 G ( z ) G(z) G(z)时只有生成图片,并且被标记为真。可以看出,这样的训练 G ( z ) G(z) G(z)目标恰好和训练 D ( x ) D(x) D(x)的目标相反,最大化变为最小化,因此被称为对抗学习。

基于这样的思路,假设生成了 M M M个样本,我们设计目标函数:
min ⁡ l o g L ( T , Z ∣ θ G ) = l o g ∏ i = 1 M P ( t i ∣ z i ) = l o g ∏ i = 1 M ( 1 − y i ) 1 − t i = l o g ∏ i = 1 M ( 1 − y i ) = ∑ i = 1 M l o g ( 1 − y i ) = ∑ i = 1 M l o g ( 1 − D ( x i ) ) = ∑ i = 1 M l o g ( 1 − D ( G ( z i ) ) ) = E z ∼ p z l o g ( 1 − D ( G ( z ) ) ) = E x ∼ p m o d e l l o g ( 1 − D ( x ) ) \min logL(T,Z|\theta_G)=log\prod\limits_{i=1}^MP(t_i|z_i) \\=log\prod\limits_{i=1}^M(1-y_i)^{1-t_i} \\=log\prod\limits_{i=1}^M(1-y_i) \\=\sum\limits_{i=1}^M log(1-y_i) \\=\sum\limits_{i=1}^M log(1-D(x_i)) \\=\sum\limits_{i=1}^M log(1-D(G(z_i))) \\=E_{z\sim p_{z}}log(1-D(G(z))) \\=E_{x\sim p_{model}}log(1-D(x)) minlogL(T,ZθG)=logi=1MP(tizi)=logi=1M(1yi)1ti=logi=1M(1yi)=i=1Mlog(1yi)=i=1Mlog(1D(xi))=i=1Mlog(1D(G(zi)))=Ezpzlog(1D(G(z)))=Expmodellog(1D(x))

训练完 G ( z ) G(z) G(z)后,逻辑上可能认为G生成的图片已经得到要求了,因为D已经判断所有生成的图片为真。但是这是假设D是完美判别器的情况下,实际并不是这样。因此我们考虑提升D。或者另外一个思路是,G生成的图片有所提升但是依然很假。用这些生成的图片和天然图片进一步训练D,来提高D的区分能力。然后继续训练G,让D判断…

什么时候停止呢?可以想象的是G的生成会越来越真,直到和天然图片一样。这时候D无法判断,也就是输出0.5的概率值。此时停止。

因此有GAN中的复合优化函数:
min ⁡ G max ⁡ D E x ∼ p d a t a l o g ( D ( x ) ) + E x ∼ p m o d e l l o g ( 1 − D ( x ) ) \min\limits_{G}\max\limits_{D}E_{x\sim p_{data}}log(D(x))+E_{x\sim p_{model}}log(1-D(x)) GminDmaxExpdatalog(D(x))+Expmodellog(1D(x))
或者:
min ⁡ G max ⁡ D E x ∼ p d a t a l o g ( D ( x ) ) + E z ∼ p z l o g ( 1 − D ( G ( z ) ) ) \min\limits_{G}\max\limits_{D}E_{x\sim p_{data}}log(D(x))+E_{z\sim p_{z}}log(1-D(G(z))) GminDmaxExpdatalog(D(x))+Ezpzlog(1D(G(z)))

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值