【论文阅读】Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

2023-11-06

1.背景

目前,很多应用中都因为用了多任务取得了不错的效果,那么如何将这些任务的loss有机组合在一起?

一种简答粗暴方法就是手动调节多任务之间的loss的相对权重,然后加和,如下:

这种方式把权重作为超参调试的方式,往往耗时耗力。

本文参考[1]就如何动态设置多任务(分类与回归)之间的loss的相对权重做简单介绍。

2.解决方案

在贝叶斯建模中,认为模型有一些不确定性(随机变量),可能是先验问题导致的,也有可能是后验问题导致的,大体可将其分为两种,如下:

  • 认知不确定性:数据不足导致的模型学习不足的不确定性,比如:小学生去参加高考,很多知识都没学过,自然考不好。
  • 偶然不确定性:噪声导致的不确定性

偶然不确定性又分为:

  • 数据依赖不确定性(异方差):输入数据的不确定性,导致输出不确定,比如:小明学习使用的教材部分有问题,导致小明考试考不到高分。
  • 任务依赖不确定性(同方差):不同任务自身的学习能力的不同,导致学习结果不确定性。比如:小明为了提高成绩,一方面努力学习知识概念,另一方面猛做练习题,他们都有各自的优势,但是也都有一定的局限性。

在这里插入图片描述

其中,同方差 指的是假定数据输入一定的情况下,真实的分布与任务的输出之间有一个恒定的方差。

解决方案为什么考虑的用贝叶斯NN?贝叶斯建模中的不确定性能够表示不同任务之间的难易程度,能够很好的为任务的输出f,真实分布y以及方差δ之间建模。

动态loss权重就是考虑在同方差条件下,接下来我们如何建模展开。

3 建模

假设输入为 X X X,参数矩阵为 W W W,输出为 f W ( x ) f^W(x) fW(x),真实分布为 y y y

3.1 回归任务

对于回归任务,在给定其输出 f W ( x ) f^W(x) fW(x)的情况下 y y y的概率为高斯似然

(对于高斯似然, σ σ σ为模型的观测噪声参数,表示输出数据中的噪声量)

f W ( x ) f^W(x) fW(x) y y y代入上述高斯函数中,可得:
p ( y ∣ f W ( x ) ) = 1 2 π σ e − ( y − f W ( x ) ) 2 2 σ 2 p(y|f^W(x))=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(y-f^W(x))^2}{2\sigma^2}} p(yfW(x))=2π σ1e2σ2(yfW(x))2

两边求对数,可得其对数似然函数,如下:

l o g p ( y ∣ f W ( x ) ) ∝ − ( y − f W ( x ) ) 2 2 σ 2 − l o g σ logp(y|f^W(x))\propto-\frac{(y-f^W(x))^2}{2\sigma^2}-log\sigma logp(yfW(x))2σ2(yfW(x))2logσ

3.2 分类任务

对于分类任务,为了建立起与 σ σ σ的关系,其概率描述为softmax的一种更为普遍的表示形式Boltzmann分布,也叫吉布斯分布:

系数 σ σ σ可以是设定的,也可以是通过学习得到的,决定离散分布的平坦程度。该值和分布的不确定性(熵)有关。

同理,将 f W ( x ) f^W(x) fW(x) y y y代入上述softmax函数中,可得对数似然函数,如下:

其中,c为某一类别

3.3 多任务

对于回归与分类任务混合的多任务似然,假定 y 1 y_1 y1、…、 y k y_k yk分别为回归任务和分类任务的真实输出,其似然为:

