本文主要讲解有关 Q-Learning 算法的内容,主要包括 on-policy 和 off-policy 的概念、Q-Learning 算法的基本思想和算法流程,最后还会讲解一个莫烦大神的例子。
1. on-policy 和 off-policy
on-policy(同策略):智能体在自己做的过程中学习,即选择动作的策略和更新值函数的策略是同一个策略。;
off-policy(异策略):智能体在看别人做的过程中学习,即选择动作的策略和更新值函数的策略不是同一个策略。;
上述两种也被译作在线学习和离线学习。
同策略时间差分:sarsa、sarsa($\lambda$)
异策略时间差分:重要性采样、Q-learning、Deep Q Network
关于时间(时序)差分(TD)算法这里只提一句我的理解:时间差分是和蒙特卡洛(MC)方法相对应的,后者是对一个回合(episode)的数据采样,而前者是对一步或多步的数据采样。采样完毕之后再去计算数据的均值啊之类的。
2. Q-Learning 算法
Q-Learning 就是创造一个 Q 表来指导智能体的行动,Q 表的行是状态,列是动作。一个状态对应的动作的数值越大,则智能体采用该动作的概率越大。Q 表的每个值就是在上篇文章中提到的动作值函数 Q(s,a)。
Q 表更新公式如下:
$$
Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma\cdot\max Q(S_{t+1})-Q(S_t,A_t)]
$$
其中 $\gamma$ 为衰减值;$\alpha$ 是学习率;$\max Q(S_{t+1})$ 是状态 $S_{t+1}$ 下概率最大的动作对应的 Q 表值,但是在实际行动时并不一定采取该行动;$R_{t+1}+\gamma\max Q(S_{t+1})$ 是根据贝尔曼方程得到的 $Q(S_{t+1},A_{t+1})$ 的推导值,后面称为 Q-target;而 $Q(S_t,A_t)$ 是 $Q(S_{t+1},A_{t+1})$ 的估计值,后面称为 Q-eval。$R_{t+1}+\gamma\max Q(S_{t+1})-Q(S_t,A_t)$ 就是两者的误差值,在后面的文章中也称其为 TD-error(时分误差)。
根据动作值函数的定义(见上一篇文章)有:
$$
Q(S_1)=R_2+\gamma Q(S_2)=R_2+\gamma [R_3+\gamma Q(S_3)]
$$
$$
=R_2+\gamma [R_3+\gamma [R_4+\gamma Q(S_4)]]=…
$$
所以:
$$
Q(S_1)=R_2+\gamma R_3+\gamma^2 R_4+\gamma^3 R_5+…
$$
当 $\gamma=1$ 时:
$$
Q(S_1)=R_2+R_3+R_4+R_5+…
$$
也就是动作值函数与该状态之后的所有奖励有关,并且其权重相等。
当 $\gamma=0$ 时:
$$
Q(S_1)=R_2
$$
也就是动作值函数只与该状态的前后一个奖励有关。
当 $0<\gamma<1$ 时:
$$
Q(S_1)=R_2+\gamma R_3+\gamma^2 R_4+\gamma^3 R_5+…
$$
也就是说 Q 表实现了奖励值的衰减,离当前状态越远的奖励衰减的越严重。
3. Q-Learning 算法流程
(1)初始化 Q 表(值全为 0 )
(2)根据当前状态选择一个 Action
(3)执行 Action 并获得相应的奖励,以及下一个状态
(4)按照公式更新 Q 表
(5)将下一个状态设为当前状态
(6)重复 2-5 步
值得注意的是在 Q-Learning 算法中有两个“ 策略”,一个是选取动作的策略,另一个是更新 Q 表的策略。这两个策略分别采用的是 $\epsilon$贪婪算法和最大值算法,所以 Q-Learning 是 off-policy 的。
4. 探索-利用困境
如果智能体仅仅按照 Q 表的最大概率指导行动的话,很多状态可能根本没办法达到,学习效率是比较低的,这就是探索-利用困境(Explore-Exploit dilemma)。可以用 $\epsilon$ 贪婪($\epsilon-Greedy$)方法解决。
$\epsilon$ 贪婪方法就是设定一个 $0<\epsilon<1$,并以 $\epsilon$ 的概率按照 Q 表数值最大的动作行动,以 $1-\epsilon$ 的概率随机行动。
5. Q-Learning 版寻找宝藏的例子
以下代码实现了一个智能体(用字符 ‘o’ 表示)寻找宝藏(用字符 ‘T’ 表示)的强化学习过程,所用的算法是 Q-Learning 算法。当智能体找到宝藏时奖励值为 1,反之为 0。智能体的动作只有两个—— left 和 right,即向左移动和向右移动。程序会显示智能体和宝藏的位置、每个回合的奖励值以及终止状态时 Q 表的情况。
1 | import numpy as np |
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2019/10/10/Q-Learning/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!