Softmax公式及梯度计算
阅读原文时间:2021年04月26日阅读:1

softmax是一个多分类器,可以计算预测对象属于各个类别的概率。

公式

y i = S ( z ) i = e z i ∑ j = 1 C e z j , i = 1 , . . . , C y_i=S(\boldsymbol{z})_i = \frac{e^{z_i}}{\sum_{j=1}^{C}e^{z_j}},i=1,…,C yi​=S(z)i​=∑j=1C​ezj​ezi​​,i=1,…,C

  • z \boldsymbol{z} z是上一层的输出,softmax的输入, 维度为 C C C
  • y i y_i yi​为预测对象属于第 c c c类的概率

梯度

变量间的计算图如上,已知 y \boldsymbol{y} y的梯度 ∂ l ∂ y i , i = 1 , . . . , C \frac{\partial l}{\partial y_i}, i=1,…,C ∂yi​∂l​,i=1,…,C,要计算 z \boldsymbol{z} z的梯度 ∂ l ∂ z j , j = 1 , . . . , C \frac{\partial l}{\partial z_j}, j=1,…,C ∂zj​∂l​,j=1,…,C

从计算图中可以看到, z \boldsymbol{z} z的分量 z j z_j zj​对 y \boldsymbol{y} y的每一个分量都有贡献,因此:
∂ l ∂ z j = ∑ i = 1 C ∂ l ∂ y i ∂ y i ∂ z j \frac{\partial l}{\partial z_j} = \sum_{i=1}^{C}\frac{\partial l}{\partial y_i} \frac{\partial y_i}{\partial z_j} ∂zj​∂l​=i=1∑C​∂yi​∂l​∂zj​∂yi​​

由于 ∂ l ∂ y i \frac{\partial l}{\partial y_i} ∂yi​∂l​已知,因此计算 ∂ y i ∂ z j \frac{\partial y_i}{\partial z_j} ∂zj​∂yi​​即可!

为方便记 ∑ j = 1 C e z j \sum_{j=1}^{C}e^{z_j} ∑j=1C​ezj​为 ∑ C \sum_C ∑C​

(1) i = j i=j i=j时:
∂ y i ∂ z j = e z i ∑ C − e z i e z i ∑ C 2 = e z i ∑ C − e z i ∑ C 2 = y i − y i 2 = y i ( 1 − y i ) \begin{aligned} \frac{\partial y_i}{\partial z_j} & = \frac{e^{z_i}\sum_C-e^{z_i}e^{z_i}}{{\sum_C}^2} \\ &=\frac{e^{z_i}}{\sum_C} - \frac{e_{z_i}}{\sum_C}^2 \\ & = y_i-y_i^2 \\ & = y_i(1-y_i) \end{aligned} ∂zj​∂yi​​​=∑C​2ezi​∑C​−ezi​ezi​​=∑C​ezi​​−∑C​ezi​​​2=yi​−yi2​=yi​(1−yi​)​
(2) i ≠ j i \neq j i̸​=j
∂ y i ∂ z j = 0 ∑ C − e z i e z j ∑ C 2 = − e z i ∑ C e z j ∑ C = − y i y j \begin{aligned} \frac{\partial y_i}{\partial z_j} &= \frac{0\sum_C - e^{z_i}e^{z_j}}{{\sum_C}^2} \\ &= -\frac{e_{z_i}}{\sum_C}\frac{e_{z_j}}{\sum_C} \\ &=-y_iy_j \end{aligned} ∂zj​∂yi​​​=∑C​20∑C​−ezi​ezj​​=−∑C​ezi​​​∑C​ezj​​​=−yi​yj​​