那么,假设多任务的loss记作 L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2),那么则有:
= L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2)
= − l o g N ( y 1 ; f W ( x ) , σ 1 2 ) ⋅ s o f t m a x ( y 2 = c ; f W ( x ) , σ 2 ) -logN(y_1;f^W(x),\sigma ^2_1)\cdot softmax(y_2=c;f^W(x),\sigma _2) logN(y1;fW(x),σ12)softmax(y2=c;fW(x),σ2)
= 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 − l o g p ( y 2 = c ∣ f W ( x ) , σ 2 ) \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 + log\sigma_1 - logp(y_2=c|f^W(x),\sigma_2) 2σ121 y1fW(x) 2+logσ1logp(y2=cfW(x),σ2)
= 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 − 1 σ 2 2 f c ′ W ( x ) + l o g ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 + log\sigma_1 - \frac{1}{\sigma_2^2}f_{c{'}}^W(x)+log\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}} 2σ121 y1fW(x) 2+logσ1σ221fcW(x)+logceσ221fcW(x)
= 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 + 1 σ 2 2 l o g ∑ c ′ e f c ′ W ( x ) − 1 σ 2 2 f c ′ W ( x ) + l o g ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) − 1 σ 2 2 l o g ∑ c ′ e f c ′ W ( x ) \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 + log\sigma_1 + \frac{1}{\sigma ^2_2}log\sum_{c{'}}e^{f_{c{'}}^W(x)} - \frac{1}{\sigma_2^2}f_{c{'}}^W(x)+ log\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}}- \frac{1}{\sigma ^2_2}log\sum_{c{'}}e^{f_{c{'}}^W(x)} 2σ121 y1fW(x) 2+logσ1+σ221logcefcW(x)σ221fcW(x)+logceσ221fcW(x)σ221logcefcW(x)
= 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 − 1 σ 2 2 l o g   s o f t m a x ( y 2 , f W ( x ) ) + l o g ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) − 1 σ 2 2 l o g ∑ c ′ e f c ′ W ( x ) \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 +log\sigma_1 - \frac{1}{\sigma_2^2}log \ softmax(y_2,f^W(x))+ log\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}}- \frac{1}{\sigma ^2_2}log\sum_{c{'}}e^{f_{c{'}}^W(x)} 2σ121 y1fW(x) 2+logσ1σ221log softmax(y2,fW(x))+logceσ221fcW(x)σ221logcefcW(x)
= 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 − 1 σ 2 2 l o g   s o f t m a x ( y 2 , f W ( x ) ) + l o g ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) ( ∑ c ′ e f c ′ W ( x ) ) 1 σ 2 2 \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 +log\sigma_1 - \frac{1}{\sigma_2^2}log \ softmax(y_2,f^W(x)) + log\frac{\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}}}{(\sum_{c{'}}e^{f_{c{'}}^W(x)})^\frac{1}{\sigma_2^2}} 2σ121 y1fW(x) 2+logσ1σ221log softmax(y2,fW(x))+log(cefcW(x))σ221ceσ221fcW(x)

由于当 σ 2 \sigma_2 σ2->1时,有 1 σ 2 ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) \frac{1}{\sigma_2}\sum_{c{'}}e^{\frac{1}{\sigma^2_2} {f_{c{'}}^W(x)}} σ21ceσ221fcW(x) ( ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) ) 1 σ 2 (\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}})^\frac{1}{\sigma_2} (ceσ221fcW(x))σ21
所以上式最后一个 l o g ∑ c ′ e 1 σ 2 2 f c ′ W ( x ) ( ∑ c ′ e f c ′ W ( x ) ) 1 σ 2 2 ≈ l o g σ 2 log\frac{\sum_{c{'}}e^{\frac{1}{\sigma^2_2}{f_{c{'}}^W(x)}}}{(\sum_{c{'}}e^{f_{c{'}}^W(x)})^\frac{1}{\sigma_2^2}} \approx log\sigma_2 log(cefcW(x))σ221ceσ221fcW(x)logσ2
则有: L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2) 1 2 σ 1 2 ∥ y 1 − f W ( x ) ∥ 2 + l o g σ 1 − 1 σ 2 2 l o g   s o f t m a x ( y 2 , f W ( x ) ) + l o g σ 2 \frac{1}{2\sigma ^2_1}\left \| y_1 - f^W(x) \right \|^2 +log\sigma_1 - \frac{1}{\sigma_2^2}log \ softmax(y_2,f^W(x)) + log\sigma_2 2σ121 y1fW(x) 2+logσ1σ221log softmax(y2,fW(x))+logσ2

L 1 ( W ) = ∥ y 1 − f W ( x ) ∥ 2 L_1(W)=\left \| y_1 - f^W(x) \right \|^2 L1(W)= y1fW(x) 2为回归问题的loss, L 2 ( W ) = − l o g ( s o f t m a x ( y 2 , f W ( x ) ) ) L_2(W)=-log(softmax(y_2,f^W(x))) L2(W)=log(softmax(y2,fW(x)))为分类问题的loss,则有多任务loss为

L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2) 1 2 σ 1 2 L 1 ( W ) + l o g σ 1 + 1 σ 2 2 L 2 ( W ) + l o g σ 2 \frac{1}{2\sigma ^2_1}L_1(W)+log\sigma_1 + \frac{1}{\sigma_2^2}L_2(W)+ log\sigma_2 2σ121L1(W)+logσ1+σ221L2(W)+logσ2

4.代码实现

实际实现中,为了防止分母出现0,提升数值的稳定性以及简化计算,回归loss的系数去掉了 1 2 \frac{1}{2} 21,如下:

L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2) 1 σ 1 2 L 1 ( W ) + 1 σ 2 2 L 2 ( W ) + 2 l o g σ 1 + 2 l o g σ 2 \frac{1}{\sigma ^2_1}L_1(W) + \frac{1}{\sigma_2^2}L_2(W)+2log\sigma_1+ 2log\sigma_2 σ121L1(W)+σ221L2(W)+2logσ1+2logσ2

