元数据

Designing Machine Learning Systems

  •  Designing Machine Learning Systems|200
  • 书名: Designing Machine Learning Systems
  • 作者: Chip Huyen
  • 简介:
  • 出版时间
  • ISBN:
  • 分类:
  • 出版社: O’Reilly Media, Inc.

高亮划线

1. 机器学习系统概述

  • 📌 但在大多数情况下,企业应用可能对准确性要求更为严格,但对延迟要求则相对宽容。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-2-63518-63556

    • ⏱ 2024-12-30 09:28:25
  • 📌 集成学习通过“结合多种学习算法以获得比单独使用任何单一学习算法更好的预测性能”。虽然它能为你的机器学习系统带来小幅性能提升,但集成学习往往会使系统过于复杂,难以在生产中发挥作用,例如预测速度变慢或结果难以解释。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-2-99606-99711

    • ⏱ 2024-12-30 10:05:49
  • 📌 在模型开发期间,训练是瓶颈。然而,一旦模型部署后,它的任务是生成预测,因此推理成为瓶颈。研究通常优先考虑快速训练,而生产通常优先考虑快速推理。一个推论是,研究优先考虑高吞吐量,而生产优先考虑低延迟。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-2-106474-107175

    • ⏱ 2024-12-30 10:08:15
  • 📌 当逐个处理查询时,更高的延迟意味着更低的吞吐量。然而,当批量处理查询时,更高的延迟可能也意味着更高的吞吐量。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-2-112571-112625

    • ⏱ 2024-12-30 10:16:27
  • 📌 在考虑延迟时,重要的是要记住延迟不是一个单一的数字,而是一个分布。我们可能会倾向于通过使用一个单一的数字(如时间窗口内所有请求的平均延迟)来简化这个分布,但这个数字可能会产生误导。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-2-116412-116502

    • ⏱ 2024-12-30 10:10:24

机器学习系统与传统软件

  • 📌 通常最好以百分位数来思考,因为它们能告诉你关于一定比例的请求的信息。最常见的百分位数是第 50 百分位数,缩写为 p50。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-3-16295-16356

    • ⏱ 2024-12-30 10:17:24
  • 📌 通常,您需要关注的百分位数是 p90、p95 和 p99。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-3-17051-17080

    • ⏱ 2024-12-30 10:17:40
  • 📌 通常使用高百分位数来指定系统的性能要求;例如,产品经理可能会指定系统的第 90 百分位或第 99.9 百分位延迟必须低于某个数值。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-3-18546-18611

    • ⏱ 2024-12-30 10:18:07

2. 机器学习系统设计简介

  • 📌 在二分类和多分类问题中,每个样本只属于一个类别。当一个样本可以属于多个类别时,我们面临的是多标签分类问题。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-4-88402-88455

    • ⏱ 2024-12-30 21:15:43
  • 📌 多标签分类问题主要有两种方法。第一种是将其视为多类分类问题。在多类分类中,如果有四个可能的类别 [科技, 娱乐, 金融, 政治],并且某个样本的标签是娱乐,你可以用向量 [0, 1, 0, 0] 来表示这个标签。在多标签分类中,如果一个样本同时具有娱乐和金融两个标签,其标签将表示为 [0, 1, 1, 0]。第二种方法是将其转化为一组二分类问题。对于文章分类问题,你可以有四个模型分别对应四个主题,每个模型输出一篇文章是否属于该主题。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-4-89108-89927

    • ⏱ 2024-12-30 21:17:49
  • 📌 图 2-6。在预测用户接下来最可能打开的应用程序的问题中,可以将其视为回归问题。输入是用户的特征、环境的特征以及应用程序的特征。输出是一个介于 0 和 1 之间的单一值,表示在给定上下文中用户打开该应用程序的可能性。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-4-95882-95990

    • ⏱ 2024-12-30 21:32:36
  • 📌 大多数机器学习工程师只是使用常见的损失函数,如回归中的均方根误差(RMSE)或平均绝对误差(MAE),二分类中的逻辑损失(也称为对数损失),以及多分类中的交叉熵。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-4-101413-101494

    • ⏱ 2024-12-30 21:36:44
  • 📌 另一种方法是训练两个不同的模型,每个模型优化一个损失函数。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-4-114547-114576

    • ⏱ 2024-12-30 21:54:29

心智与数据

  • 📌 你可以结合模型的输出,并根据它们的综合得分对帖子进行排序:ɑ 质量评分 + β 参与评分 现在你可以调整α和β而无需重新训练模型! ^CB-0sVGKRGK44Yb6t76sxG2J1PW-5-16975-18304

    • ⏱ 2024-12-30 21:54:39
  • 📌 一般来说,当存在多个目标时,首先将它们解耦是一个好主意,因为这使得模型开发和维护更加容易。首先,如前所述,无需重新训练模型即可更容易地调整系统。其次,维护也更容易,因为不同的目标可能需要不同的维护计划。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-5-18905-19006

    • ⏱ 2024-12-30 21:50:39
  • 📌 思维可能被伪装成归纳偏差或智能架构设计。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-5-21295-21315

    • ⏱ 2024-12-30 21:58:15

3. 数据工程基础

  • 📌 有许多服务可以处理和分析日志,例如 Logstash、Datadog、Logz.io 等。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-6-26928-26973

    • ⏱ 2025-01-01 15:57:32
  • 📌 第一方数据是公司已经收集的关于用户或客户的数据。第二方数据是另一家公司收集的关于他们自己客户的数据,他们将这些数据提供给你,尽管你可能需要为此付费。第三方数据公司收集的是公众的数据,这些公众并不是他们的直接客户。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-6-30095-30201

    • ⏱ 2025-01-01 16:04:22
  • 📌 行优先格式在需要大量写入时表现更好,而列优先格式在需要大量基于列的读取时表现更佳。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-6-60204-60245

    • ⏱ 2025-01-01 16:17:01
  • 📌 很多人没有注意到的一个微妙之处是,pandas 库是围绕列式格式构建的 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-6-61643-61678

    • ⏱ 2025-01-01 16:17:40

