来自 | 知乎

地址 | 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不均衡造成的困扰。

深度学习的多个 loss 是如何平衡的?相关推荐

  1. Debug深度学习中的NAN Loss

    深度学习中遇到NAN loss 什么都不改,重新训练一下,有时也能解决问题 学习率减小 检查输入数据(x和y),如果是正常突然变为NAN,有可能是学习率策略导致,也可能是脏数据导致 If using ...

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

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎    编辑 | 深度学习这件小事 链接 | htt ...

  3. 深度学习——损失函数(Regression Loss、Classification Loss)

    简介 Loss function 损失函数 用于定义单个训练样本与真实值之间的误差 Cost function 代价函数 用于定义单个批次/整个训练集样本与真实值之间的误差 Objective fun ...

  4. 深度学习之——损失函数(loss)

    深度学习中的所有学习算法都必须有一个 最小化或最大化一个函数,称之为损失函数(loss function),或"目标函数"."代价函数".损失函数是衡量模型的效 ...

  5. 深度学习中常见的LOSS函数及代码实现

    Introduction 训练深度学习模型地目的只有一个,尽可能的学习到训练数据的分布.像往常的考试一样,考试成绩会有一个分数作为评判标准,评价你对于知识点地掌握情况,以便后续针对性地去学习.深度学习 ...

  6. 判断深度学习的效果好坏loss和val_loss比较

    loss是训练集的损失值,val_loss是测试集的损失值 以下是loss与val_loss的变化反映出训练走向的规律总结: train loss 不断下降,test loss不断下降,说明网络仍在学 ...

  7. 深度学习网络模型训练中loss为nans的总结

    在网络训练中经常出现loss为nans的情况. 主要原因有如下: 梯度爆炸 原因:巨大的梯度值使model的学习过程off-track. 检测方法:查看运行时日志,您应该查看每个迭代的损失值.您会注意 ...

  8. 深度学习:可视化-结果loss acc可视化及测试数据显示

    文章预览: 1.可视化train,test的loss acc 1.1 案例:交通指示牌识别案例-history数组 1.2 一张图两条曲线loss 写法总结 step1 定义数组 step2 添加数据 ...

  9. 《深度学习笔记》——“损失函数loss乘以正数因子a是否等价于学习率lr乘以a呢?”

    致谢 感谢知乎回答"loss的尺度的影响的本质上取决于优化器"给予我的启发! 1 问题描述 最近我在调参时,想到一个问题:"损失函数loss乘以正数因子a是否等价于学习率 ...

最新文章

  1. 微信小程序开发工具安装、设置
  2. C# QRCode 二维码
  3. 数控程序中r及q代表什么_邹军:如何利用数学公式编写cnc程序?
  4. php调用字符串函数参数,如何从包含参数的变量中存储的字符串调用PHP函数
  5. Scala入门到精通——第二十五节 提取器(Extractor)
  6. response.setContentType()的作用及MIME参数详解
  7. 「最有用」的特殊大数据:一文看懂文本信息系统的概念框架及功能
  8. 用户名和密码都正确,无法直接登陆虚拟机上的linux
  9. 聪明女人的七个致富之道,学会它你也能成为人人羡慕的小富婆
  10. Linux运维问题解决(3)——VMware启动虚拟机报错 : 该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取(T)
  11. matlab转python很难吗_MATLAB在逐渐被Python淘汰吗?
  12. Vue:vue中使用layUI
  13. 常见设计稿字体对应字重font-weight大小
  14. Python数据处理DataFrame小记
  15. 大据数技术之高频面试题8.0.9
  16. 卡特加特数字家庭又爆重磅合作!厦门火炬创投莅临卡特加特考察
  17. UVA10596欧拉回路加特判
  18. 诗歌(2)—定风波(莫听)
  19. oracle共享函数,oracle常用函数及示例分享
  20. 单片机实验说明<四>矩阵键盘与LCD基本使用

热门文章

  1. 里氏替换原则(Liskov Substitution Principle,LSP)
  2. 【Codeforces】1065B Vasya and Isolated Vertices (无向图的)
  3. 【ACM】杭电OJ 1181
  4. 什么是图数据库?图数据库实践与创新浅析
  5. 摆脱 FM!这些推荐系统模型真香
  6. 龙芯架构应用迁移技术分享——搜狗输入法应用迁移
  7. 一文详解面向多级多模态场景的召回引擎
  8. 154 万 AI 开发者用数据告诉你,中国 AI 如何才能弯道超车?| 中国 AI 应用开发者报告...
  9. 基于Co-Attention和Co-Excitation的少样本目标检测 | NeurIPS 2019
  10. Go开发者路线图2019,请收下这份指南