【强化学习基础篇-1】Q-Learning
在本篇博客中,我们将介绍强化学习中的经典算法Q-Learning。Q-Learning是一种基于值函数的强化学习算法,用于估计在某一状态下采取某一动作的预期累积奖励。Q-Learning通过不断更新Q值函数,逐步改进策略,最终收敛到最优Q值函数。
在Q-Learning算法中,Q值函数用于估计在某一状态下采取某一动作的预期累积奖励。Q-Learning公式通过对当前Q值(Q现实)和目标Q值(Q估计)的差异进行更新,逐步改进策略,最终收敛到最优Q值函数。
目录
Q-Learning公式
Q-Learning的更新公式为:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
(
r
t
+
1
+
γ
max
a
Q
(
s
t
+
1
,
a
)
−
Q
(
s
t
,
a
t
)
)
Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left( r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a) - Q(s_t, a_t) \right)
Q(st,at)←Q(st,at)+α(rt+1+γamaxQ(st+1,a)−Q(st,at))
公式分解
Q现实
Q现实代表当前已知的信息,是当前状态和动作的Q值:
Q
(
s
t
,
a
t
)
Q(s_t, a_t)
Q(st,at)
- ( Q ( s t , a t ) ) (Q(s_t, a_t)) (Q(st,at)):当前状态 ( s t ) (s_t) (st) 采取动作 ( a t ) (a_t) (at) 的Q值。它表示在状态 ( s t ) (s_t) (st) 选择动作 ( a t ) (a_t) (at) 后预期的累积奖励。
Q估计
Q估计代表期望的未来信息,是根据下一个状态的Q值和获得的奖励来估计的目标值:
r
t
+
1
+
γ
max
a
Q
(
s
t
+
1
,
a
)
r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a)
rt+1+γamaxQ(st+1,a)
- ( r t + 1 ) (r_{t+1}) (rt+1):在状态 ( s t ) (s_t) (st) 采取动作 ( a t ) (a_t) (at) 后获得的即时奖励。
- ( γ ) (\gamma) (γ):折扣因子,衡量未来奖励的重要性。
- max a Q ( s t + 1 , a ) \max_{a} Q(s_{t+1}, a) maxaQ(st+1,a) :在下一个状态 ( s t + 1 ) (s_{t+1}) (st+1) 选择最优动作的Q值。这部分表示从下一个状态开始,选择最优动作能获得的最大预期奖励。
更新过程解释
Q-Learning的更新过程可以理解为调整当前Q值 Q ( s t , a t ) Q(s_t, a_t) Q(st,at) 向目标Q值 ( r t + 1 + γ max a Q ( s t + 1 , a ) (r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a) (rt+1+γmaxaQ(st+1,a) 方向靠近。通过不断地调整Q值,最终使得Q值函数能够准确估计各个状态-动作对的预期累积奖励。
-
学习率 ( α ) (\alpha) (α):
学习率决定了每次更新中有多少信息被用于更新Q值。较大的学习率意味着Q值更新更快,较小的学习率则意味着更新更慢,更平稳。 -
目标Q值(Q估计)和当前Q值(Q现实)之间的差异:
目标Q值代表期望的累积奖励,当前Q值代表现有估计的累积奖励。两者之间的差异就是更新的依据,通过不断减少这个差异,Q值函数逐步收敛到真实的最优值。
举例:3x3格子中的寻宝
为了更好地理解Q-Learning,我们可以用一个简单的3x3格子寻找宝藏的例子来说明Q现实和Q估计的概念。
环境描述
- 这是一个3x3的网格环境。
- 起始位置为左上角 (0,0)。
- 宝藏的位置在右下角 (2,2)。
- 每一步都有四个可能的动作:上、下、左、右。
- 目标是找到宝藏,找到宝藏时获得奖励 +10,其他步骤奖励为 -1。
Q-Learning的更新公式
Q ( s t , a t ) ← Q ( s t , a t ) + α ( r t + 1 + γ max a Q ( s t + 1 , a ) − Q ( s t , a t ) ) Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left( r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a) - Q(s_t, a_t) \right) Q(st,at)←Q(st,at)+α(rt+1+γamaxQ(st+1,a)−Q(st,at))
示例
假设在一个状态 (s_t = (0,0)),采取动作 a t = 右 a_t = \text{右} at=右到达状态 s t + 1 = ( 0 , 1 ) s_{t+1} = (0,1) st+1=(0,1)然后我们通过Q-Learning公式来更新Q值。
初始Q值
假设初始时所有的Q值都为0:
Q
(
(
0
,
0
)
,
右
)
=
0
Q((0,0), \text{右}) = 0
Q((0,0),右)=0
执行动作
从状态 (0,0) 向右移动到 (0,1),立即奖励 r t + 1 = − 1 r_{t+1} = -1 rt+1=−1
计算目标Q值(Q估计)
假设在状态 (0,1) 时的Q值如下:
Q
(
(
0
,
1
)
,
上
)
=
0
Q
(
(
0
,
1
)
,
下
)
=
0
Q
(
(
0
,
1
)
,
左
)
=
0
Q
(
(
0
,
1
)
,
右
)
=
0
\begin{aligned} & Q((0,1), \text{上}) = 0 \\ & Q((0,1), \text{下}) = 0 \\ & Q((0,1), \text{左}) = 0 \\ & Q((0,1), \text{右}) = 0 \\ \end{aligned}
Q((0,1),上)=0Q((0,1),下)=0Q((0,1),左)=0Q((0,1),右)=0
那么在状态 (0,1) 选择最优动作(即最大的Q值)为:
max
a
Q
(
(
0
,
1
)
,
a
)
=
0
\max_{a} Q((0,1), a) = 0
amaxQ((0,1),a)=0
目标Q值(Q估计):
r
t
+
1
+
γ
max
a
Q
(
(
0
,
1
)
,
a
)
=
−
1
+
0.9
×
0
=
−
1
r_{t+1} + \gamma \max_{a} Q((0,1), a) = -1 + 0.9 \times 0 = -1
rt+1+γamaxQ((0,1),a)=−1+0.9×0=−1
更新Q值(Q现实)
设定学习率 (\alpha = 0.1),我们更新Q值:
Q ( ( 0 , 0 ) , 右 ) ← 0 + 0.1 × ( − 1 − 0 ) = − 0.1 Q((0,0), \text{右}) \leftarrow 0 + 0.1 \times (-1 - 0) = -0.1 Q((0,0),右)←0+0.1×(−1−0)=−0.1
核心概念
- Q现实:当前Q值 ( Q ( s t , a t ) ) (Q(s_t, a_t)) (Q(st,at)),即执行某动作前已有的估计值。
- Q估计:目标Q值 ( r t + 1 + γ max a Q ( s t + 1 , a ) ) (r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a)) (rt+1+γmaxaQ(st+1,a)),即根据未来信息调整后的预期值。
通过不断更新Q值,我们最终能够找到从起始位置到达宝藏的最优路径。在这个过程中,我们通过将当前Q值(Q现实)逐步向目标Q值(Q估计)靠近来改进我们的估计,从而找到最优策略。
可视化代码举例
通过将上述例子转化为具体代码,可以实现可视化的Q值表格,最终迭代结果如下:
可以看到通过迭代最终给出了一条价值最高的路径。
需要代码可以私信我。