Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics
https://arxiv.org/abs/1705.07115
CVPR 2018
- Alex Kendall University of Cambridge
- Yarin Gal University of Oxford
- Roberto Cipolla University of Cambridge
Question
在多任务模型中, 往往每一个任务都会使用一个单独的loss.
如文中使用CityScapes数据集同时做分语义割(Semantic Segmentation), 实例分割(Instance Segmentation), 单目深度估计(Monocular Disparity Estimation), 三个任务的loss截然不同,如果模型训练时侧重一个任务, 那么其他任务的性能就会很差.
而单任务模型中, 也会添加不同的loss去提高训练的速度, 或者增强模型的性能.
举例来说, 在reid 任务中, 会同时存在ID loss 和 metric loss, 两种loss的作用不同,前者用于分类, 快速收敛模型, 后者用于度量学习, 缩小类内间距和扩大类间距离. 而且随着训练迭代次数的增加, 两种loss对于模型泛化性的作用也随之不同.
多个 loss 之间的取舍会随着数据集的尺度差异, 以及任务的难易程度改变, 恒定的权重会制约模型的收敛方向, 进而影响模型的最终性能.
如何动态调整loss之间的权重, 就是文中所要研究的内容.
Methodology
概率机器学习和不确定性
机器学习训练模型模型从观察到的数据(训练数据)中学习一些模式和假设,并对未观察到的数据(测试数据)进行推断。然而,由于输入数据噪声、感官噪声、测量误差、非最优超参数设置等诸多原因,该模型对预测具有不确定性。
从概率论的角度来看,用单点估计作为权重来建立任何分类都是不合理的,而且神经网络无法正确评估训练数据中的不确定性。机器学习中的概率模型指出,所有形式的不确定性不可能是一个真实的值,而更像是一个概率值,并使用概率论来回答一切问题。概率分布用于建模学习、不确定性和未观测状态。在观察数据之前,先定义一个先验概率分布,然后进行学习,一旦观察到数据,该分布就转换为后验分布。
网络中的不确定性是衡量模型对其预测确定程度的指标。在贝叶斯模型中,存在两种主要的不确定性类型:偶然不确定性(Aleatoric uncertainty)和认知不确定性(Epistemic uncertainty)。
偶然不确定性测量观测中固有的噪声。这种不确定性存在于数据采集方法中,如传感器噪声或沿数据集均匀分布的运动噪声。即使收集了更多的数据,也不能减少这种不确定性, 只能通过提高数据精度避免.
偶然不确定性可以进一步分为同方差不确定性(Task-dependant or Homoscedastic uncertainty)和异方差不确定性(Data-dependant or Heteroscedastic uncertainty)
异方差不确定性,取决于输入数据,并预测为模型输出。其中一些输入可能具有比其他输入更多的噪声输出。异方差的不确定性尤为重要,可以防止模型输出非常自信的决策。
同方差不确定性,不取决于输入数据。它不是模型输出,而是一个对所有输入数据保持不变并且在不同任务之间变化的数量。因此,它可以被描述为任务相关的不确定性。
认知不确定性代表了模型本身造成的不确定性。给定更多数据可以减少这种不确定性,并且通常称为模型不确定性。
同方差不确定性与输入无关, 取决于任务固有的不确定性, 通过将同方差不确定性转变为loss的weight, 模型就可以具有动态调整loss的能力.
现在将同方差不确定性定义为 σ \sigma σ, 因为 σ \sigma σ 对所有输入数据保持不变并且在不同任务之间变化的数量, 所以假设 σ \sigma σ 是模型存在的参数, 并且维持不变. 当前我们已经有了输出和标签, 那么为了求出参数 σ \sigma σ , 可以使用极大似然估计计算.
极大似然估计
利用给定的样本和概率分布, 反推分布参数.
假设概率分布或者概率密度函数为 f ( x ; θ ) f(x ; \theta) f(x;θ) 由于 θ \theta θ 未知,
则定义对于 θ \theta θ 的似然函数 L ( θ ) = ∏ i = 1 n f ( x i ; θ ) L(\theta)=\prod_{i=1}^{n} f\left(x_{i} ; \theta\right) L(θ)=∏i=1nf(xi;θ)
为了最大化似然函数,
利用对数函数担当递增的性质,对似然函数取对数, 得到 l n L ( θ ) = ∑ i = 1 n l n f ( x i ; θ ) lnL(\theta)=\sum_{i=1}^{n} lnf\left(x_{i} ; \theta\right) lnL(θ)=∑i=1nlnf(xi;θ)
对 θ \theta θ 求导, 并将导数置为 0 , ∂ ln L ( θ ) ∂ θ j = 0 \frac{\partial \ln L(\theta)}{\partial \theta_{j}}=0 ∂θj∂lnL(θ)=0
如果存在驻点 θ ^ \hat\theta θ^ , 则可以认定 θ ^ \hat\theta θ^ 可以使得对数似然函数最大, 也使得似然函数最大.
在文中, 并没有完全按照极大似然估计的做法, 做法如下:
首先定义 f W ( x ) \mathbf{f}^{\mathbf{W}}(\mathbf{x}) fW(x) 为神经网络的输出特征张量.
回归问题
在回归问题中, 神经网络直接输出预测值
f
W
(
x
)
\mathbf{f}^{\mathbf{W}}(\mathbf{x})
fW(x) , 并且与真值
y
\mathbf{y}
y 存在固有的同方差不确定性, 那么就可以假设对于
y
\mathbf{y}
y 的后验概率符合以
σ
2
\sigma^2
σ2 作为方差的高斯分布:
p
(
y
∣
f
W
(
x
)
)
=
N
(
f
W
(
x
)
,
σ
2
)
(1)
p\left(\mathbf{y} | \mathbf{f}^{\mathbf{W}}(\mathbf{x})\right)=\mathcal{N}\left(\mathbf{f}^{\mathbf{W}}(\mathbf{x}), \sigma^{2}\right) \tag{1}
p(y∣fW(x))=N(fW(x),σ2)(1)
取对数:
log
p
(
y
∣
f
W
(
x
)
)
∝
−
1
2
σ
2
∥
y
−
f
W
(
x
)
∥
2
−
log
σ
2
(2)
\log p\left(\mathbf{y} | \mathbf{f}^{\mathbf{W}}(\mathbf{x})\right) \propto-\frac{1}{2 \sigma^{2}}\left\|\mathbf{y}-\mathbf{f}^{\mathbf{W}}(\mathbf{x})\right\|^{2}-\log \sigma^2 \tag{2}
logp(y∣fW(x))∝−2σ21∥∥y−fW(x)∥∥2−logσ2(2)
可以发现 loss ∥ y − f W ( x ) ∥ 2 \left\|\mathbf{y}-\mathbf{f}^{\mathbf{W}}(\mathbf{x})\right\|^2 ∥∥y−fW(x)∥∥2 出现在等式右侧. 两边同时乘以-号, 将问题转化为使得负对数似然函数最小:
− log p ( y ∣ f W ( x ) ) ∝ 1 2 σ 2 ∥ y − f W ( x ) ∥ 2 + log σ 2 (3) -\log p\left(\mathbf{y} | \mathbf{f}^{\mathbf{W}}(\mathbf{x})\right) \propto\frac{1}{2 \sigma^{2}}\left\|\mathbf{y}-\mathbf{f}^{\mathbf{W}}(\mathbf{x})\right\|^{2}+\log \sigma^2 \tag{3} −logp(y∣fW(x))∝2σ21∥∥y−fW(x)∥∥2+logσ2(3)
当前, 预测值 f W ( x ) \mathbf{f}^{\mathbf{W}}(\mathbf{x}) fW(x) 与真值 y \mathbf{y} y 已知, 可以通过梯度下降的算法去寻找最终的 σ \sigma σ.
分类问题
分类问题思路一致, 推导还是看论文吧, 不抄了. 结果与回归一致.
Code
在实践中, 我们训练网络来预测对数方差 s : = log σ 2 s:=\log \sigma^{2} s:=logσ2, 这样可以使得训练更稳定, 同时避免分母项为0, 同时指数映射也允许来回归没有约束的缩放值, 这里的 e x p ( − s ) exp(-s) exp(−s) 可以被解析到正值, 给了方差一个有效值.
loss += torch.exp(-sem_uncertainty) * sem_loss + 0.5 * sem_uncertainty
loss += 0.5 * (torch.exp(-inst_uncertainty) * inst_loss + inst_uncertainty)
loss += 0.5 * (torch.exp(-depth_uncertainty) * depth_loss + depth_uncertainty)
https://github.com/oscarkey/multitask-learning
这个实现的太复杂, 而且不通用, 之后可能会改进成为一个model方便使用.
Reference
[1] 极大似然估计–百度百科
[2] 一文搞懂极大似然估计
[3] 贝叶斯深度学习-概述