机器学习与模式识别 第十四章 神经网络中的反向传播 模拟卷及答案

第十四章:Backpropagation --- 单元习题

总分:100分 | 建议用时:60分钟

范围:数值/符号/自动微分、计算图、反向传播、伴随变量


占位图

一、单项选择题(每题2分,共20题,40分)

1. 数值微分的最大缺点是什么?

A. 不适用于神经网络

B. 计算代价极高(O(ND2)\mathcal{O}(ND^2)O(ND2))

C. 结果不准确

D. 需要手动推导

2. 符号微分(Symbolic Differentiation)的主要问题是什么?

A. 无法求导

B. 表达式膨胀(Expression Swell)→大量冗余子表达式

C. 结果不精确

D. 只适用于线性函数

3. 自动微分(Autodiff)相比数值微分和符号微分的优势不包括?

A. 自动(无需手动推导)

B. 精确(机器精度)

C. 不需要任何计算

D. 高效(重用冗余计算)

4. 深度学习中使用哪种Autodiff模式?

A. Forward Mode

B. Backward Mode

C. Central Mode

D. Mixed Mode

5. Backward Mode适用于什么类型的函数?

A. f:R→RMf: \mathbb{R} \to \mathbb{R}^Mf:R→RM(少输入多输出)

B. f:RD→Rf: \mathbb{R}^D \to \mathbb{R}f:RD→R(多输入少输出/单一损失)

C. 任何函数

D. 只有线性函数

6. 伴随变量(Adjoint)aia_iai的定义是什么?

A. ai=f(vi)a_i = f(v_i)ai=f(vi)

B. ai=∂f∂via_i = \frac{\partial f}{\partial v_i}ai=∂vi∂f

C. ai=via_i = v_iai=vi

D. ai=∂vi∂fa_i = \frac{\partial v_i}{\partial f}ai=∂f∂vi

7. 反向传播的核心递归公式是?

A. ai=∑j∈Chiaja_i = \sum_{j\in\mathbf{Ch}i} a_jai=∑j∈Chiaj

B. ai=∑j∈Chi∂vj∂vi⋅aja_i = \sum_{j\in\mathbf{Ch}i} \frac{\partial v_j}{\partial v_i} \cdot a_jai=∑j∈Chi∂vi∂vj⋅aj

C. ai=∏jaja_i = \prod_{j} a_jai=∏jaj

D. ai=ai+1a_i = a_{i+1}ai=ai+1

8. 计算图中,如果viv_ivi有多个子节点(children),aia_iai如何计算?

A. 取所有子节点贡献的最大值

B. 取所有子节点贡献的平均值

C. 对所有子节点贡献求和

D. 随机选一个子节点

9. 反向传播中,最终输出fff的伴随变量afinala_{final}afinal初始化为?

A. 0

B. -1

C. 1

D. 随机值

10. 数值微分计算一个DDD维梯度向量需要多少次误差函数评估?

A. DDD次

B. 2D2D2D次

C. D2D^2D2次

D. 1次

11. 反向传播遍历计算图的顺序是?

A. 拓扑正序(输入→输出)

B. 拓扑逆序(输出→输入)

C. 随机顺序

D. 按变量名排序

12. 关于PyTorch的loss.backward(),正确的是?

A. 更新模型参数

B. 清零梯度

C. 触发反向传播,计算所有参数的.grad

D. 前向传播

13. Forward Mode Autodiff适合什么场景?

A. 神经网络训练

B. f:R→RMf: \mathbb{R} \to \mathbb{R}^Mf:R→RM(少输入多输出)

C. 所有深度学习任务

D. 不需要梯度的场景

14. 表达式膨胀(Expression Swell)是指?

A. 网络层数太多

B. 导数表达式中大量重复子表达式未合并→代码膨胀

C. 数据量太大

D. 参数太多

15. 在计算图中,v3=v1⋅v2v_3 = v_1 \cdot v_2v3=v1⋅v2,已知a3a_3a3,则a1a_1a1等于?

A. a3a_3a3

B. v2⋅a3v_2 \cdot a_3v2⋅a3

C. v1⋅a3v_1 \cdot a_3v1⋅a3

D. a3/v1a_3 / v_1a3/v1

