《动手学深度学习(PyTorch版)》笔记4.9

Chapter4 Multilayer Perceptron

4.9 Environment and Distribution Shift

4.9.1 Types of Distribution Shift

在一个经典的情景中,假设训练数据是从某个分布 p S ( x , y ) p_S(\mathbf{x},y) pS(x,y)中采样的,但是测试数据将包含从不同分布 p T ( x , y ) p_T(\mathbf{x},y) pT(x,y)中抽取的未标记样本。如果没有任何关于 p S p_S pS p T p_T pT之间相互关系的假设,学习到一个分类器是不可能的。

4.9.1.1 Covariate Shift

在不同分布偏移中,协变量偏移(covariate shift)可能是最为广泛研究的。这里我们假设:虽然输入的分布可能随时间而改变,但标签函数(即条件分布 P ( y ∣ x ) P(y \mid \mathbf{x}) P(yx))没有改变。这个问题是由于协变量(特征)分布的变化而产生的。虽然有时我们可以在不引用因果关系的情况下对分布偏移进行推断,但在我们认为 x \mathbf{x} x导致 y y y的情况下,协变量偏移是一种自然假设。假设在一个与测试集的特征有着本质不同的数据集上进行训练,如果没有方法来适应新的领域,可能会有麻烦。

4.9.1.2 Label Shift

标签偏移(label shift)指的是在目标域中的标签分布与源域中的标签分布存在差异的情况。这里我们假设标签边缘概率 P ( y ) P(y) P(y)可以改变,但是类别条件分布 P ( x ∣ y ) P(\mathbf{x} \mid y) P(xy)在不同的领域之间保持不变。当我们认为 y y y导致 x \mathbf{x} x时,标签偏移是一个合理的假设。
在一些情况下,标签偏移和协变量偏移假设可以同时成立。例如,当标签是确定的,即使 y y y导致 x \mathbf{x} x,协变量偏移假设也会得到满足。在这些情况下,使用基于标签偏移假设的方法通常是有利的,因为这些方法倾向于包含看起来像标签(通常是低维)的对象,而不是像输入(通常是高维的)对象。

4.9.1.3 Concept Shift

当标签的定义发生变化时,可能会遇到概念偏移(concept shift),例如我们要建立一个机器翻译系统, P ( y ∣ x ) P(y \mid \mathbf{x}) P(yx)的分布可能会因我们的位置不同而得到不同的翻译。

4.9.2 Distribution Shift Correction

4.9.2.1 Empirical Risk and True Risk

训练数据 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),,(xn,yn)}的特征和相关的标签经过迭代,在每一个小批量之后更新模型 f f f的参数。为了简单起见,我们不考虑正则化,因此极大地降低了训练损失:

m i n i m i z e f 1 n ∑ i = 1 n l ( f ( x i ) , y i ) , \mathop{\mathrm{minimize}}_f \frac{1}{n} \sum_{i=1}^n l(f(\mathbf{x}_i), y_i), minimizefn1i=1nl(f(xi),yi),

其中 l l l是损失函数,称 1 n ∑ i = 1 n l ( f ( x i ) , y i ) \frac{1}{n} \sum_{i=1}^n l(f(\mathbf{x}_i), y_i) n1i=1nl(f(xi),yi)经验风险(empirical risk)。经验风险是为了近似 真实风险(true risk),即从其真实分布 p ( x , y ) p(\mathbf{x},y) p(x,y)中抽取的所有数据的总体损失的期望值:

E p ( x , y ) [ l ( f ( x ) , y ) ] = ∫ ∫ l ( f ( x ) , y ) p ( x , y )    d x d y . E_{p(\mathbf{x}, y)} [l(f(\mathbf{x}), y)] = \int\int l(f(\mathbf{x}), y) p(\mathbf{x}, y) \;d\mathbf{x}dy. Ep(x,y)[l(f(x),y)]=∫∫l(f(x),y)p(x,y)dxdy.

然而在实践中,我们通常无法获得总体数据,因此只需最小化经验风险,希望能近似最小化真实风险。

4.9.2.2 Covariate Shift Correction

