五、不基于模型的控制
学习方式:
On-policy learning: 个体已有一个策略指导agent的行为,然后根据得到的一系列奖励或者(状态/行为)价值优化这个策略,更新价值函数,最终得到一个相比原来更优的策略。由于要优化的策略就是当前遵循的策略,所以叫“现时策略学习”。
Off-policy learning:虽然个体已经有一个策略指导行为,但是个体是通过观察其他的策略进行学习(从别人的经验中学习),然后优化自己的策略。这类学习方式是根据已有的策略学习,所以叫“离线策略学习”
On-policy learning:
在DP中,需要提前某一状态的后续状态价值及状态转移概率。
在不基于模型的控制中,我们无法得知所有的后续状态
以及状态间的转移概率,所以不能直接使用状态价值函数改善策略。因此采用行为价值代替状态价值:
π
′
(
s
)
=
argmax
a
∈
A
Q
(
s
,
a
)
\pi^{\prime}(s)=\underset{a \in \mathcal{A}}{\operatorname{argmax}} Q(s, a)
π′(s)=a∈AargmaxQ(s,a)
只需要知道初始Q和策略
π
\pi
π,然后根据贪心采取当前状态下行为价值最大的动作。
但是如果每次都采取行为价值最大的动作,容易进入局部最优,所以为了能够探索所有的情况(exploration):
ϵ \epsilon ϵ-贪婪:是一种不完全贪婪的搜索策略,为了能够有机会探索其他的情况
总共有m个行为(包括取得最大值的行为)
以 ϵ \epsilon ϵ随机采取一个任意行为(包括取得最大值的行为)
采取当前最大值的行为的概率就为 1 − ( m − 1 ) ϵ / m 1-(m-1){\epsilon}/{m} 1−(m−1)ϵ/m,在计算时直接用 1 − ϵ 1-\epsilon 1−ϵ的概率采取最大价值行为
π ( a ∣ s ) = { 1 − ( m − 1 ) ϵ m = ϵ / m + 1 − ϵ if a ∗ = argmax a ∈ A Q ( s , a ) ϵ / m otherwise \pi(a \mid s)=\left\{\begin{array}{ll} 1-(m-1)\frac{\epsilon}{m} =\epsilon / m+1-\epsilon & \text { if } a^{*}=\underset{a \in A}{\operatorname{argmax}} Q(s, a) \\ \epsilon / m & \text { otherwise } \end{array}\right. π(a∣s)={1−(m−1)mϵ=ϵ/m+1−ϵϵ/m if a∗=a∈AargmaxQ(s,a) otherwise
Monte-Carlo Control(现时策略蒙特卡洛控制):
使用MC进行策略评估, ϵ \epsilon ϵ-贪心提升策略。通常在一个完整的采样序列后就进行迭代更新,而不用等到采样多个episodes后才更新。
通过这种方法,只能得到近似的行为价值函数。因为一直在探索可能的采样序列,更新行为价值,没有停止条件。所以引入了GLIE(在有限的时间内进行无限的探索):
一是所有的状态行为对会被无限次探索:
lim
k
→
∞
N
k
(
s
,
a
)
=
∞
\lim _{k \rightarrow \infty} N_{k}(s, a)=\infty
k→∞limNk(s,a)=∞
二是另外随着采样趋向无穷多,策略收敛至一个贪婪策略(一定会找到最优策略):
lim
k
→
∞
π
k
(
a
∣
s
)
=
1
(
a
=
argmax
a
′
∈
A
Q
k
(
s
,
a
′
)
)
\lim _{k \rightarrow \infty} \pi_{k}(a \mid s)=1\left(a=\underset{a^{\prime} \in A}{\operatorname{argmax}} Q_{k}\left(s, a^{\prime}\right)\right)
k→∞limπk(a∣s)=1(a=a′∈AargmaxQk(s,a′))
所有已经经历的状态行为对(state-action pair)会被无限次探索;另外随着探索的无限延伸,如果贪婪算法中
ϵ
=
1
/
k
\epsilon = 1/k
ϵ=1/k值,那么随着(s,a)不断增加
ϵ
\epsilon
ϵ趋向于0。这样可以解决没有终止条件的问题,也可以找到更好的行为和价值。
对于片段中每个状态行为对(s,a):
N
(
S
t
,
A
t
)
←
N
(
S
t
,
A
t
)
+
1
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
1
N
(
S
t
,
A
t
)
(
G
t
−
Q
(
S
t
,
A
t
)
)
\begin{array}{c} N\left(S_{t}, A_{t}\right) \leftarrow N\left(S_{t}, A_{t}\right)+1 \\ Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\frac{1}{N\left(S_{t}, A_{t}\right)}\left(G_{t}-Q\left(S_{t}, A_{t}\right)\right) \end{array}
N(St,At)←N(St,At)+1Q(St,At)←Q(St,At)+N(St,At)1(Gt−Q(St,At))
TD Control (现时策略时序差分控制):
Sarsa:
Q
(
S
,
A
)
←
Q
(
S
,
A
)
+
α
(
R
+
γ
Q
(
S
′
,
A
′
)
−
Q
(
S
,
A
)
)
Q(S, A) \leftarrow Q(S, A)+\alpha\left(R+\gamma Q\left(S^{\prime}, A^{\prime}\right)-Q(S, A)\right)
Q(S,A)←Q(S,A)+α(R+γQ(S′,A′)−Q(S,A))
α
\alpha
α表示步长,学习速率
Sarsa是在单个片段的每一个时间步进行更新,即在
ϵ
\epsilon
ϵ-贪婪策略指导下,当在S状态下,执行A到达S‘后,就要更新(S,A)的行为价值。同样得到的是近似价值函数
。
在 Sarsa 算法中,Q(S,A) 的值使用一张大表来存储的,这不是很适合解决规模很大的问题;
Sarsa( λ \lambda λ):
定义Q收获:
q
t
(
n
)
=
R
t
+
1
+
γ
R
t
+
2
+
⋮
+
γ
n
−
1
R
t
+
n
+
γ
n
Q
(
S
t
+
n
,
A
t
+
n
)
q_{t}^{(n)}=R_{t+1}+\gamma R_{t+2}+\vdots+\gamma^{n-1} R_{t+n}+\gamma^{n} Q\left(S_{t+n}, A_{t+n}\right)
qt(n)=Rt+1+γRt+2+⋮+γn−1Rt+n+γnQ(St+n,At+n)
q
λ
q^\lambda
qλ收获:
q
t
λ
=
(
1
−
λ
)
∑
n
=
1
∞
λ
n
−
1
q
t
(
n
)
q_{t}^{\lambda}=(1-\lambda) \sum_{n=1}^{\infty} \lambda^{n-1} q_{t}^{(n)}
qtλ=(1−λ)n=1∑∞λn−1qt(n)
Sarsa(
λ
\lambda
λ)的行为价值函数:
前向认识:
与TD(
λ
\lambda
λ)类似,需要知道一个片段的完整序列,需要知道后续每一步的收获的真值,才能更新价值。
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
(
q
t
(
λ
)
−
Q
(
S
t
,
A
t
)
)
Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left(q_{t}^{(\lambda)}-Q\left(S_{t}, A_{t}\right)\right)
Q(St,At)←Q(St,At)+α(qt(λ)−Q(St,At))
后向认识:
效用迹(eligibility trace):
Sarsa(
λ
\lambda
λ)的每一个状态对(s,a)对应一个随时间改变的效用迹
E
0
(
s
,
a
)
=
0
E
t
(
s
,
a
)
=
γ
λ
E
t
−
1
(
s
,
a
)
+
1
(
S
t
=
s
,
A
t
=
a
)
,
γ
,
λ
∈
[
0
,
1
]
\begin{array}{c} E_{0}(s, a)=0 \\ E_{t}(s, a)=\gamma \lambda E_{t-1}(s, a)+1\left(S_{t}=s, A_{t}=a\right), \gamma, \lambda \in[0,1] \end{array}
E0(s,a)=0Et(s,a)=γλEt−1(s,a)+1(St=s,At=a),γ,λ∈[0,1]
效用迹仅记录一个片段内每个状态行为对(s,a)出现的情况,E(s, a) 在每遍历完一个状态序列后需要重新置 0
行为价值函数:
δ
t
=
R
t
+
1
+
γ
Q
(
S
t
+
1
,
A
t
+
1
)
−
Q
(
S
t
,
A
t
)
)
Q
(
s
,
a
)
←
Q
(
s
,
a
)
+
α
δ
t
E
t
(
s
,
a
)
\begin{array}{c} \left.\delta_{t}=R_{t+1}+\gamma Q\left(S_{t+1}, A_{t+1}\right)-Q\left(S_{t}, A_{t}\right)\right) \\ Q(s, a) \leftarrow Q(s, a)+\alpha \delta_{t} E_{t}(s, a) \end{array}
δt=Rt+1+γQ(St+1,At+1)−Q(St,At))Q(s,a)←Q(s,a)+αδtEt(s,a)
基于后向认识的Sarsa(
λ
\lambda
λ)通过预估计算后续状态的行为价值,所以可以不用记录之前的结果,更新也更灵活。
个体每得到一个即时奖励,同时会对所有历史事件的价值进行依次更新
Off-Policy Learning:
通过行为策略 μ ( a ∣ s ) \mu(a|s) μ(a∣s)与环境交互,目标策略 π ( a ∣ s ) \pi(a|s) π(a∣s)优化策略从而找到最优策略和最优价值函数
现实策略和离线策略学习:
现时策略学习的特点就是产生实际行为的策略与更新价值优化的策略是同一个策略;
而离线策略学习是不同策略个体通过策略 μ(a|s) 生成行为与环境发生实际交互,但是在更新这个状态行为对的价值时更新的是目标策略 π(a|s)。
在离线学习中主要使用的是TD:
V
(
S
t
)
←
V
(
S
t
)
+
α
(
π
(
A
t
∣
S
t
)
μ
(
A
t
∣
S
t
)
(
R
t
+
1
+
γ
V
(
S
t
+
1
)
)
−
V
(
S
t
)
)
V\left(S_{t}\right) \leftarrow V\left(S_{t}\right)+\alpha\left(\frac{\pi\left(A_{t} \mid S_{t}\right)}{\mu\left(A_{t} \mid S_{t}\right)}\left(R_{t+1}+\gamma V\left(S_{t+1}\right)\right)-V\left(S_{t}\right)\right)
V(St)←V(St)+α(μ(At∣St)π(At∣St)(Rt+1+γV(St+1))−V(St))
通过
μ
(
a
∣
s
)
\mu(a|s)
μ(a∣s)学习的行为收获更新到策略
π
(
a
∣
s
)
\pi(a|s)
π(a∣s)上
Q-learning:
离线策略 TD 学习中一个典型的行为策略 μ 是基于行为价值函数 Q(s, a)的ε-贪婪策略
,目标策略 π 则是基于 Q(s, a) 的完全贪婪策略
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
(
R
t
+
1
+
γ
Q
(
S
t
+
1
,
A
′
)
−
Q
(
S
t
,
A
t
)
)
Q
(
S
t
,
A
t
)
←
Q
(
S
t
,
A
t
)
+
α
(
R
+
γ
max
a
′
Q
(
S
t
+
1
,
a
′
)
−
Q
(
S
t
,
A
t
)
)
Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left(R_{t+1}+\gamma Q\left(S_{t+1}, A^{\prime}\right)-Q\left(S_{t}, A_{t}\right)\right)\\ Q\left(S_{t}, A_{t}\right) \leftarrow Q\left(S_{t}, A_{t}\right)+\alpha\left(R+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)-Q\left(S_{t}, A_{t}\right)\right)
Q(St,At)←Q(St,At)+α(Rt+1+γQ(St+1,A′)−Q(St,At))Q(St,At)←Q(St,At)+α(R+γa′maxQ(St+1,a′)−Q(St,At))
在S状态下通过
μ
\mu
μ策略,通过
ϵ
\epsilon
ϵ-贪心采取行为A到下一个状态S’,但在后续状态S’采用完全贪心采取动作A‘来估计获得的收获。实际行动走哪一步还是用的
ϵ
\epsilon
ϵ-贪心,这样能保证完全探索整个空间,采用完全贪心预估能够获得的最大收获,更新最大价值。
TD是采样+有数据引导(bootstrap),DP是全宽度+实际数据。
如果从Bellman期望方程角度看:聚焦于状态本身价值的是迭代法策略评估(DP)和TD学习,聚焦于状态行为对价值函数的则是Q-策略迭代(DP)和SARSA;如果从针对状态行为价值函数的Bellman优化方程角度看,则是Q-价值迭代(DP)和Q学习