模型训练——Loss函数 归纳汇总

2023-11-08

上一篇文章《语音降噪模型归纳汇总》,很意外地收到了点赞收藏和关注,如此的反馈给了我极大的鼓舞,这里就再梳理了一下loss函数相关的知识,以求方便能作为一份工具性质的文章展现出来。能力一般,水平有限,欢迎大家指正。

干货分享:欢迎收藏点赞加关注

目录

在这里插入图片描述

前言

  • 什么是损失(Loss)?
    预测值(估计值)与实际值(预期值、参考值、ground truth)之间会存在差异, “损失”意味着模型因未能产生预期结果而受到的惩罚。
  • 损失函数的作用?
    损失函数将通过比较模型的预测输出和预期输出来确定模型的性能,进而寻找优化方向。如果二者之间的偏差非常大,则损失值会很大;如果偏差很小或值几乎相同,损失值会非常低。因此,需要使用合适的损失函数,当模型在数据集上进行训练时,该函数可以适当地惩罚模型。
  • 根据应用场景,损失函数可以分为两个大类:回归问题 和 分类问题。
  • 本文会着重渗透语音降噪方向的loss函数,基于torch。

一、回归问题 Loss

1、MAE Loss(L1 Loss)

平均绝对误差(MAE)损失,也称L1范数损失,计算实际值和预测值之间绝对差之和的平均值。
在这里插入图片描述

适用于回归问题,MAE loss对异常值更具鲁棒性,尤其是当目标变量的分布有离群值时(小值或大值与平均值相差很大)。
函数:torch.nn.L1Loss

2、MSE Loss(L2 Loss)

均方误差(MSE)损失,也称为L2范数损失,计算实际值和预测值之间平方差的平均值。
平方意味着较大的误差比较小的误差会产生更大的惩罚,所以MSE的收敛速度要比L1-loss要快得多。但是,L2 Loss对异常点更敏感,鲁棒性差于L1。
loss_{MAE}=\frac{1}{N}\sum_{i=1}^{N}{\left( \hat{y}_{i}-y_{i} \right)^{2}}
对于大多数回归问题,一般是使用MSE loss而不是L1-loss。
函数: torch.nn.MSELoss
3、loss正则化

在这里插入图片描述

  • 正则化有防止过拟合的作用,为啥呢?
    正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。给loss function加上正则化项,能使得新得到的优化目标函数h = f+normal,需要在f和normal中做一个权衡(trade-off),如果还像原来只优化f的情况下,那可能得到一组解比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,符合奥卡姆剃刀理论,同时也比较符合在偏差和方差(方差表示模型的复杂度)分析中,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。L1正则化与L2正则化
    :dropout有防止过拟合的作用。

  • PyTorch实现: L2正则项是通过optimizer优化器的参数 weight_decay(float, optional) 添加的,用于设置权值衰减率,即正则化中的超参 \lambda ,默认值为0。

e.g. optimizer = torch.optim.SGD(model.parameters(),lr=0.01,weight_decay=0.01)

:根据公式,添加正则化项,loss值会随着超参 \lambda 设定不同程度的变大,而实际pytorch实现过程中却并未出现如此现象,原因是loss在计算的时候没有把权重损失算进去。

4、Smooth L1 Loss

在这里插入图片描述

一般取 \beta=1 。smooth L1和L1-loss函数的区别在于, smooth L1在0点附近使用L2使得它更加平滑, 它同时拥有L2 Loss和L1 Loss的部分优点。
函数:torch.nn.SmoothL1Loss

5、Huber Loss

在这里插入图片描述
残差比较小时,此函数是二次函数;残差比较大时,此函数是线性函数。残差,即观测值和预测值之间的差值。与平方误差损失相比,Huber损失对数据中的异常值不那么敏感。使函数二次化的小误差值是多少取决于“超参数” \delta ,它可以调整。当 \delta=1 时,退化成SmoothL1Loss。
在这里插入图片描述
函数:torch.nn. HuberLoss

以下内容的更详细解析,请移步至传送门 模型训练——Loss函数

6、Log-MSE Loss

在这里插入图片描述

7、RMSE Loss

在这里插入图片描述

8、SDR Loss

SDR loss在很多论文中也称作SNR loss。
物理意义和解析过程引自台湾省台湾大学李宏毅教授的教材,符号使用有些非常规,注意观察。
在这里插入图片描述
在这里插入图片描述

9、SI-SDR Loss

在这里插入图片描述

10、STOI Loss

公式原理参考论文:
《On Loss Functions for Supervised Monaural Time-Domain Speech Enhancement》
开源代码:
https://github.com/speechbrain/speechbrain/blob/develop/speechbrain/nnet/loss/stoi_loss.py

11、PMSQE Loss

