DQN 算法原理:深度 Q 学习与离散动作价值控制 DQN全称是Deep Q-Network可以理解成Q-learning 神经网络它的核心目标是让智能体在每个状态 s 下知道每个动作 a 大概能带来多少未来总回报然后选择价值最大的动作。1. DQN 解决什么问题强化学习里智能体每一步都要做决策​​​​​​​ ​​​​​​​ ​​​​​​​当前状态 st​选择动作 at​得到奖励 rt​进入下一个状态 st1​。DQN 要学习的是一个函数Q(s,a)它表示在状态s下执行动作a之后按照某种策略继续行动最终能拿到的累计奖励期望。也就是其中γ 是折扣因子表示未来奖励的重要程度。如果 γ 接近 1说明智能体比较看重长期收益。如果 γ 接近 0说明智能体只看重眼前奖励。2. DQN 的网络输入和输出DQN 的神经网络结构可以理解为Q(s,a;θ) 其中 θ 是神经网络参数。但是实际实现时DQN 通常不是输入一个状态和一个动作然后输出一个 Q 值。更常见的是输入状态 s 输出所有动作的 Q 值例如然后选择最大的那个动作。3. DQN 的核心公式贝尔曼最优方程DQN 的理论基础是 Q-learning。Q-learning 的核心是贝尔曼最优方程​​​​​​​ ​​​​​​​也就是当前Q值眼前奖励折扣后的未来最大Q值DQN 就是用神经网络去逼近这个最优 Q 函数Q(s,a;θ)≈Q∗(s,a)4. DQN 的训练目标DQN 的训练本质是让当前 Q 值接近目标 Q 值。其中θ 是当前网络参数。θ− 是目标网络参数。所以损失函数是也就是如果 st1​ 是终止状态那么没有未来奖励yt​rt​完整写法是5. 为什么 DQN 需要经验回放普通强化学习里数据是一条连续轨迹s1 → s2 → s3 → s4 → s5这些样本之间高度相关。如果直接按顺序训练神经网络容易出现震荡和过拟合。DQN 使用经验回放池智能体和环境交互时把每一步经验存进去(state, action, reward, next_state, done)训练时不是直接用最新的一条数据而是从回放池中随机采样一个 batch。6. DQN 如何选择动作DQN 通常使用 ϵ-greedy 策略。以概率 ϵ 随机选动作。以概率 1−ϵ 选择当前 Q 值最大的动作。训练过程中ϵ 通常逐渐减小7. DQN 的完整训练流程1. 初始化 Q 网络 2. 初始化目标网络 3. 初始化经验回放池 4. 智能体观察当前状态 s 5. 用 ε-greedy 选择动作 a 6. 执行动作得到 r、s、done 7. 把 (s, a, r, s, done) 存入经验池 8. 从经验池随机采样 batch 9. 用目标网络计算目标 Q 值 10. 用当前网络计算当前 Q 值 11. 最小化 TD 误差 12. 每隔一段时间更新目标网络 13. 重复以上过程8. DQN 的 TD Error 是什么DQN 的核心误差叫 TD Error表示目标 Q 值和当前 Q 估计之间差了多少9. DQN 是 off-policy 算法DQN 是 off-policy。因为它采样数据时使用的是 ϵ-greedy 策略有时候随机动作有时候选最大 Q 动作但它学习的目标是最优贪心策略也就是说行为策略ε-greedy用来收集数据 目标策略greedy用来学习最优动作行为策略和目标策略不完全一样所以是 off-policy。10. DQN 的直观例子假设智能体玩一个走迷宫游戏。当前状态下有 4 个动作上、下、左、右 DQN 输出上2 下-1 左4 右1那么它会选左 执行后得到奖励r 1 进入下一个状态 s′。在下一个状态目标网络预测上3 下2 左5 右0 最大值是maxQ(s′,a′)5如果γ0.9 那么目标 Q 值是 y10.9×55.5假设当前网络对刚才那个动作的预测是Q(s,左)4 那么误差是5.5−41.5所以网络会更新让Q(s,左) 变大一点更接近 5.5。