并且,一般令 s = l o g σ 2 s=log\sigma^2 s=logσ2,上式可以化简为:

L ( W , σ 1 , σ 2 ) L(W,\sigma_1 ,\sigma_2 ) L(W,σ1,σ2) e − s 1 L 1 ( W ) + e − s 2 L 2 ( W ) + s 1 + s 2 e^{-s1}L_1(W)+ e^{-s2}L_2(W)+s1+s2 es1L1(W)+es2L2(W)+s1+s2

pytorch代码实现如下:

class DynamicWeightedLoss(nn.Module):
    def __init__(self, num=2):
        super(DynamicWeightedLoss, self).__init__()
        params = torch.ones(num, requires_grad=True)
        self.params = torch.nn.Parameter(params)

    def forward(self, *x):
        loss_sum = 0
        for i, loss in enumerate(x):
            loss_sum += torch.exp(-self.params[i]) * loss 
            + self.params[i]
        return loss_sum

论文[2]对论文[1]做了loss的正则项做了优化,它的loss如下:
L ( W , σ 1 , σ 2 ) = 1 2 σ 1 2 L 1 ( W ) + 1 2 σ 2 2 L 2 ( W ) + l o g ( σ 1 2 + 1 ) + l o g ( σ 2 2 + 1 ) L(W,\sigma_1 ,\sigma_2 ) = \frac{1}{2\sigma ^2_1}L_1(W) + \frac{1}{2\sigma_2^2}L_2(W)+log(\sigma_1^2+1)+ log(\sigma_2^2+1) L(W,σ1,σ2)=2σ121L1(W)+2σ221L2(W)+log(σ12+1)+log(σ22+1)
其pytroch代码实现如下:

class DynamicWeightedLoss(nn.Module):
    def __init__(self, num=2):
        super(DynamicWeightedLoss, self).__init__()
        params = torch.ones(num, requires_grad=True)
        self.params = torch.nn.Parameter(params)

    def forward(self, *x):
        loss_sum = 0
        for i, loss in enumerate(x):
            loss_sum += 0.5 / (self.params[i] ** 2) * loss 
            + torch.log(1 + self.params[i] ** 2)
        return loss_sum

5.进一步了解

如果还想对贝叶斯不确定性进一步了解,可以阅读reference部分的论文[3],如果还想对动态loss以及多任务进一步了解可以阅读综述性文章[4,5]以及一些经典的多任务论文[6,7,8]。

reference:

[1].Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
[2].Auxiliary Tasks in Multi-task Learning
[3].What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?
[4].An Overview of Multi-Task Learning in Deep Neural Networks.pdf
[5].https://zhuanlan.zhihu.com/p/269492239
[6].Multi-Task Learning as Multi-Objective Optimization
[7].MMOE
[8].SNR

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【论文阅读】Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics 的相关文章

