如何在pytorch中的训练循环中同时最小化一组参数的wrt和最大化另一组参数



我有一个损失函数,它包括两组要学习的参数。一个是矩阵,我想最大化损失,另一个是逻辑回归的参数集,我想最小化损失。在pytorch中,每当我使用loss.backward((时,两组参数的损失都会最小化,(-loss(.backward((会使两组参数都最小化。如何对pytorch中的参数集进行最小最大优化?Tensorflow可能有gradient_tape和tape.watch((的概念。pytorch的替代方案是什么?

您可以参考https://arxiv.org/abs/1409.7495.

但这个想法的关键是:你有一些损失函数l(X,Y(,其中X和Y是参数。现在您想要更新X以最小化损失,更新Y以最大化损失,这可以看作是最小化-l(X,Y(。

本质上,您希望用dl/dX更新参数X,用d(-l(/dY=-dl/dY更新参数Y。您可以通过执行反向传播步骤、修改Y的梯度并应用更新来完成此操作。用pytorch的话来说,这将是:

loss = compute_loss()
loss.backward()
# modify gradients of Y
Y.grad.data = -Y.grad.data
optimizer.step()
optimizer.zero_grad()

最新更新