【问题标题】:Is max operation differentiable in Pytorch?Pytorch中的最大操作是可微的吗?
【发布时间】:2020-12-30 11:33:29
【问题描述】:

我正在使用 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 中是可区分的,有人可以提供一些指导吗?

【问题讨论】:

    标签: optimization deep-learning neural-network pytorch gradient


    【解决方案1】:

    max 对于而不是索引是可微分的。它在您的应用程序中完全有效。

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-22
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多