重新理解GAN

本文深入探讨了GAN(生成对抗网络)的基本原理,包括其优化目标和训练过程。在超分辨率问题中,GAN用于生成高分辨率图像,通过最大化判别器与生成器之间的博弈来提升生成质量。训练策略涉及将原始的minmax问题转化为两个单独的最小化问题,分别针对生成器和判别器进行优化。在实际实现中,损失函数的设计是关键,代码示例展示了两种不同的损失函数计算方式。
摘要由CSDN通过智能技术生成

1 理论公式

m i n G m a x D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] min_Gmax_DV(D,G)=E_{x \sim p_{data}(x)}[logD(x)]+E_{z \sim p_z(z)}[log(1-D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

该公式在超分问题上特化为:
m i n θ G m a x θ D E I H R ∼ p t r a i n ( I H R ) [ l o g D θ D ( I H R ) ] + E I L R ∼ p G ( I L R ) [ l o g ( 1 − D θ D ( G θ G ( I L R ) ) ) ] min_{\theta_G}max_{\theta_D}E_{I^{HR} \sim p_{train}(I^{HR})}[logD_{\theta_D}(I^{HR})]+E_{I^{LR} \sim p_G(I^{LR})}[log(1-D_{\theta_D}(G_{\theta_G}(I^{LR})))] minθGmaxθDEIHRptrain(IHR)[logDθD(IHR)]+EILRpG(ILR)[log(1DθD(GθG(ILR)))]
其中我将 D θ D ( I H R ) D_{\theta_D}(I^{HR}) DθD(IHR)视为 GT 距离假值 0 0 0 的距离, 将 ( 1 − D θ D ( G θ G ( I L R ) ) ) (1-D_{\theta_D}(G_{\theta_G}(I^{LR}))) (1DθD(GθG(ILR))) 视为 SR 距离真值 1 1 1 的距离。判别器是朝着向这两个距离之和更大的方向优化,距离之和越大,即判定的越准确;而生成器的优化目标而与判别器相反。

2 训练方式

GAN 网络是一个 m i n m a x minmax minmax 问题,但是在实际应用过程中会将网络分成内外两层,其中外层是 m i n G min_G minG,内层是 m a x D max_D maxD 。但是深度学习中使用的优化方法是随机梯度下降,为了将模型的训练融入进来,于是将内层的 m a x D max_D maxD 问题转换成一个 m i n D min_D minD 问题。具体写作:

m i n G V ( G ) = m i n θ G E I H R ∼ p t r a i n ( I H R ) [ l o g D θ D ( I H R ) ] + E I L R ∼ p G ( I L R ) [ l o g ( 1 − D θ D ( G θ G ( I L R ) ) ) ] m i n D V ( D ) = m i n θ G E I H R ∼ p t r a i n ( I H R ) [ l o g ( 1 − D θ D ( I H R ) ) ] + E I L R ∼ p G ( I L R ) [ l o g D θ D ( G θ G ( I L R ) ) ] \begin{aligned} min_GV(G)&=min_{\theta_G}E_{I^{HR} \sim p_{train}(I^{HR})}[logD_{\theta_D}(I^{HR})]+E_{I^{LR} \sim p_G(I^{LR})}[log(1-D_{\theta_D}(G_{\theta_G}(I^{LR})))] \\ min_DV(D)&=min_{\theta_G}E_{I^{HR} \sim p_{train}(I^{HR})}[log(1-D_{\theta_D}(I^{HR}))]+E_{I^{LR} \sim p_G(I^{LR})}[logD_{\theta_D}(G_{\theta_G}(I^{LR}))] \end{aligned} minGV(G)minDV(D)=minθGEIHRptrain(IHR)[logDθD(IHR)]+EILRpG(ILR)[log(1DθD(GθG(ILR)))]=minθGEIHRptrain(IHR)[log(1DθD(IHR))]+EILRpG(ILR)[logDθD(GθG(ILR))]

3 实现方式

对于在神经网络设计中,对于 GAN 机制的实现主要体现在损失函数的设计上。以下代码只是为了表达思想,不能直接运行。

3.1 方式一

fake_out = netD(fake_img).mean()

g_loss = other_loss + (1 - fake_out)

real_out = netD(real_img).mean()
fake_out = netD(fake_img.detach()).mean()
d_loss = 1 - real_out + fake_out

3.2 方式二

adv_loss = nn.BCEWithLogitsLoss()
fake_out = net_d(fake_img)
real = torch.ones_like(fake_out)

g_loss = other_loss + adv_loss(fake_out, real)

fake_out = net_d(fake_img.detach())
real_out = net_d(real_img)

fake = torch.zeros_like(real_out)

fake_loss = adv_loss(fake_out, fake)
real_loss = adv_loss(real_out, real)
d_loss = (fake_loss + real_loss) / 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值