结构化数据与非结构化数据

  • 📌 两种主要的非关系模型是文档模型和图模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-16675-16695

    • ⏱ 2025-01-01 16:49:22
  • 📌 文档集合可以被视为关系数据库中的表,而文档则类似于表中的一行。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-18852-18883

    • ⏱ 2025-01-01 16:50:07
  • 📌 文档数据库只是将假设结构的责任从写入数据的应用程序转移到了读取数据的应用程序。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-27031-27070

    • ⏱ 2025-01-01 16:50:55
  • 📌 图模型围绕“图”的概念构建。图由节点和边组成,其中边表示节点之间的关系。使用图结构存储数据的数据库称为图数据库。如果在文档数据库中,每个文档的内容是优先考虑的,那么在图数据库中,数据项之间的关系是优先考虑的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-30590-30694

    • ⏱ 2025-01-01 16:54:30
  • 📌 由于业务需求会随时间变化,承诺使用预定义的数据模式可能会变得过于限制。或者,你可能拥有来自多个数据源的数据,而这些数据源不在你的控制范围内,无法让它们遵循相同的模式。这就是非结构化数据变得有吸引力的地方。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-36967-37069

    • ⏱ 2025-01-01 16:58:55
  • 📌 用于存储结构化数据的仓库称为数据仓库。用于存储非结构化数据的仓库称为数据湖。数据湖通常用于存储处理前的原始数据。数据仓库用于存储已处理成可直接使用格式的数据。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-39248-39327

    • ⏱ 2025-01-01 17:01:42
  • 📌 如今,我们有能够处理分析型查询的事务型数据库,例如 CockroachDB。我们也有能够处理事务型查询的分析型数据库,例如 Apache Iceberg 和 DuckDB。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-59729-59815

    • ⏱ 2025-01-01 17:12:48
  • 📌 在线处理意味着数据可以立即用于输入/输出。近线(nearline)是“近在线”的缩写,意味着数据不能立即可用,但可以在无需人工干预的情况下快速变为在线。离线意味着数据不能立即可用,需要一些人工干预才能变为在线 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-63096-63200

    • ⏱ 2025-01-01 17:16:05
  • 📌 当数据从一个进程传递到另一个进程时,我们说数据从一个进程流向另一个进程,这就形成了数据流。数据流主要有三种模式:通过数据库传递的数据通过使用 REST 和 RPC API 提供的请求(例如 POST/GET 请求)在服务之间传递数据数据通过像 Apache Kafka 和 Amazon Kinesis 这样的实时传输系统 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-74175-76258

    • ⏱ 2025-01-01 17:24:09
  • 📌 服务是一个可以远程访问的进程,例如通过网络。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-81883-81905

    • ⏱ 2025-01-01 17:28:50
  • 📌 通过网络传递数据最流行的请求风格是 REST(表述性状态转移)和 RPC(远程过程调用)。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-89360-89405

    • ⏱ 2025-01-01 17:35:14
  • 📌 一个主要区别是 REST 是为网络请求设计的,而 RPC“试图使对远程网络服务的请求看起来与调用编程语言中的函数或方法相同。”因此,“REST 似乎是公共 API 的主要风格。RPC 框架的主要关注点是由同一组织拥有的服务之间的请求,通常在同一数据中心内。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-89422-89550

    • ⏱ 2025-01-01 17:34:42
  • 📌 使用代理时,服务只需与代理通信,而不必与其他服务直接通信。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-96897-96926

    • ⏱ 2025-01-01 17:55:37
  • 📌 从技术上讲,数据库可以充当代理——每个服务都可以将数据写入数据库,而需要数据的其他服务可以从该数据库中读取。然而,正如“通过数据库传递数据”一节中提到的,对于具有严格延迟要求的应用程序来说,从数据库读取和写入数据太慢了。我们使用内存存储来代理数据,而不是使用数据库来代理数据。实时传输可以被视为服务之间传递数据的内存存储。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-97544-97705

    • ⏱ 2025-01-01 17:55:52
  • 📌 广播到实时传输的一段数据称为事件。因此,这种架构也被称为事件驱动。实时传输有时被称为事件总线。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-98306-98353

    • ⏱ 2025-01-01 17:56:29
  • 📌 请求驱动架构更适合依赖逻辑而非数据的系统。事件驱动架构则更适合数据密集型的系统。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-98954-98994

    • ⏱ 2025-01-01 17:56:39
  • 📌 两种最常见的实时传输类型是发布订阅(pubsub,即 publish-subscribe 的缩写)和消息队列。在发布订阅模型中,任何服务都可以向实时传输中的不同主题发布消息,而任何订阅了该主题的服务都可以读取该主题中的所有事件。生成数据的服务并不关心哪些服务消费它们的数据。发布订阅解决方案通常有一个保留策略——数据会在实时传输中保留一段时间(例如七天),然后被删除或转移到永久存储(如 Amazon S3)。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-99595-99800

    • ⏱ 2025-01-01 17:56:45
  • 📌 在消息队列模型中,事件通常有预期的消费者(具有预期消费者的事件称为消息),消息队列负责将消息传递给正确的消费者。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-101379-101435

    • ⏱ 2025-01-01 17:57:02
  • 📌 发布订阅解决方案的示例包括 Apache Kafka 和 Amazon Kinesis。消息队列的示例包括 Apache RocketMQ 和 RabbitMQ。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-102036-102117

    • ⏱ 2025-01-01 17:57:31
  • 📌 由于批处理的频率远低于流处理,在机器学习中,批处理通常用于计算变化较少的特征,例如司机的评分(如果一个司机已经完成了数百次行程,他们的评分不太可能在一天之内发生显著变化)。通过批处理提取的特征——批处理特征——也被称为静态特征。流处理用于计算快速变化的特征,例如当前有多少司机可用、过去一分钟内有多少乘车请求、未来两分钟内将有多少乘车完成、该区域最近 10 次乘车的价格中位数等。这些关于系统当前状态的特征对于做出最优价格预测非常重要。通过流处理提取的特征——流式特征——也被称为动态特征。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-107722-108568

    • ⏱ 2025-01-01 18:03:42
  • 📌 要在数据流上进行计算,你需要一个流计算引擎(就像 Spark 和 MapReduce 是批处理计算引擎一样)。对于简单的流计算,你可能可以利用像 Apache Kafka 这样的实时传输工具内置的流计算能力,但 Kafka 的流处理在处理多种数据源时能力有限。对于利用流式特征的机器学习系统来说,流式计算很少是简单的。在欺诈检测和信用评分等应用中,使用的流式特征数量可能达到数百甚至数千。流式特征提取逻辑可能需要复杂的查询,涉及不同维度的连接和聚合。要提取这些特征,需要高效的流处理引擎。为此,您可以考虑使用 Apache Flink、KSQL 和 Spark Streaming 等工具。在这三种引擎中,Apache Flink 和 KSQL 在行业中更受认可,并为数据科学家提供了良好的 SQL 抽象。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-109884-110838

    • ⏱ 2025-01-01 18:08:24
  • 📌 结构化数据与非结构化数据之间的界限相当模糊——主要问题是谁需要承担假设数据结构的责任。结构化数据意味着写入数据的代码需要假设结构。非结构化数据意味着读取数据的代码需要假设结构。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-7-114451-114539

    • ⏱ 2025-01-01 18:19:25

4. 训练数据

  • 📌 在 Python 中,你可以使用 random.choices 进行加权采样 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-42503-42577

    • ⏱ 2025-01-01 19:07:05
  • 📌 重要性抽样是最重要的抽样方法之一,不仅在机器学习中如此。它允许我们在只能访问另一个分布的情况下从一个分布中进行抽样。 假设你需要从分布 P(x) 中采样 x,但 P(x) 的采样过程非常昂贵、缓慢或不可行。然而,你有一个分布 Q(x),从中采样要容易得多。因此,你改为从 Q(x) 中采样 x,并通过 P(x) Q(x) 对这个样本进行加权。Q(x) 被称为提议分布或重要性分布。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-56209-57195

    • ⏱ 2025-01-01 19:22:43
  • 📌 在机器学习中使用重要性采样的一个例子是基于策略的强化学习。考虑你想要更新策略的情况。你希望估计新策略的价值函数,但计算采取某个动作的总奖励可能代价高昂,因为这需要考虑该动作之后直到时间范围结束的所有可能结果。然而,如果新策略与旧策略相对接近,你可以基于旧策略计算总奖励,然后根据新策略重新加权。来自旧策略的奖励构成了提议分布。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-59806-59969

    • ⏱ 2025-01-01 20:11:29
  • 📌 记录每个数据样本的来源及其标签是一种良好的实践,这种技术被称为数据溯源。数据溯源不仅有助于标记数据中的潜在偏差,还能帮助调试模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-77793-77858

    • ⏱ 2025-01-01 20:21:15
  • 📌 具有自然标签任务的典型例子是推荐系统。推荐系统的目标是向用户推荐与他们相关的项目。用户是否点击推荐项目可以被视为对该推荐的反馈。被点击的推荐可以被认为是好的(即标签为正面),而在一段时间后(例如 10 分钟)未被点击的推荐可以被认为是坏的(即标签为负面)。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-80193-80321

    • ⏱ 2025-01-01 20:26:41
  • 📌 在前面的例子中,一段时间后没有被点击的推荐可以被认为是差的。这被称为隐式标签,因为这种负面标签是从缺乏正面标签中推断出来的。它与显式标签不同,在显式标签中,用户通过给出低评分或点踩来明确表达他们对推荐的反馈。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-84263-84367

    • ⏱ 2025-01-01 20:31:19
  • 📌 弱监督背后的洞察是,人们依赖启发式方法,这些方法可以通过专业知识来开发,以标注数据。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-105840-105882

    • ⏱ 2025-01-01 20:56:11
  • 📌 像 Snorkel 这样的库是围绕标注函数(LF)的概念构建的:一种编码启发式规则的函数。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-9-107205-107250

    • ⏱ 2025-01-01 21:01:12

