SoftmaxWithLossLayer 层可以分解为 SoftmaxLayer + MultinomialLogisticLoss 层的组合,不过其梯度计算更加数值稳定.
测试时,该网络层可以由 SoftmaxLayer 层代替.
1. SoftmaxLayer
Softmax 是 Logtistic 函数的一种泛化, 计算得到的 $N$ 维向量满足:(1) 向量的每个元素值均在区间 [0, 1]; (2) 向量的所有元素之和为 1.
$${ Softmax(x_i) = \frac{e^{x_i}}{\sum_i e^{x_i}} }$$
返回每一个标签label 的概率.
# python 实现
import numpy as np
def softmax(x):
y = np.exp(x)
return y/np.sum(y)
2. MultinomialLogisticLoss
计算的是交叉熵 loss.
${ L = \frac{1}{N} \sum_{n=1}^N \lbrace -log(pred_n, label_n) \rbrace }$
3. SoftmaxWithLoss
多分类损失函数, 交叉熵形式:
${ L = \frac{1}{N} \sum_{n=1}^N \lbrace -log(Softmax(x_n), label_n) \rbrace }$
From [caffe小问题(2):softmaxWithLoss]