正如 whuber 指出的那样,$\delta_{ij}$ 是克罗内克三角洲https://en.wikipedia.org/wiki/Kronecker_delta:
$$ \begin{align} \delta_{ij} = \begin{cases} 0\: \text{when } i \ne j \\ 1 \: \text{when } i = j \end{cases} \end {对齐} $$
...请记住,softmax 有多个输入,一个输入向量;并且还给出了一个向量输出,其中输入和输出向量的长度是相同的。
如果任何输入向量值发生变化,则输出向量中的每个值都会发生变化。所以输出向量值都是所有输入向量值的函数:
$$ y_{k'} = f_{k'}(a_1, a_2, a_3,\dots, a_K) $$
其中 $k'$ 是输出向量的索引,向量的长度为 $K$,$f_{k'}$ 是某个函数。因此,输入向量的长度为 $K$,输出向量的长度为 $K$,$k$ 和 $k'$ 都取值 $\in \{1,2,3,...,K\}美元。
当我们对 $y_{k'}$ 进行微分时,我们对每个输入向量值进行部分微分。所以我们会有:
- $\frac{\partial y_{k'}}{\partial a_1}$
- $\frac{\partial y_{k'}}{\partial a_2}$
- ETC ...
我们不会为每个 $a_1$、$a_2$ 等单独计算,而是使用 $k$ 来表示 1、2、3 等,即我们将计算:
$$ \frac{\partial y_{k'}}{\partial a_k} $$
...在哪里:
- $k \in \{1,2,3,\dots,K\}$ 和
- $k' \in \{1,2,3\dots K\}$
当我们进行这种区分时,例如参见https://eli.thegreenplace.net/2016/the-softmax-function-and-its-derivative/,导数将是:
$$ \frac{\partial y_{k'}}{\partial a_k} = \begin{cases} y_k(1 - y_{k'}) &\text{当 }k = k'\\ - y_k y_{ k'} &\text{当 }k \ne k' \end{cases} $$
然后我们可以使用 Kronecker delta 来编写它,这只是为了符号方便,以避免每次都写出“cases”语句。