【问题标题】:The loss effects in multitask learning framework多任务学习框架中的损失效应
【发布时间】:2020-05-03 21:25:48
【问题描述】:

我设计了一个多任务网络,其中第一层在两个输出层之间共享。通过研究多任务学习原理,我知道应该有一个权重标量参数,例如alpha,它可以抑制两个输出层输出的两个损失。我的问题是关于这个参数本身。它对模型的最终性能有影响吗?大概是。

这是我用于计算损失的代码 sn-p 的一部分:

...

mtl_loss = (alpha) * loss_1 + (1-alpha) * loss_2
mtl_loss.backward()

...

上面,loss_1 是 MSELoss,loss_2 是 CrossEntropyLoss。因此,选择alpha=0.9,我在训练步骤中得到以下损失值:

[2020-05-03 04:46:55,398 INFO] Step 50/150000; loss_1: 0.90 + loss_2: 1.48 = mtl_loss: 2.43 (RMSE: 2.03, F1score: 0.07); lr: 0.0000001;  29 docs/s;     28 sec
[2020-05-03 04:47:23,238 INFO] Step 100/150000; loss_1: 0.40 + loss_2: 1.27 = mtl_loss: 1.72 (RMSE: 1.38, F1score: 0.07); lr: 0.0000002;  29 docs/s;     56 sec
[2020-05-03 04:47:51,117 INFO] Step 150/150000; loss_1: 0.12 + loss_2: 1.19 = mtl_loss: 1.37 (RMSE: 0.81, F1score: 0.08); lr: 0.0000003;  29 docs/s;     84 sec
[2020-05-03 04:48:19,034 INFO] Step 200/150000; loss_1: 0.04 + loss_2: 1.10 = mtl_loss: 1.20 (RMSE: 0.55, F1score: 0.07); lr: 0.0000004;  29 docs/s;    112 sec
[2020-05-03 04:48:46,927 INFO] Step 250/150000; loss_1: 0.02 + loss_2: 0.96 = mtl_loss: 1.03 (RMSE: 0.46, F1score: 0.08); lr: 0.0000005;  29 docs/s;    140 sec
[2020-05-03 04:49:14,851 INFO] Step 300/150000; loss_1: 0.02 + loss_2: 0.99 = mtl_loss: 1.05 (RMSE: 0.43, F1score: 0.08); lr: 0.0000006;  29 docs/s;    167 sec
[2020-05-03 04:49:42,793 INFO] Step 350/150000; loss_1: 0.02 + loss_2: 0.97 = mtl_loss: 1.04 (RMSE: 0.43, F1score: 0.08); lr: 0.0000007;  29 docs/s;    195 sec
[2020-05-03 04:50:10,821 INFO] Step 400/150000; loss_1: 0.01 + loss_2: 0.94 = mtl_loss: 1.00 (RMSE: 0.41, F1score: 0.08); lr: 0.0000008;  29 docs/s;    223 sec
[2020-05-03 04:50:38,943 INFO] Step 450/150000; loss_1: 0.01 + loss_2: 0.86 = mtl_loss: 0.92 (RMSE: 0.40, F1score: 0.08); lr: 0.0000009;  29 docs/s;    252 sec

正如训练损失所显示的,我使用 MSELoss 的第一个网络似乎收敛速度非常快,而第二个网络尚未收敛。 RMSE 和 F1score 是我用来分别跟踪第一个和第二个网络进度的两个指标。

我知道选择最佳 alpha 有点实验性,但是否有提示可以使选择它的过程更容易?具体来说,我希望网络相互训练,而不是像上面那样,第一个网络收敛速度超级快。 alpha 参数可以帮助控制这个吗?

【问题讨论】:

    标签: deep-learning neural-network pytorch multitasking


    【解决方案1】:

    有了这个 alpha,loss_1 对结果的贡献更大,并且由于反向传播与误差成比例地更新权重,它改进得更快。尝试使用更平衡的 alpha 来平衡两个任务的性能。

    您也可以在训练期间尝试更改 alpha。

    【讨论】:

    • 感谢您的回答。我的第一个任务是我最关心的。不过,它比第二个任务相对容易。从一个大的 alpha(比如 0.9)开始,然后在 n 个训练步骤后尝试降低它是否有助于改进 task-1?我的直觉是,更简单的任务将有助于改进更难的任务(MTL 原则),然后使用更简单的任务改进更难的任务直到某个点,然后它可以帮助更简单的任务得到改进。这个 alpha 参数似乎对于两个任务相互学习最多的调整很有用。
    • 抱歉耽搁了。我建议将大 alpha 放在最困难的任务上,如果他的简单任务改进得更快,它不会对 NN 的更改做出贡献,并且几乎就像只训练第二个任务。
    猜你喜欢
    • 2012-01-31
    • 2019-04-20
    • 2020-09-19
    • 2018-06-21
    • 2021-01-23
    • 2021-11-02
    • 2020-11-09
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多