机器学习21:机器学习工程落地注意事项-I

目录

 1.静态训练与动态训练

1.1 如何选择训练方式?

2.静态与动态推理

2.1 离线推理的优缺点

2.2 在线推理的优缺点

3.数据依赖性

3.1 可靠性

3.2 版本控制

3.3 必要性

3.4 相关性

3.5 反馈回路

4.参考文献


到目前为止,【机器学习1~20】所述内容都是围绕构建 ML 模型展开的。然而,如下图所示,现实世界的生产机器学习系统是大型生态系统,模型只是其中的一部分(更准确地说,是很小的一部分)。

图 1. 实际生产机器学习系统

ML 代码是现实世界 ML 生产系统的核心,但该框通常仅占整个 ML 生产系统整体代码的 5% 或更少。在实际应用中,机器学习生产系统需投入大量资源来输入数据——收集数据、验证数据并从中提取特征。此外,服务基础设施必须到位,才能将 ML 模型的预测付诸现实世界的实际应用。

幸运的是,上图中的许多组件都是可重用的,同时,我们不必自己构建图 1 中的所有组件。

TensorFlow Extended (TFX) 是一个用于部署生产 ML 管道的端到端平台。在后续的文章中,笔者将继续解读构建生产机器学习系统的设计决策。

 1.静态训练与动态训练

一般来说,训练模型有两种方法:

  • 静态模型:一般是离线训练的,换言之,我们只训练模型一次,然后在一段时间内使用经过训练的模型。
  • 动态模型:在训练模型时,数据不断进入系统,我们通过不断地更新将这些数据合并到模型中。

1.1 如何选择训练方式?

一般来说,以下几点主导着静态与动态训练决策:

  • 静态模型更容易构建和测试。
  • 动态模型适应不断变化的数据。现实世界通常是不断变化的,比如根据去年的数据建立的销售预测不太可能成功预测明年的结果。

如果你的数据集确实不随时间变化,那么,选择静态训练即可,因为它的创建和维护成本比动态训练便宜。然而,许多信息源确实会随着时间的推移而发生变化,即使是那些你认为像海平面一样恒定的特征,它们可能也在缓慢变化。在实践中,即使进行静态训练,仍然必须监控输入数据的变化,以便及时发现。

例如,假设有一个经过训练来预测用户购买鲜花的概率的模型。由于时间压力,该模型仅使用七月和八月的鲜花购买行为数据集进行一次训练。然后该模型被发送出去以在生产中提供预测服务, 但从不更新 该模型在几个月内运行良好,但随后在 情人节前 后做出了糟糕的预测,因为该假期期间的用户行为发生了巨大变化。

2.静态与动态推理

与模型训练方法类似,推理策略也可分为动态推理(也称为在线推理)和静态推理(也称为离线推理)两种,定义如下:

  • 离线推理,意味着使用 MapReduce 或类似的工具批量进行所有可能的预测。然后,将预测写入 SSTable 或 Bigtable,然后将它们提供给缓存/查找表。
  • 在线推理,意味着使用服务器按需预测,即以服务的形式对外,调用方可通过调用服务获取推理结果。例如京东、拼多多等电商平台的商品推荐,抖音、快手等平台的视频内容推荐,本质上都是在线推理。

2.1 离线推理的优缺点

  • 优点:不需要太担心推理成本,整体成本较低。
  • 优点:可以使用批量配额或一些巨型 MapReduce。
  • 优点:可以在推送之前对预测进行验证。
  • 缺点:只能预测我们所知道的事情——不利于长尾。
  • 缺点:更新延迟可能以小时或天为单位来衡量。

2.2 在线推理的优缺点

  • 优点:可以对任何新产品的出现做出预测——非常适合长尾。
  • 缺点:计算密集、延迟敏感——可能会限制模型的复杂性。
  • 缺点:监控需求更加密集。

3.数据依赖性

数据对于机器学习开发人员来说就像代码对于传统程序员一样重要。

机器学习系统的行为取决于其 输入特征 的行为和质量。随着这些特征的输入数据发生变化,模型也会发生变化。有时这种改变是可取的,但有时则不然。

在传统的软件开发中,工程师更关注代码而不是数据。在机器学习开发中,尽管编码仍然是工作的一部分,但重点必须扩大到包括数据。例如,在传统的软件开发项目中,最佳实践是编写单元测试来验证代码。在 ML 项目中,工程师还必须不断测试、验证和监控输入数据。

例如,持续监控模型以删除未使用(或很少使用)的特征。想象一下某个特征对模型贡献很少或没有贡献。如果该特征的输入数据突然发生变化,则模型的行为也可能会以不良方式突然发生变化。

3.1 可靠性

关于输入数据的可靠性,在实践中,我们可以通过一些问题来检验:

  • 信号是否始终可用,还是来自不可靠的来源?例如:
    • 信号是否来自在高负载、即将崩溃的服务器?——不稳定
    • 信号是否来自每年八月去度假的人群?——不可靠

3.2 版本控制

有关版本控制的一些问题:

  • 计算这些数据的系统会改变吗?如果会改变,那么:
    • 变化的频率如何?
    • 如何知道该系统何时发生变化?

