草庐IT

多任务的loss优化

ytusdc 2023-04-22 原文

1、多任务学习优化面临的问题

多任务学习经常会出现跷跷板现象,即两个任务联合学习的时候,可能一个任务效果变好,另一个任务效果变差。究其本质,核心是训练过程中存在以下3个方面问题:

  1. 多任务梯度方向不一致:同一组参数,不同的任务更新方向不一致,导致模型参数出现震荡,任务之间出现负迁移的现象,一般出现在多个任务之间差异较大的场景;
  2. 多任务收敛速度不一致:不同的任务收敛速度不一样,有的任务比较简单收敛速度快,有的任务比较困难收敛速度慢,导致模型训练一定轮数后,有的任务已经overfitting,有的任务还是underfitting的状态;
  3. 多任务loss取值量级差异大:不同的任务loss取值范围差异大,模型被loss比较大的任务主导,这种情况在两个任务使用不同损失函数,或者拟合值的取值差异大等情况下最为常见。

2、多任务设计

比较容易想到的是,多目标loss设计要满足以下两点,避免被某个任务主导:

  1. 各任务loss量级接近,最好一致;(值域量级接近),loss量级可以使各任务loss除以对应的初始loss(交叉熵损失/L2)
  2. 各任务以相近的速度进行学习。(学习速度接近), 速度即相邻迭代次数对应的loss的比值,值越小则速度越高
  3. 各个任务间设置权重

2.3、多任务学习中各 loss 权重应该如何设计

AI上推荐 之 多任务loss优化(自适应权重篇)_翻滚的小@强的博客-CSDN博客

ShowMeAI知识社区深度学习中的multi task learning——optimization strategy部分 - 知乎

多任务学习优化(Optimization in Multi-task learning) - 知乎

深度学习的多个loss如何平衡? - 知乎

多任务学习MTL模型:多目标Loss优化策略 - 知乎

多任务模型融合如何平衡? - 简书

关于人工智能:多任务多目标CTR预估技术 - 乐趣区

PCGrad方法:深度学习的多个loss如何平衡? - 知乎

                        多任务学习——【ICLR 2020】PCGrad_小爷毛毛(卓寿杰)的博客-CSDN博客

任务不确定性:关于多任务学习中的均衡loss方法之一 - 算法之道

 作者自己的方法,没有论文,仅供参考:

极市开发者平台-计算机视觉算法开发落地平台

2.2、通过梯度优化提升多任务学习效果的方法

针对上述多任务学习优化过程中的问题,业内有一系列的工作进行解决。今天给大家介绍4篇通过梯度优化提升多任务学习效果的方法。

具体参考: 多任务学习中各loss权重应该如何设计呢? - 知乎

2.3 Using Uncertainty to Weigh Losses

Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics_cdknight_happy的博客-CSDN博客

Uncertainty Loss不确定损失_CharpYu的博客-CSDN博客

2.4、多任务分析解决

参考文章:

1、多目标模型的loss优化 - 知乎

2、论文阅读:Gradient Surgery for Multi-Task Learning - 知乎

有关多任务的loss优化的更多相关文章

  1. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  2. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  3. ruby-on-rails - Rake 任务仅调用一次时执行两次 - 2

    我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里

  4. ruby - 帮助使用 Ruby 中的 "Whenever"gem 来执行 cron 任务 - 2

    我以前没有使用过cron,所以我不能确定我这样做是对的。我想要自动化的任务似乎没有运行。我在终端中执行了这些步骤:sudogeminstall每当切换到应用程序目录无论何时。(这创建了文件schedule.rb)我将此代码添加到schedule.rb:every10.minutesdorunner"User.vote",environment=>"development"endevery:hourdorunner"Digest.rss",:environment=>"development"end我将此代码添加到deploy.rb:after"deploy:symlink","depl

  5. ruby - 在 rake 任务中运行 capybara - 2

    如何在Rake任务中运行Capybara功能?例如:访问('http://google.com')谢谢! 最佳答案 在任务中尝试这样的事情:require'capybara'require'capybara/dsl'Capybara.current_driver=:seleniumBrowser=Class.new{includeCapybara::DSL}page=Browser.new.pagepage.visit("http://www.google.com")puts(page.html)

  6. ruby - 在 Rakefile 中动态生成 Rake 测试任务(基于现有的测试文件) - 2

    我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n

  7. ruby-on-rails - 使用 Rspec 测试 rake 任务不接受参数 - 2

    根据thispostbyStephenHagemann,我正在尝试为我的一个rake任务编写Rspec测试.lib/tasks/retry.rake:namespace:retrydotask:message,[:message_id]=>[:environment]do|t,args|TextMessage.new.resend!(args[:message_id])endendspec/tasks/retry_spec.rb:require'rails_helper'require'rake'describe'retrynamespaceraketask'dodescribe're

  8. Ruby 缺少常量表达式优化? - 2

    我希望Ruby的解析器会进行这种微不足道的优化,但似乎并没有(谈到YARV实现,Ruby1.9.x、2.0.0):require'benchmark'deffib1a,b=0,1whileb由于这两种方法除了在第二种方法中使用预定义常量而不是常量表达式外是相同的,因此Ruby解释器似乎在每个循环中一次又一次地计算幂常数。是否有一些Material说明为什么Ruby根本不进行这种基本优化或只在某些特定情况下进行? 最佳答案 很抱歉给出了另一个答案,但我不想删除或编辑我之前的答案,因为它下面有有趣的讨论。正如JörgWMittag所说,

  9. ruby-on-rails - 在 gem 的 rake 任务中需要 gem - 2

    我正在使用jeweler为Rails3创建一个gem。该gem包含一个rake任务,它所做的其中一件事是删除数据库,所以我正在使用“database_cleaner”。我在gem的Gemfile中指定gem依赖项gem'database_cleaner'在Rakefile中Jeweler::Tasks.newdo|gem|...gem.add_dependency'database_cleaner'end然后在lib中我创建了文件my_gem.rb和tasks.rake。如下,my_gem.rb:moduleMyGemclassRailtie和tasks.rake:task:my_ta

  10. ruby-on-rails - 优化读取数据库和写入csv文件 - 2

    我正在尝试从数据库中读取大量单元格(超过100.000个)并将它们写入VPSUbuntu服务器上的csv文件。碰巧服务器没有足够的内存。我正在考虑一次读取5000行并将它们写入文件,然后再读取5000行,等等。我应该如何重构我当前的代码以使内存不会被完全消耗?这是我的代码:defwrite_rows(emails)File.open(file_path,"w+")do|f|f该函数由sidekiqworker调用:write_rows(user.emails)感谢您的帮助! 最佳答案 这里的问题是,当您调用emails.each时,

随机推荐