第3章 深度学习基础:神经网络与反向传播

本章聚焦前向/反向传播原理、梯度消失/爆炸、手推公式,是面试高频考察点。你需要掌握链式法则推导、梯度表达式、激活函数的影响以及解决梯度问题的经典方案。以下通过问答卡片和推导图进行训练。

前向传播 输入→加权→激活 计算损失 MSE / CrossEntropy 反向传播 链式求导 梯度更新 SGD / Adam 关键公式 ∂L/∂w = ∂L/∂z · ∂z/∂w ∂z/∂w = 前层输出 ∂L/∂b = ∂L/∂z 向量化 dL/dW = Xᵀ·dL/dZ dL/db = sum(dL/dZ, axis=0) dL/dX = dL/dZ·Wᵀ 梯度消失 Sigmoid导数<0.25 多层连乘→趋近0 解决: ReLU / BN 梯度爆炸 权重>1/梯度>1 指数级增大 解决: 梯度裁剪 ⬇ 面试追问方向 ⬇ 手推二层网络梯度 为什么ReLU缓解消失? BatchNorm如何稳定训练? 梯度裁剪阈值怎么设? (要求写出∂L/∂w₁) (负半轴梯度为0) (防止梯度饱和) (max norm / global norm)

问答卡片 1:手推前向与反向传播

面试问题

请手写一个两层的全连接网络(sigmoid激活)的前向和反向传播过程,推导损失函数对权重的梯度。

面试官考察点

  • 链式法则的熟练程度
  • 向量化表达与标量推导的一致性
  • 对中间变量(z, a)的定义清晰度

回答框架

  1. 定义变量:输入X,权重W1,b1,激活σ,输出层W2,b2,损失L。
  2. 前向:z1=W1X+b1, a1=σ(z1), z2=W2a1+b2, ŷ=σ(z2), L=½(ŷ-y)²。
  3. 反向:先求dL/dz2,再传播到W2, b2;继续求dL/da1,再传播到W1,b1。
  4. 化简:给出每个梯度的显式表达式。

简短示例回答

前向: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:梯度消失与梯度爆炸

面试问题

什么是梯度消失和梯度爆炸?它们产生的原因是什么?列举至少两种解决方案并说明原理。

面试官考察点

  • 对深层网络训练不稳定性的理解
  • 对激活函数、权重初始化、归一化等技巧的掌握
  • 能否区分消失和爆炸的本质

回答框架

  1. 定义:梯度消失→梯度趋近0,低层参数几乎不更新;梯度爆炸→梯度指数增长,参数震荡或NaN。
  2. 原因:激活函数导数<1(如sigmoid)连乘趋0;权重>1/梯度>1连乘趋无穷。
  3. 解决方案:①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导数范围的理解
  • 对链式法则连乘效应的把握

回答框架

  1. 写出任意层梯度表达式:∂L/∂w1 = ∂L/∂aₙ · ∏(激活导数×权重) · x。
  2. 分析σ'范围:σ'(z) ∈ (0,0.25),且当|z|大时趋近0。
  3. 权重期望方差:若权重W~N(0,1),则导数值与权重相乘后通常<0.25·0.5≈0.125。
  4. 连乘效应: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)形状一致”。这展示了工程思维,大厂面试官非常看重。