具有不同学习率的张量流中的多任务学习

时间:2017-10-05 19:47:39

标签: python-3.x tensorflow deep-learning

我想在tensorflow中实现一个多任务学习框架。我目前正在实现类似这样的东西(伪代码)

define_reg_cost()
define_clas_cost()

reg_optimizer.(reg_learning_rate).min(reg_cost)
clas_optimizer.(clas_learning_rate).min(clas_cost)

for num_iterations:
    reg_optimizer.run()
    clas_optimizer.run()

这对我来说似乎不是正确的方法。 我有两个损失函数,我想学习权重,以便在同一优化器中以不同的学习速率最小化损失。 我基本上希望渐变优化器能够做这样的更新:

  

weight_updated = weight - learning_rate_1 * d(loss1)/ dw - learning_rate_2 * d(loss2)/ dw

有关如何执行此操作的任何提示(可能使用optimizer.apply_gradients())?

1 个答案:

答案 0 :(得分:0)

后但对其他人可能有帮助: 您显示的解决方案将是正确的解决方案。

如果您查看以下内容:this post和: this stack overflow answer

如果您使用的是GradientDescentOptimizer之类的东西,这些 操作非常相似。那是因为采取梯度是 线性运算,总和的梯度与的总和相同 渐变。

但是,ADAM做一些特殊的事情:不管您的规模如何 损耗,它会缩放渐变,以使渐变始终处于 您的学习率。如果您将损失乘以1000,就不会 影响ADAM,因为更改将被归一化。

使用两个不同的优化器有很多优点。

您还可以在渐变计算中拆分更新,然后将lerningrate直接应用到渐变的不同部分。 see here