🔗 导航到原文

本资料为《智能重生:从垃圾堆到AI工程师》第八章的配套学习内容。
阅读小说原文第八章《试错中学习》
专栏总目录《智能重生》AI工程师成长小说专栏


《智能重生:从垃圾堆到AI工程师》

第八章《试错中学习》

思考题解答 + 知识卡片 + 面试题


一、本章核心知识点回顾

  • 强化学习基本框架:智能体(Agent)、环境(Environment)、状态(State)、动作(Action)、奖励(Reward)、策略(Policy)。
  • 马尔可夫决策过程(MDP):强化学习的数学模型,具备马尔可夫性(未来只依赖当前状态)。
  • Q-learning:基于值函数的算法,学习状态-动作值函数 (Q(s,a)),更新公式为 (Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \max_{a’} Q(s’,a’) - Q(s,a)])。
  • 深度Q网络(DQN):用神经网络逼近 (Q(s,a)),处理高维连续状态。关键技术:经验回放(Experience Replay)、目标网络(Target Network)。
  • 策略梯度方法:直接学习策略 (\pi_\theta(a|s)),通过梯度上升优化。REINFORCE算法使用累积奖励 (G_t) 作为权重。
  • Actor-Critic方法:结合值函数和策略梯度,Actor(策略网络)选动作,Critic(价值网络)评估状态值,降低方差。
  • PyTorch基础:张量(Tensor)、自动微分(Autograd)、神经网络模块(nn.Module)、优化器(optim)。

二、第八章思考题解答

问题一

在能源调度任务中,如果奖励函数只考虑最小化能耗而不考虑稳定性,学到的最优策略可能是什么样的?可能带来什么风险?

解答
智能体可能学会极度不稳定的策略:例如在数据风暴来临时直接关闭电磁屏障以节省能源,或在负载低时频繁开关设备。虽然短期能耗极低,但屏障频繁失效会导致净土地暴露在失控AI的危险中,甚至完全失去保护。

风险

  • 电磁屏障功率波动剧烈,设备寿命缩短。
  • 居民安全无法保障。
  • 策略在真实环境中不可用(因为稳定性是隐含的必要约束)。

正确做法:奖励函数应同时包含能耗项和稳定性惩罚(如功率变化率的平方),或设定安全约束(如屏障功率不得低于阈值)。


问题二

DQN中的目标网络为什么不能被主网络实时更新?如果实时更新会发生什么?

解答
DQN使用神经网络 (Q(s,a;\theta)) 来近似Q值,其更新目标为 (r + \gamma \max_{a’} Q(s’,a’;\theta^-))。如果目标网络 (\theta^-) 与主网络 (\theta) 实时同步,则目标值每步都会随主网络变化,导致训练不稳定、震荡甚至发散

类比:就像追逐一个移动的目标,永远打不中。

解决方法:目标网络参数每隔 (C) 步从主网络复制一次(硬更新),或使用软更新(Polyak平均):(\theta^- \leftarrow \tau \theta + (1-\tau)\theta^-)。这样目标值相对稳定,训练更容易收敛。


问题三

模拟环境和真实环境之间总有差距(Sim-to-Real gap)。列举几种缩小这个差距的方法。

解答

  1. 域随机化(Domain Randomization):在模拟器中随机化物理参数(摩擦力、质量、传感器噪声),使智能体学会对多种变化鲁棒,从而迁移到真实环境。
  2. 系统辨识(System Identification):用真实环境的数据校准模拟器的参数,使模拟器更贴近真实。
  3. 渐进式微调(Progressive Fine-tuning):先在模拟中训练,然后在真实环境中用小学习率、低探索率微调。
  4. 鲁棒控制辅助:在真实系统中叠加一个传统控制器(如PID),限制智能体动作范围,防止危险探索。
  5. 真实世界数据增强:用真实数据替换部分模拟数据,进行混合训练。

三、知识记忆卡片(张小卡片)

