我想知道如果我有一个生成底部斑点的图层会被两个后续图层进一步消耗,这两个图层都将生成一些渐变以填充后传播阶段的bottom.diff。是否会将两个渐变相加以形成最终渐变?或者,只有其中一个可以生活?在我的理解中,Caffe图层需要将bottom.diff设置为全零,然后用一些计算的渐变填充它,对吗? memset会刷掉另一层已计算的渐变吗?谢谢!
答案 0 :(得分:1)
使用多个损失图层并非不同寻常,请参阅GoogLeNet例如:它有三个损失图层“推动”网络不同深度的渐变。
在caffe中,每个损失层都有一个相关联的loss_weight
:这个特定组件如何对网络的损失函数做出贡献。因此,如果您的网络有两个损失层Loss1
和Loss1
,那么网络的整体损失就是
Loss = loss_weight1*Loss1 + loss_weight2*Loss2
反向传播使用the chain rule通过网络中的所有图层传播Loss
(整体损失)的渐变。链规则将Loss
的推导分解为偏导数,即每层的导数,通过通过偏导数传播梯度来获得整体效果。也就是说,通过使用top.diff
和图层的backward()
函数来计算bottom.diff
,不仅要考虑图层的导数,还要考虑{{1}中表达的所有更高层的效果}。
<强> TL; DR 强>
您可以拥有多个损失图层。 Caffe(以及任何其他体面的深度学习框架)为您无缝地处理它。