当前位置: 首页 > java >正文

深度学习总结(24)

机器学习的通用工作流程大致分为以下3步。(1) 定义任务。了解问题所属领域和客户需求背后的业务逻辑。收集数据集,理解数据所代表的含义,并选择衡量任务成功的指标。(2) 开发模型。准备数据,使其可以被机器学习模型处理。选择模型评估方法,并确定一个简单基准(模型应能够超越这个基准)​。训练第一个具有泛化能力并且能够过拟合的模型,然后对模型进行正则化并不断调节,直到获得最佳泛化性能。(3) 部署模型。将工作展示给利益相关者,将模型部署到Web服务器、移动应用程序、网页或嵌入式设备上,监控模型在真实环境中的性能,并开始收集构建下一代模型所需的数据。

定义任务

只有深入了解所做事情的背景,你才能将工作做好。为什么要解决某个问题?能够从解决方案中获得什么价值—模型将被如何使用,模型又将如何融入客户的业务流程?什么样的数据是可用的,或是可收集的?哪种类型的机器学习任务与业务问题相关?

定义问题

定义一个机器学习问题,通常需要与利益相关者进行多次详细讨论。应该关注以下问题。输入数据是什么?要预测什么?只有拥有可用的训练数据,才能学习预测某件事情。举个例子,只有拥有可用的影评和情感标注,你才能学习对影评进行情感分类。因此,数据可用性通常是这一阶段的限制因素。在多数情况下,你需要自己收集和标注新的数据集​。你面对的是什么类型的机器学习任务?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?是图像分割问题、排序问题,还是聚类、生成式学习或强化学习等其他问题?在某些情况下,机器学习甚至可能不是理解数据的最佳方式,你应该使用其他方法,比如传统的统计分析方法。图片搜索引擎项目是一项多分类、多标签的分类任务。垃圾信息检测项目是一项二分类任务。如果将“攻击性内容”划为一个单独的类别,则它是一项三分类任务。

事实证明,对于音乐推荐引擎来说,矩阵分解(协同过滤)比深度学习的效果更好。信用卡欺诈检测项目是一项二分类任务。点击率预测项目是一项标量回归任务。异常饼干检测项目是一项二分类任务。但这个任务前期还需要一个目标检测模型,以便从原始图像中正确裁剪出饼干图像。请注意,被称为“异常检测”的机器学习方法并不适用于此任务。从卫星图像中寻找新的考古遗址,这是一项图像相似度排序任务。你需要检索新图像,找出那些与已知考古遗址最相似的图像。现有的解决方案是什么?或许你的客户已经拥有一个人工编写的算法来过滤垃圾信息或检测信用卡欺诈,其中包含很多嵌套的if语句。或许目前有人在手动处理以下流程:监控饼干厂的传送带并手动移除异常饼干,或者创建歌曲推荐播放列表并发送给喜欢特定艺术家的用户。你应该知道目前在用的有哪些系统,以及它们是如何工作的。

你是否需要处理一些特殊的限制?比如你正在为一个应用程序构建垃圾信息检测系统,而这个应用程序是严格端到端加密的,垃圾信息检测模型需要部署在最终用户的手机上,并且需要在外部数据集上进行训练。饼干过滤模型也许会有延迟限制,因此需要在工厂的嵌入式设备上运行,而不是在远程服务器上运行。你应该全面地了解工作背景。完成对上述问题的调研之后,你应该已经知道你的输入是什么、你的目标是什么,以及这个问题与哪一类机器学习任务相关。要注意你在这一阶段所做的假设。假设可以根据输入对目标进行预测。假设现有数据(或后续收集的数据)所包含的信息足以用来学习输入和目标之间的关系。在开发出工作模型之前,这些只是假设,等待验证真假。并不是所有问题都可以用机器学习方法来解决。你收集了包含输入X和目标Y的许多示例,并不意味着X包含足够多的信息来预测Y。举个例子,如果你想根据某只股票近期历史价格来预测其价格走势,那么不太可能会成功,因为历史价格中没有包含很多可用于预测的信息。

收集数据集

