3. 深度学习基础:神经网络基础、反向传播、激活函数、优化器、过拟合与正则化
端到端ASR(自动语音识别)系统的核心是一个深度神经网络,它直接将声学特征序列映射为文本序列。无论是基于CTC(Connectionist Temporal Classification)还是基于Attention的Seq2Seq架构,其底层都依赖于神经网络的基本运算、梯度传播机制和优化策略。本章将系统梳理这些基础模块,为后续搭建ASR模型提供坚实的理论支撑。我们将从神经网络的线性变换与非线性激活入手,深入剖析反向传播的链式法则,对比主流优化器的适用场景,并重点讲解过拟合的成因与正则化手段在语音任务中的具体应用。
3.1 神经网络核心原理:从线性变换到非线性表达
核心原理
神经网络的基本单元是神经元,其运算分为两步:线性加权求和与非线性激活。对于输入向量 \(x \in \mathbb{R}^n\),神经元输出为 \(a = \sigma(Wx + b)\),其中 \(W\) 为权重矩阵,\(b\) 为偏置,\(\sigma\) 为激活函数。在ASR任务中,输入通常是80维的Fbank特征或更高维的Mel谱图,经过多层堆叠后,网络能够学习到从声学信号到音素、再到字符的复杂映射。
仅堆叠线性层(即去掉激活函数)等价于一个单层线性变换,无法拟合非线性关系。语音信号中的上下文依赖、说话人差异、噪声干扰等都需要非线性建模能力。因此,激活函数的选择直接影响网络的表达能力与训练稳定性。
常用激活函数对比
| 激活函数 | 公式 | 优点 | 缺点 | ASR适用场景 |
|---|---|---|---|---|
| ReLU | max(0, x) | 计算简单,缓解梯度消失 | 神经元死亡(负区间梯度为0) | 隐藏层默认选择 |
| Leaky ReLU | max(0.01x, x) | 保留负区间微小梯度 | 参数敏感 | 深层网络替代ReLU |
| Sigmoid | 1/(1+e^{-x}) | 输出(0,1)适合概率 | 梯度饱和,输出非零中心 | 输出层二分类(少用) |
| Tanh | (e^x-e^{-x})/(e^x+e^{-x}) | 零中心,梯度更强 | 仍有饱和区 | RNN/GRU单元内部 |
| GELU | x·Φ(x) | 平滑,Transformer常用 | 计算稍复杂 | Conformer/Transformer块 |
案例拆解:激活函数对ASR收敛速度的影响
某语音识别项目使用12层Conformer编码器,初始采用Sigmoid激活,训练10个epoch后验证损失仍高达3.2,且梯度范数衰减至1e-4以下。分析发现Sigmoid在深层网络中梯度饱和严重。将隐藏层激活替换为GELU后,相同数据下第5个epoch验证损失降至1.8,收敛速度提升约40%。关键操作:同时将权重初始化从Xavier改为He初始化,匹配ReLU/GELU的方差传播特性。
3.2 反向传播:链式法则与梯度流动
核心原理
反向传播(Backpropagation)是训练神经网络的基石。它基于微积分中的链式法则,从损失函数 \(L\) 出发,逐层计算损失对每个参数的偏导数 \(\frac{\partial L}{\partial W^{(l)}}\)。计算过程分为两步:前向传播存储每层输出,反向传播从输出层向输入层传递梯度。
对于ASR中的CTC损失,其梯度计算更为复杂,因为需要对所有可能的对齐路径求和。但底层仍然遵循链式法则,只是损失函数对输出概率的梯度需要特殊处理。
梯度消失与梯度爆炸
- 梯度消失:深层网络中,梯度连乘导致数值趋近于0,浅层参数无法更新。常见于Sigmoid/Tanh激活的深层RNN。
- 梯度爆炸:梯度值过大导致参数震荡或NaN。常见于损失函数使用交叉熵且输出层未归一化时。
- 解决方案:使用ReLU族激活、残差连接(ResNet/Conformer)、梯度裁剪(clip by norm)、合理的权重初始化。
操作流程:手动计算一个简单反向传播
# 假设一个两层网络:输入x=2,目标y=0.5
# 权重:W1=0.5, b1=0, W2=0.8, b2=0
# 激活:ReLU,损失:MSE
# 前向传播
z1 = 0.5*2 + 0 = 1.0
a1 = max(0, 1.0) = 1.0
z2 = 0.8*1.0 + 0 = 0.8
a2 = 0.8 # 输出层无激活
loss = (0.8 - 0.5)^2 = 0.09
# 反向传播
dL/da2 = 2*(0.8-0.5) = 0.6
da2/dz2 = 1 # 线性输出
dz2/dW2 = a1 = 1.0
dL/dW2 = 0.6 * 1.0 * 1.0 = 0.6
# 继续向第一层传播
dz2/da1 = W2 = 0.8
da1/dz1 = 1 (ReLU在z1>0时)
dz1/dW1 = x = 2
dL/dW1 = 0.6 * 0.8 * 1 * 2 = 0.96
# 更新参数(学习率η=0.1)
W2_new = 0.8 - 0.1*0.6 = 0.74
W1_new = 0.5 - 0.1*0.96 = 0.404
3.3 优化器:从SGD到Adam与Noam
核心原理
优化器负责根据梯度更新网络参数。最基本的随机梯度下降(SGD)按 \(W \leftarrow W - \eta \nabla L\) 更新,但存在收敛慢、易陷入局部最优的问题。现代优化器通过引入动量、自适应学习率等机制加速收敛。
| 优化器 | 核心机制 | ASR中的典型配置 | 适用阶段 |
|---|---|---|---|
| SGD + Momentum | 累积历史梯度方向 | lr=0.01, momentum=0.9 | 小数据集、微调 |
| Adam | 自适应学习率 + 动量 | lr=1e-3, β1=0.9, β2=0.999 | 大多数ASR基线 |
| AdamW | Adam + 权重衰减解耦 | lr=1e-3, weight_decay=0.01 | Transformer/Conformer |
| Noam | warmup + 衰减 | d_model=512, warmup=4000 | Transformer类ASR |
案例拆解:Noam调度在Conformer ASR中的调优
某中文ASR任务使用Conformer模型(12编码层+6解码层),初始采用Adam固定学习率1e-3,训练到第8个epoch时验证CER(字符错误率)停滞在12.5%。分析学习率曲线发现后期步长过大导致震荡。改用Noam调度:lr = d_model^{-0.5} * min(step^{-0.5}, step * warmup^{-1.5}),其中warmup_steps=4000。调整后第12个epoch CER降至9.8%,且训练过程更稳定。
3.4 过拟合与正则化:提升ASR泛化能力
核心原理
过拟合指模型在训练集上表现优异,但在验证集/测试集上性能退化。ASR任务中,由于语音数据维度高、序列长,模型参数量动辄数千万,极易过拟合。正则化通过约束模型复杂度或增强数据多样性来缓解这一问题。
常用正则化手段
- L2正则化(权重衰减):在损失函数中加入 \(\lambda \|W\|^2\),限制权重幅度。AdamW中weight_decay参数即此作用。
- Dropout:训练时随机丢弃部分神经元输出,迫使网络学习冗余表示。ASR中通常设置在0.1~0.3之间。
- SpecAugment:对语音频谱图进行时间/频率掩蔽,是一种数据增强型正则化,对ASR特别有效。
- Label Smoothing:将硬标签转换为软标签,防止模型过度自信。
- Early Stopping:监控验证损失,在开始上升时停止训练。
案例拆解:SpecAugment参数对中文ASR的影响
某项目使用AISHELL-1数据集训练中文ASR,基线模型(无增强)验证CER为8.2%。引入SpecAugment后,设置F=30, T=40, num_mask=2(频率掩蔽宽度30,时间掩蔽宽度40,各2个掩蔽),CER降至6.5%。进一步调参发现,F=50, T=50时CER反而升至7.1%,说明过度掩蔽破坏了关键声学信息。关键结论:SpecAugment参数需根据语速和频带分布调整,中文语速较快时时间掩蔽不宜过大。
总结复盘:构建ASR训练的正则化策略
| 模型规模 | 数据量 | 推荐正则化组合 | 预期效果 |
|---|---|---|---|
| 小(<50M参数) | <100小时 | Dropout=0.2 + SpecAugment(轻量) + Early Stopping | 防止过拟合,CER降低5-10% |
| 中(50-200M) | 100-1000小时 | AdamW + Dropout=0.1 + SpecAugment(标准) + Label Smoothing=0.1 | 稳定收敛,CER降低10-15% |
| 大(>200M) | >1000小时 | Noam调度 + Dropout=0.1 + SpecAugment(强) + 权重衰减=0.01 | 充分拟合,CER降低15-20% |