摘要
本文给出 cross-entropy 函数的定义, 求解其在反向传播中的梯度, 并通过案例详解 cross-entropy 的含义.
相关
配套代码, 请参考文章 :
Python和PyTorch对比实现cross-entropy交叉熵损失函数及反向传播
系列文章索引 :
https://blog.csdn.net/oBrightLamp/article/details/85067981
正文
1. 交叉熵函数的定义:
假设在一个多分类问题中, 用 y i y_i yi 表示为实际概率, s i s_i si 为计算得出的预测概率.
常有 :
0 ⩽ y i ⩽ 1 ∑ i = 1 k y i = 1 0\leqslant y_{i} \leqslant 1\\ \quad\\ \sum_{i = 1}^{k}y_{i} = 1\\ 0⩽yi⩽1i=1∑kyi=1
若 s i s_i si 由softmax函数计算得出, 则天然满足 :
0 ⩽ s i ⩽ 1 ∑ i = 1 k s i = 1 0\leqslant s_{i} \leqslant 1\\ \quad\\ \sum_{i = 1}^{k}s_{i} = 1\\ 0⩽si⩽1i=1∑ksi=1
于是, 交叉熵损失函数的定义为:
c r o s s E n t r o p y ( y , s ) = − ∑ i = 1 k y i l o g ( s i ) i = 1 , 2 , 3 , … , k l o g 表 示 以 e 为 底 数 的 自 然 对 数 l o g e crossEntropy(y,s) = -\sum_{i = 1}^{k}y_{i}log(s_{i})\\ \quad\\ i = 1, 2,3, \dots, k\\ \quad\\ log表示以e为底数的自然对数log_{e} crossEntropy(y,s)=−i=1∑kyilog(si)i=1,2,3,…,klog表示以e为底数的自然对数loge
2. 反向传播梯度:
交叉熵损失 :
c = c r o s s E n t r o p y ( y , s ) = − ∑ i = 1 k y i l o g ( s i ) c = crossEntropy(y,s) = -\sum_{i = 1}^{k}y_{i}log(s_{i})\\ c=crossEntropy(y,s)=−i=1∑kyilog(si)
c 对 s 的梯度向量为 :
∇ c ( s ) = ( ∂ c ∂ s 1 , ∂ c ∂ s 2 , ⋯   , ∂ c ∂ s k ) = ( − y 1 s 1 , − y 2 s 2 , ⋯   , − y k s k ) \nabla c_{(s)} =(\frac{\partial c}{\partial s_{1}},\frac{\partial c}{\partial s_{2}}, \cdots, \frac{\partial c}{\partial s_{k}}) =( -\frac{y_1}{s_1}, -\frac{y_2}{s_2},\cdots,-\frac{y_k}{s_k}) ∇c(s)=(∂s1∂c,∂s2∂c,⋯,∂sk∂c