已经了解任务的性质,并且知道输入和目标分别是什么,下面就该收集数据了—对于大部分机器学习项目而言,这一步是最费力、最费时、最费钱的。对于图片搜索引擎项目,你首先需要选择分类标签集,比如10 000个常见图像类别。然后,你需要根据这个标签集手动标记用户上传的数十万张图片。对于聊天应用程序的垃圾信息检测项目,因为用户的聊天内容是端到端加密的,所以你无法使用聊天内容来训练模型。你需要获取一个单独的数据集,其中包含上万条未经过滤的社交媒体信息,然后手动将其标记为垃圾信息、攻击性信息或正常信息。对于音乐推荐引擎,你可以直接使用用户的“点赞”数据,无须收集新数据。同样,对于点击率预测项目也是如此,你拥有过去几年里大量的广告点击率记录。对于饼干标记模型,你需要在传送带上方安装摄像头,收集数万张图像,然后需要有人手动标记这些图像。知道如何标记的人目前都在饼干厂上班,但这似乎并不难。你应该能够培训人们来完成这件事。

对于卫星图像项目,需要一个由考古学家组成的团队来收集一个数据库,其中包含他们感兴趣的遗址,并且对于每个遗址,都需要找到在不同天气条件下拍摄的卫星图像。为了得到一个好的模型,你需要上千个考古遗址的信息。第5章讲过,模型的泛化能力几乎完全来自训练数据的属性,即数据点的数量、标签的可靠性以及特征的质量。好的数据集是一种值得关注和投资的资产。如果你在一个项目上额外多出50小时可用的时间,那么最有效的时间分配方式可能是收集更多的数据,而不是尝试逐步改进模型。数据比算法更重要,这一著名观点由谷歌研究人员2009年发表的题为“数据不可思议的有效性”的文章提出—这个标题意在致敬Eugene Wigner于1960年发表的著名文章“数学在自然科学中不可思议的有效性”​。这篇文章发表于深度学习流行之前,但值得注意的是,深度学习的兴起让数据变得更加重要。

如果你做的是监督学习,那么收集完输入数据(比如图像)之后,你还需要这些输入数据的标注(比如图像的标签)​,也就是训练模型要预测的目标。有时可以自动获取标注,比如音乐推荐任务或点击率预测任务,但通常需要人工标注数据。这一过程的工作量很大。

投资数据标注基础设施

数据标注过程将决定目标的质量,进而决定模型的质量。你需要仔细考虑以下问题。是否应该自己对数据进行标注?是否应该使用类似Mechanical Turk这样的众包平台来收集标签?是否应该使用专业数据标注公司的服务?外包可能会节约时间和金钱,但会夺走你的控制权。使用类似Mechanical Turk这样的平台可能比较便宜,而且可以很好地扩展内容,但最终的标注可能会包含很多噪声。要选定最佳方案,你需要考虑所面临的限制。数据标注人员是否需要是该领域的专家,还是说任何人都可以对数据进行标注?对于猫狗图像分类问题的标签,任何人都可以标注;但对于犬种分类任务的标签,则需要专业知识。与此相对,对骨折的CT图像进行标注,则需要拥有医学学位。如果数据标注需要专业知识,你能培训人们去做这件事吗?如果不能,你如何能够接触到相关专家?

你自己是否理解专家是如何进行标注的?如果不理解,你将不得不把数据集看作黑盒子,无法手动进行特征工程—这并不那么重要,但可能会造成一定的局限性。如果你决定在公司内部对数据进行标注,那么你需要确定使用什么软件来记录标注。你可能需要自己开发软件。高效的数据标注软件将为你节省大量时间,所以值得在项目早期对其进行投资。

谨防非代表性数据

