机器学习策略Ⅱ

机器学习策略Ⅱ

误差分析

  1. 在训练算法的时候,可以通过人工检查算法在开发集或测试集上的错误,分析错误类型,来识别值得优先解决的问题。这样子可以帮助开发者确定哪些方向有最大的性能改进空间,避免将大量时间浪费在影响较小的错误类型上。

    基本流程是首先从开发集或测试集中选择100个错误样本进行分析,人工标记每个错误的类型(如狗、模糊图像、大猫等),计算每种错误类型的占比来判断每种错误类型的性能改善上限。

    如果在100个错误样本中只有5%是狗,那么即使完全解决狗问题,错误率最多只能从10%下降到9.5%,性能改善有限。如果50%的错误是狗,那么解决狗的问题可以将错误率从10%降低到5%,性能改善潜力显著。

    通过手动的错误分析,可以确定高优先级优化方向,避免将大量时间浪费在低影响力的错误类型上,从而了解每种优化方向的最大潜在性能提升。

  2. 在监督学习中,输出标签 y y y 的标记错误可能来自标注人员的疏忽或系统性问题,训练集、开发集和测试集中都可能存在错误标签。

    在训练集中:

    对于随机错误,深度学习算法对随机标记错误较为健壮,通常不会显著影响模型性能,不需要花费大量时间修正。只要数据集足够大,模型依然可以学习到良好的特征。对于系统性错误,例如所有白色狗都被标记为猫,这种错误可能导致模型学习到错误的特征,需要优先修正。

    在开发集和测试集中:

    开发集用于选择和评估不同模型,帮助决定哪个模型表现更好。如果开发集的标记错误过多,会影响模型评估的可靠性。

    可以先检查开发集的100个错误样本,记录标签错误的样本并计算占比,以及标签错误对整体错误率的影响。如果整体错误率较高(例如10%错误,标签错误占0.6%),那么标签错误的影响较小,修正价值较低。如果整体错误率较低(例如2%错误,标签错误占0.6%),那么标签错误占总错误的比例较大(30%),修正标签错误更有价值。

    一般优先修正开发集与测试集,这两者对模型评估和选择有直接影响。还要保证开发集和测试集来自相同的分布,否则模型的评估结果将不可靠。如果修正了开发集的标签,那么测试集的标签也必须进行同样的修正。对于训练集标签错误通常不优先修正,除非存在明显的系统性错误。

  3. 在开发全新的机器学习应用时,建议尽快建立第一个系统原型,而不是在初期花费大量时间构建一个复杂系统。这一阶段的核心是设立开发集和测试集,定义评估指标,并训练一个初始模型进行性能测试。通过初始系统,可以使用偏差/方差分析错误分析,识别性能瓶颈,找出最值得优先解决的问题。

    在实际的优化过程中,错误分析尤为重要,它可以帮助开发者识别哪些错误来源最值得投入时间和资源,确定哪些方向具有最大的性能提升空间,避免在影响较小的问题上浪费精力。此外,如果某个领域已有大量成熟的学术研究成果(如人脸识别领域),那么直接参考现有方法而非从零开始构建简单原型可能更为高效。

    迭代优化是机器学习系统开发的关键。初始原型的意义在于,它提供了一个可供分析和调整的基础,而不是一次性构建完美的系统。通过多轮迭代,逐步解决高优先级问题,系统性能将得到显著提升。开发者的目标是构建一个实用的系统,而不是在每一步都追求理论上的最优解。

  4. 在实际应用中,例如开发一个猫图像分类的手机应用,开发者可能面临两种数据来源:一部分来自用户上传的手机照片(业余、模糊、不稳定),另一部分来自互联网上的高质量猫图像(专业、清晰)。虽然网络数据更丰富,但它与真实用户上传的分布存在差异。如果简单地将两类数据合并并随机分配到训练集、开发集和测试集中,那么开发集和测试集将充斥着不相关的网络数据,导致开发集无法反映实际任务的表现。这种情况下,更好的做法是将全部网络数据和小部分真实数据放入训练集,同时将来自用户上传的真实数据作为开发集和测试集,以确保模型优化的目标聚焦于实际应用场景。这种数据分配策略既充分利用了大量通用数据,又保持了开发集和测试集与实际场景分布的一致性。

    在处理训练数据的分布与开发集、测试集的分布不一致的问题时,关键在于开发集和测试集必须聚焦于真实应用场景,以便准确评估系统在实际任务中的表现。训练集可以包含更多来自不同分布的数据,以扩大样本规模,帮助模型学习到更丰富的特征。

  5. 训练集与开发集、测试集来自不同分布时,传统的偏差-方差分析方法可能不再完全适用。这种分布差异可能会掩盖算法的实际问题,导致难以判断错误的来源。为了更清晰地分析这种情况,引入训练-开发集(Training-Dev Set),它从训练集的分布中随机抽取一部分数据,但不参与模型的训练,仅用于评估。这种划分方式有助于将错误来源分解为三种核心问题:可避免偏差、方差和数据不匹配

    通过比较训练误差训练-开发集误差,可以判断算法是否存在方差问题。如果训练误差较低,而训练-开发集误差显著升高,说明算法在训练数据上表现良好,但泛化能力不足,难以推广到未见过的、但分布相同的数据上。如果训练-开发集误差与训练误差接近,但开发集误差大幅上升,那么问题更可能是数据不匹配,即开发集数据与训练集数据存在显著分布差异,导致模型难以在开发集上取得良好表现。

    通过观察人类水平错误率训练误差之间的差距,可以衡量可避免偏差的大小。如果训练误差远高于人类水平错误率,说明模型在训练集上还有很大的优化空间,表现尚未达到理论上可以达到的最优水平。

  6. 当训练集与开发集、测试集存在数据分布不匹配时,可以进行细致的错误分析。开发者可以人工检查开发集样本,分析数据分布的差异,了解训练集和开发集之间存在哪些特定的不同。例如,在语音识别系统中,可能发现开发集包含大量背景噪音,或者特定场景(如街道号码识别)尤为突出。

    在发现数据不匹配的具体原因后,调整训练数据使其更接近开发集是一个常见的解决思路。这可以通过两种途径实现:一是直接收集更多与开发集相似的数据,例如录制更多具有车辆背景噪音的音频;二是使用人工数据合成技术,将现有的训练数据进行模拟和扩展。例如,在语音识别任务中,可以将安静环境下的录音与车辆噪音进行合成,从而创造出更多贴近实际应用场景的训练样本。这种方法能够在较低成本下快速生成大量有效的数据,显著提高算法在实际场景中的表现。

    然而,人工数据合成也存在风险。如果背景噪音样本或合成素材过于有限(例如只有一小时的汽车噪音片段被重复使用),那么模型可能会对这个有限的噪音样本过拟合,导致泛化性能下降。这种风险在计算机视觉任务中也同样存在。例如,利用计算机渲染技术合成车辆图像进行训练时,如果仅合成了少量独特的车辆外观,模型可能会对这些有限的图像特征过拟合,而无法泛化到真实世界中多样化的车辆外观。因此,在进行人工数据合成时,需要尽量保证合成样本的多样性和覆盖面,避免数据分布过于局限。

    除了人工合成数据,主动收集更多真实场景中的数据也是解决数据不匹配问题的重要策略。例如,在语音识别任务中,可以增加真实车辆环境中的录音,或在图像识别任务中,收集更多不同背景、角度和光照条件下的车辆图像。真实数据的多样性有助于减少模型对特定数据子集的依赖,提升泛化性能。

