tensorflow 状态的初学者 colab 示例:
注意:可以将其
tf.nn.softmax
作为网络最后一层的激活函数烘焙。虽然这可以使模型输出更直接可解释,但不鼓励这种方法,因为在使用 softmax 输出时,不可能为所有模型提供精确且数值稳定的损失计算。
那么,我的问题是,为什么?不可能提供精确且数值稳定的损失计算是什么意思?
tensorflow 状态的初学者 colab 示例:
注意:可以将其
tf.nn.softmax
作为网络最后一层的激活函数烘焙。虽然这可以使模型输出更直接可解释,但不鼓励这种方法,因为在使用 softmax 输出时,不可能为所有模型提供精确且数值稳定的损失计算。
那么,我的问题是,为什么?不可能提供精确且数值稳定的损失计算是什么意思?
这也是我偶然发现的一个问题,感谢ted的解释,很有帮助,我会尽量详细说明。我们还是用 DeepMind 的 Simon Osindero 的幻灯片: 左边我们看的灰色块只是一个交叉熵操作,输入(一个向量)可以是前一层的 softmax 输出(不是中性网络的输入),并且(标量)是交叉熵的结果. 为了将梯度传播回去,我们需要计算梯度,即对于每个元素. 正如我们所知,softmax 函数将 logits 缩放到 [0,1] 范围内,因此如果在一个训练步骤中,中性网络变得超级自信并预测其中一个概率为 0 那么我们在计算中有一个数值问题.
而在另一种情况下,我们采用 logits 并一次计算 softmax 和交叉熵(XentLogits 函数),我们没有这个问题。因为 XentLogits 的导数是,更详细的推导可以在这里找到。