关于交叉熵损失(好吧,甚至是逻辑损失)有一些有趣的特性。
我们不仅要正确分类实例,还需要强大的选项
请检查以下示例,注意,对一个数据点进行弱分类和正确分类几乎与错误分类该点一样糟糕。
import numpy as np
def cross_entropy(pred_prob, target):
return -np.sum(np.log(pred_prob) * (target))
target = np.array([1,0,0])
pred_prob = np.array([1/3,1/3,1/3])
print('3 classes, even dist\t',cross_entropy(pred_prob, target))
pred_prob = np.array([0.3334,0.3333,0.3333])
print('3 classes, weakly right \t',cross_entropy(pred_prob, target))
pred_prob = np.array([0.3333,0.3333,0.3334])
print('3 classes, weakly wrong \t',cross_entropy(pred_prob, target))
我也有一个相关的问题here
在分类中选择不同的损失函数来近似0-1损失有什么影响
此外,正如在另一个答案中所讨论的,模型确信错误的一个主要原因是过度拟合。
我最近对 DNN 内部可能发生的事情有了一些有趣的想法。我认为本质上过度拟合的模型是在尝试学习一些“哈希函数”,而几乎不记得“有和目标”。
这样,很容易在训练数据中得到非常低的损失。而且这个“哈希”特定于某些训练示例,并且很可能过于自信并且在一个类上有非常强的选择。