强化学习数学原理 - 第8章:值函数近似 (Value Function Approximation)
这篇文章解决什么问题:1. 为什么需要函数近似? 在前面的章节中,我们都假设使用表格 (Table) 来存储 Value Function: v(s) 是一个长度为 |∘| 的向量。 q(s, a) 是一个大小为 |∘| \times |∘|...
1. 为什么需要函数近似?
在前面的章节中,我们都假设使用表格 (Table) 来存储 Value Function:
- 是一个长度为的向量。
- 是一个大小为的矩阵。
致命问题:
- 状态空间爆炸:围棋的状态数是,任何计算机都存不下这个表。
- 泛化能力差:如果是连续状态(比如机器人的位置坐标),你没见过的坐标就没有 Value,表格法无法处理“相似的状态”。
解决方案:用一个函数来近似。
其中是参数(比如神经网络的权重)。这样我们只需要存储,通常的维度远小于状态数。
2. 目标函数与优化
我们希望越准越好。定义目标函数(损失函数):
使用 SGD 进行更新:
但问题是:我们不知道真实的。
办法:用 TD Target 代替。
这叫 Semi-gradient,因为我们在求导时,忽略了 TD Target 对的依赖(把 Target 当常数看)。
3. Deep Q-Network (DQN)
当是一个深度神经网络时,这就是 Deep RL。
DQN 是将 Q-learning 与神经网络结合的里程碑算法(DeepMind, Nature 2015)。
3.1 核心创新
为了解决 Deep RL 训练不稳定的问题,DQN 引入了两大通过:
- Experience Replay (经验回放):
- 把存进一个 Buffer。
- 训练时随机采样 Batch。这打破了数据的时间相关性(Correlation),让数据分布更像 i.i.d.,稳定神经网络训练。
- Target Network (目标网络):
- 在计算 TD Target 时,使用一个参数固定的旧网络。
- 。
- 这避免了“自己追自己”(Chasing a moving target)的震荡问题。
3.2 Python 代码实战:DQN 核心逻辑
1 | import torch |
4. 总结
本章我们迈出了从“玩具问题”到“实际应用”的关键一步。
- Function Approximation 让 RL 能处理无限状态。
- DQN 通过 Replay Buffer 和 Target Network 解决了非线性近似的不稳定性。
至此,Value-based 方法(学习值)已经讲完了。但还有一类问题很难处理:连续动作空间(比如机器人关节角度)。这就需要 Policy-based 方法,直接学习策略函数。
下一章:策略梯度方法 (Policy Gradient Methods)。
上一章:第7章 - 时序差分方法 | 下一章:第9章 - 策略梯度方法 >>
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 WPIRONMAN!
评论

