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

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

· 本文目录


  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

相关文章
|
6月前
|
机器学习/深度学习 算法 Serverless
大模型开发:描述损失函数的作用以及一些常见的损失函数。
损失函数在机器学习中至关重要,用于衡量预测误差、优化模型、评估性能及选择模型。常见类型包括均方误差(MSE)、均方根误差(RMSE)、交叉熵损失(适用于分类)、绝对误差(MAE)、hinge损失(SVMs)、0-1损失、对数似然损失和Focal Loss(应对类别不平衡)。选择时要考虑模型性质、数据特征和优化需求。
481 3
|
6天前
|
人工智能 自然语言处理
以图灵机为师:通过微调训练让大语言模型懂执行计算过程
大语言模型(LLMs)在自然语言处理中表现出色,但在算术任务上却常依赖记忆而非理解。论文《Executing Arithmetic: Fine-Tuning Large Language Models as Turing Machines》提出可组合算术执行框架(CAEF),通过模拟图灵机,使LLMs逐步学习计算逻辑,显著提升其算术能力和泛化性能。实验显示,CAEF在LLaMA 3.1-8B模型上实现了高准确率,支持多位数计算,证明了其有效性和广泛适用性。
18 7
|
4月前
|
资源调度 PyTorch 调度
多任务高斯过程数学原理和Pytorch实现示例
本文探讨了如何使用高斯过程扩展到多任务场景,强调了多任务高斯过程(MTGP)在处理相关输出时的优势。通过独立多任务GP、内在模型(ICM)和线性模型(LMC)的核心区域化方法,MTGP能够捕捉任务间的依赖关系,提高泛化能力。ICM和LMC通过引入核心区域化矩阵来学习任务间的共享结构。在PyTorch中,使用GPyTorch库展示了如何实现ICM模型,包括噪声建模和训练过程。实验比较了MTGP与独立GP,显示了MTGP在预测性能上的提升。
88 7
|
11月前
|
自然语言处理 JavaScript Java
CodeFuseEval : 代码类大模型多任务评估基准
CodeFuseEval是结合CodeFuse大模型多任务场景,在开源的HumanEval-x、MBPP、DS1000评测基准基础上,开发的面向大模型代码垂类领域的企业级多类型编程任务评估基准。可用于评估大模型在代码补全、自然语言生成代码、测试用例生成、跨语言代码翻译、中文指令生成代码、代码注解释、Bug检测/修复、代码优化等不同任务的能力表现。
873 1
|
11月前
|
存储 JSON 自然语言处理
使用ExLlamaV2量化并运行EXL2模型
量化大型语言模型(llm)是减少这些模型大小和加快推理速度的最流行的方法。在这些技术中,GPTQ在gpu上提供了惊人的性能。与非量化模型相比,该方法使用的VRAM几乎减少了3倍,同时提供了相似的精度水平和更快的生成速度。
196 0
|
机器学习/深度学习 算法 搜索推荐
多任务学习模型之DBMTL介绍与实现
本文介绍的是阿里在2019年发表的多任务学习算法。该模型显示地建模目标间的贝叶斯网络因果关系,整合建模了特征和多个目标之间的复杂因果关系网络,省去了一般MTL模型中较强的独立假设。由于不对目标分布做任何特定假设,使得它能够比较自然地推广到任意形式的目标上。
|
人工智能 算法 C++
【ICLR2020】看未知观测:一种简单的蒙特卡洛并行化方法
【ICLR2020】看未知观测:一种简单的蒙特卡洛并行化方法
236 0
|
机器学习/深度学习 人工智能 自然语言处理
RLHF中的「RL」是必需的吗?有人用二进制交叉熵直接微调LLM,效果更好
RLHF中的「RL」是必需的吗?有人用二进制交叉熵直接微调LLM,效果更好
201 0
|
机器学习/深度学习 人工智能
参数要足够多,神经网络性能才会好,这是什么原理?
参数要足够多,神经网络性能才会好,这是什么原理?
109 0
|
机器学习/深度学习 人工智能 自然语言处理
【Pytorch神经网络理论篇】 10 优化器模块+退化学习率
反向传播的意义在于告诉模型我们需要将权重修改到什么数值可以得到最优解,在开始探索合适权重的过程中,正向传播所生成的结果与实际标签的目标值存在误差,反向传播通过这个误差传递给权重,要求权重进行适当的调整来达到一个合适的输出,最终使得正向传播所预测的结果与标签的目标值的误差达到最小,以上即为反向传播的核心思想
154 0
下一篇
无影云桌面