我正在引用keras documentation来构建一个网络,它以嵌入和其他一些重要功能的形式接受多个输入。但是,如果我们已经定义了主要损失,我就无法理解辅助损失的确切影响。
这里我们插入辅助损耗,即使模型中的主要损失会更高,也可以平滑地训练LSTM和嵌入层。
如文档中所述,我假设它有助于在嵌入/之前定义的任何其他层上顺利训练。我的问题是,如何确定辅助损失的权重。
我们编译模型并为辅助损失分配0.2的权重。要为每个不同的输出指定不同的loss_weights或loss,可以使用列表或字典。
如果有人可以解释如何确定损失权重以及辅助损失权重的更高/更低值如何影响模型训练和预测,我将非常感激。
答案 0 :(得分:4)
这是一个非常有趣的问题。 辅助分类器的想法并不像人们想象的那么罕见。它用于例如在Inception架构中。在这个答案中,我会尝试为您提供一些关于为什么这个调整可能真正有助于培训的直觉:
帮助渐变传递到更低层:可能会认为为辅助分类器定义的损失在概念上类似于主要损失 - 因为他们都衡量我们的模型有多好。由于这个原因,我们可以假设梯度为w.r.t.对于这两种损失,下层应该类似。 消失梯度现象仍然存在 - 尽管我们有类似于批量标准化 - 因此每增加一个帮助都可以提高您的培训效果。
在我们培训网络时,它会使低级功能更加准确 - 有关模型的低级功能有多好以及如何更改它们的信息必须浏览网络的所有其他层。这可能不仅使梯度消失 - 而且由于在神经网络计算期间执行的操作可能真的很复杂 - 这也可能使得关于您的较低级别特征的信息无关紧要。这一点非常重要,特别是在训练的早期阶段 - 当你的大多数特征相当随机(由于随机开始) - 以及你的重量被推动的方向 - 可能在语义上是奇怪的。 辅助输出可能会克服此问题,因为在此设置中 - 您的较低级别功能从训练的最早阶段开始就具有意义。
这可能会被视为智能正则化:您正在对模型施加有意义的约束,这可能会阻止过度拟合,尤其是在小型数据集上。
从我上面写的内容可以推断出一些关于如何设置辅助减重的提示: