第3章 深度学习基础:神经网络与反向传播
本章聚焦前向/反向传播原理、梯度消失/爆炸、手推公式,是面试高频考察点。你需要掌握链式法则推导、梯度表达式、激活函数的影响以及解决梯度问题的经典方案。以下通过问答卡片和推导图进行训练。
问答卡片 1:手推前向与反向传播
面试问题
请手写一个两层的全连接网络(sigmoid激活)的前向和反向传播过程,推导损失函数对权重的梯度。
面试官考察点
- 链式法则的熟练程度
- 向量化表达与标量推导的一致性
- 对中间变量(z, a)的定义清晰度
回答框架
- 定义变量:输入X,权重W1,b1,激活σ,输出层W2,b2,损失L。
- 前向:z1=W1X+b1, a1=σ(z1), z2=W2a1+b2, ŷ=σ(z2), L=½(ŷ-y)²。
- 反向:先求dL/dz2,再传播到W2, b2;继续求dL/da1,再传播到W1,b1。
- 化简:给出每个梯度的显式表达式。
简短示例回答
前向:z1=W1x+b1, a1=sigmoid(z1), z2=W2a1+b2, a2=sigmoid(z2), L=½(a2-y)²。
反向:dL/dz2=(a2-y)·a2·(1-a2),dL/dW2=dL/dz2·a1ᵀ,dL/db2=dL/dz2。
再令δ1=W2ᵀ·dL/dz2,dL/dz1=δ1·a1·(1-a1),dL/dW1=dL/dz1·xᵀ。
可能追问
- 为什么用sigmoid容易梯度消失?
- 如果激活换成ReLU,反向传播公式如何变化?
- 推导中矩阵乘法维度必须匹配,如何检查?
避坑提醒
❌ 常见错误:忘记对激活函数求导,或混淆矩阵乘法的左右顺序。
✅ 正确做法:先标量推导,再推广到向量化;每一步写出维度检查,确保形状兼容。
问答卡片 2:梯度消失与梯度爆炸
面试问题
什么是梯度消失和梯度爆炸?它们产生的原因是什么?列举至少两种解决方案并说明原理。
面试官考察点
- 对深层网络训练不稳定性的理解
- 对激活函数、权重初始化、归一化等技巧的掌握
- 能否区分消失和爆炸的本质
回答框架
- 定义:梯度消失→梯度趋近0,低层参数几乎不更新;梯度爆炸→梯度指数增长,参数震荡或NaN。
- 原因:激活函数导数<1(如sigmoid)连乘趋0;权重>1/梯度>1连乘趋无穷。
- 解决方案:①ReLU系列激活(梯度恒为1或0);②批量归一化(减少内部协变量偏移);③梯度裁剪(限制最大范数);④Xavier/He初始化(控制方差传递)。
简短示例回答
梯度消失:sigmoid导数最大0.25,多层连乘后趋近0,底层更新极慢。梯度爆炸:当权重初始过大或梯度>1时,梯度随层数指数增长。常用方案:使用ReLU使梯度稳定1或0;加BatchNorm将每层输入标准化到0均值1方差;梯度裁剪设定阈值,超过则缩回。
可能追问
- BatchNorm在训练和测试阶段行为有何不同?
- 梯度裁剪的两种常见形式(按值裁剪 vs 按范数裁剪)哪个更好?
- LSTM为什么能缓解梯度消失?
避坑提醒
💡 不要只说“用ReLU就可以了”。面试官期待你解释ReLU负半轴梯度为0可能导致神经元死亡(Dead ReLU),以及改进方案(Leaky ReLU、PReLU、ELU)。
问答卡片 3:手推梯度消失的数学分析
面试问题
假设一个5层全连接网络,每层使用sigmoid激活,权重初始化为标准正态分布。请从数学上说明为何深层网络更容易出现梯度消失。
面试官考察点
- 能够用数学不等式或直观推理分析
- 对sigmoid导数范围的理解
- 对链式法则连乘效应的把握
回答框架
- 写出任意层梯度表达式:∂L/∂w1 = ∂L/∂aₙ · ∏(激活导数×权重) · x。
- 分析σ'范围:σ'(z) ∈ (0,0.25),且当|z|大时趋近0。
- 权重期望方差:若权重W~N(0,1),则导数值与权重相乘后通常<0.25·0.5≈0.125。
- 连乘效应:5层连乘后梯度缩小至0.125⁵≈3×10⁻⁵,几乎为0。
简短示例回答
考虑第1层权重的梯度:∂L/∂w1 = δₙ · ∏_{i=2}^{5} (σ'(z_i)·w_i) · x。其中每个σ'(z_i)≤0.25,w_i假定与σ'独立且期望均值为0,但值通常<1(若初始化很小)。5个因子相乘后数量级≤(0.25×1)⁵=9.8×10⁻⁴,实际由于σ'常更小,梯度趋近0。
可能追问
- 如果使用tanh激活,梯度消失更严重还是更轻?
- Xavier初始化如何调整权重方差来缓解该问题?
- 残差连接如何从数学上打破连乘效应?
避坑提醒
⚠️ 不要在回答中仅用“梯度变小了”这种定性描述。务必使用数学表达式和数量级估算,展示推导能力。同时注意区分“梯度消失”与“梯度爆炸”的根本差异是导数与权重的乘积是否大于1。
梯度消失 vs 梯度爆炸 速查表
| 维度 | 梯度消失 | 梯度爆炸 |
|---|---|---|
| 根本原因 | 激活导数+权重<1(连乘趋0) | 权重>1或梯度>1(连乘发散) |
| 常见激活 | sigmoid, tanh(导数小) | 无特定,权重初始化过大时出现 |
| 现象 | 低层参数几乎不变,训练停滞 | 损失变为NaN,参数震荡 |
| 主流方案 | ReLU、残差连接、BatchNorm | 梯度裁剪、权重正则化、减小学习率 |
| 数学判断 | ∏|σ'·w| << 1 | ∏|σ'·w| >> 1 |
面试加分小贴士: 在回答手推公式时,主动写出“维度检查”——例如“dL/dW2 形状为 (输出神经元数, 隐藏层神经元数),与(W2)形状一致”。这展示了工程思维,大厂面试官非常看重。