Jim*_*ang 9 optimization gradient neural-network deep-learning pytorch
我正在使用 Pytorch 来训练一些神经网络。我感到困惑的部分是:
prediction = myNetwork(img_batch)
max_act = prediction.max(1)[0].sum()
loss = softcrossentropy_loss - alpha * max_act
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,“prediction”是“myNetwork”的输出张量。我希望最大化一批“预测”的最大输出。
例如: [[-1.2, 2.0, 5.0 , 0.1, -1.5] [ 9.6 , -1.1, 0.7, 4,3, 3.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.
Run Code Online (Sandbox Code Playgroud)
所以我现在很困惑,我担心我最大化“max_act”的想法从一开始就是错误的。如果 max() 操作在 Pytorch 中可微分,有人可以提供一些指导吗?
hkc*_*rex 10
max
相对于值可微,而不是索引。它在您的应用程序中完全有效。
从梯度的角度来看,d(max_value)/d(v)
如果是1,max_value==v
否则是0。您可以将其视为选择器。
d(max_index)/d(v)
并没有真正的意义,因为它是一个不连续的函数,只有0
且undefined
尽可能的梯度。