跳转至

反向传播:通用激活梯度、δ 的角色、内积 vs 外积

  • 章节:第23章 · 前馈神经网络(反向传播 / 计算题·解答题)
  • 载体题目:作业二·5(两层网络,ReLU,约定 \(z=W^\top x+b\);定稿数值 \(\hat y=5,\ L=8\)
  • 出处:课本 p.402 式 23.57 / 23.58(反向传播公式)、p.403–404 课程约定 \(z=W^\top x+b\)、p.402 梯度消失。框架性比喻(接力棒/采收)为助记,非课本原文。

我问的问题(疑问)

  1. 激活函数换成 sigmoid / tanh 这类,\(\delta=\dfrac{\partial L}{\partial h}\odot a'(z)\) 的公式还成立吗?
  2. 反向传播里的 \(\delta\)、各种偏导,到底谁是「层与层之间传递」的、谁是「层内临时」的?第一层的 \(\delta_1\) 和最开始的 \(\delta\) 是什么关系?
  3. 为什么 \(\dfrac{\partial L}{\partial W_1}=x\,\delta_1^\top\)\(x\) 在左、\(\delta_1^\top\) 在右、而且是「真正的矩阵乘法(外积)」?顺序能不能反?

正确答案

① 任意逐元素激活函数都成立

对任何逐元素激活 \(h=a(z)\),恒有

\[ \frac{\partial L}{\partial z}=\frac{\partial L}{\partial h}\odot a'(z) \]

「流回来的梯度 \(\odot\) 激活在 \(z\) 处的导数」。对应课本式 23.57 的 \(\operatorname{diag}\!\big(\frac{\partial a}{\partial z}\big)\) 那一项。只是各函数 \(a'\) 不同:

激活 \(a'(z)\) 反向时效果
ReLU \(1\,(z>0)\) / \(0\,(z\le0)\) 纯开关:放行或掐断
Sigmoid \(a(z)\big(1-a(z)\big)\in(0,\,0.25]\) 缩小梯度(永远 ≤0.25)
Tanh \(1-\tanh^2(z)\in(0,\,1]\) 也缩小,但比 sigmoid 温和

🎯 高频考点·为什么 ReLU 缓解梯度消失:sigmoid 导数最大才 0.25,网络一深,反向连乘 \(0.25\times0.25\times\cdots\to0\)梯度消失(课本 p.402);ReLU 正区间导数恒为 1,连乘不衰减,故能缓解。

② 三类角色:接力棒 / 采收 / 层内临时(助记框架)

  • 接力棒(层间传递)\(\dfrac{\partial L}{\partial h}\)\(\delta=\dfrac{\partial L}{\partial z}\)。不是要更新的量,是从右往左一站站传的梯度信号,每过一个运算被改写一次。
  • 参数梯度(每层就地采收)\(\dfrac{\partial L}{\partial W},\dfrac{\partial L}{\partial b}\)。接力棒路过每层时当场算出,这才是反向传播真正的产物(拿去更新 \(W,b\))。对应课本式 23.58。
  • 层内临时量:前向算出暂存的 \(z,h\) 的数值,反向被借用(\(h_1\)\(\partial L/\partial W_2\)\(z_1\) 定 ReLU 开关),用完即弃、不更新。

\(\delta_1\) 与最初 \(\delta\) 的关系:是同一根接力棒在不同站点的样子。约定每层都有自己的 \(\delta^{(层)}=\partial L/\partial z^{(层)}\)(钉在该层净输入 \(z\) 上,因为有了它再算 \(\partial L/\partial W,\partial L/\partial b\) 只差一步)。本题:最初 \(\delta=4\) 是输出层的 \(\delta\)(输出层无激活,\(\partial L/\partial\hat y=\partial L/\partial z_2\));\(\delta_1=[4,0]^\top\) 是第一层的 \(\delta\)。 一句话:\(h\) 是层与层的「接口/边界」,\(z\) 是层内部中转;接力棒在接口上叫 \(\partial L/\partial h\),钻进层内钉到 \(z\) 上就叫 \(\delta\)

③ 为什么是外积、顺序不能反

铁律:梯度形状必须和参数一致\(W_1\)\(2\times2\),故 \(\partial L/\partial W_1\) 也必须 \(2\times2\)。两个长度 2 的向量 \(x,\delta_1\) 有两种乘法:

写法 维度 结果
\(\delta_1^\top x\)(行×列,内积) \((1\times2)(2\times1)\) 一个
\(x\,\delta_1^\top\)(列×行,外积) \((2\times1)(1\times2)\) 一个 \(2\times2\) 矩阵

\(2\times2\),只能取外积 \(x\,\delta_1^\top\)——顺序是被「要得出 \(2\times2\)」逼出来的,反过来写成内积就塌成一个数、形状全错。

外积直觉(记住考场不搞反):

\[ \Big(\frac{\partial L}{\partial W_1}\Big)_{ij}=\underbrace{x_i}_{\text{输入 }i\text{ 流进多少}}\times\underbrace{(\delta_1)_j}_{\text{神经元 }j\text{ 多敏感}} \]

「每个输入 × 每个神经元的敏感度」铺成一张表,就是外积。

💡 同样两个向量:算 \(\hat y=W_2^\top h_1\)内积(→ 数);算 \(\partial L/\partial W_1\)外积(→ 矩阵)。摆放顺序决定收缩成数还是铺开成矩阵。

易错点 / 为什么错

  • 左上角 \(=x_1(\delta_1)_1=1\times4=4\),不是 1(曾口误)。完整 \(\dfrac{\partial L}{\partial W_1}=\begin{bmatrix}1\\2\end{bmatrix}\begin{bmatrix}4&0\end{bmatrix}=\begin{bmatrix}4&0\\8&0\end{bmatrix}\)
  • \(\delta\) 钉在净输入 \(z\) 上,不是 \(h\) 上;输出层无激活时 \(\partial L/\partial\hat y=\partial L/\partial z\)
  • 参数梯度(\(\partial L/\partial W,\partial L/\partial b\))才更新;\(\partial L/\partial h,\delta\) 只是往前传,不更新;\(z,h\) 数值只是被借用。
  • 内积/外积顺序不可乱:以「梯度形状=参数形状」反推顺序。

整题速查(作业二·5,可默写复盘)

阶段 结果
前向 \(z_1=W_1^\top x+b_1\) \([5,-1]^\top\)
前向 \(h_1=\mathrm{ReLU}(z_1)\) \([5,0]^\top\)
前向 \(\hat y=W_2^\top h_1+b_2\) \(5\)
前向 \(L=\tfrac12(\hat y-y)^2\) \(8\)
反向 \(\delta=\hat y-y\) \(4\)
反向 \(\partial L/\partial W_2=\delta h_1\) \([20,0]^\top\)
反向 \(\partial L/\partial b_2=\delta\) \(4\)
反向 \(\partial L/\partial h_1=\delta W_2\) \([4,8]^\top\)
反向 \(\delta_1=\partial L/\partial z_1=\partial L/\partial h_1\odot\mathrm{ReLU}'(z_1)\) \([4,0]^\top\)
反向 \(\partial L/\partial W_1=x\,\delta_1^\top\) \(\begin{bmatrix}4&0\\8&0\end{bmatrix}\)
反向 \(\partial L/\partial b_1=\delta_1\) \([4,0]^\top\)

备注

「接力棒 / 采收 / 层内临时」是助记比喻,非课本术语;课本以「误差向量 \(\delta\)」「梯度 \(\nabla_W L,\nabla_b L\)」表述(式 23.57/23.58)。激活导数表中 sigmoid/tanh 的导数范围为标准微积分结论,课本未必逐条列出。权重梯度写成 \(x\,\delta^\top\) 是课程约定 \(z=W^\top x+b\) 下的形式,与课本式 23.58(\(\delta h^\top\) 记法)等价、仅 \(W\) 取向不同。