类别不平衡

  • 📌 理论上,弱监督不需要任何人工标注。然而,为了了解你的标注函数(LFs)的准确性,建议使用少量的人工标注。这些人工标注可以帮助你发现数据中的模式,从而编写更好的标注函数。弱监督在数据有严格隐私要求时尤其有用。你只需要查看一小部分经过清理的数据来编写标签函数(LFs),这些函数可以应用于其余数据,而无需任何人查看。使用 LFs,领域专业知识可以被版本化、重用和共享。一个团队拥有的专业知识可以被编码并被另一个团队使用。如果你的数据或需求发生变化,你可以重新将 LFs 应用于你的数据样本。使用 LFs 为数据生成标签的方法也被称为程序化标签。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-16364-17825

    • ⏱ 2025-01-01 20:59:16
  • 📌 如果启发式方法在标注数据方面效果这么好,为什么我们还需要机器学习模型?一个原因是启发式方法可能无法覆盖所有数据样本,因此我们可以用启发式方法程序化标注的数据来训练机器学习模型,并利用这个训练好的模型为那些未被任何启发式方法覆盖的样本生成预测。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-26998-27119

    • ⏱ 2025-01-01 21:04:11
  • 📌 半监督则利用结构假设基于一小部分初始标签生成新标签。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-29224-29250

    • ⏱ 2025-01-01 21:30:52
  • 📌 经典的半监督方法是自训练。你首先在现有的标记数据集上训练一个模型,然后使用该模型对未标记样本进行预测。假设具有高原始概率分数的预测是正确的,你将高概率预测的标签添加到训练集中,并在这个扩展的训练集上训练一个新模型。这个过程会一直持续,直到你对模型性能感到满意为止。另一种半监督方法假设具有相似特征的数据样本共享相同的标签。这种相似性可能很明显,例如在分类 Twitter 标签主题的任务中。你可以首先将标签“#AI”标记为计算机科学。假设出现在同一条推文或个人资料中的标签可能涉及相同主题,根据图 4-6 中 MIT CSAIL 的个人资料,你也可以将标签“#ML”和“#BigData”标记为计算机科学。[插图]图 4-6。由于#ML 和#BigData 与#AI 出现在同一个 Twitter 个人资料中,我们可以假设它们属于同一个主题在大多数情况下,相似性只能通过更复杂的方法来发现。例如,你可能需要使用聚类方法或 k 近邻算法来发现属于同一簇的样本。近年来流行的一种半监督方法是基于扰动的方法。它基于的假设是,对样本进行小的扰动不应改变其标签。因此,您对训练实例应用小的扰动以获得新的训练实例。扰动可以直接应用于样本(例如,向图像添加白噪声)或它们的表示(例如,向词嵌入添加小的随机值)。扰动后的样本与未扰动的样本具有相同的标签。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-30746-34049

    • ⏱ 2025-01-01 21:47:30
  • 📌 半监督学习在训练标签数量有限时最为有用。在使用有限数据进行半监督学习时,需要考虑的是,应该用多少数据来评估多个候选模型并选择最佳模型。如果使用少量数据,在这个小评估集上表现最好的模型可能是对该集过拟合最严重的模型。另一方面,如果使用大量数据进行评估,基于该评估集选择最佳模型所获得的性能提升可能不如将评估集加入有限训练集所获得的提升。许多公司通过使用合理大小的评估集来选择最佳模型,然后在评估集上继续训练冠军模型来克服这一权衡。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-35437-35651

    • ⏱ 2025-01-01 21:55:59
  • 📌 迁移学习是指将为一个任务开发的模型作为第二个任务模型的起点的系列方法。首先,基础模型为基础任务进行训练。基础任务通常是一个拥有廉价且丰富训练数据的任务。语言建模是一个很好的候选,因为它不需要标注数据。语言模型可以在任何文本上进行训练——书籍、维基百科文章、聊天记录——任务是在给定一系列标记的情况下,预测下一个标记。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-37030-37188

    • ⏱ 2025-01-01 21:59:03
  • 📌 训练好的模型可以用于你感兴趣的任务——下游任务——例如情感分析、意图检测或问答。在某些情况下,比如在零样本学习场景中,你可能可以直接在下游任务上使用基础模型。在许多情况下,你可能需要对基础模型进行微调。微调意味着对基础模型进行小的调整,例如继续在给定下游任务的数据上训练基础模型或基础模型的一部分。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-37847-37996

    • ⏱ 2025-01-01 22:00:04
  • 📌 迁移学习对于没有大量标注数据的任务尤其具有吸引力。即使对于拥有大量标注数据的任务,使用预训练模型作为起点通常也能显著提升性能,相比从头开始训练。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-43529-43601

    • ⏱ 2025-01-01 22:06:35
  • 📌 主动学习有时被称为查询学习——尽管这个术语越来越不受欢迎——因为模型(主动学习者)会以未标记样本的形式发送查询,由标注者(通常是人类)进行标记。与其随机标记数据样本,不如根据某些指标或启发式方法标记对模型最有帮助的样本。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-46591-47302

    • ⏱ 2025-01-01 22:24:48
  • 📌 最直接的指标是不确定性度量——标记模型最不确定的样本,希望它们能帮助模型更好地学习决策边界 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-47302-47347

    • ⏱ 2025-01-01 22:25:03
  • 📌 另一种常见的启发式方法基于多个候选模型之间的分歧。这种方法称为委员会查询,是集成方法的一个例子。 23 你需要一个由几个候选模型组成的委员会,这些模型通常是使用不同超参数集训练的相同模型,或在不同数据切片上训练的相同模型。每个模型可以对接下来要标记的样本投一票,投票可能基于其对预测的不确定性。然后,你标记委员会分歧最大的样本。还有其他启发式方法,例如选择那些如果对其进行训练将产生最高梯度更新或最大程度减少损失的样本。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-49213-50135

    • ⏱ 2025-01-01 22:28:53
  • 📌 待标注的样本可以来自不同的数据分布。它们可以是合成的,即你的模型在输入空间中最不确定的区域生成样本。它们可以来自一个静态分布,即你已经收集了大量未标注数据,模型从这些数据中选择样本进行标注。它们也可以来自真实世界的分布,即你有一个数据流不断输入,如生产环境中,模型从这个数据流中选择样本进行标注。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-50778-50926

    • ⏱ 2025-01-01 22:44:56
  • 📌 类别不平衡通常指的是分类任务中的一个问题,即训练数据中每个类别的样本数量存在显著差异。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-53018-53061

    • ⏱ 2025-01-01 22:47:16
  • 📌 类别不平衡会使学习变得困难,主要有以下三个原因。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-55430-55454

    • ⏱ 2025-01-01 22:52:29
  • 📌 第一个原因是,类别不平衡通常意味着模型缺乏足够的信号来学习检测少数类别。在少数类别实例数量较少的情况下,问题就变成了少样本学习问题,模型在做出决策之前只能看到少数类别的几次实例。如果训练集中没有稀有类别的实例,模型可能会认为这些稀有类别不存在。第二个原因是,类别不平衡使得模型更容易陷入非最优解,通过利用简单的启发式方法而不是学习数据潜在模式的有用信息。考虑前面的肺癌检测例子。如果模型学会总是输出多数类,其准确率已经达到 99.99%。这种启发式方法对于梯度下降算法来说可能非常难以超越,因为在这种启发式方法中加入少量随机性可能会导致准确率下降。第三个原因是类别不平衡导致错误成本不对称——对稀有类别样本的错误预测成本可能远高于对多数类别样本的错误预测成本。例如,在含有癌细胞的 X 光片上出现误分类比在正常肺部的 X 光片上出现误分类要危险得多。如果你的损失函数没有配置来解决这种不对称性,你的模型将以相同的方式处理所有样本。结果,你可能会得到一个在多数类和少数类上表现同样好的模型,而你更希望得到一个在多数类上表现稍差但在少数类上表现更好的模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-57150-59429

    • ⏱ 2025-01-01 22:54:48
  • 📌 对不平衡的敏感性随着问题复杂性的增加而增加,而非复杂的线性可分问题不受任何程度的类别不平衡影响。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-64936-64984

    • ⏱ 2025-01-01 23:01:20
  • 📌 处理类别不平衡的三种方法:为你的问题选择合适的指标;数据层面的方法,即改变数据分布以减少不平衡;以及算法层面的方法,即改变学习方式以使其对类别不平衡更具鲁棒性。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-66675-66755

    • ⏱ 2025-03-16 14:08:37
  • 📌 面对类别不平衡的任务时,最重要的是选择合适的评估指标。错误的指标会让你对模型的表现产生误解,从而无法帮助你开发或选择适合任务的模型。总体准确率和错误率是报告机器学习模型性能最常用的指标。然而,对于类别不平衡的任务,这些指标是不够的,因为它们平等对待所有类别,这意味着模型在多数类别上的表现将主导这些指标。当多数类别并不是你关心的类别时,这种情况尤其糟糕。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-68830-69608

    • ⏱ 2025-01-02 20:46:48
  • 📌 帮助你理解模型在特定类别上表现的指标会是更好的选择。如果你对每个类别单独使用准确率,它仍然可以是一个好的指标。模型 A 在 CANCER 类别上的准确率为 10%,而模型 B 在 CANCER 类别上的准确率为 90%。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-76067-76177

    • ⏱ 2025-01-02 20:27:03
  • 📌 F1、精确率和召回率是衡量模型在二分类问题中对正类性能的指标,因为它们依赖于真正例——即模型正确预测正类的结果。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-76803-76859

    • ⏱ 2025-01-02 20:27:28
  • 📌 F1、精确率和召回率是不对称指标,这意味着它们的值会随着被视为正类的类别而变化。在我们的例子中,如果将 CANCER 视为正类,模型 A 的 F1 值为 0.17。然而,如果将 NORMAL 视为正类,模型 A 的 F1 值为 0.95。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-85835-85954

    • ⏱ 2025-01-02 20:26:53
  • 📌 许多分类问题可以建模为回归问题。你的模型可以输出一个概率,基于这个概率,你可以对样本进行分类。例如,如果值大于 0.5,则为正标签;如果小于或等于 0.5,则为负标签。这意味着你可以调整阈值以提高真阳性率(也称为召回率),同时降低假阳性率(也称为误报率),反之亦然。我们可以针对不同阈值绘制真阳性率与假阳性率的关系图。这个图被称为 ROC 曲线(接收者操作特征曲线)。当你的模型完美时,召回率为 1.0,曲线就是顶部的一条直线。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-89058-89272

    • ⏱ 2025-01-02 20:36:44
  • 📌 曲线下面积(AUC)衡量的是 ROC 曲线下的面积。由于越接近完美线越好,因此这个面积越大越好,如图 4-9 所示。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-89921-89979

    • ⏱ 2025-01-02 20:36:56
  • 📌 与 F1 和召回率一样,ROC 曲线仅关注正类,而不显示模型在负类上的表现。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-91498-91536

    • ⏱ 2025-01-02 20:37:48
  • 📌 数据级方法通过修改训练数据的分布来减少不平衡程度,使模型更容易学习。常见的技术家族是重采样。重采样包括过采样(增加少数类别的实例)和欠采样(移除多数类别的实例)。最简单的欠采样方法是从多数类别中随机移除实例,而最简单的过采样方法是随机复制少数类别的实例,直到达到满意的比例。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-93144-93281

    • ⏱ 2025-01-02 20:47:42
  • 📌 当你对训练数据进行重采样时,切勿在重采样数据上评估模型,因为这会导致模型过度拟合到该重采样分布。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-97851-97899

    • ⏱ 2025-01-02 21:57:06
  • 📌 欠采样存在因删除数据而丢失重要信息的风险。过采样则存在对训练数据过拟合的风险,尤其是当少数类别的添加副本是现有数据的复制品时。许多复杂的采样技术已被开发出来以减轻这些风险。其中一种技术是两阶段学习。首先在重采样数据上训练模型。这种重采样数据可以通过随机欠采样大类,直到每个类只有 N 个实例来实现。然后在原始数据上微调模型。另一种技术是动态采样:在训练过程中对表现较差的类别进行过采样,对表现较好的类别进行欠采样。由 Pouyanfar 等人提出的这种方法旨在让模型少看它已经学到的内容,多看它尚未掌握的内容。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-98500-99957

    • ⏱ 2025-01-02 21:57:26
  • 📌 如果数据级方法通过改变训练数据的分布来缓解类别不平衡的挑战,那么算法级方法则保持训练数据分布不变,但通过调整算法使其对类别不平衡更具鲁棒性。因为损失函数(或成本函数)指导学习过程,许多算法级方法涉及对损失函数的调整。关键思想是,如果有两个实例 x 1 和 x 2 ,并且对 x 1 做出错误预测的损失高于对 x 2 的损失,模型将优先确保对 x 1 做出正确预测,而不是对 x 2 。通过为我们关心的训练实例赋予更高的权重,我们可以使模型更专注于学习这些实例。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-101349-102384

    • ⏱ 2025-01-02 21:59:01
  • 📌 成本敏感学习早在 2001 年,基于不同类别的误分类会产生不同成本的洞察,Elkan 提出了成本敏感学习,其中修改了个体损失函数以考虑这种变化的成本。该方法首先使用成本矩阵来指定 C:如果类别 i 被分类为类别 j 的成本。如果 i = j,则是正确分类,成本通常为 0。如果不是,则是误分类。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-105521-106270

    • ⏱ 2025-01-02 22:14:29
  • 📌 这个损失函数的问题在于你必须手动定义成本矩阵,而不同任务在不同尺度下的成本矩阵是不同的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-111734-111778

    • ⏱ 2025-01-02 22:07:25
  • 📌 类别平衡损失在训练不平衡数据集时,模型可能会偏向多数类,并对少数类做出错误预测。如果我们惩罚模型在少数类上做出错误预测,能否纠正这种偏差呢?在其基本形式中,我们可以使每个类别的权重与该类别中的样本数量成反比,从而使稀有类别的权重更高。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-10-112558-113878

    • ⏱ 2025-01-02 22:14:25