┌─────────────────────────────────────────────────┐
│  📚 第八章 · 试错中学习                          │
├─────────────────────────────────────────────────┤
│  🔹 强化学习三要素:状态S、动作A、奖励R          │
│                                                 │
│  🔹 Q-learning更新:                            │
│     Q(s,a) ← Q(s,a) + α[r + γ max_a' Q(s',a') - Q(s,a)] │
│                                                 │
│  🔹 DQN关键技术:                               │
│     - 经验回放:打破时间相关性                   │
│     - 目标网络:稳定训练                         │
│                                                 │
│  🔹 策略梯度(REINFORCE):                     │
│     ∇J(θ) = E[∇_θ log π_θ(a|s) · G_t]         │
│                                                 │
│  🔹 PyTorch自动微分:                           │
│     loss.backward() → optimizer.step()         │
│                                                 │
│  💡 记忆口诀:                                  │
│   “Q学习靠贝尔曼,深度网络替表难;              │
│     经验回放消相关,目标网络稳训练;            │
│     策略梯度直接优,REINFORCE走全程。”          │
└─────────────────────────────────────────────────┘

四、常见面试题与参考答案

❓ 强化学习基础篇

问题1:解释强化学习中的“探索与利用”权衡(Exploration vs. Exploitation)。如何平衡?

参考答案

  • 利用:根据当前策略选择已知的最优动作(最大化即时奖励)。
  • 探索:尝试未充分执行的动作,以发现可能带来更高长期回报的策略。

平衡方法

  • ϵ-greedy:以概率 ( \epsilon ) 随机探索,以 (1-\epsilon) 利用。通常 (\epsilon) 从高到低衰减(如从1.0到0.01)。
  • UCB(上置信界):选择动作时加上不确定性奖励。
  • Thompson采样:从后验分布采样。
  • Boltzmann探索:根据Q值的softmax分布采样。

问题2:写出贝尔曼方程,并解释其物理意义。

参考答案
贝尔曼方程(状态值函数形式):
[
V(s) = \max_a \left[ R(s,a) + \gamma \sum_{s’} P(s’|s,a) V(s’) \right]
]
物理意义:当前状态的最优值等于当前动作的即时奖励加上未来折扣奖励的期望。它将长期回报分解为当前步和后续步,是动态规划、Q-learning的理论基础。


问题3:什么是马尔可夫决策过程(MDP)?它的五个要素是什么?

参考答案
MDP是强化学习的数学框架,假设未来状态只依赖当前状态和动作(马尔可夫性)。
五要素

  1. 状态空间 (S)
  2. 动作空间 (A)
  3. 状态转移概率 (P(s’|s,a))
  4. 奖励函数 (R(s,a))
  5. 折扣因子 (\gamma \in [0,1])

❓ DQN篇

问题4:DQN中经验回放(Experience Replay)的原理和作用是什么?

参考答案
原理:将智能体与环境交互产生的经验 ((s, a, r, s’, done)) 存储在一个循环缓冲区中,训练时随机采样一小批(minibatch)进行梯度下降。
作用

  • 打破时间相关性:连续的样本具有高度相关性,随机采样使训练稳定。
  • 提高样本效率:每个经验可被多次使用。
  • 避免灾难性遗忘:小批量包含过往经验,防止网络只适应最新数据。

问题5:DQN中的目标网络如何更新?为什么不能与主网络同步更新?

参考答案
目标网络参数 (\theta^-) 定期从主网络 (\theta) 复制。常见更新方式:

  • 硬更新:每 (C) 步(如1000步)(\theta^- \leftarrow \theta)。
  • 软更新:每步 (\theta^- \leftarrow \tau \theta + (1-\tau)\theta^-),(\tau) 较小(如0.001)。

不能同步更新的原因:若同步更新,目标值会随主网络变化,形成“追逐移动目标”的不稳定训练。固定或缓慢变化的目标值有助于收敛。


❓ 策略梯度篇

问题6:策略梯度方法相比Q-learning有什么优缺点?

参考答案
优点

  • 适合连续动作空间(如机械臂力矩控制)。
  • 可以学习随机策略(在部分观测环境下更优)。
  • 训练更稳定(避免Q值估计偏差)。

缺点

  • 样本效率低:通常需要更多交互数据。
  • 高方差:REINFORCE算法的梯度估计方差大,常需配合基线(baseline)降低方差。
  • 收敛到局部最优

问题7:REINFORCE算法的梯度是如何计算的?为什么需要乘以累积奖励 (G_t)?

参考答案
梯度计算公式:
[
\nabla J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) , G_t \right]
]
其中 (G_t = \sum_{k=t}^{T} \gamma^{k-t} r_k) 是从时间 (t) 开始的累积折扣奖励。