16. 在计算图中,v4=exp⁡(v3)v_4 = \exp(v_3)v4=exp(v3),已知a4a_4a4,则a3a_3a3等于?

A. a4a_4a4

B. exp⁡(v3)⋅a4\exp(v_3) \cdot a_4exp(v3)⋅a4

C. v3⋅a4v_3 \cdot a_4v3⋅a4

D. 1

17. 神经网络中,为什么反向模式比前向模式高效?

A. 反向模式计算更简单

B. NN是f:RD→Rf: \mathbb{R}^D \to \mathbb{R}f:RD→R→反向一次得所有梯度;前向需DDD次

C. 反向模式不需要前向传播

D. 前向模式结果不精确

18. Autodiff中,需要缓存什么以便反向传播使用?

A. 模型参数

B. 前向传播中的中间变量值

C. 最终输出

D. 学习率

19. 关于数值微分的精度,正确的是?

A. 比解析解更精确

B. 近似值,精度取决于ϵ\epsilonϵ选择(太大→近似差;太小→舍入误差)

C. 总是精确的

D. 与Autodiff精度相同

20. 如果viv_ivi在计算图中没有子节点(非输出变量且不被任何后续变量使用),则aia_iai等于?

A. 1

B. 0

C. 未定义

D. −1-1−1


二、判断题(每题2分,共15题,30分。正确打√,错误打×)

21. 数值微分是计算梯度最精确的方法。( )

22. 自动微分=数值微分+符号微分的简单组合。( )

23. Backward Mode Autodiff是深度学习训练的核心技术。( )

24. 伴随变量aia_iai衡量的是fff对viv_ivi的敏感度(偏导数)。( )

25. 计算图中一个变量可以对多个后续变量产生影响。( )

26. 反向传播从输入层向输出层依次计算伴随变量。( )

27. PyTorch的Autograd构建的是静态计算图。( )

28. 反向模式对f:RD→Rf:\mathbb{R}^D\to\mathbb{R}f:RD→R的计算代价约为O(D)\mathcal{O}(D)O(D)。( )

29. 数值微分的ϵ\epsilonϵ越小精度总是越高。( )

30. 表达式膨胀导致符号微分在实际中难以用于大型神经网络。( )

31. 伴随变量的递归公式不需要知道前向传播的中间值。( )

32. 计算图中,子节点(children)指使用viv_ivi作为输入的后继变量。( )

33. 多路径到输出→对应偏导数需要沿所有路径求和(链式法则的多变量推广)。( )

34. 神经网络的反向传播=Autodiff在特定网络结构上的应用。( )

35. loss.backward()执行后,参数的梯度会自动清零。( )


三、简答题(每题5分,共3题,15分)

36. 请对比三种梯度计算方法(数值微分、符号微分、自动微分)的优缺点,并说明为什么自动微分是深度学习的最佳选择。

37. 请解释反向传播(Backward Mode Autodiff)的核心思想:什么是伴随变量?递归公式 ai=∑j∈Chi∂vj∂viaja_i = \sum_{j\in\mathbf{Ch}i} \frac{\partial v_j}{\partial v_i} a_jai=∑j∈Chi∂vi∂vjaj 如何工作?

38. 为什么Backward Mode适合深度学习而Forward Mode不适合?结合f:RD→Rf:\mathbb{R}^D\to\mathbb{R}f:RD→R进行分析。


四、计算题(每题5分,共3题,15分)

39. 已知计算图:v1=x,v2=v12,v3=sin⁡(v2),f=v3v_1=x, v_2=v_1^2, v_3=\sin(v_2), f=v_3v1=x,v2=v12,v3=sin(v2),f=v3,前向计算值:x=1,v1=1,v2=1,v3=sin⁡(1)≈0.841,f=0.841x=1, v_1=1, v_2=1, v_3=\sin(1)\approx0.841, f=0.841x=1,v1=1,v2=1,v3=sin(1)≈0.841,f=0.841。

从fff开始反向计算各伴随变量a3,a2,a1a_3, a_2, a_1a3,a2,a1。

