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

PyTorch中如何针对不同参数同时最小化与最大化同一损失

优化目标

我有一个目标函数,输入X为图像,需要针对编码器f1、f2最大化损失,同时针对双射卷积g最小化该损失,目标公式如下:
目标公式

当前实现代码

以下是目前设想的实现方式:

obs_ch1, obs_ch23 = self.infomin.split_RGB_into_R_GB(obs=obs_RGB)
obs_ch1, obs_ch23 = self.infomin.R_GB_to_frame_stacked_R_GB(
    obs_R=obs_ch1, obs_GB=obs_ch23)

# minimize wrt g
logits = self.infomin.compute_logits(anchor=obs_ch1, pos=obs_ch23)
loss = self.cross_entropy_loss(logits, labels)

self.infomin_discrim_optimizer.zero_grad()
loss.backward()
self.infomin_discrim_optimizer.step()

# maximize wrt f1, f2
logits = self.infomin.compute_logits(
    anchor=obs_ch1.detach(), pos=obs_ch23.detach())
labels = torch.arange(logits.shape[0]).long().to(self.device)
loss = self.cross_entropy_loss(logits, labels)

self.infomin_encoders_optimizer.zero_grad()
(-loss).backward()
self.infomin_encoders_optimizer.step()
现有实现逻辑说明
  • 为f1和f2配置了同一个优化器infomin_encoders_optimizer,为g单独配置优化器infomin_discrim_optimizer
  • 先仅针对g计算NCE损失,完成g的参数更新
  • 将张量执行detach操作切断梯度流后,再针对f1和f2计算NCE损失,对该损失取反后反向传播完成编码器参数更新
  • 采用分步更新的原因是两个优化目标方向相反,无法同步更新;此外必须对g的输出做detach操作,否则会触发g的重复梯度更新报错
核心问题

如何正确实现针对不同参数,同时对同一目标函数执行最小化和最大化操作?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:12:13