假设对于带标签的数据 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi),我们要评估 P ( y ∣ x ) P(y \mid \mathbf{x}) P(yx)。然而观测值 x i \mathbf{x}_i xi是从某些源分布 q ( x ) q(\mathbf{x}) q(x)中得出的,而不是从目标分布 p ( x ) p(\mathbf{x}) p(x)中得出的。幸运的是,依赖性假设(如独立同分布假设)意味着条件分布保持不变,即: p ( y ∣ x ) = q ( y ∣ x ) p(y \mid \mathbf{x}) = q(y \mid \mathbf{x}) p(yx)=q(yx)。如果源分布 q ( x ) q(\mathbf{x}) q(x)是“错误的”,我们可以通过在真实风险的计算中,使用以下恒等式来进行纠正:

∫ ∫ l ( f ( x ) , y ) p ( y ∣ x ) p ( x )    d x d y = ∫ ∫ l ( f ( x ) , y ) q ( y ∣ x ) q ( x ) p ( x ) q ( x )    d x d y . \begin{aligned} \int\int l(f(\mathbf{x}), y) p(y \mid \mathbf{x})p(\mathbf{x}) \;d\mathbf{x}dy = \int\int l(f(\mathbf{x}), y) q(y \mid \mathbf{x})q(\mathbf{x})\frac{p(\mathbf{x})}{q(\mathbf{x})} \;d\mathbf{x}dy. \end{aligned} ∫∫l(f(x),y)p(yx)p(x)dxdy=∫∫l(f(x),y)q(yx)q(x)q(x)p(x)dxdy.

换句话说,我们需要根据数据来自正确分布与来自错误分布的概率之比来重新衡量每个数据样本的权重:

β i = d e f p ( x i ) q ( x i ) . \beta_i \stackrel{\mathrm{def}}{=} \frac{p(\mathbf{x}_i)}{q(\mathbf{x}_i)}. βi=defq(xi)p(xi).

将权重 β i \beta_i βi代入到每个数据样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi)中,我们可以使用”加权经验风险最小化“来训练模型:

m i n i m i z e f 1 n ∑ i = 1 n β i l ( f ( x i ) , y i ) . \mathop{\mathrm{minimize}}_f \frac{1}{n} \sum_{i=1}^n \beta_i l(f(\mathbf{x}_i), y_i). minimizefn1i=1nβil(f(xi),yi).

由于不知道这个比率,我们需要估计它。对于任意一种估计的方法,我们都需要从两个分布中抽取样本:“真实”的分布 p p p,通过访问测试数据获取;训练集 q q q,通过人工合成的很容易获得。请注意,我们只需要特征 x ∼ p ( x ) \mathbf{x} \sim p(\mathbf{x}) xp(x),不需要访问标签 y ∼ p ( y ) y \sim p(y) yp(y)。在这种情况下,对数几率回归(logistic regression)可以得到几乎与原始方法一样好的结果,这是用于二元分类的softmax回归的一个特例。Logistic regression指将线性组合的结果通过sigmoid 函数(也叫logistic函数)映射到一个介于0和1之间的概率值。为了简单起见,假设我们分别从 p ( x ) p(\mathbf{x}) p(x) q ( x ) q(\mathbf{x}) q(x)两个分布中抽取相同数量的样本。现在用 z z z标签表示:从 p p p抽取的数据为 1 1 1,从 q q q抽取的数据为 − 1 -1 1。混合数据集中的概率由下式给出

P ( z = 1 ∣ x ) = p ( x ) p ( x ) + q ( x )  and hence  P ( z = 1 ∣ x ) P ( z = − 1 ∣ x ) = p ( x ) q ( x ) . P(z=1 \mid \mathbf{x}) = \frac{p(\mathbf{x})}{p(\mathbf{x})+q(\mathbf{x})} \text{ and hence } \frac{P(z=1 \mid \mathbf{x})}{P(z=-1 \mid \mathbf{x})} = \frac{p(\mathbf{x})}{q(\mathbf{x})}. P(z=1x)=p(x)+q(x)p(x) and hence P(z=1x)P(z=1x)=q(x)p(x).

因此,如果我们使用logistic regression,其中 P ( z = 1 ∣ x ) = 1 1 + exp ⁡ ( − h ( x ) ) P(z=1 \mid \mathbf{x})=\frac{1}{1+\exp(-h(\mathbf{x}))} P(z=1x)=1+exp(h(x))1 h h h是一个参数化函数),则很自然有:

