Multi-task Learning的三个实用小知识

2020 年 4 月 2 日 极市平台

加入极市专业CV交流群,与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度 等名校名企视觉开发者互动交流!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。关注 极市平台 公众号 ,回复 加群,立刻申请入群~



本文译自Deep Multi-Task Learning – 3 Lessons Learned by Zohar Komarovsky
https://engineering.taboola.com/deep-multi-task-learning-3-lessons-learned/

在过去几年里,Multi-Task Learning (MTL)广泛用于解决多个Taboola(公司名)的业务问题。在这些业务问题中, 人们使用一组相同的特征以及深度学习模型来解决MTL相关问题。在这里简单分享一下我们做MTL时学习到的一些小知识。

小知识第一条:整合损失函数


MTL模型中的第一个挑战: 如何为multiple tasks定义一个统一的损失函数?

最简单的办法,我们可以整合不同tasks的loss function,然后简单求和。这种方法存在一些不足,比如当模型收敛时,有一些task的表现比较好,而另外一些task的表现却惨不忍睹。其背后的原因是不同的损失函数具有不同的尺度,某些损失函数的尺度较大,从而影响了尺度较小的损失函数发挥作用。这个问题的解决方案是把多任务损失函数“简单求和”替换为“加权求和”。加权可以使得每个损失函数的尺度一致,但也带来了新的问题:加权的超参难以确定。

幸运的是,有一篇论文《Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics》通过“不确定性(uncertainty)”来调整损失函数中的加权超参,使得每个任务中的损失函数具有相似的尺度。该算法的keras版本实现,详见 github:
https://github.com/yaringal/multi-task-learning-example/blob/master/multi-task-learning-example.ipynb

小知识第二条:调整学习率 learning rate


在神经网络的参数中,learning rate是一个非常重要的参数。在实践过程中,我们发现某一个learnig rate=0.001能够把任务A学习好,而另外一个learning rate=0.1能够把任务B学好。选择较大的learning rate会导致某个任务上出现dying relu;而较小的learning rate会使得某些任务上模型收敛速度过慢。怎么解决这个问题呢?对于不同的task,我们可以采用不同的learning rate。这听上去很复杂,其实非常简单。通常来说,训练一个神经网络的tensorflow代码如下:

  
  
    
optimizer = tf.train.AdamOptimizer(learning_rate).minimize(loss)

其中AdamOptimizer定义了梯度下降的方式,minimize则计算梯度并最小化损失函数。我们可以通过自定义一个minimize函数来对某个任务的变量设置合适的learning rate。

  
  
    
all_variables = shared_vars + a_vars + b_vars
all_gradients = tf.gradients(loss, all_variables)

shared_subnet_gradients = all_gradients[:len(shared_vars)]
a_gradients = all_gradients[len(shared_vars):len(shared_vars + a_vars)]
b_gradients = all_gradients[len(shared_vars + a_vars):]

shared_subnet_optimizer = tf.train.AdamOptimizer(shared_learning_rate)
a_optimizer = tf.train.AdamOptimizer(a_learning_rate)
b_optimizer = tf.train.AdamOptimizer(b_learning_rate)

train_shared_op = shared_subnet_optimizer.apply_gradients(zip(shared_subnet_gradients, shared_vars))
train_a_op = a_optimizer.apply_gradients(zip(a_gradients, a_vars))
train_b_op = b_optimizer.apply_gradients(zip(b_gradients, b_vars))

train_op = tf.group(train_shared_op, train_a_op, train_b_op)

值得一提的是,这样的trick在单任务的神经网络上效果也是很好的。

小知识第三条:任务A的评估作为其他任务的特征


当我们构建了一个MTL的神经网络时,该模型对于任务A的估计可以作为任务B的一个特征。在前向传播时,这个过程非常简单,因为模型对于A的估计就是一个tensor,可以简单的将这个tensor作为另一个任务的输入。但是后向传播时,存在着一些不同。因为我们不希望任务B的梯度传给任务A。幸运的是,Tensorflow提供了一个API tf.stop_gradient。当计算梯度时,可以将某些tensor看成是constant常数,而非变量,从而使得其值不受梯度影响。代码如下:

  
  
    
all_gradients = tf.gradients(loss, all_variables, stop_gradients=stop_tensors)

再次值得一提的是,这个trick不仅仅可以在MTL的任务中使用,在很多其他任务中也都发挥着作用。比如,当训练一个GAN模型时,我们不需要将梯度后向传播到对抗样本的生成过程中。

感谢阅读,希望本文对您有所帮助!谢谢!


-END -



*延伸阅读

极市独家福利
40万奖金的AI移动应用大赛,参赛就有奖,入围还有额外奖励


添加极市小助手微信(ID : cv-mart),备注:研究方向-姓名-学校/公司-城市(如:AI移动应用-小极-北大-深圳),即可申请加入AI移动应用极市技术交流群,更有每月大咖直播分享、真实项目需求对接、求职内推、算法竞赛、干货资讯汇总、行业技术交流一起来让思想之光照的更远吧~


△长按添加极市小助手


△长按关注极市平台,获取最新CV干货


觉得有用麻烦给个在看啦~  

登录查看更多
0

相关内容

多任务学习(MTL)是机器学习的一个子领域,可以同时解决多个学习任务,同时利用各个任务之间的共性和差异。与单独训练模型相比,这可以提高特定任务模型的学习效率和预测准确性。多任务学习是归纳传递的一种方法,它通过将相关任务的训练信号中包含的域信息用作归纳偏差来提高泛化能力。通过使用共享表示形式并行学习任务来实现,每个任务所学的知识可以帮助更好地学习其它任务。
【斯坦福大学】Gradient Surgery for Multi-Task Learning
专知会员服务
46+阅读 · 2020年1月23日
小样本学习(Few-shot Learning)综述
黑龙江大学自然语言处理实验室
28+阅读 · 2019年4月1日
关于深度多任务学习的 3 点经验
机器学习算法与Python学习
17+阅读 · 2019年2月18日
Hierarchical Imitation - Reinforcement Learning
CreateAMind
19+阅读 · 2018年5月25日
半监督多任务学习:Semisupervised Multitask Learning
我爱读PAMI
18+阅读 · 2018年4月29日
独家 | 两个月上手AI的学习经验(附学习资源)
THU数据派
3+阅读 · 2017年10月26日
Arxiv
13+阅读 · 2019年1月26日
Multi-task Deep Reinforcement Learning with PopArt
Arxiv
4+阅读 · 2018年9月12日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
7+阅读 · 2018年5月23日
Arxiv
19+阅读 · 2018年3月28日
VIP会员
相关VIP内容
【斯坦福大学】Gradient Surgery for Multi-Task Learning
专知会员服务
46+阅读 · 2020年1月23日
相关资讯
小样本学习(Few-shot Learning)综述
黑龙江大学自然语言处理实验室
28+阅读 · 2019年4月1日
关于深度多任务学习的 3 点经验
机器学习算法与Python学习
17+阅读 · 2019年2月18日
Hierarchical Imitation - Reinforcement Learning
CreateAMind
19+阅读 · 2018年5月25日
半监督多任务学习:Semisupervised Multitask Learning
我爱读PAMI
18+阅读 · 2018年4月29日
独家 | 两个月上手AI的学习经验(附学习资源)
THU数据派
3+阅读 · 2017年10月26日
相关论文
Top
微信扫码咨询专知VIP会员