softmax
为激活函数,C = softmax(o)
为输出,真实标签为y
, 用交叉熵作为损失函数L
,给出损失函数定义,并且给出损失函数L
对o
的求导
交叉熵损失函数定义如下:
L = − ∑ i = 1 C y i log ( c i ) L = -\sum_{i=1}^C y_i\log(c_i) L=−i=1∑Cyilog(ci)
其中, y y y表示真实标签, c c c表示模型的预测输出, C C C表示类别数。
假设模型的输出为
o
o
o,则将
o
o
o输入softmax
函数得到预测输出
c
c
c:
c i = e o i ∑ j = 1 C e o j c_i = \frac{e^{o_i}}{\sum_{j=1}^C e^{o_j}} ci=∑j=1Ceojeoi
将预测输出 c c c代入交叉熵损失函数中,可得到:
L = − ∑ i = 1 C y i log ( e o i ∑ j = 1 C e o j ) = − ∑ i = 1 C y i ( o i − log ∑ j = 1 C e o j ) L = -\sum_{i=1}^C y_i\log\left(\frac{e^{o_i}}{\sum_{j=1}^C e^{o_j}}\right) = -\sum_{i=1}^C y_i(o_i - \log\sum_{j=1}^C e^{o_j}) L=−i=1∑Cyilog(∑j=1Ceojeoi)=−i=1∑Cyi(oi−logj=1∑Ceoj)
接下来,我们对 L L L对 o k o_k ok求导数:
∂ L ∂ o k = − ∑ i = 1 C y i ∂ ( o i − log ∑ j = 1 C e o j ) ∂ o k \frac{\partial L}{\partial o_k} = -\sum_{i=1}^C y_i \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} ∂ok∂L=−i=1∑Cyi∂ok∂(oi−log∑j=1Ceoj)
当 i = k i=k i=k时,
∂ ( o i − log ∑ j = 1 C e o j ) ∂ o k = 1 − e o k ∑ j = 1 C e o j = 1 − c k \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} = 1 - \frac{e^{o_k}}{\sum_{j=1}^C e^{o_j}} = 1 - c_k ∂ok∂(oi−log∑j=1Ceoj)=1−∑j=1Ceojeok=1−ck
当 i ≠ k i \neq k i=k时,
∂ ( o i − log ∑ j = 1 C e o j ) ∂ o k = − e o i e o k ( ∑ j = 1 C e o j ) 2 = − c i c k \frac{\partial(o_i - \log\sum_{j=1}^C e^{o_j})}{\partial o_k} = -\frac{e^{o_i}e^{o_k}}{(\sum_{j=1}^C e^{o_j})^2} = -c_ic_k ∂ok∂(oi−log∑j=1Ceoj)=−(∑j=1Ceoj)2eoieok=−cick
因此,
∂ L ∂ o k = − y k ( 1 − c k ) − ∑ i ≠ k y i ( − c i c k ) = c k − y k \frac{\partial L}{\partial o_k} = -y_k(1-c_k) - \sum_{i\neq k}y_i(-c_ic_k) = c_k - y_k ∂ok∂L=−yk(1−ck)−i=k∑yi(−cick)=ck−yk
综上所述,我们可以使用交叉熵损失函数和softmax
作为激活函数,并且可以使用上述公式计算梯度,以便进行反向传播和模型参数更新。
接着上面的假设,若 :
o
=
p
x
+
b
o = px+b
o=px+b
那么根据链式法则,损失L
对p
的求导结果为
x ( c k − y k ) x(c_k - y_k) x(ck−yk)
损失L
对b
的求导结果为
c
k
−
y
k
c_k - y_k
ck−yk