数据增强

  • 📌 我们希望激励模型专注于学习那些它仍然难以分类的样本。如果我们调整损失函数,使得如果一个样本被正确分类的概率较低,它就会获得更高的权重,会怎么样呢?这正是焦点损失(focal loss)的作用。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-17088-17286

    • ⏱ 2025-01-02 22:16:08
  • 📌 数据增强是一系列用于增加训练数据量的技术。传统上,这些技术用于训练数据有限的任务,例如医学影像。然而,在过去的几年中,即使在我们拥有大量数据的情况下,它们也被证明是有用的——增强数据可以使我们的模型对噪声甚至对抗性攻击更加鲁棒。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-20509-20623

    • ⏱ 2025-01-02 22:24:01
  • 📌 简单的标签保留变换在计算机视觉中,最简单的数据增强技术是随机修改图像,同时保留其标签。你可以通过裁剪、翻转、旋转、反转(水平或垂直)、擦除部分图像等方式来修改图像。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-22177-22861

    • ⏱ 2025-01-02 22:25:54
  • 📌 在自然语言处理中,可以随机用一个相似的词替换某个词,假设这种替换不会改变句子的含义或情感,如表 4-9 所示。相似的词可以通过同义词词典找到,或者通过在词嵌入空间中找到彼此接近的词。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-23756-23847

    • ⏱ 2025-01-02 22:26:45
  • 📌 使用欺骗性数据诱使神经网络做出错误预测的行为被称为对抗攻击。向样本中添加噪声是创建对抗样本的常用技术。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-29257-29308

    • ⏱ 2025-01-02 22:28:21
  • 📌 扰动已被用于使模型更加健壮。最显著的例子之一是 BERT,该模型在每个序列中随机选择 15%的标记,并选择用随机单词替换其中 10%的标记。例如,给定句子“我的狗是毛茸茸的”,模型随机将“毛茸茸的”替换为“苹果”,句子变为“我的狗是苹果。”因此,1.5%的标记可能会导致无意义的结果。他们的消融研究表明,少量的随机替换为模型带来了小幅度的性能提升。 54 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-31099-31387

    • ⏱ 2025-01-02 22:33:07
  • 📌 合成部分训练数据以提升模型性能是可能的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-11-33485-33505

    • ⏱ 2025-01-02 22:36:41

5. 特征工程

  • 📌 选择使用哪些信息以及如何将这些信息提取为机器学习模型可用的格式的过程称为特征工程。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-36653-36694

    • ⏱ 2025-01-02 22:54:14
  • 📌 处理缺失值没有完美的方法。删除数据可能会导致丢失重要信息或加剧偏差。插补数据则可能会引入自己的偏差、增加数据噪声,甚至更糟,导致数据泄露。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-68953-69022

    • ⏱ 2025-01-02 23:07:34
  • 📌 在将特征输入模型之前,将其缩放到相似范围非常重要。这个过程称为特征缩放。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-71249-71285

    • ⏱ 2025-01-02 23:08:32
  • 📌 在实践中,机器学习模型往往难以处理偏态分布的特征。为了减轻偏态,常用的技术是对数变换:对特征应用对数函数。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-77621-77674

    • ⏱ 2025-01-02 23:10:17
  • 📌 离散化是将连续特征转换为离散特征的过程。这一过程也被称为量化或分箱。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-82437-82471

    • ⏱ 2025-01-03 10:54:50
  • 📌 编码分类特征 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-91331-91337

    • ⏱ 2025-01-03 12:13:24
  • 📌 在生产环境中,类别会发生变化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-93308-93323

    • ⏱ 2025-01-03 12:13:46
  • 📌 解决这个问题的一个方法是哈希技巧,这种方法由微软开发的 Vowpal Wabbit 包推广开来。这个技巧的核心是使用哈希函数为每个类别生成一个哈希值。哈希值将成为该类别的索引。由于可以指定哈希空间,因此可以预先固定特征的编码值数量,而无需知道将有多少个类别。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-98472-98601

    • ⏱ 2025-01-03 12:15:15
  • 📌 特征交叉是将两个或多个特征组合起来生成新特征的技术。该技术有助于建模特征之间的非线性关系。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-103418-103463

    • ⏱ 2025-01-03 12:19:37
  • 📌 因为特征交叉有助于模型学习变量之间的非线性关系,所以对于无法学习或不擅长学习非线性关系的模型(如线性回归、逻辑回归和基于树的模型)来说,它至关重要。在神经网络中,特征交叉的重要性较低,但它仍然有用,因为显式的特征交叉有时可以帮助神经网络更快地学习非线性关系。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-104901-105030

    • ⏱ 2025-01-03 12:59:00
  • 📌 特征交叉的一个注意事项是它可能导致特征空间急剧膨胀。假设特征 A 有 100 个可能的值,特征 B 有 100 个可能的值;将这两个特征交叉将产生一个具有 100 × 100 = 10,000 个可能值的特征。模型需要更多的数据来学习所有这些可能的值。另一个注意事项是,由于特征交叉增加了模型使用的特征数量,它可能导致模型对训练数据过拟合。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-105681-105851

    • ⏱ 2025-01-03 13:01:00
  • 📌 如果我们使用循环神经网络,它会按顺序处理单词,这意味着单词的顺序是隐式输入的。然而,如果我们使用像 Transformer 这样的模型,单词是并行处理的,因此需要显式输入单词的位置,以便模型知道这些单词的顺序(“狗咬孩子”与“孩子咬狗”非常不同)。我们不想将绝对位置 0、1、2、…、7 输入到模型中,因为经验表明,神经网络在处理非单位方差的输入时效果不佳(这就是为什么我们会对特征进行缩放,正如之前在“缩放”部分讨论的那样)。如果我们将位置重新缩放到 0 到 1 之间,那么 0、1、2、…、7 将变为 0、0.143、0.286、…、1,两个位置之间的差异将太小,神经网络难以学习区分。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-111180-112076

    • ⏱ 2025-01-03 13:22:35
  • 📌 由于嵌入会随着模型权重的更新而变化,我们说位置嵌入是学习得到的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-113534-113566

    • ⏱ 2025-01-03 13:34:07
  • 📌 位置嵌入也可以是固定的。每个位置的嵌入仍然是一个包含 S 个元素的向量(S 是位置嵌入的大小),但每个元素是使用函数预定义的,通常是正弦和余弦。在原始 Transformer 论文中,如果元素位于偶数索引,则使用正弦函数;否则,使用余弦函数。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-12-115129-115250

    • ⏱ 2025-01-03 13:36:45

