趋近智
训练生成对抗网络 (GAN)需要精细的平衡。生成器 和判别器 处于一场最小-最大博弈中,其目标函数定义如下:
如果一方明显强于另一方,训练过程可能会变得不稳定,导致诸如模式崩溃(生成器 仅生成有限种类的输出)或发散(梯度爆炸或消失,学习停止)等问题。标准的优化方法通常使用相同的学习率同时更新 和 。然而,这种双玩家博弈的动态性通常意味着 和 以不同的有效速度学习。判别器执行更标准的监督分类任务(真实与虚假),其收敛速度可能快于生成器,后者处理学习整个数据分布的更难问题。
当判别器过快地变得过于准确时,它向生成器提供的梯度信息用处不大,实际上导致生成器的学习停滞。相反,如果判别器明显落后,生成器可能无法获得足够强的信号以有效提升。
双时间尺度更新规则 (TTUR),由 Heusel 等人在其 2017 年论文《通过双时间尺度更新规则训练的 GAN 收敛到局部纳什均衡》中提出,提供了一个直接而有效的解决方法:为生成器和判别器优化器使用不同的学习率。
这个主要思想源于双玩家博弈的随机逼近理论。理论分析表明,为生成器设置独立的学习率 和为判别器设置 ,可以在学习率选择得当的情况下,促使收敛到一个均衡点。具体来说,TTUR 通常涉及为判别器设置更高的学习率,而为生成器设置较低的学习率 ()。这使得判别器能够更好地估计真实分布和生成分布之间的差异,从而向生成器提供更多有用的梯度信息,而较慢的生成器更新则能防止它因采取过大的步长而破坏学习过程的稳定性。
图示:独立的优化器使用不同的学习率 ( 和 ),根据各自的损失更新生成器和判别器参数 (parameter)。通常, 设置得高于 。
在 PyTorch 或 TensorFlow 等现代深度学习 (deep learning)框架中实现 TTUR 通常很简单。您不是为两个网络使用单个优化器,而是实例化两个独立的优化器,一个用于生成器的参数 (parameter),一个用于判别器的参数,每个优化器都配置有自己的学习率。
这里是一个简化的 PyTorch 风格伪代码片段:
# 假设生成器和判别器模型已定义
generator = Generator(...)
discriminator = Discriminator(...)
# 定义独立的学习率
lr_g = 0.0001
lr_d = 0.0004 # TTUR: 判别器通常更高
# 定义独立的优化器
optimizer_G = torch.optim.Adam(generator.parameters(), lr=lr_g, betas=(0.5, 0.999))
optimizer_D = torch.optim.Adam(discriminator.parameters(), lr=lr_d, betas=(0.5, 0.999))
# 在训练循环内:
# 1. 训练判别器
optimizer_D.zero_grad()
# ... 计算判别器损失 (loss_d) ...
loss_d.backward()
optimizer_D.step() # 使用 lr_d 更新 D
# 2. 训练生成器
optimizer_G.zero_grad()
# ... 计算生成器损失 (loss_g) ...
loss_g.backward()
optimizer_G.step() # 使用 lr_g 更新 G
具体的学习率 和 是超参数 (hyperparameter),需要根据您的特定数据集和模型架构进行调整。尽管原始论文提出了具体的值(例如 ),但这仅作为起始点。网格搜索或其他超参数优化技术可能需要用来寻找最佳值。
使用 TTUR 带来多项优势:
然而,请记住:
TTUR 在最先进的 GAN 训练方案中被广泛采用,正是因为它直接处理了生成器-判别器动态中固有的异步学习速度,显著地促成了更稳定和有效的训练。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•