辅助输出在使用深度网络的多输入多输出模型中的意义
Significance of auxiliary output in Multi-input and multi-output model using deep network
我指的是 keras documentation 构建一个网络,该网络采用嵌入形式的多个输入和一些其他重要功能。但是如果我们已经定义了主要损失,我不明白辅助损失的确切效果。
Here we insert the auxiliary loss, allowing the LSTM and Embedding layer to be trained smoothly even though the main loss will be much higher in the model.
如文档中所述,我假设它有助于在 Embedding/any 之前定义的其他层上顺利训练。我的问题是,如何确定辅助损失的权重。
We compile the model and assign a weight of 0.2 to the auxiliary loss. To specify different loss_weights or loss for each different output, you can use a list or a dictionary.
如果有人能解释如何决定损失权重以及 higher/lower 辅助损失权重值如何影响模型训练和预测,我将不胜感激。
这是一个非常有趣的问题。 辅助分类器 的想法并不像人们想象的那么罕见。它用于例如在 Inception 架构中。在这个答案中,我会尝试为您提供一些直觉,说明为什么这种调整实际上可能有助于训练:
它帮助梯度向下传递到下层:人们可能认为为辅助定义的损失分类器在概念上类似于主要损失——因为它们都衡量我们的模型有多好。因此,我们可以假设梯度 w.r.t。对于这两种损失,下层应该是相似的。 梯度消失现象仍然存在——尽管我们有像批量归一化 - 因此每一次额外的帮助都可能会提高您的训练性能。
它使低级特征更准确: 当我们训练我们的网络时——关于模型的低级特征有多好的信息是以及如何改变它们必须通过网络的所有其他层。这可能不仅会使梯度消失——而且由于在神经网络计算期间执行的操作可能非常复杂——这也可能使有关较低级别特征的信息变得无关紧要。这非常重要,尤其是在训练的早期阶段——当你的大部分特征相当随机时(由于随机开始)——并且你的权重被推向的方向——可能在语义上很奇怪。这个问题可能会被辅助输出克服,因为在这个设置中——你的低级特征从训练的最早部分开始就有意义。
这可能被认为是一种智能正则化:您正在对模型施加有意义的约束,这可能会防止过度拟合,尤其是在小型数据集上。
从我上面写的内容可以推断出一些关于如何设置辅助损失权重的提示:
- 在训练开始时更大很好。
- 它应该有助于通过您的网络传递信息,但也不应该干扰训练过程。所以根据经验,辅助输出越深 - 损失权重越大 - 恕我直言是合理的。
- 如果您的数据集不是很大或者训练时间不是很长 - 您可以尝试使用某种超参数优化来实际调整它。
- 您应该记住,您的主要减重是最重要的 - 即使 aux 输出可能有帮助 - 他们的减重应该相对小于主要减重。
我指的是 keras documentation 构建一个网络,该网络采用嵌入形式的多个输入和一些其他重要功能。但是如果我们已经定义了主要损失,我不明白辅助损失的确切效果。
Here we insert the auxiliary loss, allowing the LSTM and Embedding layer to be trained smoothly even though the main loss will be much higher in the model.
如文档中所述,我假设它有助于在 Embedding/any 之前定义的其他层上顺利训练。我的问题是,如何确定辅助损失的权重。
We compile the model and assign a weight of 0.2 to the auxiliary loss. To specify different loss_weights or loss for each different output, you can use a list or a dictionary.
如果有人能解释如何决定损失权重以及 higher/lower 辅助损失权重值如何影响模型训练和预测,我将不胜感激。
这是一个非常有趣的问题。 辅助分类器 的想法并不像人们想象的那么罕见。它用于例如在 Inception 架构中。在这个答案中,我会尝试为您提供一些直觉,说明为什么这种调整实际上可能有助于训练:
它帮助梯度向下传递到下层:人们可能认为为辅助定义的损失分类器在概念上类似于主要损失——因为它们都衡量我们的模型有多好。因此,我们可以假设梯度 w.r.t。对于这两种损失,下层应该是相似的。 梯度消失现象仍然存在——尽管我们有像批量归一化 - 因此每一次额外的帮助都可能会提高您的训练性能。
它使低级特征更准确: 当我们训练我们的网络时——关于模型的低级特征有多好的信息是以及如何改变它们必须通过网络的所有其他层。这可能不仅会使梯度消失——而且由于在神经网络计算期间执行的操作可能非常复杂——这也可能使有关较低级别特征的信息变得无关紧要。这非常重要,尤其是在训练的早期阶段——当你的大部分特征相当随机时(由于随机开始)——并且你的权重被推向的方向——可能在语义上很奇怪。这个问题可能会被辅助输出克服,因为在这个设置中——你的低级特征从训练的最早部分开始就有意义。
这可能被认为是一种智能正则化:您正在对模型施加有意义的约束,这可能会防止过度拟合,尤其是在小型数据集上。
从我上面写的内容可以推断出一些关于如何设置辅助损失权重的提示:
- 在训练开始时更大很好。
- 它应该有助于通过您的网络传递信息,但也不应该干扰训练过程。所以根据经验,辅助输出越深 - 损失权重越大 - 恕我直言是合理的。
- 如果您的数据集不是很大或者训练时间不是很长 - 您可以尝试使用某种超参数优化来实际调整它。
- 您应该记住,您的主要减重是最重要的 - 即使 aux 输出可能有帮助 - 他们的减重应该相对小于主要减重。