迁移学习

  1. 迁移学习允许神经网络将从一个任务中学习到的知识迁移并应用到另一个独立但相关的任务上。这种技术在两个任务共享相似的输入特征时尤为有效。例如,一个在图像识别任务上训练良好的神经网络,可以将其低层次特征(如边缘检测、曲线检测等)迁移到放射图像诊断任务中,从而在放射科任务中获得更好的效果。具体操作包括:将原始神经网络的最后一层输出层替换为新的输出层,并对该层进行随机初始化。**如果目标任务的数据集较小,通常只需训练新的输出层;但如果目标任务有足够多的数据,甚至可以微调整个神经网络的所有参数。这个过程分为预训练(Pre-training)微调(Fine-tuning)**两个阶段,前者在源任务上初始化权重,后者在目标任务上优化权重。

    然而,迁移学习并不总是有效的。如果源任务的数据量比目标任务少,或者两个任务的特征差异较大,那么迁移学习的增益可能非常有限。例如,如果使用100张猫狗图像训练的模型迁移到放射科图像诊断任务上,即使在放射科任务中有1000张图像,迁移学习的效果也可能微乎其微,因为两者的低层次特征并不完全相同,且目标任务的每个样本价值远高于源任务的样本。

    迁移学习的有效性取决于几个关键条件。首先,源任务和目标任务共享相似的输入特征(如图像或音频)。其次,源任务的数据量远大于目标任务的数据量,因为在这种情况下,源任务可以为目标任务提供有价值的低层次特征。最后,如果源任务学习到的低层次特征对目标任务有帮助,迁移学习将更有可能取得显著的性能提升。在实践中,迁移学习在目标任务数据较少但特征共享较多的场景中表现最佳。

    总之,迁移学习的核心在于充分利用源任务中学到的知识,降低目标任务对大规模数据的依赖,缩短训练时间,并提升模型的性能。然而,这种方法并非在所有场景下都有效,需要仔细分析任务之间的相似性、数据量的对比以及特征的可迁移性。

