点击上方,选择星标,每天给你送干货!


来自:炼丹笔记

干货

作者:时晴

有模型就要定义损失函数(又叫目标函数),没有损失函数,模型就失去了优化的方向。大家往往接触的损失函数比较少,比如回归就是MSE,MAE,分类就是log loss,交叉熵。在各个模型中,目标函数往往都是不一样的,如下所示:

  • 朴素贝叶斯: 最大化后验概率

  • 遗传编程: 最大化适应度函数

  • 强化学习: 最大化总回报/价值函数

  • CART决策树分类: 最大化信息增益/最小化子节点不纯度

  • CART,决策树回归,线性回归,自适应线性神经元…: 最小化均方误差成本(或损失)函数

  • 分类模型: 最大化对数似然或最小化交叉熵损失(或代价)函数

  • 支持向量机: 最小化hinge损失

Loss Function

损失函数是一种评估“你的算法/模型对你的数据集预估情况的好坏”的方法。如果你的预测是完全错误的,你的损失函数将输出一个更高的数字。如果预估的很好,它将输出一个较低的数字。当调整算法以尝试改进模型时,损失函数将能反应模型是否在改进。“损失”有助于我们了解预测值与实际值之间的差异。损失函数可以总结为3大类,回归,二分类和多分类。

常用损失函数:

Mean Error (ME)

Mean Squared Error (MSE)

Mean Absolute Error (MAE)

Root Mean Squared Error (RMSE)

Categorical Cross Entropy Cost Function(在只有一个结果是正确的分类问题中使用分类交叉熵)

Binary Cross Entropy Cost Function.

Hinge Loss(hinge损失不仅会惩罚错误的预测,也会惩罚那些正确预测但是置信度低的样本)

Multi-class Cross Entropy Loss

这里我们要区分Multi-class和Multi-label,如下图:

对于Multi-Label我们不能使用softmax,因为softmax总是只强制一个类变为1,其他类变为0。因此,我们可以简单地在所有输出节点值上用sigmoid,预测每个类的概率。

Divergence LOSS (KL-Divergence)

KL散度是一个分布与另一个分布的概率差异的度量,KL散度在功能上类似于多类交叉熵,KL散度不能用于距离函数,因为它不是对称的。

Huber loss

a为比较小的值,此函数是二次函数;对于a为大值时,此函数是线性函数。变量a通常是指残差,即观测值和预测值之间的差值。与平方误差损失相比,Huber损失对数据中的异常值不那么敏感。使函数二次化的小误差值是多少取决于“超参数”,????(delta),它可以调整。

有的时候,我们的任务并不是回归或分类,而是排序,下面介绍rank loss。

Rank Loss

排名损失用于不同的领域,任务和神经网络设置,如Siamese NetsTriplet Nets。这就是为什么他们会有名称,如Contrastive Loss, Margin Loss, Hinge Loss or Triplet Loss

与其他损失函数(如交叉熵损失或均方误差损失)不同,损失函数的目标是学习直接预测给定输入的一个标签、一个值或一组或多个值,rank loss的目标是预测输入之间的相对距离。这个任务通常被称为度量学习。

rank loss在训练数据方面非常灵活:我们只需要得到数据点之间的相似性得分就可以使用它们。分数可以是二元的(相似/不同)。例如,假设一个人脸验证数据集,我们知道哪些人脸图像属于同一个人(相似),哪些不属于(不同)。利用rank loss,我们可以训练CNN来推断两张人脸图像是否属于同一个人。

为了使用rank loss,我们首先从两个(或三个)输入数据点中提取特征,并得到每个特征点的嵌入表示。然后,我们定义一个度量函数来度量这些表示之间的相似性,例如欧几里德距离。最后,我们训练特征提取器在输入相似的情况下为两个输入产生相似的表示,或者在两个输入不同的情况下为两个输入产生距离表示。

Pairwise Ranking Loss

我们从上式可以看到,当两个人的描述的是一个人时,他们嵌入表示距离大小就是loss,当描述不是一个人时,嵌入表示距离大于margin才不会产生loss。我们也可以把公式改写为:

Triplet Ranking Loss

通过使用三组训练数据样本(而不是成对样本),这种设置优于前者(同时优化类内距离和类间距),目标就是使得锚点与负样本距离显著大于(由margin决定)与正样本的距离,loss定义如下。

我们来分析一下这种损失的三种情况:

Easy Triplets: 相对于嵌入空间中的正样本,负样本已经足够远离锚定样本。损失是0并且网络参数不会更新。

Hard Triplets: 负样本比正样本更接近锚点,损失是正的。

Semi-Hard Triplets:负样本比正样本离锚的距离远,但距离不大于margin,所以损失仍然是正的。

负样本选择:

在triplets loss训练过程中,负样本选择和三元祖样本挖掘是非常重要的。选择的策略对训练的效率和最终效果有很大的影响。一个很重要的点是,训练三元祖应避免easy triplets,因为他们所造产生的loss是0,不能用于优化模型。

样本挖掘的第一种策略离线进行三元组挖掘,这意味着三元组是在训练开始时定义的,或者是在每个epoch前。后来又提出了online triplet loss(在线三元组挖掘),即在训练过程中为每一个epoch定义三元组,从而提高了训练效率和性能。

