4.7. 环境和分布偏移¶ 在 SageMaker Studio Lab 中打开 Notebook
在前面部分中,我们学习了许多机器学习的实际应用,将模型拟合到各种数据集。然而,我们却忽略了数据最初从何而来,以及我们最终打算如何处理模型的输出。机器学习的开发者在拿到数据时,往往会急于开发模型,而没有停下来思考这些基本问题。
许多失败的机器学习部署都可以追溯到这种失误。有时,根据测试集的准确率衡量,模型看起来表现得非常出色,但在部署中,当数据分布突然发生变化时,模型却会遭遇灾难性的失败。更隐蔽的是,有时模型的部署本身就可能成为扰乱数据分布的催化剂。举例来说,假设我们训练了一个模型来预测谁会偿还贷款,谁会违约,并发现申请人穿什么鞋与违约风险相关(牛津鞋表示会偿还,运动鞋表示会违约)。此后,我们可能会倾向于向所有穿牛津鞋的申请人发放贷款,并拒绝所有穿运动鞋的申请人。
在这种情况下,我们从模式识别到决策的轻率飞跃,以及未能批判性地考虑环境,可能会带来灾难性的后果。首先,一旦我们开始根据鞋子做决定,顾客就会察觉到并改变他们的行为。不久之后,所有申请人都会穿着牛津鞋,而他们的信用状况却不会因此改善。请花点时间消化一下这个例子,因为类似的问题在许多机器学习应用中普遍存在:通过将我们基于模型的决策引入环境,我们可能会破坏模型。
虽然我们不可能在一节中完整地讨论这些主题,但我们在此旨在揭示一些常见的问题,并激发批判性思维,以便及早发现此类情况,减轻损害,并负责任地使用机器学习。有些解决方案很简单(要求“正确”的数据),有些技术上很困难(实现一个强化学习系统),还有一些则要求我们完全跳出统计预测的范畴,去处理有关算法伦理应用的棘手哲学问题。
4.7.1. 分布偏移的类型¶
首先,我们坚持在被动预测的设定下,考虑数据分布可能发生变化的各种方式,以及可以采取哪些措施来挽救模型的性能。在一个经典的设定中,我们假设我们的训练数据是从某个分布 \(p_S(\mathbf{x},y)\) 中采样的,但我们的测试数据将包含从某个不同分布 \(p_T(\mathbf{x},y)\) 中抽取的未标记样本。我们必须面对一个严峻的现实。在没有任何关于 \(p_S\) 和 \(p_T\) 如何相互关联的假设下,学习一个鲁棒的分类器是不可能的。
考虑一个二元分类问题,我们希望区分狗和猫。如果分布可以任意变化,那么我们的设定允许出现一种病态情况,即输入分布保持不变:\(p_S(\mathbf{x}) = p_T(\mathbf{x})\),但标签全部翻转:\(p_S(y \mid \mathbf{x}) = 1 - p_T(y \mid \mathbf{x})\)。换句话说,如果上帝可以突然决定,未来所有“猫”都是狗,而我们之前所说的“狗”现在是猫——而输入 \(p(\mathbf{x})\) 的分布没有任何变化,那么我们就不可能将这种情况与分布根本没有变化的情况区分开来。
幸运的是,在对我们的数据未来可能发生变化的方式施加一些受限的假设下,有原则的算法可以检测到偏移,有时甚至可以动态适应,从而提高原始分类器的准确性。
4.7.1.1. 协变量偏移¶
在各类分布偏移中,协变量偏移可能是研究最广泛的一种。在这里,我们假设虽然输入的分布可能随时间变化,但标记函数,即条件分布 \(P(y \mid \mathbf{x})\) 不会改变。统计学家称之为*协变量偏移*,因为问题是由于协变量(特征)的分布发生了偏移。虽然我们有时可以在不涉及因果关系的情况下推理分布偏移,但我们注意到,在我们认为 \(\mathbf{x}\) 导致 \(y\) 的情况下,协变量偏移是自然而然的假设。
考虑区分猫和狗的挑战。我们的训练数据可能包含如 图 4.7.1 所示的图像。

