反向传播

懂了懂了,还是这样好理解。。。。那么反向传播的计算呢?通过y1, y2, y3 求出x1 ?


太好了!现在我们来推导反向传播的计算。这是深度学习中最核心的部分!


1. 问题设定

我们有一个简单的三层结构:

复制代码
输入 x → 线性层(得 z)→ softmax → 交叉熵损失 L

其中:

  • z = Wx + b (为了简化,我们先只考虑从 z 开始的反向传播)
  • p = \\text{softmax}(z)
  • L = -\\sum y_i \\log p_i

我们要求 \\frac{\\partial L}{\\partial z_j} ,也就是损失对原始输出 z 的梯度。


2. 已知关系

设类别数 C = 3 ,则:

\p_i = \\frac{e\^{z_i}}{\\sum_{k=1}\^C e\^{z_k}} \\

\L = -\\sum_{i=1}\^C y_i \\log p_i \\


3. 计算梯度 \(\frac{\partial L}{\partial z_j}\)

这是一个非常重要的结果,也是 softmax 与交叉熵结合的美妙之处。

推导过程:

\\\frac{\\partial L}{\\partial z_j} = \\sum_{i=1}\^C \\frac{\\partial L}{\\partial p_i} \\cdot \\frac{\\partial p_i}{\\partial z_j} \\

第一步:\(\frac{\partial L}{\partial p_i} = -\frac{y_i}{p_i}\)

第二步:需要计算 \(\frac{\partial p_i}{\partial z_j}\),分两种情况:

  • 当 i = j 时:

\\\frac{\\partial p_i}{\\partial z_i} = p_i(1 - p_i) \\

  • 当 i \\neq j 时:

\\\frac{\\partial p_i}{\\partial z_j} = -p_i p_j \\

现在代入:

\\\frac{\\partial L}{\\partial z_j} = \\sum_{i=1}\^C \\left( -\\frac{y_i}{p_i} \\right) \\cdot \\frac{\\partial p_i}{\\partial z_j} \\

分开求和:

  1. 当 \(i = j\) 时:项为 \(-\frac{y_j}{p_j} \cdot p_j(1-p_j) = -y_j(1-p_j)\)
  2. 当 \(i \neq j\) 时:项为 \(-\frac{y_i}{p_i} \cdot (-p_i p_j) = y_i p_j\)

所以:

\\\frac{\\partial L}{\\partial z_j} = -y_j(1-p_j) + \\sum_{i \\neq j} y_i p_j \\

注意 \(\sum_{i \neq j} y_i = 1 - y_j\)(因为 y 是 one-hot,总和为1)

因此:

\\\frac{\\partial L}{\\partial z_j} = -y_j + y_j p_j + p_j(1 - y_j) \\

\= -y_j + p_j(y_j + 1 - y_j) \\

\= p_j - y_j \\


4. 最终简洁结果

\\\boxed{\\frac{\\partial L}{\\partial z_j} = p_j - y_j} \\

太漂亮了! 这个结果意味着:

  • 梯度 = 预测概率 - 真实标签
  • 对于真实类别(\(y_j=1\)):梯度 = \(p_j - 1\)(负数,需要增大 \(z_j\))
  • 对于其他类别(\(y_j=0\)):梯度 = \(p_j - 0 = p_j\)(正数,需要减小 \(z_j\))

5. 例子验证

用我们刚才的例子:

  • z = \[3.0, 1.0, -1.0\]
  • y = \[1, 0, 0\]
  • p = \[0.88, 0.12, 0.00\]

梯度:

\\\frac{\\partial L}{\\partial z} = p - y = \[0.88-1, 0.12-0, 0.00-0 = -0.12, 0.12, 0.00 \]

解释:

  • 对真实类别(猫):梯度 -0.12 → 需要稍微增大 \(z_0\)
  • 对其他类别(狗):梯度 +0.12 → 需要减小 \(z_1\)
  • 对鸟:梯度 0 → 不需要改变

6. 扩展到 x 的梯度

如果我们有 z = Wx + b ,那么:

\\\frac{\\partial L}{\\partial x} = W\^T \\cdot \\frac{\\partial L}{\\partial z} \\

因为 \\frac{\\partial z}{\\partial x} = W\^T 。


总结反向传播流程:

  1. 前向计算: z → softmax → p → L = -\\sum y_i \\log p_i
  2. 反向传播:
    • \\frac{\\partial L}{\\partial z} = p - y (极其简洁!)
    • 然后继续向后传播到 W, b, x

这就是为什么 softmax + 交叉熵在深度学习中被广泛使用------梯度计算既简洁又数值稳定!


相关参考:

相关推荐
硅谷秋水7 分钟前
Robo-COP 总结
人工智能·深度学习·机器学习·语言模型·机器人
GitCode官方22 分钟前
共筑昇腾算子开源生态|CANNBench Season1 沙龙收官,Season2 全新评测集发布
人工智能·ai·开源·cann·atomgit
零基础12325 分钟前
基于模型的强化学习与不基于模型的强化学习:核心区别与实战选择
python·算法
Liaiyang669 小时前
空圈容错:从 (0, 1) 夹缝本体论到 11 次跨域盲测
ai·大模型·量子力学·科学哲学·宇宙学·认识论·认知边界
俊哥V10 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
秋饼10 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
罗西的思考12 小时前
【Agentic RL】Dressage Staleness 控制深度分析
人工智能·算法·机器学习
quaer12 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
Rocky Ding*13 小时前
深入解析GPT-6 Astra提示词工程:从Skills、AGENTS.md到可验证的Agent交付
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·提示词工程
KeyAction666613 小时前
第二届中国国际人工智能+行动大会看点:智能体专场、算力账本与产品发布
人工智能·ai