Softmax、交叉熵损失函数及导数

Softmax、交叉熵损失函数及导数_第1张图片

这是一个简单的神经网络,输出层的激活函数为SoftMax,根据定义,输出层各节点的输出值为:

其中是该节点的输入

是上一层节点的输出值,是权重,所以:

再来看损失函数:

是训练实例的标签值:

显然,只有一个是正确分类,所以向量里只有一个分量值为1,其余都是0:

t是正确类别的下标,所以:

例如一个三分类的任务, 正确分类是第二个,输出结果是[0.3,0.5,0.2],所以这里的误差为:

再比如输出为[0.4,0.15,0.45]:

显然,输出是[0,1,0]时误差是0,现在要根据误差来求得的梯度:


这里求的是关于的梯度,所以要分两种情况讨论,第一种是当时:
\frac{\partial \ln \frac{e^{u_{t}}}{\sum_{k} e^{u_{k}}}}{\partial u_{j}}=\frac{\partial\left(\ln e^{u_{j}}-\ln \sum_{k} e^{u_{k}}\right)}{\partial u_{j}}=\frac{\partial \ln e^{u_{j}}}{\partial u_{j}}-\frac{\partial \ln \sum_{k} e^{u_{k}}}{\partial u_{j}}=1-\frac{\partial \ln \sum_{k} e^{u_{k}}}{\partial u_{j}}
\frac{\partial \ln \sum_{k} e^{u_{k}}}{\partial u_{j}}=\frac{\partial \ln \sum_{k} e^{u_{k}}}{\partial \sum_{k} e^{u_{k}}} \frac{\partial \sum_{k} e^{u_{k}}}{\partial_{k} e^{u_{k}}}=\frac{1}{\sum_{k} e^{u_{k}}} \frac{\partial \sum_{k} e^{u_{k}}}{\partial u_{j}}=\frac{e^{u_{j}}}{\sum_{k} e^{u_{k}}}=y_{j}

所以:

而当时,并不影响,所以:


你可能感兴趣的:(Softmax、交叉熵损失函数及导数)