提示:∂v2∂v1=2v1\frac{\partial v_2}{\partial v_1}=2v_1∂v1∂v2=2v1,∂v3∂v2=cos⁡(v2)\frac{\partial v_3}{\partial v_2}=\cos(v_2)∂v2∂v3=cos(v2),∂f∂v3=1\frac{\partial f}{\partial v_3}=1∂v3∂f=1

40. 对于表达式 f(x,y)=x⋅y+sin⁡(x)f(x,y) = x \cdot y + \sin(x)f(x,y)=x⋅y+sin(x):

(1) 画出计算图(分解为基本操作节点)。

(2) 给定x=2,y=3x=2, y=3x=2,y=3,前向计算所有节点值。

(3) 反向计算∂f∂x\frac{\partial f}{\partial x}∂x∂f和∂f∂y\frac{\partial f}{\partial y}∂y∂f。

41. 某神经网络有D=106D=10^6D=106个参数,输出单一损失值。分别估算Forward Mode和Backward Mode Autodiff计算完整梯度所需的时间比例(大致量级)。


试卷结束,请认真检查。

第十四章:Backpropagation --- 单元习题答案


一、单项选择题答案

题号 答案 解析
1 B 数值微分需2D2D2D次误差评估→O(ND2)\mathcal{O}(ND^2)O(ND2)→极贵
2 B 符号微分产生大量重复子表达式未合并→代码膨胀
3 C Autodiff仍需计算(但高效);非"不需要计算"
4 B Backward Mode=f:RD→Rf:\mathbb{R}^D\to\mathbb{R}f:RD→R→DL专用
5 B NN=百万参数→单一损失→Backward最优
6 B 伴随变量ai=∂f/∂via_i=\partial f/\partial v_iai=∂f/∂vi(f对中间变量的偏导)
7 B ai=∑j∈Chi(∂vj/∂vi)⋅aja_i=\sum_{j\in Chi}(\partial v_j/\partial v_i)\cdot a_jai=∑j∈Chi(∂vj/∂vi)⋅aj
8 C 链式法则=所有路径求和
9 C afinal=∂f/∂f=1a_{final}=\partial f/\partial f=1afinal=∂f/∂f=1
10 B 中心差分需计算E(w+ϵIi)E(w+\epsilon I_i)E(w+ϵIi)和E(w−ϵIi)E(w-\epsilon I_i)E(w−ϵIi)→2D次
11 B 反向遍历=从输出→输入,拓扑逆序
12 C backward()=触发Autograd→计算.grad
13 B Forward=f:R→RMf:\mathbb{R}\to\mathbb{R}^Mf:R→RM;Backward=f:RD→Rf:\mathbb{R}^D\to\mathbb{R}f:RD→R
14 B Expression Swell=未共享重复子表达式→膨胀
15 B ∂v3/∂v1=v2\partial v_3/\partial v_1=v_2∂v3/∂v1=v2→a1=v2⋅a3a_1=v_2\cdot a_3a1=v2⋅a3
16 B ∂exp⁡(v3)/∂v3=exp⁡(v3)\partial\exp(v_3)/\partial v_3=\exp(v_3)∂exp(v3)/∂v3=exp(v3)→a3=exp⁡(v3)⋅a4a_3=\exp(v_3)\cdot a_4a3=exp(v3)⋅a4
17 B 反向一次得全部梯度;前向需逐参数→D次
18 B 前向中间值→反向时需要(如∂vj/∂vi\partial v_j/\partial v_i∂vj/∂vi)
19 B ϵ\epsilonϵ太小→舍入误差;太大→截断误差→需权衡
20 B 无子节点→不影响f→∂f/∂vi=0\partial f/\partial v_i=0∂f/∂vi=0

二、判断题答案

题号 答案 解析
21 × 数值微分=近似;Autodiff和符号微分=精确
22 × Autodiff=独立技术(追踪计算图+链式法则),非简单组合
23 Backward Mode Autodiff=反向传播=DL核心
24 aia_iai=f对viv_ivi的敏感度
25 一个中间变量可流入多个后续变量→多路径
26 × 输出→输入(反向),非输入→输出
27 × PyTorch=动态计算图(每次forward构建新图)
28 反向一次遍历≈前向代价的常数倍=O(D)\mathcal{O}(D)O(D)
29 × ϵ\epsilonϵ太小→舍入误差增大→精度反而下降
30 神经网络表达式巨大→符号微分膨胀不可行
31 × ∂vj/∂vi\partial v_j/\partial v_i∂vj/∂vi需要前向中间值
32 Children=用viv_ivi作为输入的后继节点
33 多路径=偏导数的全微分=链式法则求和
34 BP=Autodiff应用于NN
35 × backward()后梯度累加到.grad→需手动zero_grad()

