在整个网络中反向传播从早期层计算的损失有意义吗



假设您有一个具有两层a和B的神经网络。a获得网络输入。A和B是连续的(A的输出被馈送到B作为输入(。A和B输出预测(预测1和预测2(所述架构的图片直接在具有目标(target1(的第一层(a(之后计算损失(loss1(。您还可以计算第二层(loss2(及其自身目标(target2(之后的损失。

使用loss1和loss2的总和作为误差函数并在整个网络中反向传播这种损失有意义吗?如果是,为什么是";允许的";即使损失1与B无关,也要反向传播损失1到B?

这个问题与这个问题有关https://datascience.stackexchange.com/questions/37022/intuition-importance-of-intermediate-supervision-in-deep-learning但它并不能充分回答我的问题。在我的例子中,A和B是不相关的模块。在上述问题中,A和B是相同的。目标也是一样的。

(其他信息(我之所以这么问,是因为我试图理解LCNN(https://github.com/zhou13/lcnn)来自本文。LCNN由Hourglass主干组成,然后将其输入多任务学习器(创建loss1(,再将其输入线性矢量器模块(loss2(。loss1和loss2在这里相加,然后在这里通过整个网络反向传播。

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

是的,它是"允许的";这也是有道理的

从这个问题来看,我相信你已经理解了大部分内容,所以我不打算详细说明为什么这种多损失架构会有用。我认为让你困惑的主要部分是为什么"损失1";通过"反向传播";B">,答案是:它没有。事实上,loss1是使用以下公式计算的:

loss1 = SOME_FUNCTION(label, y_hat)

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

最新更新