β i = 1 / ( 1 + exp ⁡ ( − h ( x i ) ) ) exp ⁡ ( − h ( x i ) ) / ( 1 + exp ⁡ ( − h ( x i ) ) ) = exp ⁡ ( h ( x i ) ) . \beta_i = \frac{1/(1 + \exp(-h(\mathbf{x}_i)))}{\exp(-h(\mathbf{x}_i))/(1 + \exp(-h(\mathbf{x}_i)))} = \exp(h(\mathbf{x}_i)). βi=exp(h(xi))/(1+exp(h(xi)))1/(1+exp(h(xi)))=exp(h(xi)).

总结一下,假设有一个训练集 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),,(xn,yn)}和一个未标记的测试集 { u 1 , … , u m } \{\mathbf{u}_1, \ldots, \mathbf{u}_m\} {u1,,um},对于协变量偏移,假设 1 ≤ i ≤ n 1 \leq i \leq n 1in x i \mathbf{x}_i xi来自某个源分布, u i \mathbf{u}_i ui来自目标分布,以下是纠正协变量偏移的典型算法:

  1. 生成一个二元分类训练集: { ( x 1 , − 1 ) , … , ( x n , − 1 ) , ( u 1 , 1 ) , … , ( u m , 1 ) } \{(\mathbf{x}_1, -1), \ldots, (\mathbf{x}_n, -1), (\mathbf{u}_1, 1), \ldots, (\mathbf{u}_m, 1)\} {(x1,1),,(xn,1),(u1,1),,(um,1)}
  2. 用logistic regression训练二元分类器得到函数 h h h
  3. 使用 β i = exp ⁡ ( h ( x i ) ) \beta_i = \exp(h(\mathbf{x}_i)) βi=exp(h(xi))或更好的 β i = min ⁡ ( exp ⁡ ( h ( x i ) ) , c ) \beta_i = \min(\exp(h(\mathbf{x}_i)), c) βi=min(exp(h(xi)),c) c c c为常量)对训练数据进行加权。
  4. 使用权重 β i \beta_i βi进行对 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),,(xn,yn)}的训练。

请注意,上述算法依赖于一个重要的假设:需要目标分布(例如,测试分布)中的每个数据样本在训练时出现的概率非零。如果我们找到 p ( x ) > 0 p(\mathbf{x}) > 0 p(x)>0 q ( x ) = 0 q(\mathbf{x}) = 0 q(x)=0的点,那么相应的重要性权重会是无穷大。

4.9.2.3 Label Shift Correction

假设我们处理的是 k k k个类别的分类任务。使用和上述相同符号, q q q p p p中分别是源分布(例如训练时的分布)和目标分布(例如测试时的分布)。假设标签的分布随时间变化: q ( y ) ≠ p ( y ) q(y) \neq p(y) q(y)=p(y),但类别条件分布保持不变: q ( x ∣ y ) = p ( x ∣ y ) q(\mathbf{x} \mid y)=p(\mathbf{x} \mid y) q(xy)=p(xy)。如果源分布 q ( y ) q(y) q(y)是“错误的”,
我们可以用下面的恒等式进行修正:

∫ ∫ l ( f ( x ) , y ) p ( x ∣ y ) p ( y )    d x d y = ∫ ∫ l ( f ( x ) , y ) q ( x ∣ y ) q ( y ) p ( y ) q ( y )    d x d y . \begin{aligned} \int\int l(f(\mathbf{x}), y) p(\mathbf{x} \mid y)p(y) \;d\mathbf{x}dy = \int\int l(f(\mathbf{x}), y) q(\mathbf{x} \mid y)q(y)\frac{p(y)}{q(y)} \;d\mathbf{x}dy. \end{aligned} ∫∫l(f(x),y)p(xy)p(y)dxdy=∫∫l(f(x),y)q(xy)q(y)q(y)p(y)dxdy.

这里,重要性权重将对应于标签似然比率

β i = d e f p ( y i ) q ( y i ) . \beta_i \stackrel{\mathrm{def}}{=} \frac{p(y_i)}{q(y_i)}. βi=defq(yi)p(yi).

标签偏移的一个好处是,如果我们在源分布上有一个相当好的模型,那么我们可以得到对这些权重的一致估计,而不需要处理周边的其他维度。在深度学习中,输入往往是高维对象(如图像),而标签通常是低维(如类别)。

为了估计目标标签分布,我们首先采用现成的分类器(通常基于训练数据进行训练),并使用验证集(也来自训练分布)计算其混淆矩阵。混淆矩阵 C \mathbf{C} C是一个 k × k k \times k k×k矩阵,其中每列对应于标签类别,每行对应于模型的预测类别,每个单元格的值 c i j c_{ij} cij是验证集中,真实标签为 j j j,而我们的模型预测为 i i i的样本数量所占的比例。