数据泄露

  • 📌 固定位置嵌入是傅里叶特征的一个特例。如果位置嵌入中的位置是离散的,傅里叶特征也可以是连续的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-16136-16182

    • ⏱ 2025-01-03 13:42:24
  • 📌 当位置是连续的时,构建具有连续列索引的嵌入矩阵会非常困难,但使用正弦和余弦函数的固定位置嵌入仍然有效。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-16230-16295

    • ⏱ 2025-01-03 16:23:14
  • 📌 数据泄露指的是标签的某种形式“泄露”到用于预测的特征集中,而这些信息在推理时并不可用。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-22282-22325

    • ⏱ 2025-01-03 16:27:32
  • 📌 在构建模型预测未来股票价格时,你需要按时间划分训练数据,例如用前六天的数据训练模型,并在第七天的数据上评估模型。如果你随机划分数据,第七天的价格会被包含在训练集中,从而将当天的市场状况泄露给模型。我们说未来的信息泄露到了训练过程中。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-30583-30699

    • ⏱ 2025-01-03 16:36:59
  • 📌 为了防止未来信息泄露到训练过程中,并防止模型在评估过程中作弊,尽可能按时间分割数据,而不是随机分割。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-32056-32106

    • ⏱ 2025-01-03 16:43:43
  • 📌 缩放需要数据的全局统计信息——例如均值、方差。一个常见的错误是在将数据分割为不同部分之前,使用整个训练数据生成全局统计信息,这会将测试样本的均值和方差泄露到训练过程中,使模型能够针对测试样本调整其预测。这些信息在生产环境中是不可用的,因此模型的性能可能会下降。为了避免这种类型的泄漏,始终在缩放之前先拆分数据,然后使用训练集部分的统计数据来缩放所有部分。有些人甚至建议在进行任何探索性数据分析和数据处理之前先拆分数据,以免我们无意中获取测试集部分的信息。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-34543-35371

    • ⏱ 2025-01-03 16:47:41
  • 📌 处理特征缺失值的一种常见方法是使用所有现有值的均值或中位数来填充(输入)它们。如果使用整个数据而不是仅使用训练集来计算均值或中位数,可能会发生泄漏。这种泄漏与由缩放引起的泄漏类似,可以通过仅使用训练集的统计量来填充所有分割中的缺失值来防止。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-36828-36948

    • ⏱ 2025-01-03 16:49:14
  • 📌 如果数据中存在重复或近似重复的样本,在分割数据之前未能将其移除,可能会导致相同的样本同时出现在训练集和验证/测试集中。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-38434-38493

    • ⏱ 2025-01-03 17:49:50
  • 📌 一组示例的标签高度相关,但被划分到不同的数据集中。例如,一位患者可能有两张相隔一周的肺部 CT 扫描,它们很可能在是否包含肺癌迹象的标签上相同,但其中一张在训练集中,另一张在测试集中。这种类型的泄漏在包含同一物体在毫秒级间隔内拍摄的照片的目标检测任务中很常见——其中一些照片落在训练集中,而另一些落在测试集中。如果不了解数据的生成方式,很难避免这种类型的数据泄漏。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-41700-42731

    • ⏱ 2025-01-03 17:54:38
  • 📌 没有万无一失的方法来避免这种类型的泄漏,但你可以通过跟踪数据来源并了解其收集和处理方式来降低风险。对数据进行归一化处理,使不同来源的数据具有相同的均值和方差。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-44072-44151

    • ⏱ 2025-01-03 18:27:10
  • 📌 衡量每个特征或一组特征相对于目标变量(标签)的预测能力。如果某个特征具有异常高的相关性,请调查该特征的生成方式以及相关性是否合理。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-46349-46414

    • ⏱ 2025-01-03 18:34:29
  • 📌 进行消融研究以衡量某个特征或一组特征对模型的重要性。如果移除某个特征导致模型性能显著下降,则需调查该特征为何如此重要。如果你有大量特征,比如一千个特征,可能无法对它们的每种组合进行消融研究,但偶尔对怀疑最重要的特征子集进行消融研究仍然有用。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-47114-47234

    • ⏱ 2025-01-03 18:35:21
  • 📌 留意添加到模型中的新特征。如果添加一个新特征显著提升了模型的性能,要么这个特征确实很好,要么这个特征包含了标签的泄露信息。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-47902-48564

    • ⏱ 2025-01-03 18:36:14
  • 📌 每次查看测试集时都要非常小心。如果你以任何方式使用测试集,而不是仅仅用于报告模型的最终性能,无论是为了提出新特征的想法还是调整超参数,你都有可能将未来的信息泄露到训练过程中。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-48564-49457

    • ⏱ 2025-01-03 18:36:55
  • 📌 理论上,如果一个特征无助于模型做出好的预测,像 L1 正则化这样的正则化技术应该将该特征的权重减少到 0。然而,在实践中,如果移除不再有用(甚至可能有害)的特征,优先考虑好的特征,可能会帮助模型更快地学习。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-54221-54324

    • ⏱ 2025-01-03 19:01:53
  • 📌 在评估某个特征是否适合模型时,你可能需要考虑两个因素:对模型的重要性和对未见数据的泛化能力。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-55648-56452

    • ⏱ 2025-01-03 20:18:35
  • 📌 一个粗略的经验法则是,如果该特征在数据中出现的比例非常小,那么它的泛化能力可能不会很强。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-65687-65731

    • ⏱ 2025-01-03 20:25:28
  • 📌 这条经验法则较为粗略,因为即使某些特征在大部分数据中缺失,它们仍然可能有用。尤其是当缺失值并非随机出现时,拥有该特征与否可能强烈暗示其价值。例如,如果一个特征仅出现在 1%的数据中,但拥有该特征的样本中有 99%带有正面标签,那么这个特征是有用的,你应该使用它。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-66422-67154

    • ⏱ 2025-01-03 20:27:10
  • 📌 我发现阅读 Kaggle 竞赛获胜团队如何设计他们的特征非常有用,这有助于了解他们的技术和他们所做的考虑。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-13-72466-73120

    • ⏱ 2025-01-03 21:26:32

