【问题标题】:When we do supervised classification with NN, why do we train for cross-entropy and not for classification error?当我们用 NN 进行监督分类时,为什么我们训练交叉熵而不是分类错误?
【发布时间】:2023-04-11 08:54:01
【问题描述】:

标准的监督分类设置:我们有一堆样本,每个样本都带有N 标签中的正确标签。我们构建一个具有 N 个输出的 NN,用 softmax 将它们转换为概率,损失是每个 NN 输出和相应的真实标签之间的平均值 cross-entropy,表示为 1-hot 向量,真实标签中带有 10 其他地方。然后我们通过遵循它的梯度来优化这个损失。分类误差仅用于衡量我们的模型质量。

但是,我知道在执行policy gradient 时我们可以使用likelihood ratio trick,而我们不再需要使用cross-entropy!我们的损失只是tf.gather与正确标签对应的NN输出。例如。 this solution of OpenAI gym CartPole

为什么我们不能在进行监督学习时使用相同的技巧?我在想我们使用cross-entropy 的原因是因为它是可微的,但显然tf.gatherdifferentiable as well

我的意思是 - 如果我们根据分类错误来衡量自己,并且我们可以优化分类错误,因为它是可微的,那么优化分类错误而不是这个奇怪的 cross-entropy 代理不是更好吗?

【问题讨论】:

    标签: tensorflow neural-network gradient-descent reinforcement-learning


    【解决方案1】:

    策略梯度使用交叉熵(或 KL 散度,正如 Ishant 指出的那样)。对于监督学习,tf.gather 实际上只是实现技巧,仅此而已。另一方面,对于 RL,这是必须的,因为如果您执行其他操作,您不知道“会发生什么”。因此,您最终会得到梯度的高方差估计量,如果可能的话,您希望不惜一切代价避免这种情况。

    回到监督学习

    CE(p||q) = - SUM_i q_i log p_i
    

    假设 q_i 是一个热编码,1 在第 k 个位置,那么

    CE(p||q) = - q_k log p_k = - log p_k
    

    因此,如果您愿意,可以将其实现为 tf.gather,这根本没关系。交叉熵更通用,因为它处理更复杂的目标。特别是,在 TF 中,你有 sparse 交叉熵,它完全符合你的描述 - 利用一种热编码,就是这样。数学上没有区别,计算上的区别很小,而且有些函数完全符合您的要求。

    【讨论】:

    • 谢谢!没有得到关于避免高方差的部分 - 正如你所展示的,我们实际上在监督和 rl 设置中都对单热向量使用了交叉熵。你会怎么避免呢?
    • 问题是在 RL 的情况下,没有 one-hot,那里有“真实”分布,但我们仍然只看所采取的行动 - 这是一个蒙特卡罗估计,它有很高的方差。如果我们知道所有概率,我们可以通过计算适当的交叉熵来避免这种情况,但这是不可能的(除非可以在采取行动之前将环境“重置”到状态,就像在树搜索方法中一样)。
    【解决方案2】:

    最小化交叉熵损失可以最小化预测分布和目标分布之间的 KL 散度。这确实与最大化预测分布的可能性相同。

    【讨论】:

    • 好的,但目标发行版并不是真正的发行版!它非常退化并且在一个单元格中只有1 - 为什么我们不能在我们预测的分布中只使用相应单元格的gather??
    • 不是真的,1>,在 final_output 分布上应用argmax 之后。对于所有的分类和回归网络,总是对目标分布进行建模。
    猜你喜欢
    • 2017-12-24
    • 2013-01-05
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2020-01-17
    • 2017-03-01
    • 2021-07-17
    • 2020-01-03
    相关资源
    最近更新 更多