You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WGAN与WGAN-GP生成器损失反向传播one、mone参数差异原因问询

WGAN与WGAN-GP生成器反向传播参数差异原因

首先明确PyTorch中loss.backward(grad_outputs)的作用:grad_outputs为链式求导的上游梯度系数,最终参数得到的梯度值等于该系数乘以损失对参数的导数,默认值为1,适配常规的损失最小化场景。

生成器的统一优化目标

不管是WGAN还是WGAN-GP,生成器的核心目标都是提升判别器对生成假图的打分D(fake_images),本质是对目标E[D(G(z))](生成假图判别打分的期望)做梯度上升。

PyTorch优化器默认执行梯度下降,参数更新规则为:
参数 = 参数 - 学习率 * 梯度
要实现梯度上升有两种完全等价的代码写法:

  • 写法1:损失取为-E[D(G(z))],调用loss.backward()(默认系数1):此时计算得到的梯度为d(-E[D(G(z))])/dθ_G,代入更新规则可得θ_G = θ_G + lr * dE[D(G(z))]/dθ_G,符合梯度上升要求。
  • 写法2:损失取为E[D(G(z))],调用loss.backward(torch.tensor(-1)):此时梯度为-1 * d(E[D(G(z))])/dθ_G,代入更新规则得到的最终参数更新效果和写法1完全一致。

两段代码的对应逻辑

WGAN-GP的实现逻辑

对应上述写法2:

  • g_loss = self.D(fake_images).mean() 就是直接计算生成假图的判别打分期望E[D(G(z))]
  • 反向传播时传入mone=-1作为梯度系数,直接实现梯度上升的优化目标,符合WGAN-GP的标准实现习惯。

WGAN的实现逻辑

对应上述写法1的变种:

  • 该实现的判别器训练逻辑直接对E[D(real)] - E[D(fake)]做梯度上升,因此生成器侧需要最小化-E[D(fake)]
  • 反向传播时传入one=1作为梯度系数,配合后续g_cost = -g_loss的损失统计逻辑,最终得到的参数更新效果和WGAN-GP完全等价,只是实现时的梯度方向定义不同。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:54:03