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

Rac*_*ava 5 python-3.x deep-learning tensorflow

我想在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()
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎不是正确的方法。我有两个损失函数,我想学习权重以在同一优化器中以不同的学习率将两个损失减至最小。我基本上希望渐变优化器进行如下更新:

权重更新=权重-学习率_1 * d(损失1)/ dw-学习率_2 * d(损失2)/ dw

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

小智 0

迟到但可能对其他人有帮助:您所展示的解决方案将是完全正确的。

如果您看一下:这篇文章和: 这个堆栈溢出答案

如果您使用 GradientDescentOptimizer 之类的东西,这些操作将非常相似。这是因为获取梯度是一个线性运算,并且求和的梯度与梯度之和相同。

但是,ADAM 做了一些特别的事情:无论损失的规模有多大,它都会缩放梯度,以便它们始终与您的学习率保持一致。如果你将损失乘以 1000,它不会影响 ADAM,因为它的变化会被标准化掉。

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

您还可以在梯度计算和更新中拆分更新,并将学习率直接应用于梯度的不同部分。 看这里