需要注意的是,选择负样本的最佳方法是高度依赖于任务的。

Circle loss

在理解了triplet loss之后,我们终于可以开始研究circle loss:A Unified Perspective of Pair Similarity Optimization。Circle Loss 获得了更灵活的优化途径及更明确的收敛目标,从而提高所学特征的鉴别能力。它使用同一个公式,在两种基本学习范式,三项特征学习任务(人脸识别,行人再识别,细粒度图像检索),十个数据集上取得了极具竞争力的表现。

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

整理不易,还望给个在看!

【损失函数】一文弄懂各种loss function相关推荐

  1. 一文弄懂各种loss function

    有模型就要定义损失函数(又叫目标函数),没有损失函数,模型就失去了优化的方向.大家往往接触的损失函数比较少,比如回归就是MSE,MAE,分类就是log loss,交叉熵.在各个模型中,目标函数往往都是 ...

  2. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  3. 【一文弄懂】优先经验回放(PER)论文-算法-代码

    [一文弄懂]优先经验回放(PER)论文-算法-代码 文章目录 [一文弄懂]优先经验回放(PER)论文-算法-代码 前言: 综合评价: 继续前言唠叨 per论文简述: 参考博客: 背景知识 A MOTI ...

  4. 一文弄懂 Diffusion Model

    什么是 Diffusion Model 一.前向 Diffusion 过程 Diffusion Model 首先定义了一个前向扩散过程,总共包含T个时间步,如下图所示: 最左边的蓝色圆圈 x0 表示真 ...

  5. 一文弄懂神经网络中的反向传播法

    最近在看深度学习的东西,一开始看的吴恩达的UFLDL教程,有中文版就直接看了,后来发现有些地方总是不是很明确,又去看英文版,然后又找了些资料看,才发现,中文版的译者在翻译的时候会对省略的公式推导过程进 ...

  6. 一文弄懂神经网络中的反向传播法——BackPropagation【转】

    本文转载自:https://www.cnblogs.com/charlotte77/p/5629865.html 一文弄懂神经网络中的反向传播法--BackPropagation 最近在看深度学习的东 ...

  7. 一文弄懂String的所有小秘密

    文章目录 简介 String是不可变的 传值还是传引用 substring() 导致的内存泄露 总结 一文弄懂String的所有小秘密 简介 String是java中非常常用的一个对象类型.可以说ja ...

  8. 一文弄懂EnumMap和EnumSet

    文章目录 简介 EnumMap 什么时候使用EnumMap EnumSet 总结 一文弄懂EnumMap和EnumSet 简介 一般来说我们会选择使用HashMap来存储key-value格式的数据, ...

  9. CAD2010 为了保护_一文弄懂,锂电池的充电电路,以及它的保护电路方案设计

    原标题:一文弄懂,锂电池的充电电路,以及它的保护电路方案设计 锂电池特性 首先,芯片哥问一句简单的问题,为什么很多电池都是锂电池? 锂电池,工程师对它都不会感到陌生.在电子产品项目开发的过程中,尤其是 ...

  10. deque stack java_一文弄懂java中的Queue家族

    简介 java中Collection集合有三大家族List,Set和Queue.当然Map也算是一种集合类,但Map并不继承Collection接口. List,Set在我们的工作中会经常使用,通常用 ...

最新文章

  1. python【Matlibplot绘图库】基本使用(真の能看懂~!)
  2. Asp.net控件之异同:HTML控件与Web服务器控件
  3. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
  4. 五分钟重温斐波那契数列
  5. [云炬python3玩转机器学习笔记] 3-3Numpy数据基础
  6. springboot2 虚拟路径设置_转载—springboot配置虚拟路径以外部访问
  7. oracle_数据库对象
  8. 排查指南 | 当 mPaaS 小程序提示“应用更新错误(1001)”时
  9. (转)python 搭建libsvm方法。python版本和libsvm版本匹配很重要!
  10. STM32F103_EXTI外部中断
  11. [Web Chart系列之三] 图形布局-Layout
  12. HTML CSS JS 特殊字符(转义)表
  13. steam linux安装目录在哪,Ubuntu 16.04 LTS 64位下安装steam游戏平台
  14. iMazing2.14.6Mac最新版iOS苹果设备管理器
  15. UE4 初学者内容包介绍
  16. 正睿集训模拟赛 Day1
  17. java jws配置_与WordNet有关的两个JAVA库(JWNL和JWS)的配置
  18. 力天创见人脸识别客流统计方案
  19. SAP批量查询组件BOM引用报表
  20. 数字图像处理——第十章(图像分割)

热门文章

  1. 操作系统CPU上下文切换
  2. 设计OA系统的用户-角色-权限分配
  3. POJ1637 Sightseeing tour(判定混合图欧拉回路)
  4. 学生管理系统----当然封装类型
  5. 各位数字之和——一个神奇的结论
  6. java day27【DQL:查询语句、约束 、多表之间的关系 、范式 、数据库的备份和还原】...
  7. c++学习 -- #program once
  8. 关于中断和异常的几点认识
  9. 线程挂起 阻止有什么区别c#
  10. 创建Rss Feeds(一)