深度学习的多个 loss 是如何平衡的?

YOLO代码解读 *Box:**YOLOV5使用 GIOU loss作为bounding box的损失,Box推测为GIoU损失函数均值越小,方框越准。对于某个分类,综合了Precision和Recall的一个判断指标,F1-Score的值是从0到1的,1是最好,0是最差。**box_loss:**用于监督检测框的回归,预测框与标定框之间的误差(CIoU)。**cls_loss:**用于监督类别分类,计算锚框与对应的标定分类是否正确。**obj_loss:**用于监督grid中是否存在物体,计算网络的置信度。 阅读详情

来自 | 知乎 

地址 | https://www.zhihu.com/question/375794498

编辑 | AI有道 

本文仅作学术分享,若侵权,请联系后台删文处理

在一个端到端训练的网络中,如果最终的loss = a*loss1+b*loss2+c*loss3...,对于a,b,c这些超参的选择,有没有什么方法?

作者:Evan
https://www.zhihu.com/question/375794498/answer/1052779937

其实这是目前深度学习领域被某种程度上忽视了的一个重要问题,在近几年大火的multi-task learning,generative adversarial networks, 等等很多机器学习任务和方法里面都会遇到,很多paper的做法都是暴力调参结果玄学……这里偷偷跟大家分享两个很有趣的研究视角

1. 从预测不确定性的角度引入Bayesian框架,根据各个loss分量当前的大小自动设定其权重。有代表性的工作参见Alex Kendall等人的CVPR2018文章:

Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics

https://arxiv.org/abs/1705.07115

文章的二作Yarin Gal是Zoubin Ghahramani的高徒,近几年结合Bayesian思想和深度学习做了很多solid的工作。

2. 构建所有loss的Pareto,以一次训练的超低代价得到多种超参组合对应的结果。有代表性的工作参见Intel在2018年NeurIPS(对,就是那个刚改了名字的机器学习顶会)发表的:

Multi-Task Learning as Multi-Objective Optimization

http://papers.nips.cc/paper/7334-multi-task-learning-as-multi-objective-optimization

因为跟文章的作者都是老熟人,这里就不尬吹了,大家有兴趣的可以仔细读一读,干货满满。



作者:杨奎元-深动
链接:https://www.zhihu.com/question/375794498/answer/1050963528

1. 一般都是多个loss之间平衡,即使是单任务,也会有weight decay项。比较简单的组合一般通过调超参就可以。

2. 对于比较复杂的多任务loss之间平衡,这里推荐一篇通过网络直接预测loss权重的方法[1]。以两个loss为例,  和 由网络输出,由于整体loss要求最小,所以前两项希望 越大越好,为防止退化,最后第三项则希望越小越好。当两个loss中某个比较大时,其对应的也会取较大值,使得整体loss最小化,也就自然处理量纲不一致或某个loss方差较大问题。

该方法后来被拓展到了物体检测领域[2],用于考虑每个2D框标注可能存在的不确定性问题。

[1] Alex Kendall, Yarin Gal, Roberto Cipolla. Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics. CVPR, 2018.

[2] Yihui He, Chenchen Zhu, Jianren Wang, Marios Savvides, Xiangyu Zhang. Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR, 2019.

作者:郑泽嘉
链接:https://www.zhihu.com/question/375794498/answer/1056695768

Focal loss 会根据每个task的表现帮你自动调整这些参数的。

我们的做法一般是先分几个stage 训练。stage  0 : task 0, stage 1: task 0 and 1. 以此类推。在stage 1以后都用的是focal loss。

========== 没想到我也可以二更 ===============

是这样的。

首先对于每个 Task,你有个 Loss Function,以及一个映射到 [0, 1] 的 KPI (key performance indicator) 。比如对于分类任务, Loss function 可以是 cross entropy loss,KPI 可以是 Accuracy 或者 Average Precision。对于 regression 来说需要将 IOU 之类的归一化到 [0, 1] 之间。KPI 越高表示这个任务表现越好。

对于每个进来的 batch,每个Task_i 有个 loss_i。每个Task i 还有个不同的 KPI:  k_i。那根据 Focal loss 的定义,FL(k_i, gamma_i) = -((1 - k_i)^gamma_i) * log(k_i)。一般来说我们gamma 取 2。