图 4.7.1 用于区分猫和狗的训练数据(插图:Lafeez Hossain / 500px / Getty Images; ilkermetinkursova / iStock / Getty Images Plus; GlobalP / iStock / Getty Images Plus; Musthafa Aboobakuru / 500px / Getty Images)。¶
在测试时,我们被要求对 图 4.7.2 中的图像进行分类。

图 4.7.2 用于区分猫和狗的测试数据(插图:SIBAS_minich / iStock / Getty Images Plus; Ghrzuzudu / iStock / Getty Images Plus; id-work / DigitalVision Vectors / Getty Images; Yime / iStock / Getty Images Plus)。¶
训练集由照片组成,而测试集只包含卡通画。在一个与测试集特征显著不同的数据集上进行训练,如果没有一个连贯的计划来适应新的领域,可能会带来麻烦。
4.7.1.2. 标签偏移¶
*标签偏移*描述了相反的问题。这里,我们假设标签边缘分布 \(P(y)\) 可以改变,但类别条件分布 \(P(\mathbf{x} \mid y)\) 在不同领域间保持不变。当我们相信 \(y\) 导致 \(\mathbf{x}\) 时,标签偏移是一个合理的假设。例如,我们可能希望根据症状(或其他表现)预测诊断,即使诊断的相对患病率随时间变化。标签偏移在这里是合适的假设,因为疾病导致症状。在某些退化情况下,标签偏移和协变量偏移假设可以同时成立。例如,当标签是确定性的时候,即使 \(y\) 导致 \(\mathbf{x}\),协变量偏移假设也会满足。有趣的是,在这些情况下,使用源自标签偏移假设的方法通常更有利。这是因为这些方法倾向于处理看起来像标签的对象(通常是低维的),而不是处理看起来像输入的对象,后者在深度学习中往往是高维的。
4.7.1.3. 概念偏移¶
我们可能还会遇到相关的*概念偏移*问题,这是当标签本身的定义发生变化时出现的。这听起来很奇怪——一只*猫*就是一只*猫*,不是吗?然而,其他类别的用法会随着时间而改变。精神疾病的诊断标准、时尚的定义以及工作职位都受到相当大的概念偏移的影响。事实证明,如果我们在美国各地移动,按地理位置改变我们的数据来源,我们会发现关于*软饮料*名称的分布存在相当大的概念偏移,如 图 4.7.3 所示。

