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

softmax交叉熵损失求导

softmax交叉熵损失求导

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

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

L=−∑i=1Cyilog⁡(ci)L = -\\sum_{i=1}^C y_i\\log(c_i)L=−i=1∑C​yi​log(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=1C​eoj​eoi​​

将预测输出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=1∑C​yi​log(∑j=1C​eoj​eoi​​)=−i=1∑C​yi​(oi​−logj=1∑C​eoj​)

接下来,我们对LLL对oko_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}∂ok​∂L​=−i=1∑C​yi​∂ok​∂(oi​−log∑j=1C​eoj​)​

当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_k∂ok​∂(oi​−log∑j=1C​eoj​)​=1−∑j=1C​eoj​eok​​=1−ck​

当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_k∂ok​∂(oi​−log∑j=1C​eoj​)​=−(∑j=1C​eoj​)2eoi​eok​​=−ci​ck​

因此,

∂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_k∂ok​∂L​=−yk​(1−ck​)−i=k∑​yi​(−ci​ck​)=ck​−yk​

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

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

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

损失L对b的求导结果为
ck−ykc_k - y_kck​−yk​