多任务学习

  1. 多任务学习(Multi-Task Learning) 通过一个神经网络同时处理多个任务,期望这些任务之间可以共享低层次特征,从而相互促进性能提升。这与迁移学习不同,迁移学习是先在一个任务上训练模型,再将学习到的知识迁移到另一个任务上,而多任务学习则是同时训练一个神经网络,试图让不同任务之间互相支持,共同提升整体性能。

    在无人驾驶车辆中,神经网络可能需要同时检测行人、车辆、停车标志和交通灯。这意味着每张图像都有多个标签,每个标签表示特定对象的存在与否。因此,神经网络的输出是一个多维向量,每个维度对应一个任务。训练时,网络的损失函数需要对每个任务的预测进行独立评估,再将这些损失综合起来进行优化。这种方式不同于Softmax回归,因为在多任务学习中,每个样本可以同时属于多个类别,而不是单一类别。

    共享低层次特征使得多任务学习在某些场景中表现优于单独训练多个独立的神经网络。早期神经网络层学到的特征(例如边缘检测、纹理识别等)对多个任务往往是通用的,因此共享这些特征能够减少冗余计算,提高训练效率。

    此外,多任务学习也可以在标签不完整的场景下运作,即某些任务可能在某些样本上缺少标签。在这种情况下,可以在损失函数中忽略这些未标记的任务,仅使用有标签的任务进行训练,这样即使部分数据不完整,网络依然可以有效学习。

    多任务学习的有效性依赖于几个关键条件。首先,不同任务之间必须共享某些低层次特征,例如在无人驾驶场景中,识别行人、车辆和交通标志都涉及边缘、形状等相似特征。其次,任务之间的数据量分布需要合理,如果某个任务的数据量远少于其他任务,那么多任务学习可能不会带来显著增益。一个常见的经验法则是,单个任务的数据量不应明显小于其他任务的总数据量,否则单个任务可能无法从其他任务中有效受益。最后,神经网络的规模必须足够大,以便同时容纳多个任务的特征学习。如果网络规模不足,多任务学习的性能甚至可能低于多个单独训练的网络。