图 4.7.3 美国软饮料名称的概念偏移(CC-BY:Alan McConchie, PopVsSoda.com)。¶
如果我们构建一个机器翻译系统,分布 \(P(y \mid \mathbf{x})\) 可能会因我们所在的位置而异。这个问题可能很难发现。我们可能希望利用偏移仅在时间或地理上逐渐发生的知识。
4.7.2. 分布偏移的例子¶
在深入研究形式化和算法之前,我们可以讨论一些协变量或概念偏移可能不明显的具体情况。
4.7.2.1. 医疗诊断¶
想象一下,你想设计一个检测癌症的算法。你从健康和生病的人那里收集数据,然后训练你的算法。它运行得很好,给你很高的准确率,你得出结论,你已经准备好在医疗诊断领域开启成功的职业生涯。*没那么快。*
产生训练数据的分布和你在现实世界中遇到的分布可能会有很大不同。几年前,我们中的一些作者与一家初创公司合作时就遇到了这样的不幸。他们正在为一种主要影响老年男性的疾病开发一种血液测试,并希望使用他们从患者那里收集的血液样本进行研究。然而,从健康男性那里获取血液样本比从已经在系统中的病人那里要困难得多。为了弥补这一点,这家初创公司从一个大学校园的学生那里征集血液捐赠,作为开发测试的健康对照组。然后他们问我们是否可以帮助他们建立一个检测该疾病的分类器。
正如我们向他们解释的那样,用近乎完美的准确率区分健康和患病群体确实很容易。然而,这是因为测试对象在年龄、激素水平、体力活动、饮食、酒精消费以及许多与疾病无关的因素上存在差异。这在真实患者中不太可能出现。由于他们的抽样程序,我们可以预见到会遇到极端的协变量偏移。而且,这种情况不太可能通过传统方法纠正。简而言之,他们浪费了一大笔钱。
4.7.2.2. 自动驾驶汽车¶
假设一家公司想利用机器学习开发自动驾驶汽车。其中一个关键组件是路边检测器。由于真实的标注数据获取成本高昂,他们想出了一个(聪明但有待商榷的)主意,使用游戏渲染引擎的合成数据作为额外的训练数据。这在从渲染引擎抽取的“测试数据”上效果非常好。可惜的是,在真实汽车里却是一场灾难。原来,路边是用一种非常简单的纹理渲染的。更重要的是,*所有*的路边都用了*相同*的纹理,而路边检测器很快就学会了利用这个“特征”。
美国陆军在首次尝试在森林中探测坦克时也遇到了类似的情况。他们先拍了没有坦克的森林的航拍照片,然后把坦克开进森林,再拍了另一组照片。分类器看起来工作得*非常完美*。不幸的是,它仅仅学会了如何区分有阴影的树和没有阴影的树——第一组照片是在清晨拍摄的,第二组是在中午。
4.7.2.3. 非平稳分布¶
当分布缓慢变化(也称为*非平稳分布*)而模型没有得到充分更新时,会出现一个更为微妙的情况。以下是一些典型案例。
我们训练一个计算广告模型,然后没有频繁更新它(例如,我们忘记了一个名为iPad的不知名新设备刚刚推出)。
我们构建了一个垃圾邮件过滤器。它能很好地检测到我们目前见过的所有垃圾邮件。但后来垃圾邮件发送者变得聪明了,他们制作了与我们以前见过的任何邮件都不同的新邮件。
我们建立了一个产品推荐系统。它在整个冬天都运行得很好,但在圣诞节过后很长一段时间里,它仍然在推荐圣诞老人的帽子。
4.7.2.4. 更多轶事¶
我们构建了一个人脸检测器。它在所有基准测试上都表现良好。不幸的是,它在测试数据上失败了——出问题的例子是人脸充满整个图像的特写镜头(训练集中没有这样的数据)。
我们为美国市场构建了一个网络搜索引擎,并希望在英国部署它。
我们通过编译一个大型数据集来训练一个图像分类器,其中大量类别中的每一个都在数据集中被平等地表示,比如说1000个类别,每个类别由1000张图片表示。然后我们将系统部署到现实世界中,那里照片的实际标签分布是明显不均匀的。
4.7.3. 分布偏移的校正¶
正如我们所讨论的,在许多情况下,训练和测试分布 \(P(\mathbf{x}, y)\) 是不同的。在某些情况下,我们很幸运,尽管存在协变量、标签或概念偏移,模型仍然有效。在其他情况下,我们可以通过采用有原则的策略来应对偏移,从而做得更好。本节的其余部分技术性会强很多。没有耐心的读者可以继续阅读下一节,因为这部分内容不是后续概念的先决条件。
4.7.3.1. 经验风险和风险¶
让我们首先回顾一下模型训练期间到底发生了什么:我们迭代训练数据的特征和相关标签 \(\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}\),并在每个小批量后更新模型 \(f\) 的参数。为简单起见,我们不考虑正则化,所以我们主要是在最小化训练损失
其中 \(l\) 是损失函数,用于衡量在给定相关标签 \(y_i\) 的情况下,预测 \(f(\mathbf{x}_i)\) “有多差”。统计学家称 (4.7.1) 中的项为*经验风险*。*经验风险*是训练数据上的平均损失,用于近似*风险*,即从真实分布 \(p(\mathbf{x},y)\) 抽取的整个数据群体上的损失期望
然而,在实践中,我们通常无法获得整个数据群体。因此,*经验风险最小化*,即最小化 (4.7.1) 中的经验风险,是机器学习的一种实用策略,希望能够近似地最小化风险。
4.7.3.2. 协变量偏移校正¶
假设我们想要估计某个依赖关系 \(P(y \mid \mathbf{x})\),我们拥有带标签的数据 \((\mathbf{x}_i, y_i)\)。不幸的是,观测值 \(\mathbf{x}_i\) 是从某个*源分布* \(q(\mathbf{x})\) 中抽取的,而不是*目标分布* \(p(\mathbf{x})\)。幸运的是,依赖性假设意味着条件分布没有改变:\(p(y \mid \mathbf{x}) = q(y \mid \mathbf{x})\)。如果源分布 \(q(\mathbf{x})\) 是“错误的”,我们可以通过在风险中使用以下简单的恒等式来进行校正
换句话说,我们需要用从正确分布中抽取的概率与从错误分布中抽取的概率之比来重新加权每个数据样本
将每个数据样本 \((\mathbf{x}_i, y_i)\) 的权重 \(\beta_i\) 代入,我们可以使用*加权经验风险最小化*来训练我们的模型
可惜的是,我们不知道这个比率,所以在我们能做任何有用的事情之前,我们需要估计它。有许多方法可用,包括一些花哨的算子理论方法,试图直接使用最小范数或最大熵原则重新校准期望算子。请注意,对于任何这样的方法,我们都需要从两个分布中抽取的样本——“真实的”\(p\)(例如,通过访问测试数据)和用于生成训练集的 \(q\)(后者是理所当然可用的)。然而,请注意,我们只需要特征 \(\mathbf{x} \sim p(\mathbf{x})\);我们不需要访问标签 \(y \sim p(y)\)。
在这种情况下,存在一种非常有效的方法,它能给出几乎和原始方法一样好的结果:即逻辑回归,它是 softmax 回归(参见 4.1节)用于二元分类的一个特例。这就是计算估计概率比所需的全部。我们学习一个分类器来区分从 \(p(\mathbf{x})\) 抽取的数据和从 \(q(\mathbf{x})\) 抽取的数据。如果不可能区分这两个分布,那么这意味着相关的实例同样可能来自这两个分布中的任何一个。另一方面,任何可以很好区分的实例都应该相应地被显著地过加权或欠加权。
为简单起见,假设我们分别从分布 \(p(\mathbf{x})\) 和 \(q(\mathbf{x})\) 中拥有相同数量的实例。现在,用 \(z\) 表示从 \(p\) 抽取的标签为 \(1\),从 \(q\) 抽取的标签为 \(-1\)。那么,混合数据集中的概率由下式给出:
因此,如果我们使用逻辑回归方法,其中 \(P(z=1 \mid \mathbf{x})=\frac{1}{1+\exp(-h(\mathbf{x}))}\)(\(h\) 是一个参数化函数),那么可以得出
因此,我们需要解决两个问题:第一个是区分从两个分布中抽取的数据,然后是在 (4.7.5) 中解决一个加权经验风险最小化问题,其中我们用 \(\beta_i\) 对各项进行加权。
现在我们准备好描述一个校正算法了。假设我们有一个训练集 \(\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}\) 和一个未标记的测试集 \(\{\mathbf{u}_1, \ldots, \mathbf{u}_m\}\)。对于协变量偏移,我们假设对于所有 \(1 \leq i \leq n\),\(\mathbf{x}_i\) 是从某个源分布中抽取的,而对于所有 \(1 \leq i \leq m\),\(\mathbf{u}_i\) 是从目标分布中抽取的。这是一个用于校正协变量偏移的典型算法
创建一个二元分类训练集:\(\{(\mathbf{x}_1, -1), \ldots, (\mathbf{x}_n, -1), (\mathbf{u}_1, 1), \ldots, (\mathbf{u}_m, 1)\}\)。
使用逻辑回归训练一个二元分类器以获得函数 \(h\)。
使用 \(\beta_i = \exp(h(\mathbf{x}_i))\) 或更好的 \(\beta_i = \min(\exp(h(\mathbf{x}_i)), c)\)(其中 \(c\) 为某个常数)对训练数据进行加权。
在 (4.7.5) 中,使用权重 \(\beta_i\) 对 \(\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}\) 进行训练。
请注意,上述算法依赖于一个关键假设。为了使这个方案奏效,我们需要目标分布(例如,测试时)中的每个数据样本在训练时出现的概率非零。如果我们发现一个点 \(p(\mathbf{x}) > 0\) 但 \(q(\mathbf{x}) = 0\),那么相应的重要性权重应该是无穷大。
4.7.3.3. 标签偏移校正¶
假设我们正在处理一个有 \(k\) 个类别的分类任务。使用 4.7.3.2节 中的相同符号,\(q\) 和 \(p\) 分别是源分布(例如,训练时)和目标分布(例如,测试时)。假设标签的分布随时间变化:\(q(y) \neq p(y)\),但类别条件分布保持不变:\(q(\mathbf{x} \mid y)=p(\mathbf{x} \mid y)\)。如果源分布 \(q(y)\) 是“错误的”,我们可以根据 (4.7.2) 中定义的风险中的以下恒等式进行校正:
在这里,我们的重要性权重将对应于标签似然比
关于标签偏移的一个好处是,如果我们在源分布上有一个相当不错的模型,那么我们可以在不必处理环境维度的情况下,获得这些权重的一致估计。在深度学习中,输入往往是高维对象,如图像,而标签通常是更简单的对象,如类别。
为了估计目标标签分布,我们首先采用一个相当不错的现成分类器(通常在训练数据上训练),并使用验证集(也来自训练分布)计算其“混淆”矩阵。*混淆矩阵* \(\mathbf{C}\) 是一个 \(k \times k\) 矩阵,其中每列对应于标签类别(真实值),每行对应于我们模型的预测类别。每个单元格的值 \(c_{ij}\) 是验证集上总预测中真实标签为 \(j\) 而我们模型预测为 \(i\) 的比例。
现在,我们不能直接在目标数据上计算混淆矩阵,因为我们无法看到在现实世界中看到的样本的标签,除非我们投入一个复杂的实时标注流程。然而,我们可以做的是,将我们在测试时的所有模型预测平均起来,得到平均模型输出 \(\mu(\hat{\mathbf{y}}) \in \mathbb{R}^k\),其中第 \(i^\textrm{th}\) 个元素 \(\mu(\hat{y}_i)\) 是测试集上总预测中我们模型预测为 \(i\) 的比例。
事实证明,在一些温和的条件下——如果我们的分类器一开始就相当准确,如果目标数据只包含我们以前见过的类别,并且如果标签偏移假设首先成立(这是最强的假设)——我们可以通过解决一个简单的线性系统来估计测试集标签分布
因为作为一个估计,对于所有 \(1 \leq i \leq k\),\(\sum_{j=1}^k c_{ij} p(y_j) = \mu(\hat{y}_i)\) 成立,其中 \(p(y_j)\) 是 \(k\) 维标签分布向量 \(p(\mathbf{y})\) 的第 \(j^\textrm{th}\) 个元素。如果我们的分类器一开始就足够准确,那么混淆矩阵 \(\mathbf{C}\) 将是可逆的,我们得到一个解 \(p(\mathbf{y}) = \mathbf{C}^{-1} \mu(\hat{\mathbf{y}})\)。
因为我们观察源数据上的标签,所以很容易估计分布 \(q(y)\)。然后,对于任何带有标签 \(y_i\) 的训练样本 \(i\),我们可以取我们估计的 \(p(y_i)/q(y_i)\) 的比率来计算权重 \(\beta_i\),并将其代入 (4.7.5) 中的加权经验风险最小化。
4.7.3.4. 概念偏移校正¶
概念偏移更难用有原则的方式来修复。例如,在一种情况下,问题突然从区分猫和狗变成区分白色和黑色动物,期望我们能做得比仅仅收集新标签并从头开始训练要好得多是不合理的。幸运的是,在实践中,这种极端的偏移很少见。相反,通常发生的是任务持续缓慢地变化。为了让事情更具体,这里有一些例子
在计算广告中,新产品推出,旧产品变得不那么受欢迎。这意味着广告及其受欢迎程度的分布会逐渐变化,任何点击率预测器都需要随之逐渐变化。
交通摄像头的镜头由于环境磨损会逐渐退化,从而逐步影响图像质量。
新闻内容逐渐变化(即,大部分新闻保持不变,但新故事会出现)。
在这种情况下,我们可以使用我们训练网络时所用的相同方法,使它们适应数据的变化。换句话说,我们使用现有的网络权重,并简单地用新数据执行几个更新步骤,而不是从头开始训练。
4.7.4. 学习问题的分类¶
掌握了如何处理分布变化的知识后,我们现在可以考虑机器学习问题公式化的其他一些方面。
4.7.4.1. 批量学习¶
在*批量学习*中,我们可以访问训练特征和标签 \(\{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\}\),我们用它们来训练一个模型 \(f(\mathbf{x})\)。稍后,我们部署这个模型来为从相同分布中抽取的新数据 \((\mathbf{x}, y)\) 打分。这是我们在这里讨论的任何问题的默认假设。例如,我们可能会基于大量猫和狗的图片来训练一个猫检测器。一旦训练完成,我们就将其作为智能猫门计算机视觉系统的一部分发货,该系统只允许猫进入。然后这个系统被安装在客户家中,并且再也不会更新(除非出现极端情况)。
4.7.4.2. 在线学习¶
现在想象数据 \((\mathbf{x}_i, y_i)\) 是一个样本一个样本地到达的。更具体地说,假设我们首先观察到 \(\mathbf{x}_i\),然后我们需要得出一个估计 \(f(\mathbf{x}_i)\)。只有在我们完成这一步之后,我们才会观察到 \(y_i\),并根据我们的决定获得奖励或遭受损失。许多现实问题都属于这一类。例如,我们需要预测明天的股价,这使我们能够根据该估计进行交易,并在一天结束时,我们发现我们的估计是否为我们带来了利润。换句话说,在*在线学习*中,我们有以下循环,我们根据新的观察不断改进我们的模型
4.7.4.3. 赌博机¶
*赌博机*是上述问题的一个特例。在大多数学习问题中,我们有一个连续参数化的函数 \(f\),我们想要学习它的参数(例如,一个深度网络),而在*赌博机*问题中,我们只有有限数量的臂可以拉动,即有限数量的行动可以采取。对于这个更简单的问题,可以在最优性方面获得更强的理论保证,这并不奇怪。我们主要列出它是因为这个问题经常(令人困惑地)被视为一个独特的学习环境。
4.7.4.4. 控制¶
在许多情况下,环境会记住我们做了什么。不一定是以对抗的方式,但它会记住,并且响应将取决于之前发生的事情。例如,一个咖啡锅炉控制器会观察到不同的温度,这取决于它之前是否在加热锅炉。PID(比例-积分-微分)控制器算法在那里是一个流行的选择。同样,用户在新闻网站上的行为将取决于我们之前向他们展示了什么(例如,他们只会阅读大多数新闻一次)。许多这样的算法会为它们所处的环境建立一个模型,以便使它们的决定显得不那么随机。最近,控制理论(例如,PID变体)也被用于自动调整超参数,以实现更好的解耦和重建质量,并提高生成文本的多样性和生成图像的重建质量 (Shao 等人, 2020)。
4.7.4.5. 强化学习¶
在更一般的情况下,即一个有记忆的环境中,我们可能会遇到环境试图与我们合作的情况(合作博弈,特别是非零和博弈),或者其他情况下环境会试图获胜。国际象棋、围棋、西洋双陆棋或星际争霸是*强化学习*中的一些案例。同样,我们可能希望为自动驾驶汽车构建一个好的控制器。其他汽车可能会以非平凡的方式对自动驾驶汽车的驾驶风格做出反应,例如,试图避开它、试图造成事故或试图与之合作。
4.7.4.6. 考虑环境¶
上述不同情况之间的一个关键区别是,在平稳环境中一直有效的策略,在一个能够适应的环境中可能不会一直有效。例如,一个交易员发现的套利机会一旦被利用,很可能就会消失。环境变化的速度和方式在很大程度上决定了我们可以使用的算法类型。例如,如果我们知道事物可能只会缓慢变化,我们可以强制任何估计也只能缓慢变化。如果我们知道环境可能会瞬间变化,但只是非常不频繁,我们可以为此留出余地。这些类型的知识对于有抱负的数据科学家在处理概念偏移时至关重要,即当正在解决的问题会随时间变化时。
4.7.5. 机器学习中的公平、问责和透明度¶
最后,重要的是要记住,当你部署机器学习系统时,你不仅仅是在优化一个预测模型——你通常提供的是一个将用于(部分或完全)自动化决策的工具。这些技术系统可能会影响到受这些决策影响的个人的生活。从考虑预测到做出决策的飞跃,不仅提出了新的技术问题,还引发了一系列必须仔细考虑的伦理问题。如果我们在部署一个医疗诊断系统,我们需要知道它可能对哪些人群有效,对哪些人群无效。忽视对某个亚群福利的可预见风险,可能会导致我们提供劣质的护理。此外,一旦我们考虑决策系统,我们就必须退一步,重新考虑我们如何评估我们的技术。在这种范围变化的其他后果中,我们会发现*准确性*很少是正确的衡量标准。例如,当将预测转化为行动时,我们通常希望考虑以各种方式犯错的潜在成本敏感性。如果一种图像错误分类可能被视为种族歧视的暗示,而将图像错误分类为另一类别是无害的,那么我们可能需要相应地调整我们的阈值,在设计决策协议时考虑社会价值观。我们还希望谨慎对待预测系统如何导致反馈循环。例如,考虑预测性警务系统,它将巡逻警员分配到犯罪预测高的地区。很容易看到一个令人担忧的模式如何出现
犯罪率较高的社区会得到更多的巡逻。
因此,在这些社区发现的犯罪更多,这些数据会进入未来迭代的训练数据中。
由于接触到更多的正例,模型预测这些社区的犯罪率会更高。
在下一次迭代中,更新后的模型会更重点地针对同一个社区,导致发现更多的犯罪,如此循环。
通常,模型的预测与其训练数据耦合的各种机制在建模过程中没有被考虑到。这可能导致研究人员所说的*失控反馈循环*。此外,我们还要小心我们是否从一开始就在解决正确的问题。预测算法现在在调节信息传播方面扮演着过大的角色。一个人遇到的新闻是否应该由他们*点赞*的Facebook页面集合来决定?这些只是你在机器学习职业生涯中可能遇到的众多紧迫的伦理困境中的几个。
4.7.6. 小结¶
在许多情况下,训练集和测试集并非来自同一分布。这被称为分布偏移。风险是对从真实分布中抽取的整个数据群体上的损失期望。然而,这个整个群体通常是不可用的。经验风险是训练数据上的平均损失,用于近似风险。在实践中,我们执行经验风险最小化。
在相应的假设下,协变量和标签偏移可以在测试时被检测和纠正。未能考虑这种偏差在测试时可能会成为问题。在某些情况下,环境可能会记住自动化的行动并以令人惊讶的方式做出反应。我们在构建模型时必须考虑到这种可能性,并继续监控实时系统,对我们的模型和环境可能以意想不到的方式纠缠在一起的可能性持开放态度。