前言
本文内容主要参考《赵世钰. 强化学习的数学原理》 整理编写,属于个人学习笔记,详细内容请参见教材,致谢 赵世钰 老师。
1. 时序差分算法推导 – 应用随机近似
1.1 状态值更新
在 强化学习 RL 基础 1:马尔科夫决策过程 MDP 与 贝尔曼方程 中,我们知道状态价值通过贝尔曼方程可描述为:
v
π
(
s
k
)
=
E
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
(1.1)
v_\pi(s_k) = \mathbb{E}(r_{k+1} + \gamma v_\pi(s_{k+1})) \tag{1.1}
vπ(sk)=E(rk+1+γvπ(sk+1))(1.1)
在 强化学习 RL 基础 2:从贝尔曼方程到策略求解 中,描述了通过系统模型,或无模型通过数据(蒙特卡洛方法),来计算贝尔曼方程;
然而在无模型时,蒙特卡洛方法需要完整的回合 (esipode) 数据来进行估计,更高效的方法是通过随机近似来完成这一过程:
针对式
(
1.1
)
(1.1)
(1.1),可定义函数:
g
(
v
k
)
=
v
k
−
(
E
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
)
g(v_k) = v_k - \big(\mathbb{E}(r_{k+1} + \gamma v_\pi(s_{k+1}))\big)
g(vk)=vk−(E(rk+1+γvπ(sk+1)))
在存在噪声
η
\eta
η 单次观测下,有:
g
˜
(
v
k
)
=
v
k
−
(
E
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
+
η
k
)
=
v
k
−
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
\begin{align*} \~g(v_k) &= v_k - \big( \mathbb{E}(r_{k+1} + \gamma v_\pi(s_{k+1})) + \eta_k \big) \\ &= v_k - \big( r_{k+1} + \gamma v_\pi(s_{k+1}) \big) \end{align*}
g˜(vk)=vk−(E(rk+1+γvπ(sk+1))+ηk)=vk−(rk+1+γvπ(sk+1))
根据 RM 算法,有:
v
k
+
1
=
v
k
−
α
k
g
˜
(
v
k
)
=
v
k
−
α
k
(
v
k
−
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
(1.2)
\begin{align*} v_{k+1} &= v_k - \alpha_k \~g(v_k) \\ &= v_k - \alpha_k \big( v_k - \big( r_{k+1} + \gamma v_\pi(s_{k+1}) \big) \end{align*} \tag{1.2}
vk+1=vk−αkg˜(vk)=vk−αk(vk−(rk+1+γvπ(sk+1))(1.2)
迭代可得
g
(
w
k
)
=
0
g(w_k) = 0
g(wk)=0,即实现:
v
k
=
E
(
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
)
=
v
π
(
s
k
)
v_k = \mathbb{E}(r_{k+1} + \gamma v_\pi(s_{k+1})) = v_\pi(s_k)
vk=E(rk+1+γvπ(sk+1))=vπ(sk)
使用
v
k
(
s
k
+
1
)
v_k(s_{k+1})
vk(sk+1) 替换式
(
1.2
)
(1.2)
(1.2) 中的
v
π
(
s
k
+
1
)
v_\pi(s_{k+1})
vπ(sk+1)
即得到时序差分 (TD) 算法 (严格的数学推动参见教材):
v
k
+
1
(
s
k
)
=
v
k
(
s
k
)
−
α
k
[
v
k
(
s
k
)
−
(
r
k
+
1
+
γ
v
k
(
s
k
+
1
)
)
]
(1.3)
v_{k+1}(s_k) = v_k(s_k) - \alpha_k \big[ v_k(s_k) - ( r_{k+1} + \gamma v_k(s_{k+1})) \big] \tag{1.3}
vk+1(sk)=vk(sk)−αk[vk(sk)−(rk+1+γvk(sk+1))](1.3)
其中,
v
t
a
r
g
(
s
k
)
=
r
k
+
1
+
γ
v
k
(
s
k
+
1
)
v_{\mathrm{targ}}(s_k) = r_{k+1} + \gamma v_k(s_{k+1})
vtarg(sk)=rk+1+γvk(sk+1) 一般称为 TD 目标,在先进的算法中也常使用;
v
k
(
s
k
)
−
(
r
k
+
1
+
γ
v
k
(
s
k
+
1
)
)
v_k(s_k) - ( r_{k+1} + \gamma v_k(s_{k+1}))
vk(sk)−(rk+1+γvk(sk+1)) 称为 TD 误差
时序差分算法实现了 只使用即时奖励 r k + 1 r_{k+1} rk+1 来对贝尔曼方程进行快速更新
1.2 动作值更新
类似的,针对动作值:
q
π
(
s
k
,
a
k
)
=
E
s
∼
S
[
r
k
+
1
+
γ
v
π
(
s
k
+
1
)
∣
a
k
]
=
E
(
r
k
+
1
∣
s
k
,
a
k
)
+
γ
E
s
∼
S
(
v
π
(
s
k
+
1
)
)
=
E
(
r
k
+
1
∣
s
k
,
a
k
)
+
γ
E
s
k
+
1
∼
S
(
∑
π
(
a
k
+
1
∣
s
k
+
1
)
q
π
(
s
k
+
1
,
a
k
+
1
)
)
=
E
(
r
k
+
1
∣
s
k
,
a
k
)
+
γ
E
s
k
+
1
∼
S
,
a
k
+
1
∼
π
q
π
(
s
k
+
1
,
a
k
+
1
)
)
(1.4)
\begin{align*} q_\pi(s_k, a_k) &= \mathbb{E}_{s \sim S} \big[ r_{k+1} + \gamma v_\pi(s_{k+1}) | a_k \big] \\ &= \mathbb{E}(r_{k+1}|s_k,a_k) + \gamma \mathbb{E}_{s \sim S}(v_\pi(s_{k+1})) \\ &= \mathbb{E}(r_{k+1}|s_k,a_k) + \gamma \mathbb{E}_{s_{k+1} \sim S} \big(\sum{}\pi(a_{k+1}|s_{k+1}) q_\pi(s_{k+1}, a_{k+1})\big) \\ &= \mathbb{E}(r_{k+1}|s_k,a_k) + \gamma \mathbb{E}_{s_{k+1} \sim S, a_{k+1} \sim \pi}q_\pi(s_{k+1}, a_{k+1})\big) \end{align*} \tag{1.4}
qπ(sk,ak)=Es∼S[rk+1+γvπ(sk+1)∣ak]=E(rk+1∣sk,ak)+γEs∼S(vπ(sk+1))=E(rk+1∣sk,ak)+γEsk+1∼S(∑π(ak+1∣sk+1)qπ(sk+1,ak+1))=E(rk+1∣sk,ak)+γEsk+1∼S,ak+1∼πqπ(sk+1,ak+1))(1.4)
有 TD 算法可估计状态值:
q
k
+
1
=
q
k
−
α
k
(
q
k
−
(
r
k
+
1
+
γ
q
k
(
s
k
+
1
,
a
k
+
1
)
)
(1.5)
q_{k+1} = q_k - \alpha_k \big( q_k - \big( r_{k+1} + \gamma q_k(s_{k+1}, a_{k+1}) \big) \tag{1.5}
qk+1=qk−αk(qk−(rk+1+γqk(sk+1,ak+1))(1.5)
2. 使用 TD 算法求解贝尔曼方程 | sarsa 算法最终的
与 强化学习 RL 基础 2:从贝尔曼方程到策略求解 中的截断策略迭代类似,sarsa 算法使用 TD 算法同时更新贝尔曼方程和策略
单步 sarsa 算法
初始化
q
0
(
s
,
a
)
q_0(s,a)
q0(s,a),并导出探索贪婪 (
ϵ
\epsilon
ϵ-Greedy) 策略
π
0
\pi_0
π0,选取常数
α
k
=
c
\alpha_k = c
αk=c、
γ
\gamma
γ
for t = 0:T do:
---- 设置初始状态
s
0
s_0
s0,根据
π
0
\pi_0
π0 生成
a
0
a_0
a0
---- for k = 0:K do:
---- ---- 根据
s
k
,
a
k
,
π
k
s_k,a_{k},\pi_k
sk,ak,πk 生成
s
k
+
1
,
a
k
+
1
s_{k+1}, a_{k+1}
sk+1,ak+1,并记录样本数据
{
s
k
,
a
k
,
r
k
+
1
,
s
k
+
1
,
a
k
+
1
}
\{s_k, a_k, r_{k+1}, s_{k+1}, a_{k+1}\}
{sk,ak,rk+1,sk+1,ak+1}
---- ---- 更新价值:
q
K
t
+
k
+
1
(
s
k
,
a
k
)
=
q
K
t
+
k
(
s
k
,
a
k
)
−
c
(
q
k
(
s
k
,
a
k
)
−
(
r
k
+
1
+
γ
q
k
(
s
k
+
1
,
a
k
+
1
)
)
q_{Kt+k+1}(s_k, a_k) = q_{Kt+k}(s_k, a_k) - c \big( q_k(s_k, a_k) - \big( r_{k+1} + \gamma q_k(s_{k+1}, a_{k+1}) \big)
qKt+k+1(sk,ak)=qKt+k(sk,ak)−c(qk(sk,ak)−(rk+1+γqk(sk+1,ak+1))
---- ---- 更新策略(
ϵ
\epsilon
ϵ-Greedy):
---- ---- for
a
a
a in
A
\mathcal{A}
A do:
---- ---- ---- if
a
=
=
arg
max
a
q
K
t
+
k
+
1
(
s
k
,
a
)
a == \arg \max_a q_{Kt+k+1}(s_k, a)
a==argmaxaqKt+k+1(sk,a) do:
---- ---- ---- ----
π
K
t
+
k
+
1
(
a
∣
s
k
)
=
1
−
ϵ
(
∣
A
∣
−
1
)
/
∣
A
∣
\pi_ {Kt+k+1}(a|s_k)=1-\epsilon(|\mathcal{A}|-1) / |\mathcal{A}|
πKt+k+1(a∣sk)=1−ϵ(∣A∣−1)/∣A∣
---- ---- ---- else do:
---- ---- ---- ----
π
K
t
+
k
+
1
(
a
∣
s
k
)
=
ϵ
/
∣
A
∣
\pi_ {Kt+k+1}(a|s_k)=\epsilon / |\mathcal{A}|
πKt+k+1(a∣sk)=ϵ/∣A∣
在更新价值时,也可采用
n
n
n 的形式估计:
q
k
+
1
(
s
k
,
a
k
)
=
q
k
(
s
k
,
a
k
)
−
c
(
q
k
(
s
k
,
a
k
)
−
(
r
k
+
1
+
γ
r
k
+
2
+
⋯
+
γ
n
−
1
q
k
(
s
k
+
n
,
a
k
+
n
)
)
q_{k+1}(s_k, a_k) = q_{k}(s_k, a_k) - c \big( q_k(s_k, a_k) - \big( r_{k+1} +\gamma r_{k+2} + \cdots + \gamma^{n-1} q_k(s_{k+n}, a_{k+n}) \big)
qk+1(sk,ak)=qk(sk,ak)−c(qk(sk,ak)−(rk+1+γrk+2+⋯+γn−1qk(sk+n,ak+n))
以上称为
n
n
n 步 sarsa 算法
当
n
→
∞
n \to \infty
n→∞ 时,其等价于 强化学习 RL 基础 2:从贝尔曼方程到策略求解 中的蒙特卡洛估计。
3. Q-learning 算法
将单步sarsa 算法中的价值更新改为:
q
k
+
1
(
s
k
,
a
k
)
=
q
k
(
s
k
,
a
k
)
−
c
(
q
k
(
s
k
,
a
k
)
−
(
r
k
+
1
+
γ
max
a
q
k
(
s
k
+
1
,
a
)
)
q_{k+1}(s_k, a_k) = q_{k}(s_k, a_k) - c \big( q_k(s_k, a_k) - \big( r_{k+1} + \gamma \max_a q_k(s_{k+1}, a) \big)
qk+1(sk,ak)=qk(sk,ak)−c(qk(sk,ak)−(rk+1+γamaxqk(sk+1,a))
即为著名的 Q-learning 算法,其本质上是在求解贝尔曼最优方程,
最优策略即最终通过贝尔曼最优方程导出的贪婪策略。

2300

被折叠的 条评论
为什么被折叠?



