【多任务损失函数】浅谈多任务中的损失函数如何定义与优化

简介: 【多任务损失函数】浅谈多任务中的损失函数如何定义与优化

· 本文目录


  1、损失函数反向传播的关系

  2、添加系数的损失函数会影响实验结果(实验证明)

  3、多任务中损失函数与反向传播的思考

  4、学习多任务模型损失函数的思路

【注】写论文要优化多任务的损失函数,记录下最近的收获,应该能启发一些朋友。不足之处望指正。

[1] 损失函数反向传播的关系


  首先要明确,让损失函数的值最小是一个模型学习的目标,而反向传播只是优化模型时求梯度(求导)的一种手段

  反向传播算法的目的是什么? 就是通过更新神经网络的参数也就是每一层的权值、阈值来对损失函数进行最小化。主要方法求出损失函数对参数的梯度,只不过直接用损失函数求出参数的梯度非常困难,我们选择一层一层求损失函数对参数的梯度,更新完这一层的参数再往后传播。

image.png为什么要提出反向传播算法? 在反向传播算法提出之前人们应该想到了使用SGD学习模型,也想到了一些办法求解网络模型的偏导数,但这些算法求解效率比较低,所以提出反向传播算法来更高效的计算偏导数。(那时的网络模型还比较浅只有2-3层,参数少。估计即便不适用反向传播这种高效的算法也能很好的学习。一旦有人想使用更深的网络自然会遇到这个偏导数无法高效计算的问题,提出反向传播也就势在必行了)

[2] 添加系数的损失函数会影响实验结果(实验证明)


  我们说到所有参数的梯度,是基于损失函数来求的。所以如果仅仅是给损失函数前加个常数系数,每个参数的梯度都会有常数系数倍的变化,理论上会改变实验结果。

  我们采用RCNN模型,在路透社多标签数据集上进行实验。

  正常的损失函数如下:

# 计算多标签损失
def Loss(outputs, labels):
    loss_f = nn.BCEWithLogitsLoss()
    loss = loss_f(outputs, labels.float())
    return loss

  加了常数系数的损失函数如下:

# 计算多标签损失
def Loss(outputs, labels):
    loss_f = nn.BCEWithLogitsLoss()
    loss = 0.08*loss_f(outputs, labels.float())
    return loss

【注】这里的系数是随便设的,不是1和0就行。除此之外,实验是可复现的,随机种子都已固定,其他参数都相同。

  最终我们观察到两次实验结果:

Test Acc: 81.13%, Test Pre: 89.63%, Test Rec: 88.61%, Test F1: 88.02%, Test OE: 10.71% # 正常loss
Test Acc: 82.87%, Test Pre: 90.77%, Test Rec: 89.63%, Test F1: 89.26%, Test OE:  7.14% # 加了系数loss

  两次实验结果的不同,说明损失函数仅仅是变了一点(加个常数系数),就会对实验造成影响。

  如何理解这种现象?

  给损失函数加系数,在反向传播时,梯度必然会变化,同样的学习率在不同的梯度下,就会有不同的学习结果。
  对于单任务模型,把这个系数当作是一个超参数去调参的话,我觉得意义不大,这就变成了我们自己去定义损失函数了。而且我们自己修改的损失函数也不一定有泛化能力。

  但是把这种系数放到多任务中去调参,是较为可行的。

[3] 多任务中损失函数与反向传播的思考


  在多任务中一般是两种方法来定义损失函数:

image.png

image.png

所以这时提出第三种损失函数,把损失函数前的权重当作是可以学习的参数来学习。

[4] 学习多任务模型损失函数的思路


image.png

但是这样仍然不够,我们需要从理论推导的角度,去找到一些科学的损失函数学习公式。

  对于回归任务单标签分类任务来说,我们可以使用同方差不确定性来替代简单的权重系数来学习。

【注】可以参考博客:多任务学习中损失函数权重的自动调整 写的挺好的。

我们也可以使用异方差不确定性来替代简单的权重系数来学习,和同方差大同小异。

【注】

同方差参考论文Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

异方差参考论文:Uncertainty in multitask learning: joint representations for probabilistic MR-only radiotherapy planning

相关文章
|
1月前
|
机器学习/深度学习 算法 Serverless
大模型开发:描述损失函数的作用以及一些常见的损失函数。
损失函数在机器学习中至关重要,用于衡量预测误差、优化模型、评估性能及选择模型。常见类型包括均方误差(MSE)、均方根误差(RMSE)、交叉熵损失(适用于分类)、绝对误差(MAE)、hinge损失(SVMs)、0-1损失、对数似然损失和Focal Loss(应对类别不平衡)。选择时要考虑模型性质、数据特征和优化需求。
44 3
|
4月前
|
自然语言处理 JavaScript Java
CodeFuseEval : 代码类大模型多任务评估基准
CodeFuseEval是结合CodeFuse大模型多任务场景,在开源的HumanEval-x、MBPP、DS1000评测基准基础上,开发的面向大模型代码垂类领域的企业级多类型编程任务评估基准。可用于评估大模型在代码补全、自然语言生成代码、测试用例生成、跨语言代码翻译、中文指令生成代码、代码注解释、Bug检测/修复、代码优化等不同任务的能力表现。
370 1
|
1月前
|
人工智能 搜索推荐 物联网
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
79 0
|
2月前
|
算法 决策智能 Python
深入了解LightGBM:模型解释与可解释性
深入了解LightGBM:模型解释与可解释性
76 0
|
7月前
|
机器学习/深度学习 定位技术 Python
深入理解线性回归模型的评估与优化方法
深入理解线性回归模型的评估与优化方法
|
8月前
|
人工智能 算法 C++
【ICLR2020】看未知观测:一种简单的蒙特卡洛并行化方法
【ICLR2020】看未知观测:一种简单的蒙特卡洛并行化方法
162 0
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
RLHF中的「RL」是必需的吗?有人用二进制交叉熵直接微调LLM,效果更好
RLHF中的「RL」是必需的吗?有人用二进制交叉熵直接微调LLM,效果更好
153 0
|
11月前
|
机器学习/深度学习 人工智能 PyTorch
【Pytorch神经网络理论篇】 34 样本均衡+分类模型常见损失函数
Sampler类中有一个派生的权重采样类WeightedRandomSampler,能够在加载数据时,按照指定的概率进行随机顺序采样。
255 0
|
11月前
|
机器学习/深度学习 人工智能 数据可视化
【Pytorch神经网络理论篇】 14 过拟合问题的优化技巧(一):基本概念+正则化+数据增大
【Pytorch神经网络理论篇】 14 过拟合问题的优化技巧(一):基本概念+正则化+数据增大
262 0
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
反向传播的意义在于告诉模型我们需要将权重修改到什么数值可以得到最优解,在开始探索合适权重的过程中,正向传播所生成的结果与实际标签的目标值存在误差,反向传播通过这个误差传递给权重,要求权重进行适当的调整来达到一个合适的输出,最终使得正向传播所预测的结果与标签的目标值的误差达到最小,以上即为反向传播的核心思想
100 0