深度学习实用方法 - 性能度量篇

2024-08-26 08:36

本文主要是介绍深度学习实用方法 - 性能度量篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序言

在深度学习的广阔领域里,性能度量是连接理论与实践的桥梁,它不仅是评估模型效果的关键指标,也是指导模型优化与改进的重要依据。随着大数据时代的到来和计算能力的提升,深度学习模型在图像识别、自然语言处理、推荐系统等多个领域取得了突破性进展。然而,如何准确、全面地评估这些复杂模型的性能,成为了研究者们面临的重要挑战。性能度量不仅关乎模型预测的准确性,还涉及到稳定性、泛化能力、计算效率等多个维度,为深度学习的发展提供了不可或缺的评估体系。

性能度量

  • 确定目标,即使用什么误差度量,是必要的第一步,因为误差度量将指导接下来的所有工作。同时我们也应该了解大概能得到什么级别的目标性能。
  • 注意,对于大多数应用而言,不可能实现绝对零误差。即使你有无限的训练数据,并且恢复了真正的概率分布,贝叶斯误差仍定义了能达到的最小错误率。这是因为输入特征可能无法包含输出变量的完整信息,或是因为系统可能本质上是随机的。当然我们还会受限于有限的训练数据。
  • 训练数据的数量会因为各种原因受到限制。
    • 当目标是打造现实世界中最好的产品或服务时,通常需要收集更多的数据,但必须确定进一步减少误差的价值,并与收集更多数据的成本做权衡。
    • 数据收集会耗费时间,金钱,或带来痛苦(例如,收集人体医疗测试数据)。
    • 科研中,目标通常是在某个确定基准下探讨哪个算法更好,一般会固定训练集,不能收集更多的数据。
  • 如何确定合理的性能期望?
    • 在学术界,通常我们可以根据先前公布的基准结果来估计预期错误率。
    • 在现实世界中,一个应用的错误率有必要是安全的,具有成本效益的,或吸引消费者的。
    • 一旦你确定了想要达到的错误率,那么你的设计将由如何达到这个错误率来指导。
  • 除了需要考虑性能度量之外,另一个需要考虑的是度量的选择。
    • 我们有几种不同的性能度量,可以用来度量含有机器学习的应用的性能。
    • 这些性能度量通常不同于训练模型的损失函数。
    • 如在学习算法篇 - 性能度量P中所述,我们通常会度量一个系统的准确率,或等价的错误率。
  • 然而,许多应用需要更高级的度量。
  • 有时,一种错误可能会比更一种错误更严重。例如,垃圾邮件检测系统会有两种错误:将正常邮件归为垃圾邮件,将垃圾邮件归为正常邮件。阻止正常消息比通过可疑消息更糟糕。不去度量垃圾邮件分类的错误率,我们希望度量某种形式的总损失,其中拦截正常邮件比通过垃圾邮件的代价更高。
  • 有时,我们需要训练检测某些罕见事件的二元分类器
    • 例如,我们可能会为一种罕见疾病设计医疗测试。假设每一百万人中只有一人患病。
    • 简单地让分类器一直报告没有患者,我们就能在检测任务上实现 99.9999 % 99.9999\% 99.9999% 的正确率。
    • 显然,正确率很差地体现了这种系统的性能。
    • 解决这个问题的方法是度量精度 ( precision \text{precision} precision) 和召回率 ( recall \text{recall} recall)。 精度是模型报告的检测是正确的比率,而召回率则是真实事件被检测到的比率。检测器一只报告没有患者,可能会有一个很高的精度,但召回率为零。而报告每个人都是患者的检测器可能有很高的召回率,但是精度很低(在我们的例子是 0.0001 % 0.0001\% 0.0001%,每一百万人只有一人患病)。
    • 当使用精度和召回率时,通常会画 PR \textbf{PR} PR 曲线 y \text{y} y 轴表示精度, x \text{x} x 轴表示召回率。
      • 如果检测到的事件发生了,那么分类器会返回一个比较高的值。
      • 例如,我们将前馈网络设计为检测一种疾病,估计一个医疗结果由特征 x \text{x} x 表示的人患病的概率为 y ^ = P ( y = 1 ∣ x ) \hat{y}=P(y=1|\boldsymbol{x}) y^=P(y=1∣x)
      • 每当这个值超过某个阈值时,我们报告检测结果。
      • 通过调整阈值,我们能以精度换召回率。
      • 在很多情况下,我们希望用一个数而不是曲线来概括分类器的性能。
      • 要做到这一点,我们可以转换精度 p p p 和召回率 r r r F-score \textbf{F-score} F-score F = 2 p r p + r F=\displaystyle\frac{2pr}{p+r} F=p+r2pr — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1
        另一种方法是报告 PR \text{PR} PR曲线下方的总面积。
  • 在一些应用中, 机器学习系统可能会拒绝做出判断
    • 机器学习算法能够估计对判断的确信度,会是非常有用的,特别是在错误判断会有严重危害,而人工操作员能够偶尔接管的情况下。
    • 街景转录系统可以作为这种情况的一个示例。该任务是转录照片上的地址号码,以关联到地图上拍摄照片的位置。因为如果地图是不精确的,那么地图的价值会严重下降。因此只在转录正确的情况下添加地址十分重要。
    • 如果机器学习系统认为它不太能像人一样正确地转录,那么最好办法当然是让人来转录照片。当然,我们有必要让机器学习系统大量降低需要人工操作处理的图片,这样它才是有用的。在这种情况下,一种自然的性能度量是覆盖率 ( coverage \text{coverage} coverage)。
    • 覆盖率是机器学习系统能够产生响应的样本所占的比率。有可能以覆盖率换精度。一个系统总可以通过拒绝处理任意样本的方式来达到 100 % 100\% 100% 的精度,但是覆盖率降到了 0 % 0\% 0%。对于街景任务,该项目的目标是达到人类转录的精度,同时保持 95 % 95\% 95% 的覆盖率。这项任务的人类级别性能是 98 % 98\% 98% 的精度。
  • 还有许多其他的性能度量
    • 例如,我们可以度量点击率,收集用户满意度调查,等等。
    • 许多专业的应用领域也有特定于应用的标准。
  • 最重要的是首先要确定改进哪个性能度量,然后集中提高性能度量。如果没有明确的目标,那么我们很难判断机器学习系统上的改动是否有所改进

总结

  • 深度学习中的性能度量是一个多维度、多层次的概念,它要求我们在追求高准确率的同时,也要关注模型的稳定性、鲁棒性、计算效率及可解释性等多方面因素。
  • 通过设计合理的性能评估指标,我们能够更全面地了解模型的优缺点,进而指导模型的优化与改进。
  • 未来,随着深度学习技术的不断演进,性能度量体系也将日益完善,为推动人工智能领域的进一步发展提供有力支撑。在这个过程中,研究者们需要不断探索新的评估方法,以适应日益复杂的任务需求,同时保持对模型性能的全面把控,确保深度学习技术能够在实际应用中发挥更大的价值。

往期内容回顾

应用数学与机器学习基础 - 学习算法篇

这篇关于深度学习实用方法 - 性能度量篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108069

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