Neural network softmax函数的导数解释

Neural network softmax函数的导数解释,neural-network,derivative,calculus,softmax,Neural Network,Derivative,Calculus,Softmax,我试图计算softmax激活函数的导数。我发现了这一点:似乎没有人给出正确的推导,来说明如何得到I=j和I!=J有人能解释一下吗!当一个求和涉及到softmax激活函数的分母时,我对导数感到困惑 和的导数是导数的和,即: d(f1 + f2 + f3 + f4)/dx = df1/dx + df2/dx + df3/dx + df4/dx 为了推导p_j关于o_i的导数,我们从以下内容开始: d_i(p_j) = d_i(exp(o_j) / Sum_k(exp(o_k)))

我试图计算softmax激活函数的导数。我发现了这一点:似乎没有人给出正确的推导,来说明如何得到I=j和I!=J有人能解释一下吗!当一个求和涉及到softmax激活函数的分母时,我对导数感到困惑

和的导数是导数的和,即:

    d(f1 + f2 + f3 + f4)/dx = df1/dx + df2/dx + df3/dx + df4/dx
为了推导
p_j
关于
o_i
的导数,我们从以下内容开始:

    d_i(p_j) = d_i(exp(o_j) / Sum_k(exp(o_k)))
我决定使用
d_I
作为关于
o_I
的导数,以便于阅读。 使用产品规则,我们得到:

     d_i(exp(o_j)) / Sum_k(exp(o_k)) + exp(o_j) * d_i(1/Sum_k(exp(o_k)))
看第一项,如果
i!=j
,这可以用我称之为D_ij的表示。这使得(第一学期):

这就是我们的原始函数乘以
D_ij

    = D_ij * p_j
对于第二项,当我们分别推导出和的每个元素时,唯一的非零项将是当
i=k
时,这给了我们(不要忘记幂律,因为和是分母)

将两者结合起来,我们得到了令人惊讶的简单公式:

    D_ij * p_j - p_j * p_i
如果您确实需要,我们可以将其分为
i=j
i!=j
案例:

    i = j: D_ii * p_i - p_i * p_i = p_i - p_i * p_i = p_i * (1 - p_i)

    i != j: D_ij * p_i - p_i * p_j = -p_i * p_j

这就是我们的答案。

关于它的价值,这里是我基于Sirgay答案的推导:(如果发现任何错误,请随意指出)


非常感谢您!这很清楚。我不可能要求更好的解释!:)我很高兴我现在完全理解了推导过程。我将把它引用到math.stack exchange上未回答的那个@先生,你的第三个表达式不应该是
di(exp(o_j))/Sum_k(exp(o_k))+exp(o_j)*di(1/Sum_k(exp(o_k))
?在最后一个
o_k
@harveyslash之前缺少exp首先,在您链接到的问题中,您错误地说您将雅可比矩阵的元素相加以获得“最终”导数。这是不正确的,请将雅可比矩阵视为导数,而不是导致导数的中间步骤。@harveyslash在我的解决方案中,
i
j
指的是雅可比矩阵的元素。你似乎认为0的“东西”是导数,但它只是偏导数的一部分。您手动写出了每个导数(4个输入),而我处理了一般情况。@harveyslash到0的是子表达式
d_I(exp(o_j))
,它是子表达式
d_I(exp(o_j))/Sum_k(exp(o_k))
的一部分。仔细看括号,你会发现这是exp(o_j)`关于exp(o_j)o_i除以exp(o_k)k的和的导数。
Sum_k(exp(o_k))
o_i
的导数在乘积规则展开的第二部分中处理。这有助于澄清问题吗?非常感谢!我只有一个疑问:
为什么∑k((de^{o_k})/do_I)
从第4步到第5步计算
e^{o_I}
?“如果您能就这个问题提供任何见解,我将不胜感激。”杜海梅问得好。一个接一个地考虑这个总和的所有项,看看每个项会发生什么。您可以看到有两种情况:当i=k时,术语是
d/do\u i^o\u i
,即
e^o\u i
。当我k、 你会得到一大堆零。我投票结束这个问题,因为它与编程无关
    D_ij * p_j - p_j * p_i
    i = j: D_ii * p_i - p_i * p_i = p_i - p_i * p_i = p_i * (1 - p_i)

    i != j: D_ij * p_i - p_i * p_j = -p_i * p_j