时序差分方法求解强化学习任务——基于离轨策略的时序差分控制
目录
本节将介绍基于离轨策略的时序差分控制(Q-Learning算法),从算法执行过程角度对蒙特卡洛方法和时序差分方法在离轨策略中两者之间的差异。
回顾与归纳
蒙特卡洛方法的离轨策略
在基于离轨策略的蒙特卡洛控制一节中,我们介绍了离轨策略求解蒙特卡洛控制过程。蒙特卡洛方法中的离轨策略是比较麻烦的。原因在于:
- 行为策略 b ( a ∣ s ) b(a \mid s) b(a∣s)是专门用于生成样本的 任意软性策略,并且 b ( a ∣ s ) b(a \mid s) b(a∣s)和目标策略 π ( a ∣ s ) \pi(a \mid s) π(a∣s)之间没有必然联系;
- 为了在迭代过程中目标策略 π ( a ∣ s ) \pi(a \mid s) π(a∣s)向正确的方向收敛 → \to → 想方设法让 π ( a ∣ s ) \pi(a \mid s) π(a∣s)与 b ( a ∣ s ) b(a \mid s) b(a∣s)建立联系——即重要型采样(Importance Sampling)。
- 但蒙特卡洛方法的离轨策略效率极低:必须保证策略改进后的目标策略 π ( S t ) \pi(S_t) π(St)(贪心算法选择出的动作)必须要和行为策略 b ( a ∣ s ) b(a \mid s) b(a∣s)生成的情节在当前时刻的动作 A t A_t At相同,如果不同,情节遍历停止,情节内剩余的状态、动作信息全部作废——重新选择一条新的情节进行遍历。
综上,蒙特卡洛方法离轨策略的主要特点是:
- 如果在完美情况下,使用离轨策略完完整整地遍历了一条情节——该情节中任意一个时刻的 π ( S t ) = A t \pi(S_t) = A_t π(St)=At;才能将一整条情节中出现的所有状态-动作二元组被更新一次;
- 如果没有完整遍历一条情节:只有部分状态-动作二元组被更新了,情节的剩余部分作废了——我们不否认,只要存在足够多的情节,必然能够将所有有意义的状态-动作二元组更新至最佳效果。但我们同样也要承认:在整个迭代过程中丢失了相当多的情节信息。
时序差分方法的特点
注意:这里只是0-步时序差分更新方法
相比于蒙特卡洛方法,时序差分最核心的特点:每次迭代过程,它的行为策略
b
(
a
∣
s
)
b(a \mid s)
b(a∣s)产生的样本只有一个步骤:样本只有唯一一个动作而不是整个情节。
这种操作的优势:
- 我们能够肉眼可见的观察到策略在更新——更新频率明显加快,并且中间过程的存储空间也被释放掉了(这里说的是更新频率而不是更新幅度);
注意:更新频率和更新速度是不同概念——更新频率快不代表更新速度就快。
- 产生的这唯一的步骤必然能够使目标策略 π ( S t ) \pi(S_t) π(St)更新(因为在行为策略选择一个动作之后, S t + 1 , R t + 1 S_{t+1},R_{t+1} St+1,Rt+1是系统自动产生的,不受智能体控制——必然可以产生 Q ( S t + 1 , A t + 1 ) Q(S_{t+1},A_{t+1}) Q(St+1,At+1)更新 Q ( S t , A t ) Q(S_t,A_t) Q(St,At))——完全不存在浪费样本的情况。
离轨策略的时序差分控制
由于时序差分方法的特点——离轨策略相比于蒙特卡洛方法要简单得多。
不同于SARSA算法——使用相同的行为策略
b
(
a
∣
s
)
b(a \mid s)
b(a∣s)选择两次动作
A
t
,
A
t
+
1
A_t,A_{t+1}
At,At+1分别构建
Q
(
S
t
,
A
t
)
,
Q
(
S
t
+
1
,
A
t
+
1
)
Q(S_t,A_t),Q(S_{t+1},A_{t+1})
Q(St,At),Q(St+1,At+1)来执行策略评估操作;
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
(
R
t
+
1
+
γ
Q
(
S
t
+
1
,
A
t
+
1
)
−
Q
(
S
t
,
A
t
)
)
Q(S_t,A_t) \gets Q(S_t,A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1},A_{t+1}) - Q(S_t,A_t))
Q(St,At)←Q(St,At)+α(Rt+1+γQ(St+1,At+1)−Q(St,At))
Q-Learning在
S
t
+
1
S_{t+1}
St+1状态条件下从
Q
−
T
a
b
l
e
Q-Table
Q−Table中直接选择状态-动作价值函数最大的结果
max
a
Q
(
S
t
+
1
,
a
)
\mathop{\max}\limits_{a}Q(S_{t+1},a)
amaxQ(St+1,a)对
Q
(
S
t
,
A
t
)
Q(S_t,A_t)
Q(St,At)进行策略评估。
a
∗
=
π
(
S
t
+
1
)
=
arg
max
a
Q
(
S
t
+
1
,
a
)
Q
(
S
t
+
1
,
a
∗
)
=
Q
(
S
t
+
1
,
arg
max
a
Q
(
S
t
+
1
,
a
)
)
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
(
R
t
+
1
+
γ
Q
(
S
t
+
1
,
a
∗
)
−
Q
(
S
t
,
A
t
)
)
\begin{aligned} a^* & = \pi(S_{t+1}) = \mathop{\arg\max}\limits_{a} Q(S_{t+1},a) \\ Q(S_{t+1},a^*) & = Q(S_{t+1},\mathop{\arg\max}\limits_{a} Q(S_{t+1},a)) \\ Q(S_t,A_t) & \gets Q(S_t,A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1},a^*) - Q(S_t,A_t)) \end{aligned}
a∗Q(St+1,a∗)Q(St,At)=π(St+1)=aargmaxQ(St+1,a)=Q(St+1,aargmaxQ(St+1,a))←Q(St,At)+α(Rt+1+γQ(St+1,a∗)−Q(St,At))
策略改进部分和同轨策略的时序差分控制完全相同。
计算最优策略的Q-Laerning算法表达如下:
这里注意一个新的点:学习率。学习率是‘增量更新过程中的’步长:通过修改学习率从而影响迭代过程中的‘收敛速度’。
学习率本质上是‘增量更新操作’的均值。只不过这里通过自定义的方式定义权重。
基于离轨策略的时序差分控制算法 | |
---|---|
输入 (Input) | 无论是eposilon因子还是学习率,每一次重新执行情节都可以重新生成相应参数; 折扣系数 γ \gamma γ;学习率 α k ( k = 0 , 1 , 2 , . . . ) ; \alpha_k(k=0,1,2,...); αk(k=0,1,2,...); ϵ \epsilon ϵ因子(影响软性策略权重分布的超参数) ϵ k ( k = 0 , 1 , 2 , . . . ) \epsilon_k(k=0,1,2,...) ϵk(k=0,1,2,...) |
初始化操作 (Initialization operation) | 1. 对
∀
s
∈
S
,
a
∈
A
(
s
)
\forall s \in \mathcal S,a \in \mathcal A(s)
∀s∈S,a∈A(s),初始化
Q
(
s
,
a
)
∈
R
,
Q
(
s
⊤
,
a
)
=
0
Q(s,a) \in\mathbb R,Q(s^\top,a) = 0
Q(s,a)∈R,Q(s⊤,a)=0;本质上(s,a)和(a,s)表示的信息是完全相同的,因此矩阵Q是一个对称矩阵,通常将上三角/下三角阵置0 ; 2. π ( a ∣ s ) ← \pi(a \mid s) \gets π(a∣s)←基于初始化状态-动作价值函数 Q ( s , a ) Q(s,a) Q(s,a)的 ϵ − \epsilon- ϵ−贪心策略。 |
算法过程 (Algorithmic Process) | 1. repeat 对每一个情节:
k
=
0
,
1
,
2
,
.
.
.
k=0,1,2,...
k=0,1,2,...该情节和蒙特卡洛方法中的情节不同,蒙特卡洛方法中的情节指‘已经执行结束的完整情节’,而这里的情节仅是重新随机选择状态s -> 执行马尔可夫决策过程,直到状态达到终结状态结束。 2. 初始化状态 S S S; 3. 根据策略 π ( a ∣ s ) \pi(a \mid s) π(a∣s),在 S S S状态下选择动作 A A A; - 以概率 1 − ϵ k 1 - \epsilon_k 1−ϵk,选择动作 a ∈ arg max a ′ Q ( S , a ′ ) a \in \mathop{\arg\max}\limits_{a'}Q(S,a') a∈a′argmaxQ(S,a′); - 以概率 ϵ k ∣ A ( S ) ∣ \frac{\epsilon_k}{\mid\mathcal A(S)\mid} ∣A(S)∣ϵk,在 A ( s ) \mathcal A(s) A(s)中均匀选择动作; 4. repeat 5. 执行动作 A A A,达到状态 S ′ S' S′,并得到奖励 R R R; 6. 根据 π ( a ∣ s ) \pi(a \mid s) π(a∣s),在状态 S ′ S' S′状态下选择 A ′ A' A′: - 以概率 1 − ϵ k 1 - \epsilon_k 1−ϵk,选择动作 a ∈ arg max a ′ Q ( S ′ , a ′ ) a \in \mathop{\arg\max}\limits_{a'}Q(S',a') a∈a′argmaxQ(S′,a′) - 以概率 ϵ k ∣ A ( S ′ ) ∣ \frac{\epsilon_k}{\mid\mathcal A(S')\mid} ∣A(S′)∣ϵk,在 A ( S ′ ) \mathcal A(S') A(S′)中均匀选择动作; 7. Q ( S t , A t ) ← Q ( S , A ) + α ( R + γ Q ( S ′ , A ′ ) − Q ( S , A ) ) Q(S_t,A_t) \gets Q(S,A) + \alpha (R + \gamma Q(S',A') - Q(S,A)) Q(St,At)←Q(S,A)+α(R+γQ(S′,A′)−Q(S,A)) 8. A ∗ ← arg max a Q ( S , a ) A^* \gets \mathop{\arg\max}\limits_{a}Q(S,a) A∗←aargmaxQ(S,a) 9. for a ∈ A ( s ) a \in \mathcal A(s) a∈A(s) 10. if a = A ∗ a = A^* a=A∗: 11. π ( a ∣ S ) = 1 − ϵ k + ϵ k ∣ A ( S ) ∣ \pi(a \mid S) = 1 - \epsilon_k + \frac{\epsilon_k}{\mid\mathcal A(S)\mid} π(a∣S)=1−ϵk+∣A(S)∣ϵk 12. else: 13. π ( a ∣ S ) = ϵ k ∣ A ( S ) ∣ \pi(a \mid S) = \frac{\epsilon_k}{\mid\mathcal A(S)\mid} π(a∣S)=∣A(S)∣ϵk 14. end for 14. S ← S ′ , A ← A ′ S \gets S',A \gets A' S←S′,A←A′ 14. until S = S T S = S^T S=ST 至此,一次情节遍历结束,重新执行下一次情节。 |
输出结果 | Q ∗ = Q Q_* = Q Q∗=Q, π ∗ = π \pi_* = \pi π∗=π |
后知后觉
在介绍时序差分方法的特点时,并没有说时序差分方法的离轨策略没有使用重要性采样操作。即便从算法的迭代过程中确实没有发现重要性采样的影子。在介绍这一系列的前提就是基于0-步时序差分更新(每次迭代只执行一步 → \to → 每次采样只有唯一一个动作)。但在 n-步时序差分更新中存在重要性采样操作。在后续介绍n-步时序差分方法时再详细介绍。
下一节将介绍期望SARSA算法。
相关参考:
【强化学习】(Q-Learning) 时序差分-离轨策略TD控制
深度强化学习原理、算法pytorch实战 —— 刘全,黄志刚编著