前言

本次分享主要呈现我对神经网络中 协变量偏移(Covariate Shift) 问题的理解,结合我所观看的视频以及搜集的资料进行整理。

协变量 是数学统计学中的概念,我们不深入探究其数学定义。我们只了解:

  • 在深层神经网络的构建中,出现的协变量偏移问题 是什么
  • 为什么 会产生这样的问题
  • 如何 解决这个问题

一、协变量偏移的引入

一个例子:识别猫的模型

我们要训练一个用于识别猫的模型,并且已经通过很多 黑猫 的训练数据训练好了一个模型。

问题: 这个模型是否能正确预测一只彩色猫呢?

答案: 因为它的训练数据里面没有彩色猫的数据,所以用于预测彩色猫的效果不理想。

但是实际上,一个能够识别猫的模型,能不能 用于识别彩色猫呢?

是能的。

这里之所以效果不理想,是因为只用了黑猫的样本对模型进行了训练。

类比理解

这就像是我们用二次函数坐标部分的数据拟合了一条二次函数左边部分的曲线,现在却用它来预测二次函数右边部分的数据。

训练数据分布          测试数据分布
     ↓                    ↓
  ┌─────┐              ┌─────┐
  │  ●  │              │     │
  │ ●●● │    →→→→→→    │  ○  │
  └─────┘              └─────┘
   黑猫                 彩色猫

协变量偏移的定义

训练数据与测试数据的分布不同,导致模型测试时表现显著下降,或者说泛化能力不好。

这就是神经网络中的一种 协变量偏移 的影响。

⚠️ 这样的影响是由于训练数据的不充分造成的,这并不冲突。我们只是将这最终的不利影响叫做协变量偏移问题而已。


二、深层神经网络中的协变量偏移

在深层神经网络中,还有另一种协变量偏移问题。

例子:5 层全连接网络

假设一个 5 层全连接网络,每层使用 Sigmoid 激活函数。

问题产生过程

阶段第三隐藏层线性输出分布说明
初始训练时(-2, 2)根据随机初始化的参数,输入数据经过第一、二层后的输出
参数更新后逐渐偏移到 Sigmoid 饱和区输入绝对值远大于 0
结果梯度接近 0反向传播失效,参数更新几乎停滞

问题示意

输入 → [层 1] → [层 2] → [层 3] → [层 4] → [层 5] → 输出

              第三隐藏层问题
              
Sigmoid 函数特性:
        输出

    1 ───┼───────────  饱和区 (梯度≈0)
         │      ╱
    0.5 ─┼────╱──────  线性区 (梯度大)
         │  ╱
    0 ───┼─╱──────────  饱和区 (梯度≈0)
         └────────────→ 输入
           -2   0   2

当第三隐藏层的线性函数输出分布偏移到 Sigmoid 的饱和区 时:

  • 梯度接近 0
  • 反向传播失效
  • 参数更新几乎停滞

三、解决方案:批量归一化(Batch Normalization)

核心思路

为了解决这种问题,我们可以通过 批量归一化(Batch Normalization, BN) 的方式实现。

直观理解

如果线性函数的输出分布到了 Sigmoid 函数的饱和区,我们在它进行 Sigmoid 的计算之前,将这些值再映射和缩放到合适的区间(比如 -1 到 1)就可以了。

线性输出 → [批量归一化] → [Sigmoid] → 下一层
   ↓            ↓
  (-5, 5)    →  (-1, 1)   →  线性区激活

工作原理

每一层都这样操作的话,就解决了协变量偏移的问题。

批量归一化的主要作用:

作用说明
稳定激活值分布防止激活值偏移到饱和区
加速训练允许使用更大的学习率
减少梯度消失保持梯度在合理范围
轻微正则化效果减少对 Dropout 的依赖

实现方式

具体批量归一化如何实现大家可以自行搜索,这里给出基本公式:

对于每一层的输入 x:

1. 计算批次均值:μ_B = (1/m) × Σx_i
2. 计算批次方差:σ²_B = (1/m) × Σ(x_i - μ_B)²
3. 归一化:x̂_i = (x_i - μ_B) / √(σ²_B + ε)
4. 缩放和平移:y_i = γ × x̂_i + β

其中:

  • γβ 是可学习的参数
  • ε 是一个小常数,用于数值稳定性

四、总结

协变量偏移的两种情况

类型原因表现
数据分布偏移训练数据与测试数据分布不同模型泛化能力差
内部协变量偏移深层网络中各层输入分布变化梯度消失,训练困难

解决方案对比

问题类型解决方案
数据分布偏移增加多样化训练数据、数据增强、迁移学习
内部协变量偏移批量归一化(Batch Normalization)

关键要点

  1. 协变量偏移 本质是分布不一致导致的泛化问题
  2. 深层网络 中的内部协变量偏移会导致梯度消失
  3. 批量归一化 通过规范化每层输入分布来解决该问题
  4. BN 已成为现代深度神经网络的标准组件之一

参考资料

  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning
  • Ioffe, S., & Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  • 相关教学视频与网络资料