三、简答题参考答案

36. 三种梯度计算方法对比

参考答案:

方法 优点 缺点
数值微分 简单、适用任何函数 近似、O(ND2)\mathcal{O}(ND^2)O(ND2)极贵
符号微分 精确 表达式膨胀、不自动
自动微分 精确+自动+高效 需构建计算图

Autodiff是DL最佳选择:精确(机器精度)+自动(追踪计算图)+高效(Backward Mode一次遍历得所有梯度)。


37. 反向传播核心

参考答案:

伴随变量 :ai=∂f∂via_i = \frac{\partial f}{\partial v_i}ai=∂vi∂f,衡量最终输出对中间变量viv_ivi的敏感度。

递归公式 :ai=∑j∈Chi∂vj∂vi⋅aja_i = \sum_{j\in\mathbf{Ch}i} \frac{\partial v_j}{\partial v_i} \cdot a_jai=∑j∈Chi∂vi∂vj⋅aj

工作流程

  1. afinal=1a_{final}=1afinal=1(∂f/∂f=1\partial f/\partial f=1∂f/∂f=1)
  2. 按拓扑逆序对每个节点:收集所有子节点的贡献→乘以局部偏导→累加
  3. ∂vj∂vi\frac{\partial v_j}{\partial v_i}∂vi∂vj:前向计算中viv_ivi对vjv_jvj的直接影响(局部偏导)
  4. aja_jaj:从vjv_jvj到输出的累积敏感度(已算好)

38. Backward vs Forward

参考答案:

NN=w∈RD\mathbf{w}\in\mathbb{R}^Dw∈RD(D=106D=10^6D=106)→L∈RL\in\mathbb{R}L∈R(1维损失)。

  • Forward Mode :每次计算∂L/∂wi\partial L/\partial w_i∂L/∂wi需一次完整正向遍历→O(D)\mathcal{O}(D)O(D)次遍历
  • Backward Mode :一次反向遍历计算所有 {∂L/∂wi}\{\partial L/\partial w_i\}{∂L/∂wi}→O(1)\mathcal{O}(1)O(1)次遍历

→Backward比Forward快约**DDD倍**(百万倍!)。这就是为什么所有DL框架都用Backward Mode。


四、计算题参考答案

39. 简单反向传播

a3=∂f∂v3=1a_3 = \frac{\partial f}{\partial v_3} = \mathbf{1}a3=∂v3∂f=1

a2=∂v3∂v2⋅a3=cos⁡(v2)⋅1=cos⁡(1)≈0.540a_2 = \frac{\partial v_3}{\partial v_2} \cdot a_3 = \cos(v_2) \cdot 1 = \cos(1) \approx \mathbf{0.540}a2=∂v2∂v3⋅a3=cos(v2)⋅1=cos(1)≈0.540

a1=∂v2∂v1⋅a2=2v1⋅0.540=2(1)(0.540)=1.080a_1 = \frac{\partial v_2}{\partial v_1} \cdot a_2 = 2v_1 \cdot 0.540 = 2(1)(0.540) = \mathbf{1.080}a1=∂v1∂v2⋅a2=2v1⋅0.540=2(1)(0.540)=1.080

∂f∂x=a1=1.080\frac{\partial f}{\partial x} = a_1 = \mathbf{1.080}∂x∂f=a1=1.080


40. f(x,y)=xy+sin(x)

(1) 计算图

复制代码
v1 = x        v4 = v2 * v3   (= x*y)
v2 = y        v5 = sin(v1)   (= sin(x))
v3 = x        v6 = v4 + v5   (= f)

(2) 前向计算 (x=2,y=3x=2, y=3x=2,y=3)