有时,数据来自上游系统。如果上游系统(或上游处理流程)突然发生变化,模型可能会受到影响。因此,通常可以创建从上游流程收到的数据的副本,然后,仅在确定安全时才更新到上游数据的下一个版本。

3.3 必要性

根据正则化(【机器学习10:正则化-Regularization】和【机器学习14:稀疏性-Sparsity】)的解释,我们知道——模型的输入特征并非越多越好。对于任何一个特征,我们必须明确如下问题:

  • 该特征的实用性是否证明了包含该特征的成本是合理的?

向模型添加更多特征总是很诱人。例如,假设我们发现一个新特征,添加该特征可以使模型稍微更准确。更高的准确度听起来肯定比更低的准确度更好。然而,增加特征会增加维护成本——因为该特征可能会意外降级,因此必须对其进行监控。在添加可带来短期小收益的特征之前应仔细权衡。

3.4 相关性

某些特征与其他特征相关(正相关或负相关)。问自己以下问题:

  • 是否有任何特征如此紧密地联系在一起,以至于需要额外的策略来将它们分开?

3.5 反馈回路

有时模型会影响它自己的训练数据。例如,某些模型的结果又是同一模型的直接或间接输入特征。有时一个模型可以影响另一个模型。例如,考虑两个预测股票价格的模型:

  • 模型 A(一个糟糕的预测模型)
  • 模型 B

由于模型 A 有问题,它错误地决定购买股票 X 的股票,而这些购买推高了股票 X 的价格。模型 B 使用股票 X 的价格作为输入特征,因此模型 B 很容易得出一些错误的结论:股票 X 股票的价值。因此,模型 B 可以根据模型 A 的错误行为购买或出售股票 X 的股票。模型 B 的行为反过来又会影响模型 A,可能引发郁金香狂热或 X 公司 股票下跌。

4.参考文献

链接-https://developers.google.cn/machine-learning/crash-course/production-ml-systems
 

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

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

相关文章

小型中文版聊天机器人

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、简单介绍与参考鸣谢 二、数据集介绍 三、数据预处理 1、重复标点符号表达 2、英文标点符号变为中文标点符号 3、繁…

中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

文章目录 1. 题目描述2. 项目细节分析定时爬取任务思路避免多次爬取数据重复问题网站结构根据爬取信息确认招标地区 3. 项目代码4. 运行截图 1. 题目描述 中北大学信息安全技术爬虫课程设计 题目 5:招投标信息分析系统 (20050441 2005031113&#xff09…

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部

在 7 月 4 日,PoseiSwap 治理通证 $POSE 上线了 BNB Chain 上的头部 DEX PancakeSwap(POSE/ZBC 交易对),在 $POSE 开盘交易的 10 分钟内,其最高涨幅达到了 2169.22%,所有的早期投资者基本都从中获得了不菲的…

Kafka入门, 消费者工作流程(十八)

kafka消费方式 pull(拉)模式: consumer采用从broker中主动拉取数据。 Kafka采用这种方式。 push(推)模式: Kafka没有采用这种方式,因为由broker决定消息发送速率,很难适应所有消费者的速率。例如推送速度是50m/s,consu…

Ant Design4中Form.List和shouldUpdate一起使用的坑

背景 在antd3.x版本中,如果要实现一组表单增加删除的功能,需要Array.map()加上state状态来控制,代码比较复杂,而且非常不优雅。 其次在antd3.x中,表单中任何一个表单项的内容更新都会触发页面重新渲染,这在…

SpringBoot整合minio服务(超详细)

一、使用docker部署minio 1、拉取镜像 docker pull minio/minio 2、创建目录 mkdir -p /home/minio/config mkdir -p /home/minio/data 3、创建Minio容器并运行 docker run -p 9000:9000 -p 9090:9090 \--nethost \--name minio \-d --restartalways \-e "MINIO_ACC…

nginx

Nginx yum安装 配置Nginx的yum源 [nginx] namenginx repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck0 enabled1安装以及重启,检查 yum -y install nginx 默认安装最新版本 启动 关闭 重启 加载 systemctl start/stop/restar…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(三)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

基于 Opencv python实现批量图片去黑边—裁剪—压缩软件

简介 批量处理图片文件,批量提取GIF图片中的每一帧,具有范围裁剪、自动去除黑/白边、调整大小、压缩体积等功能。 先看一些软件的界面,是基于Tkinter写的GUI 裁剪等功能基于Opencv 下载 我添加了处理GIF的github: 原作者的gith…

深度学习基础

1 机器学习、深度学习、人工智能 1.1 机器学习 机器学习是一门专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身性能的学科。 基本步骤:获取数据、数据预处理、特征提取、特征选择…

C# 元组

文章目录 C# 元组Tuple 类ValueTuple 类ValueTuple 与 Tuple的区别System.ValueTuple 类型的值是可变的System.Tuple 类型的值是不可变的System.ValueTuple 类型的数据成员是字段 System.ValueTuple 与匿名类在使用Linq查询时,如何权衡使用元组还是匿名类权衡主要区…

奇点云DataSimba R4.9 LTS发布:稳定性加固,架构升级,142项功能上新

不久前,奇点云的数据云全系产品如期发布新一季商业化版本更新: 数据云平台DataSimba:R4.9 LTS版发布,稳定性全面加固,功能上新;自R4系列起架构升级,封装底层复杂性,支撑上层快速构建…