6. 模型开发与离线评估

  • 📌 尽管深度学习在生产中找到了更多的应用场景,经典机器学习算法并不会消失。许多推荐系统仍然依赖于协同过滤和矩阵分解。基于树的算法,包括梯度提升树,仍然在许多对延迟要求严格的分类任务中发挥着重要作用。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-25341-25438

    • ⏱ 2025-01-04 08:38:02
  • 📌 这是一个经典的异常检测问题——欺诈交易是你想要检测的异常——而针对这个问题的常见算法有很多,包括 k 近邻、孤立森林、聚类和神经网络。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-27573-27640

    • ⏱ 2025-01-04 08:57:49
  • 📌 选择使用哪种模型时,不仅要考虑模型的性能(通过准确率、F1 分数和对数损失等指标衡量),还要考虑其他特性,例如训练所需的数据量、计算资源和时间,推理延迟以及可解释性。例如,一个简单的逻辑回归模型可能比复杂的神经网络准确率低,但它需要的标注数据更少,训练速度更快,部署更容易,并且更容易解释其预测的原因。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-29572-29723

    • ⏱ 2025-01-04 09:11:39
  • 📌 因为模型架构的性能在很大程度上取决于其评估的上下文——例如任务、训练数据、测试数据、超参数等——所以很难断言某个模型架构比另一个架构更好。这种说法在某个上下文中可能是正确的,但不太可能适用于所有可能的上下文。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-42325-42429

    • ⏱ 2025-01-04 09:23:35
  • 📌 在评估模型时,您可能需要考虑它们在不久的将来改进的潜力,以及实现这些改进的难易程度。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-47230-47272

    • ⏱ 2025-01-04 09:54:43
  • 📌 预测假设 每个旨在从输入 X 预测输出 Y 的模型都假设基于 X 预测 Y 是可能的。 独立同分布 神经网络假设样本是独立同分布的,这意味着所有样本都是从同一个联合分布中独立抽取的。 平滑性 每种监督式机器学习方法都假设存在一组函数,可以将输入转换为输出,使得相似的输入被转换为相似的输出。如果输入 X 产生输出 Y,那么接近 X 的输入将产生与 Y 成比例接近的输出。 可处理性 设 X 为输入,Z 为 X 的潜在表示。每个生成模型都假设计算概率 P(Z|X)是可行的。 边界 线性分类器假设决策边界是线性的。 条件独立性 朴素贝叶斯分类器假设在给定类别的情况下,属性值相互独立。 正态分布 许多统计方法假设数据是正态分布的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-53056-61445

    • ⏱ 2025-01-04 10:09:27
  • 📌 创建集成模型有三种方法:装袋法(bagging)、提升法(boosting)和堆叠法(stacking)。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-74888-74941

    • ⏱ 2025-01-04 10:28:25
  • 📌 Bagging,即自举聚合的缩写 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-75905-75921

    • ⏱ 2025-01-04 10:51:10
  • 📌 给定一个数据集,与其在整个数据集上训练一个分类器,不如通过有放回抽样创建不同的数据集,称为自助样本,并在每个自助样本上训练分类或回归模型。有放回抽样确保每个自助样本的创建是相互独立的。图 6-3 展示了装袋法的示意图。  图 6-3. Bagging 示意图。来源:改编自 Sirakorn 的图像 如果问题是分类,最终预测由所有模型的多数投票决定。例如,如果有 10 个分类器投票为垃圾邮件,6 个模型投票为非垃圾邮件,则最终预测为垃圾邮件。 如果问题是回归,最终预测是所有模型预测的平均值。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-76560-78940

    • ⏱ 2025-01-04 10:35:36
  • 📌 随机森林是装袋法的一个例子。随机森林是通过装袋法和特征随机性构建的决策树集合,其中每棵树只能从随机选择的特征子集中进行选择。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-80331-80393

    • ⏱ 2025-01-04 10:47:34
  • 📌 Boosting 是一类迭代集成算法,能够将弱学习器转化为强学习器。集成中的每个学习器都在相同的样本集上进行训练,但样本在迭代过程中被赋予不同的权重。因此,后续的弱学习器会更多地关注之前弱学习器分类错误的样本。图 6-4 展示了 Boosting 的示意图,其中包含了以下步骤。  图 6-4. 提升算法示意图。来源:改编自 Sirakorn 的图片 1.
    你首先在原始数据集上训练第一个弱分类器。 2.
    样本根据第一个分类器的分类效果进行重新加权,例如,被错误分类的样本会被赋予更高的权重。 3.
    在重新加权的数据集上训练第二个分类器。你的集成现在由第一个和第二个分类器组成。 4.
    样本根据集成分类器对其分类的准确性进行加权。 5.
    在重新加权的数据集上训练第三个分类器。将第三个分类器加入集成中。 6.
    根据需要重复多次迭代。 7.
    将最终强分类器构建为现有分类器的加权组合——训练误差较小的分类器具有更高的权重。 一个提升算法的例子是梯度提升机(GBM),它通常从弱决策树生成预测模型。它像其他提升方法一样以分阶段的方式构建模型,并通过允许优化任意可微损失函数来对其进行泛化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-81752-88214

    • ⏱ 2025-01-04 11:31:42
  • 📌 堆叠意味着你从训练数据中训练基础学习器,然后创建一个元学习器,将基础学习器的输出结合起来以生成最终预测,如图 6-5 所示。元学习器可以简单到一种启发式方法:你从所有基础学习器中取多数投票(用于分类任务)或平均投票(用于回归任务)。它也可以是另一个模型,例如逻辑回归模型或线性回归模型。  图 6-5. 由三个基础学习器组成的堆叠集成可视化 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-90307-91393

    • ⏱ 2025-01-04 11:34:12
  • 📌 以下是你可能希望在每次实验的训练过程中考虑跟踪的一些事项的简短列表: •
    训练集和每个评估集对应的损失曲线。 •
    你在所有非测试集上关心的模型性能指标,如准确率、F1 值、困惑度。 •
    对应样本、预测值和真实标签的日志。这对于临时分析和完整性检查非常有用。 • ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-96683-98728

    • ⏱ 2025-01-04 12:54:42
  • 📌 模型的速度,通过每秒的步数或(如果数据是文本)每秒处理的标记数来评估。 •
    系统性能指标,如内存使用率和 CPU/GPU 利用率。它们对于识别瓶颈和避免浪费系统资源非常重要。 •
    任何参数和超参数随时间变化的值,如果这些变化可能影响模型性能,例如使用学习率调度时的学习率;梯度范数(全局和每层),特别是在裁剪梯度范数时;以及权重范数,特别是在进行权重衰减时。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-99357-100796

    • ⏱ 2025-01-04 12:55:25
  • 📌 我们现在必须运行如此多的实验来找到最佳模型,是因为我们将机器学习视为一个黑箱。由于无法预测哪种配置效果最好,我们不得不尝试多种配置。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-14-112218-112284

    • ⏱ 2025-01-04 13:11:17

模型离线评估

  • 📌 从简单开始,逐步添加更多组件 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-24711-24725

    • ⏱ 2025-01-04 13:25:36
  • 📌 如果无法对少量数据过拟合,可能实现中存在问题。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-27605-27628

    • ⏱ 2025-01-04 13:26:38
  • 📌 设置随机种子可以确保不同运行之间的一致性,还能让你重现错误,并让其他人重现你的结果。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-28955-28997

    • ⏱ 2025-01-04 13:28:14
  • 📌 在某些情况下,数据样本太大,甚至无法放入内存,这时你可能需要使用梯度检查点(gradient checkpointing)等技术,这种技术通过权衡内存占用和计算量,使系统能够在更少的内存下进行更多的计算。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-32855-32957

    • ⏱ 2025-01-04 13:46:38
  • 📌  图 6-6. 数据并行中的同步 SGD 与异步 SGD。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-37204-37810

    • ⏱ 2025-01-04 14:40:16
  • 📌 理论上,异步 SGD 会收敛,但需要比同步 SGD 更多的步骤。然而,在实践中,当权重数量很大时,梯度更新往往是稀疏的,这意味着大多数梯度更新只修改参数的一小部分,并且来自不同机器的两个梯度更新修改相同权重的可能性较小。当梯度更新稀疏时,梯度陈旧性问题变得不那么严重,模型在同步和异步 SGD 下的收敛情况相似。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-38565-38721

    • ⏱ 2025-01-04 14:40:03
  • 📌 如果在一台机器上训练一个 epoch 需要 1M 步,那么在 1,000 台机器上训练可能只需要 1,000 步。一个直观的方法是提高学习率以在每一步学习更多,但我们也不能将学习率设置得太大,因为这会导致收敛不稳定。实际上,将批量大小增加到某个点之后,收益会逐渐减少。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-39679-39813

    • ⏱ 2025-01-04 14:45:44
  • 📌 在相同的模型设置下,主工作节点有时会比其他工作节点使用更多的资源。如果是这种情况,为了充分利用所有机器的资源,你需要找到一种方法来平衡它们之间的工作负载。最简单但并非最有效的方法是,在主工作节点上使用较小的批量大小,而在其他工作节点上使用较大的批量大小。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-40539-40666

    • ⏱ 2025-01-04 14:45:52
  • 📌 模型并行则是将模型的不同组件在不同的机器上进行训练,如图 6-7 所示。例如,机器 0 负责前两层的计算,而机器 1 负责接下来的两层,或者某些机器负责前向传播,而其他机器负责反向传播。  ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-42086-42520

    • ⏱ 2025-01-04 15:05:11
  • 📌 流水线并行是一种巧妙的技术,可以使模型的不同组件在不同机器上更并行地运行。这种方法有多种变体,但核心思想是将每台机器的计算分解为多个部分。当机器 1 完成其计算的第一部分时,它将结果传递给机器 2,然后继续执行第二部分,依此类推。这样,机器 2 可以在机器 1 执行第二部分计算的同时,开始执行其第一部分计算。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-44651-45432

    • ⏱ 2025-01-04 15:11:46
  • 📌 模型并行和数据并行并不互斥。许多公司同时使用这两种方法以更好地利用硬件资源 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-47353-47390

    • ⏱ 2025-01-04 15:15:47
  • 📌 一些团队将超参数调优提升到了一个新的层次:如果我们把模型的其他组件或整个模型都视为超参数会怎样?卷积层的大小或是否包含跳跃层都可以被视为超参数。与其手动在卷积层后添加池化层或在线性层后添加 ReLU(修正线性单元),不如将这些构建模块交给算法,让它自行决定如何组合它们。这一研究领域被称为架构搜索,或针对神经网络的神经架构搜索(NAS),因为它旨在寻找最优的模型架构。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-57129-57914

    • ⏱ 2025-01-04 15:28:39
  • 📌 探索搜索空间。一种简单的方法是随机搜索——从所有可能的配置中随机选择——这种方法不受欢迎,因为即使对于 NAS 来说,它的成本也高得令人望而却步。常见的方法包括强化学习(奖励那些能提高性能估计的选择)和进化(对架构进行变异,选择表现最好的,再对它们进行变异,依此类推)。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-61777-61912

    • ⏱ 2025-01-04 15:25:59
  • 📌 如果我们用神经网络来指定更新规则会怎样?模型权重的更新量将由这个神经网络计算。这种方法产生了学习型优化器,而不是手工设计的优化器。 由于学习到的优化器是神经网络,它们需要进行训练。你可以在训练神经网络其余部分的同一数据集上训练你的学习优化器,但这要求你每次有任务时都要训练一个优化器。 另一种方法是先在现有任务集上训练一个学习到的优化器——使用这些任务上的聚合损失作为损失函数,并使用现有的设计优化器作为学习规则——然后在每个新任务中使用它。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-64473-65894

    • ⏱ 2025-01-04 16:09:01
  • 📌 你还需要通过实验来确定模型在生产环境中的衰减速度(例如,需要多久重新训练一次),以便构建支持这一重新训练需求的基础设施。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-77290-77350

    • ⏱ 2025-01-04 16:28:02
  • 📌 评估指标本身意义不大。在评估模型时,了解你评估的基准至关重要。具体的基准应因用例而异,但以下是可能适用于各种用例的五个基准: 随机基线 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-85749-86445

    • ⏱ 2025-01-04 16:32:35
  • 📌 简单启发式 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-92065-92070

    • ⏱ 2025-01-04 16:34:05
  • 📌 零规则基线 零规则基线是简单启发式基线的一种特殊情况,当你的基线模型总是预测最常见的类别时。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-93427-94101

    • ⏱ 2025-01-04 16:36:03
  • 📌 人类基线 在许多情况下,机器学习的目标是自动化原本由人类完成的任务,因此了解模型与人类专家相比的表现非常有用。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-95424-96107

    • ⏱ 2025-01-04 16:37:41
  • 📌 现有解决方案 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-96826-96832

    • ⏱ 2025-01-04 16:41:05
  • 📌 你可能需要选择在扰动数据上表现最好的模型,而不是在干净数据上表现最好的模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-15-103590-104229

    • ⏱ 2025-01-04 16:44:45