于是对于这个 batch 来说,整个 loss = sum(FL(k_i, gamma_i) * loss_i)

在直观上说,这个 FL,当一个任务的 KPI 接近 0 的时候会趋于无限大,使得你的 loss 完全被那个表现不好的 task 给 dominate。这样你的back prop 就会让所有的权重根据那个kpi 不好的任务调整。当一个任务表现特别好 KPI 接近 1 的时候,FL 就会是0,在整个 loss 里的比重也会变得很小。

当然根据学习的速率不同有可能一开始学的不好的task后面反超其他task。http://svl.stanford.edu/assets/papers/guo2018focus.pdf 这篇文章里讲了如何像momentum 一样的逐渐更新 KPI。

由于整个 loss 里现在也要对 KPI 求导,所以文章里还有一些对于 KPI 求导的推导。

当然我们也说了,KPI 接近 0 时,Loss 会变得很大,所以一开始训练的时候不要用focal loss,要确保网络的权重更新到一定时候再加入 focal loss。

希望大家训练愉快。

作者:Hanson
链接:https://www.zhihu.com/question/375794498/answer/1077922077

对于多任务学习而言,它每一组loss之间的数量级和学习难度并不一样,寻找平衡点是个很难的事情。我举两个我在实际应用中碰到的问题。

第一个是多任务学习算法MTCNN,这算是人脸检测领域最经典的算法之一,被各家厂商魔改,其性能也是很不错的,也有很多版本的开源实现(如果不了解的话,传送门)。但是我在测试各种实现的过程中,发现竟然没有一套实现是超越了原版的。下图中是不同版本的实现,打了码的是我复现的结果。

不同版本mtcnn在FDDB上roc曲线

这是一件很困扰的事情,参数、网络结构大家设置都大差不差。但效果确实是迥异。

clsloss表示置信度score的loss,boxloss表示预测框位置box的loss,landmarksloss表示关键点位置landmarks的loss。

那么 这几个权值,究竟应该设置为什么样的才能得到一个不错的结果呢?

其实有个比较不错的注意,就是只保留必要的那两组权值,把另外一组设置为0,比如 。为什么这么做?第一是因为关键点的回归在人脸检测过程中不是必要的,去了这部分依旧没什么大问题,也只有在这个假设的前提下才能进行接下来的实验。

就比如这个MTCNN中的ONet,它回归了包括score、bbox、landmarks,我在用pytorch复现的时候,出现一些有意思的情况,就是将landmarks这条任务冻结后(即 ),发现ONet的性能得到了巨大的提升。能超越原始版本的性能。

但是加上landmarks任务后( )就会对cls_loss造成影响,这就是一个矛盾的现象。而且和a、b、c对应的大小有很大关系。当设置成( )的时候关键点的精度真的是惨不忍睹,几乎没法用。当设置成( )的时候,loss到了同样一个数量级,landmarks的精度确实是上去了,但是score却不怎么让人满意。如果产生了这种现象,就证明了这个网络结构在设计的时候出现了一些缺陷,需要去修改backbone之后的multi-task分支,让两者的相关性尽量减小。或者是ONet就不去做关键点,而是选择单独的一个网络去做关键点的预测(比如追加一个LNet)。box的回归并不是特别受关键点影响,大部分情况box和landmarks是正向促进的,影响程度可以看做和score是一致的,box的精度即便下降了5%,它还是能框得住目标,因此不用太在意。

上面这个实验意在说明,要存在就好的loss权重组合,那么你的网络结构就必须设计的足够好。不然你可能还需要通过上述的实验就验证你的网络结构。从多种策略的设计上去解决这中loss不均衡造成的困扰。

