如果这篇博客帮助到你,可以给我充个电加个油哦~
CC BY 4.0 (除特别声明或转载文章外)
部分理解和代码来自“莫烦python”
一、Qlearning介绍
Qlearning简单来说就是依照Q表(Q表就相当于我们的记忆和经验,我们在从小到大的过程中经历的各种事情所得到的经验,让我们在未来遇到事情能够更好的进行决策)进行决策的算法,这里有几个符号需要了解:状态集S, 动作集A, 即时奖励R,衰减因子γ, 探索率ϵ。
二、Qlearning基本流程
算法输入:迭代轮数T,状态集S, 动作集A, 步长α,衰减因子γ, 探索率ϵ
输出:所有的状态和动作对应的价值Q
1. 随机初始化所有的状态和动作对应的价值Q. 对于终止状态其Q值初始化为0.
2. for i from 1 to T,进行迭代。
a) 初始化S为当前状态序列的第一个状态。
b) 用ϵ−贪婪法在当前状态S选择出动作A
c) 在状态S执行当前动作A,得到新状态S′和奖励R
d) 更新价值函数Q(S,A):Q(S,A)+α(R+γmaxaQ(S′,a)−Q(S,A))
e) S=S′
f) 如果S′是终止状态,当前轮迭代完毕,否则转到步骤b
三、Qlearning例子帮助理解
我们在生活中常常会面临学习和玩耍两种选择,假设一个q表:
q表 | a1 | a2 |
---|---|---|
s1 | -2 | 1 |
s2 | -4 | 2 |
在Qlearning基本流程中的R+γmaxaQ(S′,a)为Q现实,其中maxaQ(S′,a)就是从q表中取出下一个状态值最大的那个动作,比如状态s1时采取动作a2后,进入状态s2有一个奖励(注意这个奖励是自己设置的,是达到s2状态的奖励,并不等于q(s1,a2)),此时选择s2状态下q值最大的动作,利用R+γmaxaQ(S′,a)计算出Q现实,然后与Q表中的Q(s1,a2)做差,最终Q(S,A)=Q(S,A)+α(R+γmaxaQ(S′,a)−Q(S,A))(此时的Q(S,A)是Q(s1,a2))
四、细节理解
- ϵ−贪婪法是用在决策上的一种策略, 比如 epsilon = 0.9 时, 就说明有90% 的情况我会按照 Q 表的最优值选择行为, 10% 的时间使用随机选行为。
- alpha是学习率, 来决定这次的误差有多少是要被学习的, alpha是一个小于1 的数。
- gamma 是对未来 reward 的衰减值。
(1)gamma = 1 时,在 s1 看到的 Q 是未来没有任何衰变的奖励,系统能够看到以后所有的状态的价值
(2)gamma = 0 时,在 s1 只能看到眼前的reward
(3)gamma 从 0 变到 1, 对远处的价值看得越清楚, 所以机系统随着gamma的增加,对未来的价值就越来越重视, 不仅仅只看眼前的利益, 也为未来的价值着想。