参考资料:
本系列文章大部分内容来自西湖大学赵世钰老师的强化学习的数学原理课程(参考资料1),并参考了部分参考资料2、3的内容进行补充。
系列博文索引:(更新中)
*注:【】内文字为个人想法,不一定准确
*图源:https://zhuanlan.zhihu.com/p/36494307
RL算法中存在两种策略:
据此,可以将RL算法分为两类:
*On-policy可以看作是Off-policy的一种特殊情况,因为Off-policy允许两种策略相同。
基于模型:环境MDP的模型已知,基于动态规划(DP)求解
基于模型的方法:
*值迭代可以看作是策略迭代的一种特殊情况
算法步骤:在第 k k k次迭代中
*详细步骤见强化学习的数学原理学习笔记 - 基础知识中求解贝尔曼最优方程部分。
算法公式:
v
k
+
1
(
s
)
=
max
?
a
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
k
(
s
′
)
]
v_{k+1} (s) = \max_a \sum_{s', r} p(s', r|s, a) [r + \gamma v_k(s')]
vk+1?(s)=amax?s′,r∑?p(s′,r∣s,a)[r+γvk?(s′)]
伪代码:
v[0] = init_state_value()
while ||v_[k] - v_[k-1]|| >= threshold:
for s in StateSpace:
for a in ActionSpace:
q[a] = calculate_q_value(s, a, v_[k])
a_star = get_optimal_action(q)
# policy update
pi[k+1] = update_policy(a_star)
# value update
v[k+1] = update_value(pi[k+1], v_[k])
k = k + 1
值迭代可以看作将贝尔曼优化方程转为一个更新规则:先计算最优值函数,再从中提取对应的策略作为最优策略
反复执行策略评估(Policy Evaluation,PE)和策略提升(Policy Improvement,PI),直至收敛至最优策略。【*能够收敛的要求:有限MDP仅有有限个策略】
算法步骤:在第 k k k次迭代中,给定策略 π k \pi_k πk?(随机初始策略: π 0 \pi_0 π0?)
伪代码:
pi[0] = init_policy()
while not pi[k].is_converged:
# policy evaluation
while ||v_[j] - v_[j-1]|| >= threshold:
for s in StateSpace:
v_[j+1][s] = calculate_state_value(pi[k], v_[j][s])
j = j + 1
# policy improvement
for s in StateSpace:
for a in ActionSpace:
q[a] = calculate_q_value(s, a, v[j])
a_star = get_optimal_action(q)
pi[k+1] = update_policy(a_star)
k = k + 1
*策略迭代中,距离最终目标状态(考虑一个episode的最终状态)越近的状态的策略会越早收敛,离目标状态越远的状态的策略会越晚收敛
截断策略迭代是值迭代与策略迭代的一般化推广;反过来讲,值迭代与策略迭代都是截断策略迭代的特殊情况。
值迭代 vs. 策略迭代:
可以发现,值迭代与策略迭代的根本差异,在于基于贝尔曼最优公式求解状态值的过程
而截断策略迭代就是更一般化的情况:迭代
j
j
j次计算状态值,其中
1
≤
j
<
∞
1\leq j < \infin
1≤j<∞
注:实际上,策略评估与策略提升是一种非常通用的强化学习思想(称为通用策略迭代,GPI),并在许多后续的强化学习方法(如蒙特卡洛方法、时序差分学习等)中有着广泛应用。