【问题标题】:will zero loss affect back propagation update零损失会影响反向传播更新吗
【发布时间】:2021-10-18 03:38:52
【问题描述】:

假设我正在做一个标准的 DNN 分类任务,并且我正在使用交叉熵损失。损失计算后,我将掩码向量([0, 0, 0, 1, 1, ...] 应用于损失以将部分损失设置为零。
问题是 Tensorflow 将如何处理这种零损失?是否会参与反向传播?

【问题讨论】:

    标签: tensorflow machine-learning deep-learning backpropagation


    【解决方案1】:

    是的,tensorflow 将能够处理这个问题。导致掩蔽损失值的梯度将只是 0,因为它们不影响损失值。

    【讨论】:

    • 谢谢 Marc,tensorflow 将如何处理这个问题? tensorflow 会抛出损失被掩盖为零的样本吗?为什么?注意 loss=0 并不意味着梯度=0
    • Loss=0 并不意味着梯度=0,但如果变量对损失函数的结果没有影响,则梯度为零。如果你用零值掩盖你的损失值,那么它们会阻止模型变量对损失结果的任何影响,因此梯度为零。这与在神经网络中应用 dropout 相同。在那里你也通过乘以 0 来阻止一些值,并且没有梯度流过这个操作。
    • 感谢 Marc,我对您的解释有了一些了解(可能仍然遗漏了一些要点)。但是差别很小,在我的情况下,掩码操作适用于输入样本而不是图形变量(一个损失对应一个样本)。不同的样本是否共享相同的 TF 图(和相同的图变量)?如果是这样,TF 将如何阻止更新?
    • 我不确定我理解你的意思。您的意思是在一个批次中计算许多样本的损失,然后屏蔽掉一些计算的损失值,从而使某些样本的损失为零?如果是这种情况,那么您屏蔽掉损失值的这些样本将不会对您的梯度产生影响,并且梯度仅基于其他样本计算。一如既往地记住:所有对最终损失值没有贡献的东西都没有梯度。应用掩码基本上会从损失中“断开”一些权重/样本。
    • 感谢您的回复。你的理解是正确的。我现在完全明白你的意思了。但是 TF 仍然如何确保它将“断开”零损失样本?这是来自数学定义还是 TF 在后端有一些“神奇”的逻辑?
    【解决方案2】:

    在计算出实际损失后,对模型的损失应用掩码本质上意味着在反向传播过程中忽略了梯度的零元素。例如,在处理时间序列数据时,将掩码向量应用于损失是一种非常常见的方法,通常将其填充为具有相同的长度。在计算梯度时,这些额外的零值对您的模型没有用处,因此会被忽略。

    【讨论】:

    • 感谢AloneTogether。我没有处理深度学习时间序列的经验。你的意思是Tensorflow会以0损失抛出这些样本吗?但是 loss=0 并不意味着梯度=0,tensorflow 将如何设法抛出那些 0-loss 的样本呢?如果它实际上有一个非零梯度怎么办?
    猜你喜欢
    • 1970-01-01
    • 2022-10-30
    • 2019-11-14
    • 1970-01-01
    • 2020-09-10
    • 2021-10-23
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多