正则化面试题集
Q1: BatchNorm的训练和推理有什么区别?
答:
- 训练:用当前batch的均值和方差,同时更新running stats
- 推理:用训练时累积的running mean和running var(固定值)
为什么推理时不能用batch的统计量?
- 推理时batch可能只1个样本,统计量不可靠
- 需要确定性输出(同样的输入→同样的输出)
Q2: BN中的γ和β有什么作用?
答: 缩放因子γ和偏移β是可学习参数,在归一化后恢复网络的表达能力:
y = γ * ẑ + β如果没有γ和β,归一化后的值总是在N(0,1),限制了网络学习复杂映射的能力。
Q3: BN vs LN vs IN vs GN
| 方法 | 归一化维度 | 适用场景 |
|---|---|---|
| BN | (N, H, W) per channel | CV (大batch) |
| LN | (C, H, W) per sample | NLP/Transformer |
| IN | (H, W) per sample per channel | 风格迁移 |
| GN | Group of channels | 小batch CV |
Q4: 为什么NLP不用BatchNorm而用LayerNorm?
- NLP中序列长度不一,pad位置会影响batch统计量
- Batch大小经常变化
- 序列之间差异大(不同句子结构),batch统计不可靠
- LayerNorm每个样本独立归一化,不受batch影响
Q5: Dropout训练和推理的区别?
答:
- 训练:按概率p随机丢弃神经元,保留的神经元输出除以(1-p)(inverted dropout)
- 推理:所有神经元参与计算,不做任何dropout
Inverted dropout的设计使推理时不需要额外缩放,简化了部署。
Q6: L1和L2正则化的几何解释?
python
# L1约束域:菱形 |w₁| + |w₂| ≤ C
# L2约束域:圆形 w₁² + w₂² ≤ C
# 损失等高线与L1约束域在坐标轴上相切
# → L1产生稀疏解(某些参数恰好为0)
# 损失等高线与L2约束域在任意点都可能相切
# → L2使参数趋近零但不为零Q7: Label Smoothing原理?
答: 将硬标签 [0, 1, 0, 0] 替换为软标签 [ε/(K-1), 1-ε, ε/(K-1), ε/(K-1)]
作用:
- 防止模型过度自信
- 提高泛化能力
- 使模型学得更"保守"