Sam Lin

Sam Lin

2025-04-25-模型泛化能力

如何提升模型的泛化能力

正则化

正则化的目的,降低波动,使得模型训练更加平稳,高效

  1. layer norm 对每个样本的所有特征进行norm,与batch无关 例如句子,则是句子长度 * 词向量维度,适用于Transformer

  2. batch norm 核心:减少同一个批次内不同样本在某个通道上的分布差异 详解:假设一个批次有N个样本,每个样本的特征图有C个通道,特征图的高和宽分别为H和W。对于每一个通道c,我们会计算该通道上所有样本的均值和方差,然后使用这些统计量对该通道上的所有元素进行归一化。 当然,norm后的数据会影响数据的表达能力,因此引入两个参数 缩放参数 γ (gamma):控制归一化后数据的缩放比例。 偏移参数 β (beta):控制归一化后数据的偏移量。

  3. group norm 介于LN和BN之间。将channel分为多个group,对每个group内norm。和batch无关。在保留channel的依赖关系同时,避免对batch依赖。 优点,不依赖批次就意味着内存要求低。怎么对channel进行分组更灵活

  4. instance norm 针对单个样本的每个通道单独进行归一化。主要用于风格迁移

Instance Normalization(实例归一化,简称IN)是一种针对单个样本的每个通道单独进行归一化的方法,由Ulyanov等人在2016年提出。它主要用于风格迁移生成模型,能够有效保留图像的内容信息同时传递风格特征。

核心思路

IN对每个样本的每个通道独立计算均值和方差,忽略不同样本间的统计信息,因此特别适合处理图像的局部风格特征。与BN、LN、GN相比,它的归一化粒度更细(通道级别),且不依赖批次大小。

计算方式

假设输入形状为 [N, C, H, W](N为批量大小,C为通道数,H/W为特征图高/宽):

  1. 归一化:对每个样本的每个通道单独计算均值和方差,然后进行标准化。

数学公式

  • 均值:$\mu_{n,c} = \frac{1}{H \times W} \sum_{h,w} x_{n,c,h,w}$
  • 方差:$\sigma^2_{n,c} = \frac{1}{H \times W} \sum_{h,w} (x_{n,c,h,w} - \mu_{n,c})^2$
  • 归一化:$\hat{x}{n,c,h,w} = \frac{x{n,c,h,w} - \mu_{n,c}}{\sqrt{\sigma^2_{n,c} + \epsilon}}$
  • 缩放和平移:$y_{n,c,h,w} = \gamma_c \hat{x}_{n,c,h,w} + \beta_c$

其中:

  • $n$ 表示样本索引,$c$ 表示通道索引。
  • $\gamma$ 和 $\beta$ 是可学习的参数,维度为 [C],每个通道单独缩放和平移。
  • $\epsilon$ 是防止分母为零的小常数(通常取 $1e^{-5}$)。

归一化方法的对比

| 方法 | 归一化维度 | 依赖批次 | 核心特点 | |--------------------------|---------------------------|----------|---------------------------------------| | Batch Normalization (BN) | 对每个通道的所有样本归一化 | ✅ | 减少内部协变量偏移,适合分类任务 | | Layer Normalization (LN) | 对单个样本的所有通道归一化 | ❌ | 适合序列模型(如RNN、Transformer) | | Group Normalization (GN) | 对单个样本的通道分组归一化 | ❌ | 适合小批次训练、目标检测 | | Instance Normalization (IN) | 对单个样本的每个通道归一化 | ❌ | 保留内容信息,传递风格特征,适合风格迁移 |

代码示例(PyTorch)

import torch
import torch.nn as nn

# 输入形状 [batch_size, channels, height, width]
batch_size = 2
channels = 3  # 例如RGB图像
height, width = 224, 224
x = torch.randn(batch_size, channels, height, width)

# 创建 Instance Normalization 层
instance_norm = nn.InstanceNorm2d(num_features=channels)

# 前向传播
output = instance_norm(x)

print(f"输入形状: {x.shape}")
print(f"输出形状: {output.shape}")
print(f"归一化统计量计算方式: 每个样本的每个通道单独计算均值和方差")

关键特性

  1. 通道独立性:每个通道的归一化参数(均值、方差)独立计算,不依赖其他通道。
  2. 风格保留:在风格迁移中,IN能有效分离内容和风格信息。例如,将梵高的《星月夜》风格应用到照片时,IN可保留照片内容(如建筑、人物),同时传递星空笔触的风格。
  3. 不依赖批次大小:即使批次大小为1,IN仍能正常工作,适合内存受限的场景。

应用场景

  • 风格迁移:如CycleGAN、Neural Style Transfer等模型中广泛使用IN。
  • 生成对抗网络(GAN):在图像生成任务中,IN可提高生成图像的质量。
  • 图像降噪/超分辨率:保留图像细节的同时去除噪声。

为什么IN适合风格迁移?

  • 内容与风格分离:图像的内容信息通常编码在通道间的相关性中,而风格信息(如纹理、色调)更多体现在单个通道的统计特性中。IN通过通道级归一化,保留了内容信息的同时,使模型更容易学习和传递风格特征。
  • 减少批间干扰:在风格迁移中,不同样本的风格可能差异较大,BN的批统计特性会引入不必要的干扰,而IN的样本独立性更适合此类任务。

总结

Instance Normalization通过对每个样本的每个通道单独归一化,在风格迁移和生成模型中取得了显著效果。它的设计思想体现了深度学习中“归一化策略需与任务特性匹配”的重要原则。