v1=2,v2=3,v3=2v_1=2, v_2=3, v_3=2v1=2,v2=3,v3=2 | v4=2×3=6v_4=2\times3=6v4=2×3=6 | v5=sin⁡(2)≈0.909v_5=\sin(2)\approx0.909v5=sin(2)≈0.909 | f=6+0.909=6.909f=6+0.909=6.909f=6+0.909=6.909

(3) 反向计算

a6=1a_6=1a6=1

a5=∂v6∂v5a6=1⋅1=1a_5 = \frac{\partial v_6}{\partial v_5}a_6 = 1\cdot1 = 1a5=∂v5∂v6a6=1⋅1=1

a4=∂v6∂v4a6=1⋅1=1a_4 = \frac{\partial v_6}{\partial v_4}a_6 = 1\cdot1 = 1a4=∂v4∂v6a6=1⋅1=1

a3=∂v4∂v3a4=v2⋅1=3a_3 = \frac{\partial v_4}{\partial v_3}a_4 = v_2\cdot1 = 3a3=∂v3∂v4a4=v2⋅1=3

a2=∂v4∂v2a4=v3⋅1=2a_2 = \frac{\partial v_4}{\partial v_2}a_4 = v_3\cdot1 = 2a2=∂v2∂v4a4=v3⋅1=2

a1=∂v4∂v1a4+∂v5∂v1a5=v2⋅1+cos⁡(v1)⋅1=3+cos⁡(2)a_1 = \frac{\partial v_4}{\partial v_1}a_4 + \frac{\partial v_5}{\partial v_1}a_5 = v_2\cdot1 + \cos(v_1)\cdot1 = 3 + \cos(2)a1=∂v1∂v4a4+∂v1∂v5a5=v2⋅1+cos(v1)⋅1=3+cos(2)

≈3+(−0.416)=2.584\approx 3 + (-0.416) = 2.584≈3+(−0.416)=2.584

∂f/∂x=a1+a3=2.584+3=5.584\partial f/\partial x = a_1 + a_3 = 2.584 + 3 = 5.584∂f/∂x=a1+a3=2.584+3=5.584(v1v_1v1和v3v_3v3都来自x→需加总)

或者统一:∂f/∂x=y+cos⁡(x)=3+cos⁡(2)≈2.584\partial f/\partial x = y + \cos(x) = 3 + \cos(2) \approx 2.584∂f/∂x=y+cos(x)=3+cos(2)≈2.584

∂f/∂y=a2=2\partial f/\partial y = a_2 = 2∂f/∂y=a2=2(或∂f/∂y=x=2\partial f/\partial y = x = 2∂f/∂y=x=2)


41. Forward vs Backward时间比例

  • Forward Mode :D=106D=10^6D=106次遍历,每次≈前向代价→总≈106×10^6\times106×前向
  • Backward Mode :1次反向遍历,≈2-3倍前向代价→总≈3×3\times3×前向

时间比例 :Backward:Forward ≈ 3:1063 : 10^63:106,即Forward比Backward慢约30万倍


答案编制完成时间:2026年6月29日

相关推荐
羑悻的小杀马特11 小时前
把随身WiFi改成网盘聚合器:中兴F50挂载本地存储+夸克网盘实战
运维·服务器·人工智能·网盘·openlist
meilindehuzi_a11 小时前
从跑分到生产力:重新理解大模型基准测试与分层协作
人工智能
蜜桃味女焊匠人12 小时前
焊接生产线优化思路:解决手工焊、机器人焊气体浪费问题
人工智能·经验分享·其他·机器人
Georgeviewer17 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
GuWenyue17 小时前
分不清AI Workflow与Agent?3个实战案例彻底讲透,做AI应用不再踩选型坑
人工智能
彩讯股份30063418 小时前
彩讯股份与心洲科技签署战略合作协议,共建企业级模型后训练能力
人工智能·科技
迅易科技18 小时前
从场景验证到Agent上线:迅易 × WorkBuddy如何帮助企业建设AI能力?
人工智能·ai·腾讯云
PNP Robotics18 小时前
多伦多大学机器人峰会|物理AI与具身智能落地新趋势
人工智能·深度学习·机器学习·机器人
GIR12319 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
绿算技术19 小时前
绿算技术亮相第十八届HPC AI中国年会,擘画AI基础设施全栈协同新图景
人工智能