首先声明变量符号. 以下所有表示都是针对单个样本, 多样本(batch)只需将向量表示扩展为矩阵表示即可.
对于多分类问题, 假设有m个分类, 则真实的标签向量是一个One-Hot向量y∈Rm, 其中j是真实类别对应的索引, 则对于i=1,2,⋯,m有:
yi={1,0,i=ji=j
另外, 将softmax函数的入参记为z∈Rm, 表示经过前面结构转换后的输出值, softmax函数的作用就是将这个值归一化后输出, 因此每个类别的对应的这个输出值, 可以作为预测概率, 所有类别的输出之和为1. 将softmax函数的输出向量记为a∈Rm:
a=softmax(z)
对于其中的每个元素ai,i=1,2,⋯,m, 就是最后的输出值, 有:
ai=k=1∑mezkezi 其中连加符号的索引记号用k只是因为i被占用了, 在这里特指第i个元素.
对于单个样本, 其交叉熵以向量的形式表示为:
l=−ylna=−i∑yilnai=−lnaj
其中只有yj=1, 其余的yi=0. softmax和交叉熵经常一起出现, 因此这种组合的导数在后向传播中经常被使用的, 需要理解深刻.
这里说的导数, 即偏导数∂z∂l, 它本身也是一个长度为m的向量, 每个元素是最后的损失对于对应zi的导数. 将l对每个元素zi求导, 需要分为两种情况.
情况一, i=j
这一项比较特殊, 因为它对应的是真实类别j, 推导如下:
∂zi∂l=−∂zi∂lnaj=−∂zi∂lnai=−∂zi∂lnk=1∑mezkezi=−k=1∑mezkezi1(k=1∑mezk)2ezi⋅k=1∑mezk−e2zi=−k=1∑mezkk=1∑mezk−ezi=−(1−k=1∑mezkezi)=ai−1=ai−yi 情况二, i=j
∂zi∂l=−∂zi∂lnaj=−∂zi∂lnk=1∑mezkezj=−k=1∑mezkezj1(k=1∑mezk)2−eziezj=k=1∑mezkezi=ai=ai−yi 此时的yi=0.
因此综上推导过程, softmax函数结合交叉熵损失:
∂zi∂l=ai−yi 用向量表示为:
∂z∂l=a−y