yolo-mask的损失函数l包含三部分_损失函数总结-应用和trick
常见的损失函数,如交叉熵损失、平方误差损失、Hinge损失等并不是本文的重点,关于这些损失函数的介绍网上很多,可以参考如下几篇文章
- 机器学习中的 7 大损失函数实战总结
- 常见的损失函数(loss function)总结
- 机器学习算法及其损失函数
- 损失函数loss大大总结
本文的重点在于总结损失函数在应用上的一些trick和技巧
单任务
相对于多任务学习而言,我们常见的模型大部分都是单任务学习,只有一个学习目标(loss)
一、标签平滑(Label Smoothing)
1. 什么叫标签平滑
正常模型的正样本标签为1,负样本标签为0,这是一种hard的学习,这样的模型可以叫做过于自信的模型。标签平滑就是将正样本的标签为0.9,负样本的标签为0.1,这是一种soft的学习,也就是让告诉模型,不要这么自信。当然标签平滑的程度可以根据情况修改。
2. 标签平滑的作用
在论文When Does Label Smoothing Help?中,作者说明标签平滑可以提高神经网络的鲁棒性和泛化能力。
3. 标签平滑的禁忌
在知识蒸馏中的教师网络中,采用标签平滑的话会影响效果,导致教师网络无法有效传递知识。
二、样本不平衡
- 样本不平衡在真实业务场景普遍存在,在数据角度可以通过过采样和抽样等方法来缓解。
- 在模型角度,可以通过损失函数的设计进一步缓解样本不平衡问题,以cross entropy 为例
普通的ce损失:
通过一个参数alpha来调节ce损失:
通过alpha来增大正样本的权重,缓解正样本少的问题。
三、难易不平衡
在样本中,必然存在一些样本容易学习(特征鲜明),一些样本较难学习。如果易分样本占据多数,那么损失函数就会被容易样本主导,对难分样本的学习能力较弱,从而影响模型的学习效果。
1. Focal Loss
假设:易分样本(置信度高的样本)对模型的提升效果非常小,模型应该主要关注与那些难分样本
focal loss的思想很简单:降低易分样本的损失,提高难分样本的损失:
假设: lambda取2时,p=0.968,那么(1-p)2=0.001,也就是易分样本的损失衰减了1000倍。
2. GHM(gradient harmonizing mechanism)
首先Focal Loss存在很多问题 - 关注难分样本:如果样本中存在离群点,Focal Loss过分关注离群点,那么模型就跑偏了。 - labmda是超参数,全靠经验
GHM不是根据样本的难易程度来进行衰减,而是根据(一定梯度内)的样本数量进行衰减,也就是谁的样本数量多,就衰减谁。 - 首先定义梯度模长g:g=|p−p*|,那么g是怎么来的呢,和梯度有什么关系呢?
- g正比于检测的难易程度,g越大则检测难度越大,可以看到,其实g就是梯度的绝对值(模长)。
- 下图是不同梯度模长g的样本数量分布
- 最左侧样本是易分样本,最右侧是难分样本,两者占比都较大,因此都要进行相应的衰减。
- 具体衰减方式:将g分桶,统计数量,之后定义梯度密度GD(g),根据GD的倒数来进行衰减。具体可以参考论文
多任务
一、总结
多任务损失函数如何确定,以及如何进行融合,一直都是一个难点。
此处主要参考Deep Multi-Task Learning – 3 Lessons Learned by Zohar Komarovsky of taboola,总结3点如下:
- 多个损失函数直接融合:简单求和与加权求和比较常用
- 简单求和(简单)
- 加权求和(权重难确定)
- Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics通过不确定性(uncertainty)来调整损失函数对应的权重。
- 多个任务通过神经网络连接:任务A的输出作为任务B的输入特征 - 前向传播:比较简单,和普通网络一样 - 后向传播:B的梯度不向A传递。
- 不同loss对应不同learning rate
- 不同的任务往往需要的learning rate的数量级不一样
- 以relu为例,learning rate较大则会出现dying relu问题,learning rate较小的话就会导致收敛很慢。
- 多任务中,对不同的损失函数设置不同的learning rate 可以一定程度缓解。
二、举例
- Deep Interest Evolution Network for Click-Through Rate Prediction:
这是阿里的一篇ctr论文,这里并不是在最后的输出层增加loss,而是在网络中间部分的GRU中引入辅助loss。
- 损失函数融合:L = Ltarget + α ∗ Laux,超参数加权的方式
2. Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate
这是一篇阿里的文章,标准的multi-task,两个网络分别对应不同的loss
- 文章根据cvr和ctr的关系,定义了post-view click- through&conversion rate (CTCVR)
- 不直接优化cvr,而是针对ctr和ctcvr的multi loss 进行优化
- ctr和ctcvr简单求和的方式
其它
一、负采样 negative sample
解决神经网络输出层计算量太大问题,修改损失函数同时采样少部分负样本
二、sampled softmax
将样本分为几份,每份样本内部进行softmax损失,这样可以一定程度减少复杂度,但是缺点是serving阶段还是要*全量的softmax*
未完待续。。。
yolo-mask的损失函数l包含三部分_损失函数总结-应用和trick相关推荐
- yolo-mask的损失函数l包含三部分_【AI初识境】深度学习中常用的损失函数有哪些?...
这是专栏<AI初识境>的第11篇文章.所谓初识,就是对相关技术有基本了解,掌握了基本的使用方法. 今天来说说深度学习中常见的损失函数(loss),覆盖分类,回归任务以及生成对抗网络,有了目 ...
- 损失函数的意义和作用_损失函数的可视化:浅论模型的参数空间与正则
点击蓝字 关注我们 作者丨土豆@知乎来源丨https://zhuanlan.zhihu.com/p/158857128本文已获授权,不得二次转载 前言 在深度学习中,我们总是不可避免会碰到各种各样的 ...
- 使用数组操作解码YOLO Core ML对象检测(三)
目录 介绍 解码YOLO输出的正确方式 下一步 总目录 将ONNX对象检测模型转换为iOS Core ML(一) 解码Core ML YOLO对象检测器(二) 使用数组操作解码YOLO Core ML ...
- python使用matplotlib可视化3D柱状图(3D histogram、三维柱状图、包含三个坐标轴x、y、z)、设置zdir参数为z、改变3d图观察的角度
python使用matplotlib可视化3D柱状图(3D histogram.三维柱状图.包含三个坐标轴x.y.z).设置zdir参数为z.改变3d图观察的角度 目录
- python使用matplotlib可视化3D柱状图(3D bar plot、三维柱状图、包含三个坐标轴x、y、z)、设置zdir参数为y、改变3d图观察的角度
python使用matplotlib可视化3D柱状图(3D bar plot.三维柱状图.包含三个坐标轴x.y.z).设置zdir参数为y.改变3d图观察的角度 目录
- python使用matplotlib可视化3D直方图(3D histogram、三维直方图、包含三个坐标轴x、y、z)、3D直方图可视化多个维度数据的区别和联系
python使用matplotlib可视化3D直方图(3D histogram.三维直方图.包含三个坐标轴x.y.z).3D直方图可视化多个维度数据的区别和联系 目录
- 实现一个行内三个div等分_一个div,包含三个小的div,平均分布的样式
从11月份开始,自学前端开发,写静态页面中,经常用到一个大的div下包含三个小的div,平均分布div大小样式,写过多次,也多次忘记,每次都要现找资料,不想之后,在这么麻烦,索性今天自己记录一下,方便 ...
- 编写一个制造各种车辆的程序。包含三个类,具体要求如下: (1)基类Vehicle,包含轮子数和汽车自身重量两个属性,一个两参数的构造方法,一个显示汽车信息的方法; (2)小轿车类Car,增加载客数属性
一.题目描述 编写一个制造各种车辆的程序.包含三个类,具体要求如下: (1)基类Vehicle,包含轮子数和汽车自身重量两个属性,一个两参数的构造方法,一个显示汽车信息的方法: (2)小轿车类Car, ...
- 百度地图导航的接入(包含三种选择方式驾车、公交、步行)
百度地图导航的接入(包含三种选择方式驾车.公交.步行) 步骤 1.下载百度的sdk(下载地址:http://lbsyun.baidu.com/sdk/download) 勾选下载"检索功能& ...
最新文章
- 【数据分析】用于数据分析的8个SQL技术
- 以下python语言关键字在异常处理_【单选题】以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是: ( )...
- Java常用命令及参数
- 阿里架构师用3点讲透数据中台,这些都是你没看过的
- Windows运维的学习笔记
- 【不误正业】win10透明任务栏,任务栏居中+桌面美化工具DeskGo
- php 模拟提交金数据,小程序提交表单到金数据实例
- 苹果手机怎么设置新的id
- Storj:区块链在云存储上的应用
- GitHub如何征服了Google、微软及一切
- 【新手入门必看】git 和 github 介绍
- 选择室内地图提供商时需要考虑的12件事
- Studio 3T的使用
- 汉堡大学计算机科学,汉堡大学 - 录取条件,专业,排名,学费「环俄留学」
- myeclipse超详细安装教程+图文+安装包获取
- python获取站长之家素材
- 软考复习经验分享 软件设计师 软考中级 复习思路
- IOS 开发高手课 学习笔记(第二部分)
- 极地土活性层和永久冻土的比较宏基因组学
- 数据结构实验3、单链表的基本操作实现
热门文章
- vue 表格左右拖拽调整列宽_解决 | iview低版本实现表格拖拽,滚动条列宽计算问题...
- java list 多条件排序_java – 如何对arraylist执行一系列排序操作(多个排序条件)
- Spring boot 实战 利用 Sharding-jdbc实现数据库的读写分离
- 【带你重拾Redis】Redis事务
- html三列布局中间固定,常见的三列布局(左右固定宽度,中间自适应)
- python爬虫实战,requests模块,Python实现抓取头条街拍美图
- 用Python防止头上一片青青草原
- SalttSack自动化运维(四)——JINJA模块
- Docker compose多容器管理
- 根据值 加密后的值 算出key_Bugku:加密 rsa