Эффекты потерь в рамках многозадачного обучения - PullRequest
0 голосов
/ 04 мая 2020

Я спроектировал многозадачную сеть, в которой первые слои распределяются между двумя выходными слоями. Изучив принципы многозадачного обучения, я узнал, что должен быть скалярный весовой параметр, такой как alpha, который демпфирует две потери, выводимые из двух выходных слоев. Мой вопрос касается самого этого параметра. Влияет ли это на конечную производительность модели? вероятно, да.

Это часть моего фрагмента кода для расчета потерь:

...

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 помочь контролировать это?

1 Ответ

1 голос
/ 04 мая 2020

С помощью этой альфа потеря_1 вносит больший вклад в результат, и из-за обновлений обратного распространения весит пропорционально ошибке, которая улучшается быстрее. Попробуйте использовать более сбалансированную альфу, чтобы сбалансировать производительность в обеих задачах.

Вы также можете попробовать изменить альфу во время тренировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...