Python 将从早期层计算的损耗反向传播到整个网络有意义吗?

Python 将从早期层计算的损耗反向传播到整个网络有意义吗?,python,tensorflow,neural-network,pytorch,Python,Tensorflow,Neural Network,Pytorch,假设你有一个有两层a和B的神经网络,a得到网络输入。A和B是连续的(A的输出作为输入馈入B)。A和B输出预测(预测1和预测2) 直接在第一层(a)和目标(target1)之后计算损耗(loss1)。您还可以计算第二层(loss2)后的损耗,该层有自己的目标(target2) 使用loss1和loss2之和作为错误函数并将此损失反向传播到整个网络是否有意义?如果是这样,为什么它“允许”通过B反向传播损失1,即使它与此无关 这个问题与这个问题有关 但它并没有充分回答我的问题。 在我的例子中,A和B是

假设你有一个有两层a和B的神经网络,a得到网络输入。A和B是连续的(A的输出作为输入馈入B)。A和B输出预测(预测1和预测2) 直接在第一层(a)和目标(target1)之后计算损耗(loss1)。您还可以计算第二层(loss2)后的损耗,该层有自己的目标(target2)

使用loss1和loss2之和作为错误函数并将此损失反向传播到整个网络是否有意义?如果是这样,为什么它“允许”通过B反向传播损失1,即使它与此无关

这个问题与这个问题有关 但它并没有充分回答我的问题。 在我的例子中,A和B是不相关的模块。在上述问题中,A和B是相同的。目标也将是相同的

(补充资料) 我问这个问题的原因是我试图从中理解LCNN()。 LCNN由沙漏主干组成,然后输入多任务学习器(creates),然后再输入线矢量器模块()。然后将损耗1和损耗2相加,然后在整个网络中反向传播

尽管我参观了几次深度学习讲座,但我不知道这是“允许的”或是有意义的。我希望使用两个
loss.backward()
,每个loss一个。或者Pytork计算图在这里做了一些神奇的事情?LCNN收敛并优于其他尝试解决相同任务的神经网络。

是的,它是“允许的”,也是有意义的。 从这个问题上,我相信您已经了解了其中的大部分内容,所以我不打算详细说明为什么这种多损耗架构会有用。我想让你困惑的主要部分是为什么“loss1”会通过“B”传播回来?答案是:它不会。事实上,loss1是使用以下公式计算的:

loss1 = SOME_FUNCTION(label, y_hat)

y_hat
(prediction1)只依赖于它之前的层。因此,该损失的梯度仅流经该段(A)之前的层,而非该段(B)之后的层。为了更好地理解这一点,您可以再次检查。另一方面,loss2通过整个网络(包括A部分)反向传播。当您使用累积损耗(
loss=loss1+loss2
)时,Pyrotch这样的框架将自动跟随每个预测标签的渐变到第一层。

谢谢!你的回答和解释pytorch autograd()的视频帮助我理解了它。对于那些想知道的人:当进行loss1和loss2的求和时,pytorch autograd会记住求和元素的来源。当调用loss上的backward函数时,它将遍历它的所有部分并单独跟随它并计算梯度。要记住的是,在计算损失时,你应该始终使用你的框架张量,因为它在后台做一些簿记。