怎么给网站做第三方app杭州设计公司老总被点火
web/
2025/9/28 19:27:56/
文章来源:
怎么给网站做第三方app,杭州设计公司老总被点火,关于做公司网站,在国外做外国的网站合法吗本文译自Deep Multi-Task Learning – 3 Lessons Learned by Zohar Komarovsky在过去几年里#xff0c;Multi-Task Learning (MTL)广泛用于解决多个Taboola#xff08;公司名#xff09;的业务问题。在这些业务问题中#xff0c; 人们使用一组相同的特征以及深度学习模型来…本文译自Deep Multi-Task Learning – 3 Lessons Learned by Zohar Komarovsky在过去几年里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。小知识第二条调整学习率 learning rate在神经网络的参数中learning rate是一个非常重要的参数。在实践过程中我们发现某一个learnig rate0.001能够把任务A学习好而另外一个learning rate0.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_gradientsstop_tensors)再次值得一提的是这个trick不仅仅可以在MTL的任务中使用在很多其他任务中也都发挥着作用。比如当训练一个GAN模型时我们不需要将梯度后向传播到对抗样本的生成过程中。感谢阅读希望本文对您有所帮助 谢谢如果觉得文章对您有帮助可以关注本人的微信公众号机器学习小知识
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83490.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!