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

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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res