我们可以为GAN模型使用一个优化器吗?



我看过很多GAN教程,它们都使用两个单独的生成器和鉴别器优化器。他们的代码是这样的:

import torch.nn as nn
class Generator(nn.Module):
def __init__(self):
pass

def forward(self, x):
pass
class Discriminator(nn.Module):
def __init__(self):
pass

def forward(self, x):
pass
G = Generator()
D = Discriminator()
optimizerG = torch.optim.Adam(G.parameters())
optimizerD = torch.optim.Adam(D.parameters())

但是,我们可以将这些优化器组合成如下所示的一个吗?有什么缺点吗?

class GAN(nn.Module):
def __init__(self):
super().__init__()
self.G = Generator()
self.D = Discriminator()

def forward(self, x):
pass
model = GAN()
optimizer = torch.optim.Adam(model.parameters())

在优化整个GAN损失函数方面,生成器和鉴别器的目标正好相反(生成器想要最大化它,而鉴别器想要最小化它,从而导致它们的相反的梯度当backpropagating)。所以当你把它们放在一个优化器里,每当其中一个的参数更接近最优值时,另一个的参数就会离最优值更远。最后,两者都没有得到优化。

(我最近也有同样的疑问,以上只是我一些天真的理解。这是我加入这个社区一段时间以来的第一个回答。如果我的英语是我的第二语言,不容易理解,我很抱歉。

最新更新