上一篇笔记认识了Sarsa,可以用来训练动作价值函数(Q_\pi);本篇来学习Q-Learning,这是另一种 TD 算法,用来学习 最优动作价值函数 Q-star,这就是之前价值学习中用来训练 DQN 的算法。
8. Q-learning
承接上一篇的疑惑,对比一下两个算法。
8.1 Sarsa VS Q-Learning
这两个都是 TD 算法,但是解决的问题不同。
Sarsa
- Sarsa 训练动作价值函数(Q_\pi(s,a));
- TD target:(y_t = r_t + \gamma \cdot {Q_\pi(s_{t+1},a_{t+1})})
- 价值网络是(Q_\pi) 的函数近似,Actor-Critic 方法中,用 Sarsa 更新价值网络(Critic)
Q-Learning
- Q-learning 是训练最优动作价值函数 (Q^*(s,a))
- TD target :(y_t = r_t + \gamma \cdot {\mathop{max}\limits_{a}Q^*(s_{t+1},a_{t+1})}),对 Q 求最大化
注意这里就是区别。
- 用Q-learning 训练DQN
个人总结区别在于Sarsa动作是随机采样的,而Q-learning是取期望最大值
下面推导 Q-Learning 算法。
8.2 Derive TD target
注意Q-learning 和 Sarsa 的 TD target 有区别。
之前 Sarsa 证明了这个等式:(Q_\pi({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q_\pi({S_{t+1}},{A_{t+1}})])
等式的意思是,(Q_\pi) 可以写成 奖励 以及 (Q_\pi) 对下一时刻做出的估计;
等式两端都有 Q,并且对于所有的 (\pi) 都成立。
所以把最优策略记作 (\pi^*),上述公式对其也成立,有:
(Q_{\pi^}({s_t},{a_t}) = \mathbb{E}[{R_t} + \gamma \cdot Q_{\pi^}({S_{t+1}},{A_{t+1}})])
通常把(Q_{\pi^}) 记作 (Q^),都可以表示最优动作价值函数,于是便得到:
(Q^({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot Q^({S_{t+1}},{A_{t+1}})])
处理右侧 期望中的 (Q^*),将其写成最大化形式:
- 因为(A_{t+1} = \mathop{argmax}\limits_{a} Q^({S_{t+1}},{a})) ,A一定是最大化 (Q^)的那个动作
解释: 给定状态(S_{t+1}),Q* 会给所有动作打分,agent 会执行分值最高的动作。
- 因此 (Q^({S_{t+1}},{A_{t+1}}) = \mathop{max}\limits_{a} Q^({S_{t+1}},{a})),(A_{t+1}) 是最优动作,可以最大化 (Q^*);
- 带入期望得到:(Q^({s_t},{a_t})=\mathbb{E}[{R_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({S_{t+1}},{a})])
左边是 t 时刻的预测,等于右边的期望,期望中有最大化;期望不好求,用蒙特卡洛近似。用 (r_t \ s_{t+1}) 代替 (R_t \ S_{t+1});
- 做蒙特卡洛近似:(\approx {r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a}))称为TD target (y_t)。
此处 (y_t) 有一部分真实的观测,所以比左侧 Q-star 完全的猜测要靠谱,所以尽量要让左侧 Q-star 接近 (y_t)。
8.3 算法过程
a. 表格形式
- 观测一个 transition(({s_t},{a_t},{r_t},{s_{t+1}}))
- 用(s_{t+1} \ r_t) 计算 TD target:({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a}))
- Q-star 就是下图这样的表格:
找到状态 (s_{t+1}) 对应的 行,找出最大元素,就是 (Q^*) 关于 a 的最大值。
- 计算 TD error:(\delta_t = Q^*({s_t},{a_t}) – y_t)
- 更新(Q^({s_t},{a_t}) \leftarrow Q^({s_t},{a_t}) – \alpha \cdot \delta_t),更新((s_{t},a_t))位置,让Q-star 值更接近(y_t)
b. DQN形式
DQN (Q^({s},{a};w))近似 $Q^({s},{a}) $,输入是当前状态 s,输出是对所有动作的打分;
接下来选择最大化价值的动作 ({a_t}= \mathop{argmax}\limits_{{a}} Q^({S_{t+1}},{a},w)),让 agent 执行 (a_t);用收集到的 _transitions*_ 学习训练参数 w,让DQN 的打分 q 更准确;
用 Q-learning 训练DQN的过程:
- 观测一个transition (({s_t},{a_t},{r_t},{s_{t+1}}))
- TD target:({r_t} + \gamma \cdot \mathop{max}\limits_{a} Q^*({s_{t+1}},{a};w))
- TD error:(\delta_t = Q^*({s_t},{a_t};w) – y_t)
- 梯度下降,更新参数:(w \leftarrow w -\alpha \cdot \delta_t \cdot \frac{\partial Q^*({s_t},{a_t};w)}{\partial w})
x. 参考教程
- 视频课程:深度强化学习(全)_哔哩哔哩_bilibili
- 视频原地址:https://www.youtube.com/user/wsszju
- 课件地址:https://github.com/wangshusen/DeepLearning
- 笔记参考:
- https://zlq7m64rhg.feishu.cn/drive/folder/fldcnvII4pZn6rjElhDTte1O7yD
Original: https://www.cnblogs.com/Roboduster/p/16455054.html
Author: climerecho
Title: 强化学习-学习笔记8 | Q-learning
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/807387/
转载文章受原作者版权保护。转载请注明原作者出处!