动手学人工智能-多层感知机9-环境和分布偏移

356 阅读6分钟

在机器学习中,我们通常通过训练模型来预测未来的结果。然而,很多时候我们忽略了一个关键问题——训练数据和实际应用中的数据是否相同? 如果数据的分布发生了变化,模型的表现可能会大打折扣。 我们在前面的学习中已经接触到很多机器学习应用,训练了许多模型来处理不同的数据集,但我们从未深入思考过数据的来源以及如何应对数据分布变化带来的影响。

在实际应用中,如果数据分布发生了变化,模型的性能可能会急剧下降,这就是所谓的“分布偏移”。这也是许多机器学习应用失败的根源之一。我们将讨论分布偏移的种类,以及如何通过一些技术手段来应对这些变化。

一、分布偏移的类型

分布偏移指的是训练数据和测试数据之间的分布差异。为了应对这种偏移,我们需要了解不同类型的分布偏移。

1. 协变量偏移

协变量偏移指的是数据中的特征分布发生了变化,而标签函数(即特征和标签之间的关系)保持不变。换句话说,虽然输入数据的分布可能会改变,但类别标签的条件分布不变。

举个例子:假设我们要训练一个区分猫和狗的模型。在训练阶段,我们使用了真实照片作为训练集,而在测试阶段,模型需要对卡通图像进行分类。如果训练集和测试集的特征差异很大,但标签关系(猫和狗的分类)没有改变,这种情况就属于协变量偏移

2. 标签偏移

标签偏移是指标签的边缘分布发生了变化,而类别的条件分布保持不变。换句话说,尽管标签的分布可能会发生变化,但给定特征的条件概率仍然是相同的。

例如,假设我们在训练一个疾病预测模型,训练数据中包含了不同年龄段的人群。如果由于某种原因,目标人群的年龄分布发生了变化(例如,更多的老年人参与了调查),但每个年龄段内的患病概率没有变化,那么这种偏移就是标签偏移。

通俗的解释:

假设你是一个医生,你的任务是预测患者是否患有某种疾病。你通过收集过去一年的数据,建立了一个模型,来根据症状判断是否患病。训练集里的数据是这样的:

  • 患病的概率:10%
  • 健康的概率:90%

你训练好的模型可以根据症状判断一个人是否患病。假设,你的模型做得很好,能够预测出10%患病、90%健康的人群。这个时候,你认为你的模型已经可以应用于实际情况了。

然而,标签偏移的情况就发生了:现在,医院里来的人群变了。假设现在来医院的人更倾向于患病,比如患者的比例变成了30%患病,70%健康。这个时候,虽然你模型中的输入数据(比如症状)没有发生变化,但是标签的分布发生了改变——你原来的数据是90%健康,10%患病,现在变成了70%健康,30%患病。

3. 概念偏移

概念偏移指的是标签的定义发生了变化。例如,一只猫的定义是固定的,但随着时间的推移,其他类别的定义可能会发生变化。例如,“时髦”的定义可能会随时而改变,或者不同地区对“软饮”的定义不同。

例如,美国不同地区可能对“软饮”有不同的名称,北方称之为“Pop”,南方则称之为“Soda”。这种变化可能会影响机器学习模型,尤其是在需要进行地区性分类的任务中。

二、分布偏移示例

在了解了分布偏移的不同类型后,让我们来看几个实际的例子,帮助我们更好地理解这些概念。

1. 医学诊断

假设我们正在开发一个癌症检测算法,使用健康人和病人的数据进行训练。训练模型时,数据集包含了健康人和病人的血液样本,但训练数据和实际应用中的数据可能存在分布差异。健康人的样本通常更容易获得,而病人的样本则较难收集。这就可能导致训练数据和实际数据之间存在显著的协变量偏移。

2. 自动驾驶汽车

对于开发自动驾驶汽车的公司来说,路沿检测是一个重要的任务。由于获取现实世界的数据非常昂贵,这些公司可能会使用游戏引擎中的合成数据来训练模型。然而,这些合成数据与真实世界数据之间的差异非常大,导致训练出的模型在真实汽车中无法正常工作。这也是一种典型的协变量偏移。

3. 非平稳分布

非平稳分布是指数据分布随着时间的变化而逐渐发生变化。举个例子,如果我们训练了一个广告推荐系统,随着新设备的发布(例如iPad),旧模型可能会失效。如果我们没有定期更新模型,它就无法适应新的设备或新的广告模式。

三、分布偏移纠正

当训练数据和测试数据之间存在分布偏移时,我们可以采用一些技术手段来纠正这种偏移,提高模型的表现。

1. 经验风险与实际风险

在训练模型时,我们通常通过最小化经验风险来近似实际风险。经验风险是指在训练数据上的损失,而实际风险是指在总体数据上的损失。假设我们有训练数据集D=(x1,y1),(x2,y2),,(xn,yn)\mathcal{D} = {(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)},其中xix_i是输入特征,yiy_i是标签。模型的目标是最小化经验风险:

L^(θ)=1ni=1n(y^i,yi)\hat{L}(\theta) = \frac{1}{n} \sum_{i=1}^{n} \ell(\hat{y}_i, y_i)

其中(y^i,yi)\ell(\hat{y}_i, y_i)是损失函数,用来衡量预测值y^i\hat{y}_i与真实值yiy_i之间的差距。

实际风险是基于数据的真实分布定义的,表示为:

Ltrue(θ)=E(x,y)P(x,y)[(f(x),y)]L_{\text{true}}(\theta) = \mathbb{E}_{(x,y)\sim P(x,y)}[\ell(f(x), y)]

其中P(x,y)P(x, y)是数据的真实分布。由于在训练过程中我们通常无法获取总体数据,我们通过最小化经验风险来近似最小化实际风险。

2. 协变量偏移纠正

当发生协变量偏移时,我们可以通过调整训练数据的权重来进行纠正。假设源数据分布是PS(x)P_S(x),目标数据分布是PT(x)P_T(x),我们可以根据数据来自正确分布与来自错误分布的概率之比,来重新衡量每个数据样本的权重。具体地,给定一个训练集DS\mathcal{D}_S,我们可以通过以下公式计算每个数据样本的权重:

wi=PT(xi)PS(xi)w_i = \frac{P_T(x_i)}{P_S(x_i)}

然后,我们通过“加权经验风险最小化”来训练模型:

L^(θ)=1ni=1nwi(y^i,yi)\hat{L}(\theta) = \frac{1}{n} \sum_{i=1}^{n} w_i \ell(\hat{y}_i, y_i)

3. 标签偏移纠正

当发生标签偏移时,我们可以通过调整标签的分布来进行纠正。例如,在一个多分类任务中,标签的分布可能发生变化,我们可以使用标签偏移的算法来估计标签的分布变化,并据此调整模型的训练过程。

结语

分布偏移是机器学习中非常常见且关键的问题。通过理解分布偏移的不同类型以及如何纠正这些偏移,我们可以在实际应用中提升模型的鲁棒性和准确性。在实际应用中,正确应对这些问题可以避免模型在部署后出现灾难性的失败。