Pytorch 中的最大运算是否可微分?

Is max operation differentiable in Pytorch?

我正在使用 Pytorch 来训练一些神经网络。我感到困惑的部分是:

prediction = myNetwork(img_batch)
max_act = prediction.max(1)[0].sum()
loss = softcrossentropy_loss - alpha * max_act

在上面的代码中,“prediction”是“myNetwork”的输出张量。 我希望在一个批次中最大化“预测”的最大输出。

例如: [[-1.2, 2.0, 5.0, 0.1, -1.5] [9.6, -1.1, 0.7, 4,3, 3.3]] 对于第一个预测向量,第三个元素是最大的,而对于第二个向量,第一个元素是最大的。我想最大化“5.0+9.6”,虽然我们不知道新输入数据的最大输出是什么索引。

事实上,我的训练似乎是成功的,因为“max_act”部分真的增加了,这是我想要的行为。然而,我听到一些关于 max() 操作是否可微的讨论:

Some says, mathmatically, max() is not differentiable.
Some says, max() is just an identity function to select the largest element, and this largest element is differentiable.

所以我现在很困惑,我担心我最大化“max_act”的想法是否从一开始就错了。 如果 max() 操作在 Pytorch 中是可微的,有人可以提供一些指导吗?

max 对于 是可微的,而不是 指数 。它在您的应用程序中完全有效。

从梯度的角度来看,d(max_value)/d(v)如果max_value==v为1,否则为0。您可以将其视为选择器。

d(max_index)/d(v) 没有真正意义,因为它是一个不连续的函数,只有 0undefined 作为可能的梯度。