和的导数是导数之和,即:
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)))
看第一项,导数将是0
if i != j
,这可以用一个表示德尔塔函数我将其称为 D_ij。这给出(对于第一项):
= D_ij * exp(o_j) / Sum_k(exp(o_k))
这只是我们的原始函数乘以D_ij
= D_ij * p_j
对于第二项,当我们单独导出总和的每个元素时,唯一的非零项将是i = k
,这给了我们(不要忘记幂律,因为总和在分母中)
= -exp(o_j) * Sum_k(d_i(exp(o_k)) / Sum_k(exp(o_k))^2
= -exp(o_j) * exp(o_i) / Sum_k(exp(o_k))^2
= -(exp(o_j) / Sum_k(exp(o_k))) * (exp(o_j) / Sum_k(exp(o_k)))
= -p_j * p_i
将两者放在一起,我们得到了令人惊讶的简单公式:
D_ij * p_j - p_j * p_i
如果你真的想要我们可以把它分成i = j
and i != j
cases:
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
这就是我们的答案。