| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>6 - 计算图</title>
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
- <style>
- body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; line-height: 1.6; max-width: 800px; margin: 0 auto; padding: 20px; background: #1a1a2e; color: #eaeaea; }
- h1 { color: #e94560; border-bottom: 2px solid #e94560; padding-bottom: 10px; }
- h2 { color: #0f3460; background: #16213e; padding: 10px; border-left: 4px solid #e94560; margin-top: 30px; }
- .module { background: #0f3460; padding: 15px; margin: 20px 0; border-radius: 5px; }
- .module-title { color: #e94560; font-weight: bold; margin-bottom: 10px; }
- code { background: #1a1a2e; padding: 2px 6px; border-radius: 3px; color: #f0f6f6; }
- pre { background: #1a1a2e; padding: 15px; border-radius: 5px; overflow-x: auto; }
- .symbol-map { background: #16213e; padding: 10px; margin: 5px 0; border-left: 3px solid #0f3460; }
- .warning { background: #e94560; color: #fff; padding: 10px; border-radius: 5px; margin: 10px 0; }
- .youtube { background: #ff0000; color: #fff; padding: 10px; border-radius: 5px; display: inline-block; margin: 10px 0; }
- </style>
- </head>
- <body>
- <h1>👾 Day 6: 计算图</h1>
-
- <div class="module">
- <div class="module-title">1️⃣【技术债与演进动机】The Technical Debt & Evolution</div>
- 手动推导梯度复杂易错,深度学习模型嵌套多层。计算图自动记录前向过程,反向自动求导。
- </div>
- <div class="module">
- <div class="module-title">2️⃣【直觉建立】Visual Intuition</div>
- 想象一个流程图:数据从左到右经过各种运算节点,每个节点记录输入输出,反向时从右到左传递梯度。
- <div class="youtube">🎬 B 站搜索:<code>计算图 自动求导 原理</code></div>
- </div>
- <div class="module">
- <div class="module-title">3️⃣【符号解码字典】The Symbol Decoder</div>
-
- <div class="symbol-map"><strong>$x$</strong> → <code>input_tensor</code> (输入张量)</div>
- <div class="symbol-map"><strong>$y$</strong> → <code>output_tensor</code> (输出张量)</div>
- <div class="symbol-map"><strong>$\frac{\partial y}{\partial x}$</strong> → <code>gradient</code> (梯度)</div>
- <div class="symbol-map"><strong>$\mathcal{G}$</strong> → <code>computation_graph</code> (计算图结构)</div>
-
- </div>
- <div class="module">
- <div class="module-title">4️⃣【核心推导】The Math</div>
-
- ### 计算图结构
- $$y = f(x) = f_L(f_{L-1}(\cdots f_1(x)\cdots))$$
- ### 链式法则
- $$\frac{\partial y}{\partial x} = \frac{\partial f_L}{\partial u_{L-1}} \cdot \frac{\partial f_{L-1}}{\partial u_{L-2}} \cdots \frac{\partial f_1}{\partial x}$$
- ### 反向传播
- 前向:计算每一层的输出 $u_l = f_l(u_{l-1})$
- 反向:从后往前计算梯度
- $$\frac{\partial L}{\partial u_l} = \frac{\partial L}{\partial u_{l+1}} \cdot \frac{\partial u_{l+1}}{\partial u_l}$$
- </div>
- <div class="module">
- <div class="module-title">5️⃣【工程优化点】The Optimization Bottleneck</div>
- 计算图占用内存存储中间结果,大模型下显存爆炸。使用梯度检查点(checkpoint)节省内存。
- </div>
- <div class="module">
- <div class="module-title">6️⃣【今日靶机】The OJ Mission</div>
- <div class="warning">🎯 任务:<code>cd exercises/ && python3 day6_task.py</code></div>
- 实现简易计算图的 forward 和 backward,验证链式法则的正确性。
- </div>
- <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
- <script src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"></script>
- <script>
- renderMathInElement(document.body, {
- delimiters: [
- {left: '$$', right: '$$', display: true},
- {left: '$', right: '$', display: false}
- ],
- throwOnError: false
- });
- </script>
- </body>
- </html>
|