摘要

  • 📌 置信度测量可以被视为一种思考每个单独预测有用性阈值的方式。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-16-16136-16165

    • ⏱ 2025-01-04 17:23:51
  • 📌 聚合可能会掩盖和矛盾实际情况。为了在选择模型时做出明智的决策,我们不仅需要考虑它在整个数据上的表现,还需要考虑它在各个切片上的表现。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-16-37425-37491

    • ⏱ 2025-01-04 17:29:53

7. 模型部署与预测服务

  • 📌 生成预测的过程称为推理。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-28018-28030

    • ⏱ 2025-01-04 17:40:07
  • 📌 机器学习系统还会遇到所谓的“数据分布偏移”问题,即模型在生产环境中遇到的数据分布与其训练时的数据分布不同。 10 因此,机器学习模型往往在训练后表现最佳,但随着时间的推移性能会逐渐下降。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-37822-38026

    • ⏱ 2025-01-04 17:42:52
  • 📌 使模型变小的过程称为模型压缩,而使其推理速度更快的过程称为推理优化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-93102-93136

    • ⏱ 2025-01-04 19:32:55
  • 📌 最常见的四种技术是低秩优化、知识蒸馏、剪枝和量化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-94566-94591

    • ⏱ 2025-01-04 19:33:58
  • 📌 低秩分解的核心思想是用低维张量替换高维张量。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-96130-96152

    • ⏱ 2025-01-04 19:35:07
  • 📌 知识蒸馏是一种方法,其中一个小模型(学生)被训练来模仿一个更大的模型或模型集合(教师)。较小的模型是您将部署的模型。尽管学生通常在预训练的教师之后进行训练,但两者也可以同时训练。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-101182-101271

    • ⏱ 2025-01-04 19:44:07
  • 📌 在神经网络的上下文中,剪枝有两种含义。一种是移除神经网络的整个节点,这意味着改变其架构并减少其参数数量。更常见的含义是找到对预测最无用的参数并将其设置为 0。在这种情况下,剪枝不会减少参数的总数,只会减少非零参数的数量。神经网络的架构保持不变。这有助于减小模型的大小,因为剪枝使神经网络更加稀疏,而稀疏架构通常比密集结构需要更少的存储空间。实验表明,剪枝技术可以将训练后网络的非零参数数量减少超过 90%,从而在不影响整体准确性的情况下减少存储需求并提高推理的计算性能。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-104582-104817

    • ⏱ 2025-01-04 19:53:53
  • 📌 量化通过使用更少的位数来表示模型的参数,从而减小模型的大小。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-107712-107742

    • ⏱ 2025-01-04 19:57:35
  • 📌 量化可以在训练期间进行(量化感知训练), 32 即在较低精度下训练模型,也可以在训练后进行,即在单精度浮点数下训练模型,然后在推理时进行量化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-17-110988-111170

    • ⏱ 2025-01-04 20:02:10

云端与边缘的机器学习

  • 📌 循环分块 在循环中更改数据访问顺序以利用硬件的内存布局和缓存。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-18-46755-47545
    • ⏱ 2025-01-04 20:40:10

8. 数据分布变化与监控

  • 📌 部署模型并不是过程的终点。模型在生产中的性能会随着时间的推移而下降。一旦模型被部署,我们仍然需要持续监控其性能以发现问题,并部署更新来修复这些问题。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-18953-19027

    • ⏱ 2025-01-04 21:22:42
  • 📌 机器学习特定故障 ML 特有的故障是指特定于 ML 系统的故障。例如,数据收集和处理问题、不良的超参数、训练管道中的更改未正确复制到推理管道中(反之亦然)、导致模型性能随时间下降的数据分布变化、边缘情况以及退化反馈循环。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-35245-35956

    • ⏱ 2025-01-04 21:44:39
  • 📌 当我们说机器学习模型从训练数据中学习时,这意味着模型学习了训练数据的潜在分布,目的是利用这种学习到的分布来对未见过的数据(即训练期间未看到的数据)生成准确的预测。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-38175-38256

    • ⏱ 2025-01-04 21:51:12
  • 📌 当模型能够对未见过的数据生成准确的预测时,我们说这个模型“泛化到未见过的数据”。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-38280-38320

    • ⏱ 2025-01-04 21:52:05
  • 📌 边缘案例是指那些极端的数据样本,它们会导致模型犯下灾难性的错误。尽管边缘案例通常指的是从同一分布中抽取的数据样本,但如果模型表现不佳的数据样本数量突然增加,这可能表明基础数据分布发生了变化。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-46103-46198

    • ⏱ 2025-01-05 11:20:58
  • 📌 异常值指的是数据:与其他示例显著不同的示例。边缘情况指的是性能:模型表现显著差于其他示例的情况。一个异常值可能导致模型表现异常糟糕,从而使其成为边缘情况。然而,并非所有异常值都是边缘情况。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-49080-49174

    • ⏱ 2025-01-05 11:24:27
  • 📌 在模型开发过程中,异常值可能会对模型的性能产生负面影响,如图 8-1 所示。在许多情况下,移除异常值可能是有益的,因为它有助于模型学习更好的决策边界,并在未见过的数据上更好地泛化。然而,在推理过程中,通常无法移除或忽略与其他查询显著不同的查询。你可以选择对其进行转换——例如,当你在 Google 搜索中输入“mechin learnin”时,Google 可能会询问你是否指的是“machine learning”。但大多数情况下,你可能希望开发一个模型,使其即使在意外输入的情况下也能表现良好。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-49841-50090

    • ⏱ 2025-01-05 11:29:50
  • 📌 当预测本身影响反馈,而反馈又影响模型的下一轮迭代时,可能会发生退化反馈循环。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-53202-53240

    • ⏱ 2025-01-05 11:41:17
  • 📌 它有许多不同的名称,包括“曝光偏差”、“流行度偏差”、“过滤气泡”,有时也称为“回音室”。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-54397-54442

    • ⏱ 2025-01-05 11:42:13
  • 📌 对于推荐系统的任务,即使系统处于离线状态,也可以通过测量系统输出的流行度多样性来检测退化的反馈循环。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-58180-58230

    • ⏱ 2025-01-05 11:56:47
  • 📌 在预测中引入随机化可以减少它们的同质性。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-61663-61683

    • ⏱ 2025-01-05 12:00:36
  • 📌 如果预测显示的位置以任何方式影响其反馈,您可能希望使用位置特征对位置信息进行编码。位置特征可以是数值型的(例如,位置为 1、2、3,…)或布尔型的(例如,预测是否显示在第一个位置)。请注意,“位置特征”与第 5 章中提到的“位置嵌入”不同。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-64120-64242

    • ⏱ 2025-01-05 12:03:42
  • 📌 在训练过程中,你将“歌曲是否被首先推荐”作为一个特征添加到训练数据中,如表 8-1 所示。这个特征使你的模型能够学习到成为顶部推荐对歌曲被点击的可能性有多大影响。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-64865-64946

    • ⏱ 2025-01-05 12:04:26
  • 📌 在推理过程中,您希望预测用户是否会点击一首歌曲,而不论该歌曲被推荐的位置如何,因此您可能希望将“第一位置”特征设置为 False。然后,您可以查看模型为每个用户对多首歌曲的预测,并选择展示每首歌曲的顺序。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-83530-83632

    • ⏱ 2025-01-05 12:13:19
  • 📌 模型训练时所使用的数据分布称为源分布。模型进行推理时所使用的数据分布称为目标分布。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-85959-86000

    • ⏱ 2025-01-05 12:15:10
  • 📌 虽然数据分布偏移经常与概念漂移、协变量偏移和偶尔的标签偏移互换使用,但它们是数据偏移的三种不同子类型。请注意,关于不同类型数据偏移的讨论涉及大量数学内容,主要从研究角度有用:开发有效的算法来检测和解决数据偏移需要理解这些偏移的原因。在生产环境中,当遇到分布偏移时,数据科学家通常不会停下来思考它是哪种类型的偏移。他们更关心的是如何处理这种偏移。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-88262-88434

    • ⏱ 2025-01-05 12:22:24
  • 📌 标签偏移、协变量偏移和概念漂移定义如下:协变量偏移当 P(X) 发生变化但 P(Y|X) 保持不变时。这指的是联合分布的第一个分解。标签偏移当 P(Y) 发生变化但 P(X|Y) 保持不变时。这指的是联合分布的第二种分解。概念漂移当 P(Y|X)变化但 P(X)保持不变时。这指的是联合分布的第一个分解。 21 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-19-90621-94618

    • ⏱ 2025-01-05 12:23:35