对语音质量评估的主要metric,有PESQ(POLQA)、SDR、STOI等,为啥SDR和STOI都有对应的loss函数,PESQ没有呢 ?
因为成为loss函数的前提是算法可微可导,PESQ算法本身不具备。
PMSQE损失函数是用于近似PESQ metric的一种语音质量算法。经过处理的语音信号的PESQ分数是1到4.5之间值,其中1表示质量极差,4.5表示完全没有失真。PMSQE loss函数的设计与PESQ成反比,低PMSQE值对应高PESQ值。PMSQE的定义范围为3到0,其中0相当于未失真信号,3相当于极低的质量。
在这里插入图片描述
参考论文
《On Loss Functions for Supervised Monaural Time-Domain Speech Enhancement》
开源代码:
http://sigmat.ugr.es/PMSQE/PMSQE.zip

二、技巧性应用 Loss

1、wSDR Loss

在这里插入图片描述
参考论文
《PHASE-AWARE SPEECH ENHANCEMENT WITH DEEP COMPLEX U-NET》
开源代码
https://github.com/chanil1218/DCUnet.pytorch/blob/master/train.py

2、CI-SDR Loss

在这里插入图片描述
公式没看懂,看懂的同学帮忙解释一下~
参考论文
《CONVOLUTIVE TRANSFER FUNCTION INVARIANT SDR TRAINING CRITERIA FOR MULTI-CHANNEL REVERBERANT SPEECH SEPARATION》
开源代码
https://github.com/fgnt/ci_sdr

3、Deep Feature Loss

在这里插入图片描述
在这里插入图片描述
参考论文
《Speech Denoising with Deep Feature Losses》
开源代码
https://github.com/francoisgermain/SpeechDenoisingWithDeepFeatureLosses

4、SA-SDR Loss

在这里插入图片描述
参考论文
《SA-SDR: A NOVEL LOSS FUNCTION FOR SEPARATION OF MEETING STYLE DATA》

5、Multi-task learning loss

在这里插入图片描述
https://zhuanlan.zhihu.com/p/269492239

《Multi-Task Learning Using Uncertainty to Weigh Losses for Scene Geometry and Semantics》. Alex Kendall, Yarin Gal, Roberto Cipolla. CVPR, 2018.important
基本思想是估计每个任务的不确定度,每个loss的加权与不确定度关联,如果不确定度大,自动把loss的权重减小。
《Bounding Box Regression with Uncertainty for Accurate Object Detection》. Yihui He, Chenchen Zhu, Jianren Wang, Marios Savvides, Xiangyu Zhang. CVPR, 2019.

以下内容的更详细解析整理在->传送门 模型训练——Loss函数

三、分类问题 Loss

1、Hinge Loss

2、NLL Loss

3、Cross Entropy Loss

4、KL Divergence Loss

5、CosineEmbeddingLoss

以上内容的更详细解析整理在->传送门 模型训练——Loss函数

参考文章
https://zhuanlan.zhihu.com/p/358570091
https://blog.csdn.net/zhangxb35/article/details/72464152
pytorch的官方loss函数实现解析链接:
https://pytorch.org/docs/stable/nn.html#loss-functions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模型训练——Loss函数 归纳汇总 的相关文章

  • 龙芯比赛vivado调试试错手记

    文章目录 第一个阶段 除掉所有的语法错误 第二个阶段 调出绿线 第三个阶段 调出trace对比机制 第四阶段 各种调试 第一个阶段 除掉所有的语法错误 刚开始在文件夹里加了我的CPU文件但是在工程里面没添加 然后报错 找不到你的的CPU I