原因:当前动作 (a_t) 不仅影响即时奖励,还影响后续所有奖励。乘以 (G_t) 可以正确地用后续总回报来加权该动作的对数概率梯度。如果只用即时奖励,会忽略长期影响。


问题8:Actor-Critic方法如何降低策略梯度的方差?简述其结构。

参考答案
结构:Actor(策略网络)负责选择动作,Critic(价值网络)评估当前状态的价值 (V(s)) 或优势函数 (A(s,a)=Q(s,a)-V(s))。
降低方差:REINFORCE使用累积奖励 (G_t) 作为权重,方差很大。Actor-Critic用Critic估计的优势函数代替 (G_t),因为 (A(s,a)) 同时考虑了动作的相对优劣,且方差更小。常用的损失函数是:(\nabla J(\theta) = \mathbb{E}[\nabla_\theta \log \pi_\theta(a|s) , A(s,a)])。


❓ PyTorch与工程篇

问题9:PyTorch中的自动微分(Autograd)是如何工作的?请举例说明。

参考答案
Autograd通过记录张量上的操作构建动态计算图。当在张量上调用 .backward() 时,系统从根节点反向遍历图,利用链式法则计算梯度,并累加到张量的 .grad 属性中。

示例

x = torch.tensor([2.0], requires_grad=True)
y = x**2 + 3*x + 1
y.backward()
print(x.grad)  # 2*x + 3 = 7

整个过程无需用户手动求导。


问题10:在深度强化学习训练中,如何选择优化器(Adam vs SGD)?为什么?

参考答案

  • Adam:自适应学习率,对超参数不敏感,收敛快,适合大多数深度RL任务(如DQN、PPO)。它能处理非平稳目标和非凸优化。
  • SGD:需要精细调节学习率,在RL中很少直接使用,因为RL目标函数高度非平稳。

推荐:优先使用Adam,配合适当的学习率(如0.0001~0.001)。在策略梯度方法中,也可使用RMSprop。


五、自测练习题(答案附后)

  1. 写出Q-learning的更新公式,并解释 (\alpha) 和 (\gamma) 的作用。
  2. 什么是“目标网络”?为什么DQN需要它?
  3. 策略梯度方法中,为什么通常使用优势函数 (A(s,a)) 代替累积奖励 (G_t)?
  4. (开放题)净土地的一个机器狗需要在废墟中寻找物资。请用强化学习设计其状态空间、动作空间和奖励函数,并说明你会采用哪种RL算法(DQN或策略梯度)并解释原因。

练习题答案

  1. (Q(s,a) \leftarrow Q(s,a) + \alpha [r + \gamma \max_{a’} Q(s’,a’) - Q(s,a)])。(\alpha) 学习率(步长),(\gamma) 折扣因子(未来奖励权重)。
  2. 目标网络是与主网络结构相同但参数延迟更新的网络,用于计算稳定的Q目标值,防止训练震荡。
  3. 优势函数 (A(s,a)=Q(s,a)-V(s)) 中心化,方差更小,且能直观表示动作相对平均水平的优劣。
  4. 状态:机器狗的位置、电池电量、传感器探测到的障碍物/物资距离。动作:前进、后退、左转、右转、拾取。奖励:+10拾取物资,-0.1每步(鼓励高效),-50撞墙或耗尽电池。算法:若状态连续、动作离散,DQN更简单;若动作连续(如转向角度),用策略梯度(如PPO)。

📌 本文是《智能重生:从垃圾堆到AI工程师》第八章配套学习资料。
欢迎在评论区讨论,更多章节请关注专栏更新。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