机器学习模型只能理解那些与之前所见相似的输入。因此,用于训练的数据应能代表生产数据,这一点至关重要。这应该是所有数据收集工作的基础。假设你正在开发一款应用程序,用户可以通过上传食物照片来查找这道菜的名称。训练模型使用的图片来自于一个深受美食家喜爱的图片共享社交网站。模型上线后,不断出现用户愤怒的留言:你的应用程序给出的答案,10次中有8次是错的。这是怎么回事?模型在测试集上的精度远超90%!快速浏览用户上传的数据之后,你发现,用随机的智能手机在随机餐厅拍摄随机菜肴的照片,与训练模型所使用的专业拍摄的、光线充足的、令人垂涎的图片完全不同,也就是说,你的训练数据不能代表生产数据。这是一项大错—欢迎来到机器学习苦海。

如果可能的话,直接从模型未来的使用环境中收集数据。一个影评情感分类模型,应该应用于新的IMDB影评,而不是Yelp的餐厅评论,也不是Twitter的状态更新。如果你想对一条推文的情感进行评分,首先需要收集并标注真实推文,这些推文应来自与未来生产环境中的用户类似的用户。如果不能在生产数据上进行训练,那么你需要充分了解训练数据与生产数据有什么不同,并且主动对这些差异做出修正。

有一个相关现象值得了解,那就是概念漂移(concept drift)​。你在几乎所有现实世界问题中都会遇到概念漂移,特别是那些需要处理用户生成数据的问题。如果生产数据的属性会随时间发生变化,那么就会出现概念漂移,从而导致模型精度逐渐下降。一个在2013年训练的音乐推荐引擎,放到今天可能不会很有效。同样,我们使用的IMDB数据集是在2011年收集的,我们用它训练了一个模型,这个模型在2020年影评上的性能很可能不如在2012年影评上的性能,因为词汇、表达和电影类型都在随着时间的推移而演变。对于信用卡欺诈检测这样的对抗性问题,概念漂移尤为严重,因为欺诈模式几乎每天都在变化。要解决快速的概念漂移,需要持续不断地进行数据收集、数据标注和模型再训练。

请记住,机器学习只能用来记忆训练数据中存在的模式。你只能识别出曾经见过的事物。在过去的数据上训练机器学习模型来预测未来,这里存在一个假设,那就是未来的规律与过去相同。但事实往往并非如此。

http://www.xdnf.cn/news/685.html

相关文章:

  • idea中导入从GitHub上克隆下来的springboot项目解决找不到主类的问题
  • 【Python爬虫详解】第二篇:HTML结构的基本分析
  • UE虚幻4虚幻5动画蓝图调试,触发FellOutOfWorld事件和打印输出,继续DeepSeek输出
  • OSPF特殊区域
  • 对于在线教育或知识付费类网站视频处理方案
  • INFINI Console 系统集群状态异常修复方案
  • Beszel​​ 轻量级服务器监控平台的详细安装步骤
  • 【某比特币网址请求头部sign签名】RSA加密逆向分析
  • kotlin知识体系(五) :Android 协程全解析,从作用域到异常处理的全面指南
  • 论文阅读:2023 arxiv A Survey of Reinforcement Learning from Human Feedback
  • 机制的作用
  • 【1】云原生,kubernetes 与 Docker 的关系
  • FileZilla“服务器发回了不可路由的地址,使用服务器地址代替
  • 06【流程之舞】控制流:`if/else`, `loop`, `while`, `for` 与模式匹配初窥
  • 深入理解组合实体模式(Composite Entity Pattern)在 C# 中的应用与实现
  • 存储/服务器内存的基本概念简介
  • IPv6 公网设置技巧
  • -实用类-
  • 图例QCPLegend
  • RabbitMQ,添加用户时,出现Erlang cookie不一致,导致添加用户失败的问题解决
  • 使用安全继电器的急停电路设计
  • 基于docker-java封装的工具类
  • 从入门到精通汇编语言 第五章(流程转移与子程序)
  • 【MySQL】数据类型
  • 【OSG学习笔记】Day 4: 相机与视口——控制观察视角
  • 【C++】深入浅出之多态
  • Arduino示例代码讲解:Project 07 - Keyboard 键盘
  • 【AI+HR实战应用】用DeepSeek提升HR工作效能
  • LeetCode[225]用队列实现栈
  • 基于 Spring Boot 瑞吉外卖系统开发(五)