端到端深度学习

  1. 端到端深度学习(End-to-End)的核心思想是将多个传统机器学习流程的处理阶段整合成一个单一的神经网络模型进行训练,能够简化系统设计。传统的机器学习方法往往需要多个独立的步骤,例如在语音识别中,先提取音频特征,再用机器学习算法识别音位、词语等,最后得出文本。而端到端深度学习则将输入和输出之间的映射通过一个大规模神经网络来完成,从而省略了传统流程中的各个步骤。

    这种方法可以在大数据集的情况下取得优异表现。例如,在语音识别中,当数据集规模达到上万小时时,端到端模型的效果会优于传统方法。然而,当数据较少时,传统的分阶段方法往往能取得更好的结果。

    在一些任务中,分解成多个步骤可能会更有效。例如,在人脸识别的门禁系统中分两步进行,首先检测人脸位置,然后判断身份,反而能得到更好的效果。这是因为每个子任务都比较简单,而且有大量的标注数据可以用于训练。

  2. 在决定是否使用端到端深度学习时,核心问题在于是否有足够的数据来支撑模型学习复杂的函数映射。如果数据充足,端到端方法通常能获得较好的效果,但如果数据较少或任务复杂,可能需要结合手工设计的组件或者采用更复杂的多步骤方法。

    优点:

    • 端到端深度学习的最大优势之一是能够让数据驱动学习过程,而不需要人工设计中间步骤。通过足够的 ( x , y ) (x,y) (x,y) 数据,深度神经网络能够自动学习出最合适的输入到输出的映射,而无需依赖人工设定的表示或功能。这使得端到端方法能够更好地捕捉数据中的规律,避免了人为的偏见和限制。
    • 端到端方法还减少了手工设计的组件和功能,从而简化了机器学习系统的设计过程。传统机器学习方法通常需要人工设计多个中间表示和功能,而端到端方法通过让网络自己学习这些组件,从而降低了开发的复杂度。

    缺点:

    • 端到端学习方法有一个明显的缺点,需要大量的训练数据。为了从输入到输出学到复杂的映射关系,模型通常依赖于大量的 ( x , y ) (x,y) (x,y) 对。如果数据不足,模型可能无法学习到有效的函数映射,导致性能不佳。
    • 端到端方法还排除了可能有用的手工设计组件。当数据较少时,手工设计的组件可以将人类的专业知识直接融入模型,从而帮助模型在有限的数据上获得更好的性能。尽管端到端方法在数据充足时非常强大,但在数据稀缺的情况下,人工设计的系统仍可能比端到端方法更有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代际超越:方太冰箱勾勒“蛙跳模型”轮廓

文:互联网江湖 作者:志刚 每一代人,都有其独特的新需求、新创造和新使命。 曾经的手机领域,苹果以其革命性创新颠覆了诺基亚的塞班系统,惊艳了整个行业。而如今,华为凭借其三折叠和自主研发的鸿蒙系统&am…

spring-boot启动源码分析(二)之SpringApplicationRunListener

在上一篇《spring-boot启动源码分析(一)之SpringApplication实例构造》后,继续看了一个月的Spring boot启动源码,初步把流程看完了,接下来会不断输出总结,以巩固这段时间的学习。同时也希望能帮到同样感兴趣…

Linux-Redis哨兵搭建

环境资源准备 主机名IP端口号角色vm1192.168.64.156379/26379mastervm2192.168.64.166379/26379slavevm3192.168.64.176379/26379slave 6379为redis服务暴露端口号、26379为sentinel暴露端口号。 安装Redis # 包文件下载 wget https://github.com/redis/redis/archive/7.2.2…

MySQL 03 章——基本的SELECT语句

一、SQL概述 (1)SQL背景知识 SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道不同的数据库管理系统生产厂商都支持SQL语句,但都有特有内容 …

[羊城杯 2024]1z_misc

得到FL4G.zip和天机不可泄露.txt文件,其中压缩包需要解压密码: 二十八星宿: 东方苍龙七宿:角、亢、氐、房、心、尾、箕 南方朱雀七宿:鬼、井、柳、星、张、翼、轸 西方白虎七宿:奎、娄、胃、昴、毕、觜、…

QT----------多媒体

实现思路 多媒体模块功能概述: QT 的多媒体模块提供了丰富的功能,包括音频播放、录制、视频播放和摄像头操作等。 播放音频: 使用 QMediaPlayer 播放完整的音频文件。使用 QSoundEffect 播放简短的音效文件。 录制音频: 使用 QMe…

云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战

一.HTTP协议讲解 1.1rsync服务重构 bash 部署服务端: 1.安装服务 [rootbackup ~]# yum -y install rsync 2.配置服务 [rootbackup ~]# vim /etc/rsyncd.conf uid rsync gid rsync port 873 fake super yes use chroot no max connections 200 timeout 600 ignore erro…

《Vue3实战教程》42:Vue3TypeScript 与组合式 API

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 TypeScript 与组合式 API​ 这一章假设你已经阅读了搭配 TypeScript 使用 Vue 的概览。 为组件的 props 标注类型​ 使用 <script setup>​ 当使用 <script setup> 时&#xff0c;defineProps() 宏函数支…