随机推荐

  • 数学基础--均值、方差、标准差、协方差

    1 简介 统计学中最核心的概念之一是 标准差及其与其他统计量 如方差和均值 之间的关系 本文将对标准差这一概念提供直观的视觉解释 在文章的最后我们将会介绍协方差的概念 2 概念介绍 均值 均值 均值就是将所有的数据相加求平均 求得一个样本数
  • 网易数据分析高级总监:10年数据分析老司机的深度思考!

    关注上方 肉眼品世界 选择星标 本文整理自知乎专栏 突破数据分析 1 作者是网易数据分析高级总监贺志 我是一个数据从业者 很早以前就想把自己在工作和学习中的心得做个总结 一方面是对自己过往经历的一个总结和回顾 一方面最近几年大数据是越来越火
  • java定义正则表达式,JAVA——正则表达式基本语法

    一 正则表达式概念 使用单个字符串来描述 匹配一系列符合某个语法规则的字符串 二 正则表达式常用字符 1 字符类 如 abc 将字符进行归类 可以出现 中的其中一个 对abc其中一个进行匹配 abc 对不是abc的字符进行匹配 2 范围类
  • python中获取cookie的两种方法

    第一种是利用selenium phantomjs无界面浏览器的形式访问网站 再获取cookie值 导入模块 from selenium import webdriver driver webdriver PhantomJS url http
  • apache camel详解

    apache camel 两篇比较详细的介绍 上 http www uml org cn zjjs 201801223 asp 中 http www uml org cn zjjs 201801222 asp apache camel比较详
  • Jenkins与DevOps持续交付详解

    一 Jenkins简介 1 Jenkins简介 Jenkins是一个开源项目 提供了一种易于使用可扩展的持续集成系统 使开发者从繁杂的集成中解脱出来 专注于更为重要的业务逻辑实现上 同时Jenkins能实时监控集成时存在的错误 提供详细的日
  • RabbitMQ学习总结

    RabbitMQ 简介 消息中间件 什么是中间件呢 非底层操作系统软件 非业务应用软件 不是直接给最终用户使用的 不能直接给客户带来价值的软件统称为中间件 什么是消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流 并基于
  • Kali下使用一行python代码实现简易的http服务器

    比如我在kali的tmp目录下执行下列代码 就可以在当前目录开启一个http服务 python m SimpleHTTPServer 然后就可以从另一台机器访问kali的ip下 tmp目录的内容 这样就可以传输文件等操作
  • html2canvas多个id,在同一个canvas里显示多个图形

    代码 html js function id return document getElementById id 绘制正多边形的封装函数 window onload function var cnv1 canvas1 var cxt1 cn
  • kali linux子系统的网络配置

    kali linux子系统的网络配置 配置kali子系统时 踩了一些坑 主要是网络配置时卡了挺久 因为wsl2安装时默认为NAT模式 而在测试过程中 经常会需要反弹shell或开启服务让靶机下载文件之类的操作 因此最好使用桥接模式 kali
  • html鼠标背景特效,6种鼠标滑过按钮背景动画特效

    插件描述 这是一组效果非常酷的鼠标滑过按钮背景动画特效 该特效中 当鼠标滑过按钮时 使用CSS3 animation来动画backgroundsize和backgroundposition属性 来制作各种背景动画效果 简要教程 这是一组效果
  • 判断两个字符串是否相等的更好方法

    在Java中 判断两个字符串是否相等有几种常见的方法 以下是其中一些更好的方法 1 使用equals 方法 java String str1 Hello String str2 World if str1 equals str2 字符串相等
  • SpringMVC的请求(获取参数以及静态资源访问)

    SpringMVC的请求 SpringMVC的请求 1 SpringMVC的请求 获得请求参数 请求参数类型 理解 2 SpringMVC的请求 获得请求参数 获得基本类型参数 应用 3 SpringMVC的请求 获得请求参数 获得POJO
  • systemctl 命令详解及使用教程

    在本教程中 我们将向您介绍在运行systemd的linux系统上如何使用systemctl命令工具有效的控制系统和服务 Systemctl 介绍 Systemctl是一个systemd工具 主要负责控制systemd系统和服务管理器 Sys
  • VM虚拟机-安装Linux、windows、windows server超详细步骤演示

    本文章所展示的workstation为15 5版本 Linux为Redhat7 4版本 Windows为win10版本 windows server 2012版本 其他版本的安装过程都大致同理 目录 VMware Workstation安装
  • Linux编译FFmpeg

    Linux编译FFmpeg 1 下载FFmpeg源码 FFmpeg源码下载地址 http ffmpeg org download html 在下面选择版本 2 解压并创建生成目录 tar xvf ffmpeg snapshot tar bz
  • 单独编译使用WebRTC的音频处理模块

    单独编译使用WebRTC的音频处理模块 2016年12月08日 14 26 58 starRTC免费IM直播会议一对一视频 阅读数 8360 版权声明 starRTC免费im直播会议一对一视频 by elesos com starRTC c
  • Java中AWT、Swing与SWT三大GUI技术的原理与效率差异

    转自 http blog csdn net widegoose article details 333908 MineHe原创 看了一下对Java GUI讨论的帖子 所以写了一篇文章来阐述一下各种GUI技术的优劣 Java世界中 目前最知名
  • 黑马程序员Javaweb学习笔记02【request和response】

    该博客主要记录在学习黑马程序员Javaweb过程的一些笔记 方便复习以及加强记忆 系列文章 JavaWeb学习笔记01 BS架构 Maven Tomcat Servlet JavaWeb学习笔记02 request和response Jav
  • 模型训练——Loss函数 归纳汇总

    上一篇文章 语音降噪模型归纳汇总 很意外地收到了点赞收藏和关注 如此的反馈给了我极大的鼓舞 这里就再梳理了一下loss函数相关的知识 以求方便能作为一份工具性质的文章展现出来 能力一般 水平有限 欢迎大家指正 干货分享 欢迎收藏点赞加关注