应对数据分布变化

  • 📌 在工业界,许多公司用来检测两个分布是否相同的简单方法是比较它们的统计量,如最小值、最大值、均值、中位数、方差、各种分位数(如第 5、25、75 或 95 分位数)、偏度和峰度等。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-19523-19612

    • ⏱ 2025-01-06 16:24:53
  • 📌 更复杂的解决方案是使用双样本假设检验,简称双样本检验。这是一种用于确定两个总体(两组数据)之间的差异是否具有统计显著性的检验。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-20585-20648

    • ⏱ 2025-01-06 16:27:08
  • 📌 差异在统计上显著并不意味着它在实际中重要。然而,一个好的经验法则是,如果你能够从相对较小的样本中检测到差异,那么这可能是一个严重的差异。如果需要大量的样本才能检测到,那么这个差异可能不值得担心。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-21384-21481

    • ⏱ 2025-01-06 17:46:43
  • 📌 基本的双样本检验是 Kolmogorov-Smirnov 检验, ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-22082-22114

    • ⏱ 2025-01-06 17:59:46
  • 📌 然而,KS 检验的一个主要缺点是它只能用于一维数据。如果你的模型的预测和标签是一维的(标量数字),那么 KS 检验对于检测标签或预测偏移是有用的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-22187-22260

    • ⏱ 2025-01-06 18:00:22
  • 📌 Alibi Detect 是一个很棒的开源包,其中实现了许多漂移检测算法,如图 8-2 所示。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-23171-23218

    • ⏱ 2025-01-06 17:52:05
  • 📌 由于双样本检验通常在低维数据上比在高维数据上效果更好,因此强烈建议在进行双样本检验之前降低数据的维度。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-23819-23870

    • ⏱ 2025-01-06 17:52:40
  • 📌 许多公司使用训练数据的分布作为基础分布,并以一定的粒度级别(如每小时和每天)监控生产数据的分布。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-31779-31929

    • ⏱ 2025-01-07 11:17:43
  • 📌 使用目标分布的标注数据重新训练模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-38452-38470

    • ⏱ 2025-01-07 11:52:52
  • 📌 在本书中,我们使用“重新训练”来指代从头训练和微调。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-40012-40038

    • ⏱ 2025-01-07 11:55:47
  • 📌 在机器学习特定的指标中,通常有四个工件需要监控:模型的准确性相关指标、预测结果、特征和原始输入。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-50883-50931

    • ⏱ 2025-01-07 12:13:16
  • 📌 系统在运行时收集的输出也称为遥测。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-101143-101160

    • ⏱ 2025-01-07 12:47:03
  • 📌 “遥测”一词源自希腊词根 tele,意为“远程”,以及 metron,意为“测量”。因此,遥测基本上意味着“远程测量”。在监控上下文中,它指的是从远程组件(如云服务或运行在客户设备上的应用程序)收集的日志和指标。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-20-101184-101290

    • ⏱ 2025-01-07 12:48:08

9. 持续学习与生产环境中的测试

  • 📌 在生产中采用持续学习的公司会以微批次更新其模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-22-23723-23747

    • ⏱ 2025-01-07 15:35:11
  • 📌 最适合持续学习的任务是那些能够通过短反馈循环获得自然标签的任务。这些任务的例子包括动态定价(基于预估需求和可用性)、到达时间估计、股票价格预测、广告点击率预测,以及在线内容(如推文、歌曲、短视频、文章等)的推荐系统。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-22-56033-56141

    • ⏱ 2025-01-07 23:24:47
  • 📌 回顾日志以提取标签的过程称为标签计算。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-22-58513-58532

    • ⏱ 2025-01-07 23:28:07
  • 📌 如果你想更新协同过滤模型,首先需要使用整个数据集构建用户-物品矩阵,然后对其进行降维。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-22-67711-67754

    • ⏱ 2025-01-07 23:41:31
  • 📌 一种衡量增益的方法是通过在不同时间窗口的历史数据上训练模型,并在今天的数据上进行评估,以观察性能的变化。例如,假设你拥有 2020 年的数据。为了衡量数据新鲜度的价值,你可以尝试在 2020 年 1 月至 6 月的数据上训练模型版本 A,在 2020 年 4 月至 9 月的数据上训练模型版本 B,在 2020 年 6 月至 11 月的数据上训练模型版本 C,然后在 12 月的数据上测试这些模型版本,如图 9-5 所示。这些版本之间的性能差异将让你了解模型从更新数据中获得的性能提升。如果使用三个月前数据训练的模型比使用一个月前数据训练的模型差很多,你就知道不应该等待三个月才重新训练模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-22-113253-113549

    • ⏱ 2025-01-08 00:21:07

生产环境测试

  • 📌 影子部署 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-25810-25814

    • ⏱ 2025-01-08 00:33:02
  • 📌 对于每个传入的请求,将其路由到两个模型以进行预测,但仅向用户提供现有模型的预测结果。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-27757-27800

    • ⏱ 2025-01-08 00:31:39
  • 📌 A/B 测试 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-30582-30588

    • ⏱ 2025-01-08 00:32:59
  • 📌 一部分流量被路由到新模型进行预测;其余部分则路由到现有模型进行预测。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-33438-33472

    • ⏱ 2025-01-08 00:31:27
  • 📌 为了衡量统计显著性,A/B 测试使用统计假设检验,如双样本检验。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-36470-36502

    • ⏱ 2025-01-08 00:37:23
  • 📌 金丝雀发布 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-40413-40418

    • ⏱ 2025-01-08 00:41:27
  • 📌 逐步向一小部分用户推出新软件版本 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-41030-41046

    • ⏱ 2025-01-08 00:41:35
  • 📌 一部分流量被路由到候选模型。 3.
    如果其表现令人满意,则增加候选模型的流量。如果不满意,则中止金丝雀测试并将所有流量重新路由回现有模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-42545-43243

    • ⏱ 2025-01-08 00:42:43
  • 📌 交错实验 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-46764-46768

    • ⏱ 2025-01-08 00:47:56
  • 📌 同时展示两个模型的推荐,看看用户会点击哪个模型的推荐 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-48097-48123

    • ⏱ 2025-01-08 00:48:21
  • 📌 多臂老虎机算法让你在利用(选择过去赔付最多的老虎机)和探索(选择可能赔付更多的其他老虎机)之间取得平衡。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-53664-53716

    • ⏱ 2025-01-08 00:53:54
  • 📌 在生产环境中测试模型的标准方法是 A/B 测试。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-54322-54346

    • ⏱ 2025-01-08 01:00:26
  • 📌 Bandit 算法 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-60393-60402

    • ⏱ 2025-01-08 01:03:44
  • 📌 最简单的探索算法是ε-贪婪算法。在 90%的时间(即ε = 0.9)内,你将流量路由到当前表现最好的模型,而在剩下的 10%时间内,你将流量路由到一个随机模型。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-61026-61106

    • ⏱ 2025-01-08 01:04:06
  • 📌 两种最流行的探索算法是汤普森采样(Thompson Sampling)和上置信界(Upper Confidence Bound, UCB)。汤普森采样根据当前知识选择模型,其概率是该模型为最优的。 在我们的案例中,这意味着算法根据模型具有比其他模型更高值(更好性能)的概率来选择模型。另一方面,UCB 选择具有最高上置信界的项目。 我们说 UCB 在面对不确定性时实现了乐观主义,它给那些不确定的项目一个“不确定性奖励”,也称为“探索奖励”。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-61739-63009

    • ⏱ 2025-01-08 01:06:21
  • 📌 上下文老虎机也被称为“一次性”强化学习问题。 在强化学习中,你可能需要采取一系列行动才能看到奖励。而在上下文老虎机中,你可以在行动后立即获得反馈 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-23-67426-67612

    • ⏱ 2025-01-08 01:13:21

ML 平台

  • 📌 五种最常见的工具:Airflow、Argo、Prefect、Kubeflow 和 Metaflow。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-25-19763-19813

    • ⏱ 2025-01-08 18:43:39
  • 📌 从用户体验的角度来看,我认为 Metaflow 更胜一筹。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-25-40972-41001

    • ⏱ 2025-01-08 18:52:46
  • 📌 特征存储可以帮助团队共享和发现特征,并管理每个特征的角色和共享设置。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-25-89100-89134

    • ⏱ 2025-01-08 19:12:24

11. 机器学习中的人性化方面

  • 📌 机器学习系统是概率性的,而非确定性的。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-27-19447-19466

    • ⏱ 2025-01-08 19:22:41
  • 📌 差分隐私背后的理念是,如果在数据库中进行任意单个替换的影响足够小,查询结果就无法用于推断任何单个个体的信息,从而提供隐私保护。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-27-115674-115737

    • ⏱ 2025-01-08 20:01:22

摘要

  • 📌 压缩对代表性不足的特征产生了不成比例的影响 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-28-17923-17944

    • ⏱ 2025-01-08 20:03:06
  • 📌 剪枝技术带来的差异影响远高于他们评估的量化技术。 ^CB-0sVGKRGK44Yb6t76sxG2J1PW-28-18719-18743

    • ⏱ 2025-01-08 20:03:24

读书笔记

4. 训练数据

划线评论

  • 📌 P(x) Q(x) ^3533118-7WSvQ5KoT
    • 💭 重要性加权应该是 P(x)/Q(x)
    • ⏱ 2025-01-01 19:26:09

本书评论