为什么我们使用 softmax 而不是没有激活函数?

人工智能 神经网络 激活函数 软最大 多类分类
2021-11-02 03:07:14

为什么我们在最后一层使用 softmax 激活函数?

认为i是具有最高值的索引(在我们根本不使用 softmax 的情况下)。如果我们使用 softmax 并取ith 值,它将是最高值,因为e是一个递增函数,所以这就是我问这个问题的原因。argmax(vec)argmax(softmax(vec))会给我们相同的价值。

1个回答

简短回答:通常,softmax如果不需要概率,则不需要这样做。并且使用原始 logits 会导致在数值上更稳定的代码。

长答案:首先,softmax层的输入称为logits

在评估期间,如果您只对概率最高的类别感兴趣,那么您可以argmax(vec)在 logits 上进行。如果你想要类的概率分布,那么你需要取幂并归一化为 1 - 这就是这样softmax做的。

在训练期间,您需要有一个损失函数来优化。您的训练数据包含真实的类,因此您有目标概率分布pi,在您的真实班级为 1,在所有其他班级为 0。您训练网络以产生概率分布qi作为输出。它应该尽可能接近目标分布pi尽可能。两个概率分布之间的“距离”度量称为交叉熵

H=pilogqi
如您所见,您只需要输出概率的日志 - 因此日志足以计算损失。例如,可以配置keras标准CategoricalCrossentropy损失from_logits来计算它,它提到:

使用 from_logits=True 在数值上更稳定。