随机推荐

  • Debian 10 安装网络yum源

    Debian 10 安装网络yum源 实验环境一台最小化Debian10 IP地址是192 168 10 1 24 还需要一张外网的网卡 配置网络 vim etc network interfaces 编辑网络配置文件 auto ens37
  • Python提取评论(使用pycharm+Python)

    一 安装调用所要用到的库函数 import requests from bs4 import BeautifulSoup 二 自定义根据每页影评的url爬取影评的方法 1 请求url def getData url 三 请求头为字典格式 h
  • java图片转base64注意事项

    java转base64有两点需要注意的地方 在window操作系统中 图片转换为base64 在base64的字符串中会有默认换行 这就破坏了json格式 所以这里需要做一下处理 除此之外 在java转base64时 会缺少base64字符
  • torch.cat的参数dim到底是在哪个维度拼接

    如果将两个维度为 n c h w 进行拼接 如果指定dim为以下值 dim 0 拼接后维度为 2n c h w dim 1 拼接后维度为 n 2c h w dim 2 拼接后维度为 n c 2h w dim 3 拼接后维度为 n c h 2
  • C#常见变量类型和使用规则

    C 常见变量类型和使用规则 常见变量类型 C 中值类型的变量主要包括整数类型 浮点类型 金钱 decimal 类型和布尔 bool 类型等 1 整数类型 int 范围 2 147 483 648 2 147 483 647 大小 32位有符
  • 合宙Air001点灯+闪烁(寄存器版)

    观前提醒 只是我学单片机的一个简单记录 会比较啰嗦 但是我在研究单片机寄存器过程中真实的心得体会 希望能帮到读者 打完电赛觉得自己的单片机白学了 于是想从寄存器从头开始学一遍单片机 刚好前段时间发现合宙AIR001这款单片机 外设较少且相对
  • QT之TCP网络传输系列 - 目录

    最近被大boss安排做纯软件开发项目 囧 本来我硕士方向是 传统机器学习特征提取 这一部分 读博近两年主要做 以深度学习为基础的视频分析 相关研究 我一个搞算法的去做软件开发 都是泪啊 但为了毕业 给啥任务都能 得 完成 o o 以下整理一
  • 热门去水印小助手小程序独立安装版+前端免费分享

    热门去水印小助手小程序独立安装版来自网络资源 请自测 该源码是本人在外面找回来 大家可以测试自用下 看看有什么瑰丽 去水印的也是比较火的 现在各大平台 搬运视频 大家都需要的 但是给大家一个建议 这个网上分享的共享开源源码 一般是有限制的
  • Python连接hive数据中遇到的各种坑

    这里选择的是使用 impala Python3 6来连接hive数据库 第一步要先在服务器开启hiveserver2 服务 不然会连不上的 报如下错误 开启方法很简单 到hive安装目录的bin目录下 your path apache hi
  • (三)springcloud之Consul注册服务与发现

    此文主要记录springcloud的zookeeper的注册与发现 没有过多解释 只是为了提供后期拷贝使用 主要模块分为 0 父工程模块 主要用来作为版本管理 1 公共模块Common API 用来封装其他模块的共同的功能 比如bean类
  • 为什么说分布式KVM系统是中小型指挥中心应用最广泛的控制系统?

    众所周知 在指挥中心 控制中心等场景 光纤KVM是部署控制系统的最优解 但是对于大量在的中小型指挥中心 区县级指挥中心 会议室等项目来说 必须要考虑建设的预算费用 这时部署成本适中的分布式KVM无疑是更实用的选择 目前 分布式KVM成为国内
  • QNX学习笔记-Neutrino-QNX-boot启动流程分析

    锋影 e mail 174176320 qq com 嵌入式系统的启动都是类似的 先启动一个boot程序 然后又boot控制系统的进一步加载运行 1 处理从复位向量执行代码 2 启动系统的启动代码 qnx的启动代码就是IPL 3 IPL会将
  • 计算机总是跳出交互式检测,交互式服务检测,教您如何解决电脑总是弹出交互式服务检测...

    电脑总是会弹出交互式服务检测窗口 无法关掉 只能 点击稍后提醒我 但一会儿又会提醒 这让人感觉很烦 其实 只要在系统服务里将Interactive Services Detection服务禁用即可解决此问题 下面 小编跟大家分享解决电脑总是
  • Vite 与 Vue Cli 对比 - 尤雨溪: Vite 会取代 vue-cli 吗?

    本文完整版 Vite 与 Vue Cli 对比 尤雨溪 Vite 会取代 vue cli 吗 Vite 与 Vue Cli 对比 一 Vite 与 Vue CLI 是什么 Vue CLI 的特点 Vite 的特点 二 Vite 和 Vue
  • 深度学习——使用国产深度学习框架“飞桨(PaddlePaddle)”重写房价预测模型

    一 安装飞桨 官方教程 https www paddlepaddle org cn install quick 博主本人使用的是Windows pip Python3 CPU版本 安装过程十分简单 在此不再赘述 二 使用飞桨重写模型 说明
  • mac终端命令大全介绍

    OSX 的文件系统 OSX 采用的Unix文件系统 所有文件都挂在跟目录 下面 所以不在要有Windows 下的盘符概念 你在桌面上看到的硬盘都挂在 Volumes 下 比如接上个叫做 USBHD的移动硬盘 桌面上会显示出一个硬盘图标 它实
  • Spring的一次踩坑——Could not resolve placeholder 'jdbc.driver' in string value "${jdbc.driver}"...

    问题很简单 就是运行后出现这个 根据字面意思是无法解析这个值 然后按照网上的一篇博文 添加了
  • 数据结构和算法(2)-----队列

    一 基本介绍 队列是一个有序列表 可以用数组或链表来实现 遵循先入先出的原则 即先存入队列的数据 要先取出 后存入队列的数据 要后取出 示意图 二 数组模拟队列 思路 队列本身是有序列表 若使用数组的结构来存储队列的数据 则队列数组的声明如
  • 高斯消元法求矩阵系数

    2 3 4 3 3 1 include
  • 【论文阅读】Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

    1 背景 目前 很多应用中都因为用了多任务取得了不错的效果 那么如何将这些任务的loss有机组合在一起 一种简答粗暴方法就是手动调节多任务之间的loss的相对权重 然后加和 如下 这种方式把权重作为超参调试的方式 往往耗时耗力 本文参考 1