现在,我们不能直接计算目标数据上的混淆矩阵,因为我们无法看到真实环境下的样本的标签,我们所能做的是将所有模型在测试时的预测取平均数,得到平均模型输出 μ ( y ^ ) ∈ R k \mu(\hat{\mathbf{y}}) \in \mathbb{R}^k μ(y^)Rk,其中第 i i i个元素 μ ( y ^ i ) \mu(\hat{y}_i) μ(y^i)是我们模型预测测试集中 i i i的总预测分数。

结果表明,如果我们的分类器一开始就相当准确,并且目标数据只包含我们以前见过的类别,以及如果标签偏移假设成立(这里最强的假设),我们就可以通过求解一个简单的线性系统来估计测试集的标签分布

C p ( y ) = μ ( y ^ ) , \mathbf{C} p(\mathbf{y}) = \mu(\hat{\mathbf{y}}), Cp(y)=μ(y^),

因为作为一个估计, ∑ j = 1 k c i j p ( y j ) = μ ( y ^ i ) \sum_{j=1}^k c_{ij} p(y_j) = \mu(\hat{y}_i) j=1kcijp(yj)=μ(y^i)对所有 1 ≤ i ≤ k 1 \leq i \leq k 1ik成立,其中 p ( y j ) p(y_j) p(yj) k k k维标签分布向量 p ( y ) p(\mathbf{y}) p(y)的第 j t h j^\mathrm{th} jth元素。如果我们的分类器一开始就足够精确,那么混淆矩阵 C \mathbf{C} C将是可逆的,进而我们可以得到一个解 p ( y ) = C − 1 μ ( y ^ ) p(\mathbf{y}) = \mathbf{C}^{-1} \mu(\hat{\mathbf{y}}) p(y)=C1μ(y^)

因为我们观测源数据上的标签,所以很容易估计分布 q ( y ) q(y) q(y)。那么对于标签为 y i y_i yi的任何训练样本 i i i,我们可以使用我们估计的 p ( y i ) / q ( y i ) p(y_i)/q(y_i) p(yi)/q(yi)比率来计算权重 β i \beta_i βi,并将其代入加权经验风险最小化中。

4.9.2.4 Concept Shift Correction

概念偏移很难用原则性的方式解决,但通常情况下概念的变化总是缓慢的,我们可以使用新数据更新现有的网络权重,使其适应数据的变化。

4.9.3 Classification of Learning Problems

4.9.3.1 Batch Learning

批量学习(batch learning)中,我们可以访问一组训练特征和标签 { ( x 1 , y 1 ) , … , ( x n , y n ) } \{(\mathbf{x}_1, y_1), \ldots, (\mathbf{x}_n, y_n)\} {(x1,y1),,(xn,yn)},并使用这些特性和标签训练 f ( x ) f(\mathbf{x}) f(x),然后部署此模型,对来自同一分布的新数据 ( x , y ) (\mathbf{x}, y) (x,y)进行评分。例如,我们可以根据猫和狗的大量图片训练猫检测器。

4.9.3.2 Online Learning

首先观测 x i \mathbf{x}_i xi,得出一个估计值 f ( x i ) f(\mathbf{x}_i) f(xi),只有当我们做到这一点后,才能观测到 y i y_i yi,然后我们会根据我们的决定得到奖励或损失。例如,我们需要预测明天的股票价格,这样我们就可以根据这个预测进行交易。在一天结束时,我们会评估我们的预测是否盈利。换句话说,在在线学习(online learning)中,我们有以下的循环:

m o d e l   f t ⟶ d a t a   x t ⟶ e s t i m a t e   f t ( x t ) ⟶ o b s e r v a t i o n   y t ⟶ l o s s   l ( y t , f t ( x t ) ) ⟶ m o d e l   f t + 1 \mathrm{model} ~ f_t \longrightarrow \mathrm{data} ~ \mathbf{x}_t \longrightarrow \mathrm{estimate} ~ f_t(\mathbf{x}_t) \longrightarrow \mathrm{observation} ~ y_t \longrightarrow \mathrm{loss} ~ l(y_t, f_t(\mathbf{x}_t)) \longrightarrow \mathrm{model} ~ f_{t+1} model ftdata xtestimate ft(xt)observation ytloss l(yt,ft(xt))model ft+1

4.9.3.3 Reinforcement Learning(略)