> 文章列表 > softmax交叉熵损失求导

softmax交叉熵损失求导

softmax交叉熵损失求导

softmax为激活函数C = softmax(o)为输出,真实标签为y, 用交叉熵作为损失函数L,给出损失函数定义,并且给出损失函数Lo求导

交叉熵损失函数定义如下:

L=−∑i=1Cyilog⁡(ci)L = -\\sum_{i=1}^C y_i\\log(c_i)L=i=1Cyilog(ci)

其中,yyy表示真实标签,ccc表示模型的预测输出,CCC表示类别数。

假设模型的输出为ooo,则将ooo输入softmax函数得到预测输出ccc

ci=eoi∑j=1Ceojc_i = \\frac{e^{o_i}}{\\sum_{j=1}^C e^{o_j}}ci=j=1Ceojeoi

将预测输出ccc代入交叉熵损失函数中,可得到:

L=−∑i=1Cyilog⁡(eoi∑j=1Ceoj)=−∑i=1Cyi(oi−log⁡∑j=1Ceoj)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=1Cyilog(j=1Ceojeoi)=i=1Cyi(oilogj=1Ceoj)

接下来,我们对LLLoko_kok求导数:

∂L∂ok=−∑i=1Cyi∂(oi−log⁡∑j=1Ceoj)∂ok\\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}okL=i=1Cyiok(oilogj=1Ceoj)

i=ki=ki=k时,

∂(oi−log⁡∑j=1Ceoj)∂ok=1−eok∑j=1Ceoj=1−ck\\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_kok(oilogj=1Ceoj)=1j=1Ceojeok=1ck

i≠ki \\neq ki=k时,

∂(oi−log⁡∑j=1Ceoj)∂ok=−eoieok(∑j=1Ceoj)2=−cick\\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_kok(oilogj=1Ceoj)=(j=1Ceoj)2eoieok=cick

因此,

∂L∂ok=−yk(1−ck)−∑i≠kyi(−cick)=ck−yk\\frac{\\partial L}{\\partial o_k} = -y_k(1-c_k) - \\sum_{i\\neq k}y_i(-c_ic_k) = c_k - y_kokL=yk(1ck)i=kyi(cick)=ckyk

综上所述,我们可以使用交叉熵损失函数和softmax作为激活函数,并且可以使用上述公式计算梯度,以便进行反向传播和模型参数更新。

接着上面的假设,若 :
o=px+bo = px+bo=px+b
那么根据链式法则,损失Lp的求导结果为

x(ck−yk)x(c_k - y_k)x(ckyk)

损失Lb的求导结果为
ck−ykc_k - y_kckyk