Closed nefujiangping closed 4 years ago
你的理解大致上是正确的, 但是这里的交替训练的采样粒度是instance而不是batch
嗯。阅读了一下源码,明白了。
我现在理解是这样的: 假设problem = ‘A|B|C’,训练时,每一个instance (example)会从ABC任务中采样一个,但是ABC三个任务的loss都会计算一下(没被采样到的任务使用的dummy labels),最后对于每一个instance,将没有被采样到的任务的loss置为0。针对一个任务,置为0的实现方式是乘了一个loss_multiplier(shape为(batch_size, ))。
如果我上面的理解是正确的,那么针对某一个任务(比如A),计算一个batch的平均loss时,除以这个batch中A被采样到的次数是否更合理一些呢?而不是除以batch_size。源码中这里使用的reduce_mean。
我在这里做了一些处理. 假设A在batch中被采样到k
次, 那么A的batch loss形状为[k]
. 这么处理的话就可以直接做mean, 并且计算效率也会更高.
原来是这样啊,学习了,谢谢你的回复。
非常感谢你的repo给我提供了一个学习multi-task的材料。 最近打算使用预训练的bert做文本分类和NER的多任务学习(两个任务输入不同)。我了解到Hard parameter sharing多任务学习有两种训练方式:
我想研究上述两个任务使用联合训练/交替训练时的效果。我看到你文档中写的不同输入时problem参数必须使用 | 。我有两个疑问: