1. Q 函数的定义与意义
- 状态–动作值函数 (State-Action Value Function),又称 Q 函数,记作 。
- 含义:在状态 下采取动作 ,并且此后始终按照最优策略行动,所能获得的期望回报 (Return)。
- 作用:衡量一条轨迹(状态–动作序列)整体“好不好”,并帮助我们挑选出最优动作。
- 在任意状态 ,计算所有可能动作 的 ,选择值最大的动作作为最优策略。
2. 回报 (Return) 与折扣因子
- 定义:
- 称为 折扣因子 (Discount Factor)。
- 越小:偏向即时奖励,未来奖励价值迅速下降。
- 越接近 1:更有耐心,未来奖励的重要性更大。
示例(火星探测车)
- 设折扣因子 :
- 在状态 2:
- Q(2, right) = 12.5
- Q(2, left) = 50
- 在状态 4:
- Q(4, left) = 12.5
- Q(4, right) = 10
- 在状态 2:
- 结论:在状态 ,选择 最大的动作,就是最优策略。
3. DQN (Deep Q-Network) 的输入与输出
- 在 Lunar Lander 等任务中,我们希望用神经网络来逼近 Q 函数。
- 状态向量 :8 个数
- 动作向量 :4 种动作(nothing, left, main, right),用 one-hot 编码,如 [1,0,0,0]。
- 输入向量 :共 12 个数。
- 神经网络结构:
- 输入层:12 个输入
- 隐藏层:64 单元 × 2 层
- 输出层:1 个数(预测 )
4. 使用 Bellman equation 构造训练数据
Bellman 方程:
- 输入 ,目标输出 为右边的值:
5. 收集经验样本
- 与环境交互,尝试不同动作(随机或部分随机)。
- 每次交互生成一个 四元组 。
- 保存最近 1 万条经验,形成 Replay Buffer。
- 从中构造训练样本:
- 输入
- 输出
6. 训练过程
- 随机初始化神经网络参数(初始 估计很差)。
- 重复以下循环:
- 与环境交互,收集 。
- 存入 Replay Buffer。
- 从 Buffer 中采样构造训练集 。
- 使用 均方误差 (MSE) 损失训练神经网络,使预测接近目标 。
- 更新 ,作为下次迭代的估计。
- 多次迭代后, 估计逐渐接近真实值。
7. 算法名称与效果
-
这种方法称为 DQN (Deep Q-Network)。
-
本质:用深度神经网络近似 Q 函数。
-
效果:在 Lunar Lander 等任务中能够学到合理策略,配合一些优化技巧(refinements)还能显著提升表现。
- Mini-batch 梯度下降:每次迭代只随机抽取一个较小的子集(如 1000 个样本)来计算梯度并更新参数。
- 特点:
- 每一步更新更快(计算量减少)。
- 梯度估计会带有噪声,但平均来看仍然朝向最优解。
- 在大型数据集或 Replay Buffer 中尤其有效。
-
-
Soft Update:在原始算法中,每次训练新网络 Q_new 后,直接用新参数覆盖旧网络参数 Q。 如果 Q_new 恰好训练得不好,可能导致 Q 变差甚至发散。 所以逐步更新参数,而不是完全替换。
- 参数更新公式:
其中 是一个很小的数(如 0.01)。
-
- 特点:
- Mini-batch 梯度下降:每次迭代只随机抽取一个较小的子集(如 1000 个样本)来计算梯度并更新参数。