趋近智
在GAN训练过程中,生成器 (G) 和判别器 (D) 之间的互动需要精细调整。标准方法对两个网络使用相同的学习率。然而,实践观察和理论分析表明,这可能并非总是最合适的。如果判别器相对于生成器学习得太快,它很容易在早期就区分真实样本和生成样本,导致生成器出现梯度消失。反之,如果判别器学习得太慢,生成器可能无法获得有效反馈以改进。
双时间尺度更新规则 (TTUR) 提供了一种简单而有效的训练动态调整,它建议为生成器和判别器的优化器使用不同的学习率。这个想法源于对随机近似算法的分析,表明不同的学习速度可以在特定优化情况中带来更好的收敛特性,这包括GAN特有的鞍点优化。
TTUR 的核心原则直接明了:判别器的学习率要高于生成器的学习率。
设 αD 为判别器优化器的学习率,αG 为生成器优化器的学习率。TTUR 要求:
αD>αG常用比例可能设定 αD 是 αG 的2到5倍,例如。
为什么这个看起来很小的改变会有帮助呢?
在现代深度学习框架中,实现TTUR通常非常简单。它涉及定义两个独立的优化器实例,一个用于判别器的参数,一个用于生成器的参数,每个实例都配置其相应的学习率 (αD 和 αG )。
# 使用类似PyTorch的伪代码示例
# 根据TTUR定义学习率
learning_rate_D = 0.0004
learning_rate_G = 0.0001 # 通常小于learning_rate_D
# 创建独立的优化器
optimizer_D = Adam(discriminator.parameters(), lr=learning_rate_D, betas=(0.0, 0.9))
optimizer_G = Adam(generator.parameters(), lr=learning_rate_G, betas=(0.0, 0.9)) # 注意:beta1=0常与TTUR一起使用
# --- 训练循环内部 ---
# 1. 更新判别器
optimizer_D.zero_grad()
# 计算判别器损失(例如,WGAN-GP损失)
d_loss.backward()
optimizer_D.step()
# 2. 更新生成器
optimizer_G.zero_grad()
# 计算生成器损失
g_loss.backward()
optimizer_G.step()
一个简化的训练循环结构,展示了为判别器和生成器分别使用不同学习率的独立优化器,遵循TTUR原则。
TTUR 与本章讨论的其他稳定方法并非互相排斥,例如 Wasserstein 损失、梯度惩罚 (WGAN-GP) 或谱归一化。事实上,它经常与这些技术结合使用。WGAN-GP 和谱归一化等方法通过修改损失函数或网络结构来提高稳定性,而 TTUR 则直接通过学习率调整优化动态。将这些方法结合使用通常比单独使用任何一种技术能产生更优的结果。
虽然 TTUR 为设置 αD>αG 提供了强大的启发式和理论基础,但具体值仍是超参数。找到最佳学习率及其比例可能仍然需要根据特定数据集、架构和正在使用的其他稳定技术进行一些实验。然而,TTUR 提供了一个有原则的起点,与平衡单一学习率或临时更新调度相比,它通常简化了调整过程。它代表着一个有价值的工具,用于增强 GAN 训练的稳定性和收敛速度。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造