个人感觉这是一个非常有意思的问题。之前在训练多任务神经网络的时候遇到过类似的问题,在我的问题中,损失函数有两项贡献,
这两项 f 和 g,分别对应着分类损失和分割损失。随着学习的进行,这两个损失函数减小的速度很不一致。往往是一项减小的非常快,另一项减小的超级慢。
看到这个问题的时候,我回想,应该可以对不同的损失项使用不同的学习率,即 Adaptive learning rate。其实 Adaptive Learning Rate 不是新东西,在 Adagrad, RMSProp, Adam 等等优化算法中,都有这个适配学习率的贡献。但那里的适配学习率,是对高维参数空间
不同的方向,使用不同的学习率。
对更新快的方向,使用小一点的学习率,对更新慢的方向,使用大一点的学习率。
比如在 Adagrad 算法中,适配学习率的梯度下降算法公式为,
其中
是学习率,
是损失函数对网络参数的梯度,普通的 SGD 应该是
。这里将学习率除以一个适配的常数
,其中