在 GAN 設計中,BCE(Binary Cross Entropy)與 Hinge Loss 各有優勢:
BCEWithLogitsLoss
(目前使用)- 適合標準 GAN 設計,會強制
D
學習分辨真實與偽造 - 可能會導致梯度消失問題,特別是在
D
學習速度比G
快的時候
- 適合標準 GAN 設計,會強制
Hinge Loss
(改善D
訓練)- 更適合 WGAN 或 LSGAN,因為它不會給
D
過於極端的梯度信號 - Hinge Loss 對於
D
來說: pythonCopyEditd_loss_real = torch.mean(F.relu(1 - real_D_logits)) d_loss_fake = torch.mean(F.relu(1 + fake_D_logits)) d_loss = d_loss_real + d_loss_fake
G
仍然可以使用-torch.mean(fake_D_logits)
作為對抗損失
- 更適合 WGAN 或 LSGAN,因為它不會給
如果你發現目前 D
學習過快,導致 G
訓練不穩定(例如 loss 振盪),可以嘗試 Hinge Loss,通常會讓生成結果更穩定。