关于focal loss和分类任务中的hard negative(positive)mining 深度学习,数据是关键。 在训练一个分类器的时候,对数据的要求是class balance,即不同标签的样本量都要充足且相仿。然而,这个要求在现实应用中往往很难得到保证。 下面我以基于检测的单目标跟踪举例分析这个问题。 visual object tracking是在一段视频中跟踪一个特定目标。常见的方法有one-stage regression(比如correlation filter tr... 阅读详情

相关推荐

box_loss、cls_loss 和 dfl_loss 三个核心损失函数

YOLOv8目标检测模型训练中的三大关键损失函数解析:1.box_loss用于优化边界框定位精度,采用CIoU算法综合考虑重叠面积、中心点距离和长宽比;2.cls_loss评估分类准确性,使用交叉熵损失函数;3.dfl_loss通过概率分布提升边界框回归精度,特别适合小目标检测。三者加权构成总损失(total_loss=box_loss+cls_loss+dfl_loss),训练时需监测其变化趋势:box_loss过高可能标注有问题,cls_loss不降可能存在类别不平衡,dfl_loss波动则需调整学习率

shangjg3的博客 1402

目标检测模型中的几个损失值

DFL损失的主要作用是用于校正模型在预测物体边界框时的误差,优化后的效果可以在一定程度上针对有些模糊或者焦点不集中的图片提升对象检测的精度。Box Loss直接依赖于模型预测的边界框与实际(或称为真值)边界框之间的距离。DFL损失是一个更高级的损失函数,目标是能在某些更复杂的情况下获得更好的性能,特别是针对一些难以边界框预测的目标。Box损失函数通常用于基本的目标检测任务,如Faster R-CNN, SSD等方法,Box损失是一个相对简单的损失函数,它主要计算预测的边界框与实际的边界框之间的位置偏差。

qq_52832321的博客 1万+

深度学习中如何平衡多个loss?多任务学习自动调整loss weight解决方案

目录 问题引入 手动调参 自动调参 从每个任务的同方差不确定性出发 论文赏析 代码分析 视频讲解 说明:写在最后 问题引入 深度学习中,针对loss权重的优化是重要的改进方向,许多深度学习应用都受益于具有多重回归和分类目标的多任务学习。每年的顶会都会出现不少关于loss优化的文章,还有大量的新loss定义方式,眼花缭乱。因此,一个深度学习任务中,一个loss往往有由多个loss复合而成:loss = a*loss1+b*loss2+c*loss3... 如何调整这些loss权重?超参.

沉迷单车的追风少年 6041

box_loss,obj_loss,cls_loss,Size的含义,以及他们数据增长与降低时,是好还是坏

box_loss,obj_loss,cls_loss,Size的含义,以及他们数据增长与降低时,是好还是坏

骨子里的偏爱 2万+

深度学习的多个loss如何平衡

(22 封私信 / 99+ 条消息) 深度学习的多个loss如何平衡? - 知乎 https://www.zhihu.com/question/375794498

TEDDY的博客 1932

基于Landsat-8数据的山西省吕梁市地表温度反演研究过程(大气校正法)

1.数据下载:本实验采用的数据是 ①从地理空间数据云下载的来自landsat8 卫星,云量<=1%,时间为2017年5月12日的山西省吕梁市影像数据。为全面覆盖吕梁市,选用了两片影像。 ②吕梁市边界矢量图 2.数据预处理 ...

weixin_45747376的博客 6601

深度学习loss值变为0_深度学习——深度学习的多个loss如何平衡?

问题:在一个端到端训练的网络中,如果最终的loss = a*loss1+b*loss2+c*loss3...,对于a,b,c这些超参的选择,有没有什么方法?链接:https://www.zhihu.com/question/375794498知乎高质量回答一、作者:Evan字节跳动研究员https://www.zhihu.com/question/375794498/answer/10527799...

weixin_39603573的博客 1947

【智能车学习】电磁循迹中的基本控制算法

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。本篇主要讲述智能车电磁循迹中涉及到的基本算法,包括滤波算法,归一化算法,PID控制等

Carry_qing的博客 6万+

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

高赞回答 1 这也是个困扰了我多年的问题: loss = a * loss1 + b * loss2 + c * loss3 怎么设置 a,b,c? 我的经验是 loss 的尺度一般不太影响性能,除非本来主 loss 是 loss1,但是因为 b,c 设置太大了导致其他 loss 变成了主 loss。 实践上有几个调整方法: 手动把所有 loss 放缩到差不多的尺度,设 a = 1,b 和 c 取 10^k,k 选完不管了; 如果有两项 loss,可以 loss = a * loss1 + (1 - a)

weixin_42535423的博客 1万+

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 907

SAP S4 HANA 新资产会计中的平行分类账估值

在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。

yanzibing99的博客 1332

深度学习分类类别不平衡_深度学习——深度学习的多个loss如何平衡?

问题:在一个端到端训练的网络中,如果最终的loss = a*loss1+b*loss2+c*loss3...,对于a,b,c这些超参的选择,有没有什么方法?链接:https://www.zhihu.com/question/375794498知乎高质量回答一、作者:Evan字节跳动研究员https://www.zhihu.com/question/375794498/answer/10527799...

weixin_42509766的博客 520

15. GD32E230定时器实战:基于TIMER5的1秒LED闪烁中断配置详解

本文详细讲解了如何在GD32E230微控制器上配置TIMER5定时器,实现精准的1秒LED闪烁中断。内容涵盖从时钟开启、参数计算、中断设置到服务函数编写的完整流程,重点解析了预分频值与周期值的配置方法,帮助开发者掌握硬件定时器的核心应用。

weixin_29092787的博客 136

深度学习中如何平衡多个Loss?

进一步优化的方式是按比例调整各个loss,例如:loss = loss1 + loss2 / (loss2 / loss1).detach() + loss3 / (loss3 / loss1).detach()。这种方法通过自动调整不同loss之间的比重,使它们与主要loss保持合理的比例,避免手动调整中的人为偏差。这种方法通过每轮迭代中动态调整各个loss的权重,使它们的尺度一致。通常情况下,loss的尺度并不会显著影响模型性能,除非某个次要的loss权重设置过大,反而盖过了主要loss的影响。

qq_56583393的博客 752

YOLOv11改进 - 卷积Conv | SPD-Conv空间深度转换卷积优化空间信息编码,攻克小目标检测难题

本文介绍了一种名为SPD-Conv的新型CNN构建块及其在YOLOv11中的结合。传统CNN在处理低分辨率图像或小物体时,因使用步长卷积和池化层导致细粒度信息丢失、性能下降。SPD-Conv由空间到深度(SPD)层和非步长卷积(Conv)层组成,完全消除卷积步长和池化层,避免信息损失。SPD层重排特征图元素将空间信息转换到深度维度,非步长卷积层进一步处理特征图。我们将SPD-Conv集成进YOLOv11,实验证明其在低分辨率图像和小物体检测任务上显著优于现有模型。

魔改工程师的博客 1146

cefshap(C#)定义浏览器的右键菜单

菜单效果:复制(自带),搜索文本,打开链接,复制链接,刷新,检查,关于 public class MenuHandler : IContextMenuHandler { //public event Action<string> PopupRequest; void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrows

无线智能模块 可视DIY智能专家 1706

【Loss】深度学习的多个loss如何平衡?

点击上方,选择星标或置顶,每天给你送干货!阅读大概需要4分钟跟随小博主,每天进步一丢丢来自 |知乎地址 |https://www.zhihu.com/question/3757944...

zenRRan的博客 481

FATFS挂载多个存储设备(2):功能配置及功能测试

本文介绍了基于FATFS文件系统实现多存储设备挂载的方法,包含底层设备驱动函数编写、功能配置、功能测试。

kevin1499的博客 2586

深度学习的多个loss如何平衡 & 有哪些「魔改」损失函数,曾经拯救了你的深度学习模型?...

这篇文章整理自我的知乎回答(id: Hanson),分别对深度学习中的多个loss如何平衡 以及 有哪些「魔改」损失函数,曾经拯救了你的深度学习模型 这两个问题进行了解答。1. 深度学习...

机器学习算法那些事 8238

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【微调笔记】《深度学习的多个loss如何平衡?》问题下“BugBuster喵“的回答总结

参考《深度学习的多个loss如何平衡?》问题下。

duoyasong5907的博客 78

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RecentNotes待进一步整理

有关计算机视觉, 深度学习等方面, 有待进一步整理的内容;

NeXT_Vision的博客 452

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 25个常用Matplotlib图的Python代码,收藏收藏!
下一篇: 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值