LeCun 建议不要训练神经网络通过输出 sigmoid 层输出 1 或 0(在论文“Efficient BackProp” - LeCun 等人,1998 年,第 4.5 节):
Choose target values at the point of the maximum second derivative on the sigmoid so as to avoid saturating the output units.
此处( https://machinelearningmastery.com/best-advice-for-configuring-backpropagation-for-deep-learning-neural-networks/ )建议使用值 0.9 和 0.1。
这提出了两个问题:
- 这可以使用 keras 实现吗? keras 的两个交叉熵函数(
BinaryCrossentropy
和CategoricalCrossentropy
)似乎都期望目标值为 1 或 0。 - 假设我有两个以上的类,预期值的总和将大于 1(即不是概率分布)。那是问题吗?我认为不会,只要您知道如何解释这些值。澄清一下,在这种情况下我宁愿不使用 softmax,而是坚持使用 sigmoid。通过坚持使用 sigmoid,我认为将每个类的输出解释为置信度度量会更容易,这与 Softmax 不同,在 Softmax 中,求幂会使这变得更加困难。所有类别的概率之和不等于 1,这一事实不应阻止我将每个类别的输出解释为概率/置信度度量 IIUC(我意识到这在数学意义上并不严格正确) ,但直觉上这对我来说是有意义的,如果我错了,请指出我的错误)。
最佳答案
keras 的两个交叉熵函数(BinaryCrossentropy 和 CategoricalCrossentropy)似乎都期望目标值为 1 或 0。
文档在撒谎;交叉熵是概率分布之间差异的度量——任何两个概率分布p
和q
。实际上没有必要要求他们中的任何一个都是独热的。无论如何,BinaryCrossentropy
和 CategoricalCrossentropy
都有一个 label_smoothing
参数,您可以将其用于此目的。 k
的 label_smoothing
将修改您的目标,如下所示:
smooth_targets = (1 - k)*hard_targets + k*uniform_targets
例如,在二进制情况下,0.1 的标签平滑将导致目标为 (0.05, 0,95) 而不是 (0, 1)。
我不太明白问题的第二部分,但这个想法可以推广到多个类。例如。对于 10 个类,对于真正的类,您可以使用 0.91 而不是 1,对于其他类,可以使用 0.01 而不是 0。总和仍然为 1。
关于keras - 如何在 keras 中计算非 0 或 1 的目标值的交叉熵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76336103/