Diffusion Transformer(DiT)——将扩散过程中的U-Net换成ViT:近频繁用于视频生成与机器人动作预测(含清华PAD详解)

前言 本文最开始属于此文《视频生成Sora的全面解析&#xff1a;从AI绘画、ViT到ViViT、TECO、DiT、VDT、NaViT等》 但考虑到DiT除了广泛应用于视频生成领域中&#xff0c;在机器人动作预测也被运用的越来越多&#xff0c;加之DiT确实是一个比较大的创新&#xff0c;影响力大&…

2024年12月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. C.

LLaMA详解

LLaMA 进化史 大规模语言模型(Large Language Model, LLM)的快速发展正在以前所未有的速度推动人工智能(AI)技术的进步。 作为这一领域的先行者, Meta在其LLaMA(Large Language Model Meta AI)系列模型上取得了一系列重大突破。 近日, Meta官方正式宣布推出LLaMA-3, 作为继LL…

SpringMVC(六)拦截器

目录 1.什么是拦截器 2.拦截器和过滤器有哪些区别 3.拦截器方法 4.单个拦截器的执行流程 5.使用拦截器实现用户登录权限验证&#xff08;实例&#xff09; 1.先在html目录下写一个login.html文件 2.在controller包下写一个LoginController文件 3.加拦截器 1.创建一个conf…

推理加速:投机采样经典方法

一 SpecInfer 基于模型 SpecInfer&#xff08;[2305.09781] SpecInfer: Accelerating Generative Large Language Model Serving with Tree-based Speculative Inference and Verification&#xff09; SpecInfer 投机采样利用多个小型模型&#xff08;SSM&#xff09;快速生…

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求&#xff0c;希望能够实现高效而准确的文字识别。由于预算限制&#xff0c;我并未选择商业付费方案&#xff0c;而是优先尝试了开源工具。一开始&#xff0c;我测试了 GOT-OCR2.0&#xff0c;但由于我的 Mac 配置较低&#xff0c;不支持 GPU 运算…

FFmpeg:详细安装教程与环境配置指南

FFmpeg 部署完整教程 在本篇博客中&#xff0c;我们将详细介绍如何下载并安装 FFmpeg&#xff0c;并将其添加到系统的环境变量中&#xff0c;以便在终端或命令行工具中直接调用。无论你是新手还是有一定基础的用户&#xff0c;这篇教程都能帮助你轻松完成 FFmpeg 的部署。 一、…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

“AI人工智能软件开发公司:创新技术,引领未来

大家好&#xff01;今天我们来聊聊一个充满未来感的话题——AI人工智能软件开发公司。这个公司&#xff0c;用大白话说&#xff0c;就是专门研究和开发人工智能软件的地方&#xff0c;它们用最新的技术帮我们解决问题&#xff0c;让生活和工作变得更智能、更便捷。听起来是不是…

常见中间件漏洞复现

1.tomcat 1.1 CVE-2017-12615(put上传) 当在Tomcat的conf&#xff08;配置目录下&#xff09;/web.xml配置文件中添加readonly设置为false时&#xff0c;将导致该漏洞产 ⽣&#xff0c;&#xff08;需要允许put请求&#xff09; , 攻击者可以利⽤PUT方法通过精心构造的数据包…

memcached的基本使用

memcached是一种基于键值对的内存数据库&#xff0c;一般应用于缓存数据&#xff0c;提高数据访问速度&#xff0c;减轻后端数据库压力。 安装 这里以Ubuntu为例&#xff0c;其他系统安装方法请看官方文档。 sudo apt-get update sudo apt-get install memcached启动 memca…

Unity2022接入Google广告与支付SDK、导出工程到Android Studio使用JDK17进行打包完整流程与过程中的相关错误及处理经验总结

注&#xff1a;因为本人也是第一次接入广告与支付SDK相关的操作&#xff0c;网上也查了很多教程&#xff0c;很多也都是只言片语或者缺少一些关键步骤的说明&#xff0c;导致本人也是花了很多时间与精力踩了很多的坑才搞定&#xff0c;发出来也是希望能帮助到其他人在遇到相似问…