median-research-group / LibMTL

A PyTorch Library for Multi-Task Learning
MIT License
1.94k stars 181 forks source link

大佬,您好!请问,非同源数据,不同任务的训练样本量相差很大,怎么应用优化器的梯度策略? #44

Closed yushengjiexy closed 1 year ago

yushengjiexy commented 1 year ago

问题1: 比如,有task_a和task_b,他们的训练样本是非同源的,task_a的训练样本量是100000,task_b的训练样本量是1000。 如果我用一个dataloader去取数据,同一个batch里可能都是task_a的训练样本,一个叠代只训练了task_a这个任务,无法做多任务的梯度策略。 ———————————————————————————————————————————————————— 问题2: 同样是多任务非同源训练数据不均衡,如果是task_a、task_b、task_c三任务的话,还可能一个batch里只有task_a和task_c的样本,没有task_b的样本,如果是这样的话,又要怎么去应用梯度策略?

Baijiong-Lin commented 1 year ago

可以每个task一个dataloader

yushengjiexy commented 1 year ago

然后每个任务不同batch,比如batch_a=100,batch_b=1,计算出task_a的平均loss_a,task_b的平均loss_b,再做策略吗?

Baijiong-Lin commented 1 year ago

没试过batch size不一样的,但理论上应该也可以

yushengjiexy commented 1 year ago

可以每个task一个dataloader

大佬,那你这样具体是怎么做的,能展开说说吗

yushengjiexy commented 1 year ago

没试过batch size不一样的,但理论上应该也可以

我说的不同任务batchsize不一样的方法,好像也有问题,因为我gpu有限,batch设置不了batch_1+batch_b=101这么大

Baijiong-Lin commented 1 year ago

应该可以每个task用不同的batch size,先load完的那些task的dataloader就重新load,这相当于最简单的数据平衡的策略

yushengjiexy commented 1 year ago

如果不过采样可以吗?这么会人为拖慢我的训练速度,我希望训练够快

应该可以每个task用不同的batch size,先load完的那些task的dataloader就重新load,这相当于最简单的数据平衡的策略

Baijiong-Lin commented 1 year ago

我没想到其他方法

yushengjiexy commented 1 year ago

好吧,谢谢大佬