作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!
Bellman Equation
贝尔曼方程定义了状态之间的迭代关系,是强化学习里面它特别重要的一个知识点。
V(s)
价值函数其实从一个更长远的角度定义的一个状态的好坏,价值函数不仅仅考虑了短期的即时奖励,更重要的是价值函数考虑了到达这个状态会带来的长期的效益,因此相比于reward是一个更长远地衡量状态的方式。
V ( s ) = R ( s ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s ) V ( s ′ ) V(s)=R(s)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s\right) V\left(s^{\prime}\right) V(s)=R(s)+γ∑s′∈SP(s′∣s)V(s′) (第一部分可以看作立即奖励,第二部分可以看作未来的奖励)
[ V ( s 1 ) V ( s 2 ) ⋮ V ( s N ) ] = [ R ( s 1 ) R ( s 2 ) ⋮ R ( s N ) ] + γ [ P ( s 1 ∣ s 1 ) P ( s 2 ∣ s 1 ) … P ( s N ∣ s 1 ) P ( s 1 ∣ s 2 ) P ( s 2 ∣ s 2 ) … P ( s N ∣ s 2 ) ⋮ ⋮ ⋱ ⋮ P ( s 1 ∣ s N ) P ( s 2 ∣ s N ) … P ( s N ∣ s N ) ] [ V ( s 1 ) V ( s 2 ) ⋮ V ( s N ) ] \left[\begin{array}{c}V\left(s_{1}\right) \\ V\left(s_{2}\right) \\ \vdots \\ V\left(s_{N}\right)\end{array}\right]=\left[\begin{array}{c}R\left(s_{1}\right) \\ R\left(s_{2}\right) \\ \vdots \\ R\left(s_{N}\right)\end{array}\right]+\gamma\left[\begin{array}{cccc}P\left(s_{1} \mid s_{1}\right) & P\left(s_{2} \mid s_{1}\right) & \ldots & P\left(s_{N} \mid s_{1}\right) \\ P\left(s_{1} \mid s_{2}\right) & P\left(s_{2} \mid s_{2}\right) & \ldots & P\left(s_{N} \mid s_{2}\right) \\ \vdots & \vdots & \ddots & \vdots \\ P\left(s_{1} \mid s_{N}\right) & P\left(s_{2} \mid s_{N}\right) & \ldots & P\left(s_{N} \mid s_{N}\right)\end{array}\right]\left[\begin{array}{c}V\left(s_{1}\right) \\ V\left(s_{2}\right) \\ \vdots \\ V\left(s_{N}\right)\end{array}\right] ⎣⎢⎢⎢⎡V(s1)V(s2)⋮V(sN)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡R(s1)R(s2)⋮R(sN)⎦⎥⎥⎥⎤+γ⎣⎢⎢⎢⎡P(s1∣s1)P(s1∣s2)⋮P(s1∣sN)P(s2∣s1)P(s2∣s2)⋮P(s2∣sN)……⋱…P(sN∣s1)P(sN∣s2)⋮P(sN∣sN)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡V(s1)V(s2)⋮V(sN)⎦⎥⎥⎥⎤
V = R + γ P V V=R+\gamma P V V=R+γPV
V = ( I − γ P ) − 1 R V=(I-\gamma P)^{-1} R V=(I−γP)−1R
在求解的过程中有两个比较重要的问题:
- 怎么保证矩阵是可逆的?
- 矩阵求逆的复杂度是 O ( N 3 ) O\left(N^{3}\right) O(N3),所以这种求解方式只对小的MRP的问题有效
Q(s,a)
动作价值函数,我们一般也会直接称q函数定义了状态-动作对的好坏,其实我们只要知道了V函数,Q函数包括我们后面讲的A(优势)函数都可以求出来,而如果知道这三个函数中的任何一个,整个MDP其实就是可解的。但是我们没办法一开始就知道,所以我们一般都会通过一个初始化的价值函数或者直接初始化一个策略去采样去然后去估算价值函数,然后再根据新的价值函数再去采样,这样理想情况下我们对价值函数的估计越来越准,决策也越来越好。
The action-value function q π ( s , a ) q^{\pi}(s, a) qπ(s,a) is the expected return starting from state s , s, s, taking action a , a, a, and then following policy π \pi π
q π ( s , a ) = E π [ G t ∣ s t = s , A t = a ] q^{\pi}(s, a)=\mathbb{E}_{\pi}\left[G_{t} \mid s_{t}=s, A_{t}=a\right] qπ(s,a)=Eπ[Gt∣st=s,At=a]
v π ( s ) = ∑ a ∈ A π ( a ∣ s ) q π ( s , a ) v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s) q^{\pi}(s, a) vπ(s)=∑a∈Aπ(a∣s)qπ(s,a)
Bellman Expection Eqution
v π ( s ) = E π [ R t + 1 + γ v π ( s t + 1 ) ∣ s t = s ] v^{\pi}(s)=E_{\pi}\left[R_{t+1}+\gamma v^{\pi}\left(s_{t+1}\right) \mid s_{t}=s\right] vπ(s)=Eπ[Rt+1+γvπ(st+1)∣st=s]
q
π
(
s
,
a
)
=
E
π
[
R
t
+
1
+
γ
q
π
(
s
t
+
1
,
A
t
+
1
)
∣
s
t
=
s
,
A
t
=
a
]
q^{\pi}(s, a)=E_{\pi}\left[R_{t+1}+\gamma q^{\pi}\left(s_{t+1}, A_{t+1}\right) \mid s_{t}=s, A_{t}=a\right]
qπ(s,a)=Eπ[Rt+1+γqπ(st+1,At+1)∣st=s,At=a]
v
π
(
s
)
=
∑
a
∈
A
π
(
a
∣
s
)
q
π
(
s
,
a
)
q
π
(
s
,
a
)
=
R
s
a
+
γ
∑
s
′
∈
S
P
(
s
′
∣
s
,
a
)
v
π
(
s
′
)
\begin{aligned} v^{\pi}(s) &=\sum_{a \in A} \pi(a \mid s) q^{\pi}(s, a) \\ q^{\pi}(s, a) &=R_{s}^{a}+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{\pi}\left(s^{\prime}\right) \end{aligned}
vπ(s)qπ(s,a)=a∈A∑π(a∣s)qπ(s,a)=Rsa+γs′∈S∑P(s′∣s,a)vπ(s′)
Thus,将两个方程互相带入彼此
v
π
(
s
)
=
∑
a
∈
A
π
(
a
∣
s
)
(
R
(
s
,
a
)
+
γ
∑
s
′
∈
S
P
(
s
′
∣
s
,
a
)
v
π
(
s
′
)
)
v^{\pi}(s)=\sum_{a \in A} \pi(a \mid s)\left(R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{\pi}\left(s^{\prime}\right)\right)
vπ(s)=a∈A∑π(a∣s)(R(s,a)+γs′∈S∑P(s′∣s,a)vπ(s′))
q π ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) ∑ a ′ ∈ A π ( a ′ ∣ s ′ ) q π ( s ′ , a ′ ) q^{\pi}(s, a)=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) \sum_{a^{\prime} \in A} \pi\left(a^{\prime} \mid s^{\prime}\right) q^{\pi}\left(s^{\prime}, a^{\prime}\right) qπ(s,a)=R(s,a)+γs′∈S∑P(s′∣s,a)a′∈A∑π(a′∣s′)qπ(s′,a′)
以上等式表征了当前的Q函数和V函数与将来的Q函数和V函数之间的关系
其实就是下面的两个图:
Bellman Optimality Equation
v ∗ ( s ) = max a q ∗ ( s , a ) q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) v ∗ ( s ′ ) \begin{aligned} v^{*}(s) &=\max _{a} q^{*}(s, a) \\ q^{*}(s, a) &=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{*}\left(s^{\prime}\right) \end{aligned} v∗(s)q∗(s,a)=amaxq∗(s,a)=R(s,a)+γs′∈S∑P(s′∣s,a)v∗(s′)
thus
v
∗
(
s
)
=
max
a
R
(
s
,
a
)
+
γ
∑
s
′
∈
S
P
(
s
′
∣
s
,
a
)
v
∗
(
s
′
)
q
∗
(
s
,
a
)
=
R
(
s
,
a
)
+
γ
∑
s
′
∈
S
P
(
s
′
∣
s
,
a
)
max
a
′
q
∗
(
s
′
,
a
′
)
\begin{aligned} v^{*}(s) &=\max _{a} R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) v^{*}\left(s^{\prime}\right) \\ q^{*}(s, a) &=R(s, a)+\gamma \sum_{s^{\prime} \in S} P\left(s^{\prime} \mid s, a\right) \max _{a^{\prime}} q^{*}\left(s^{\prime}, a^{\prime}\right) \end{aligned}
v∗(s)q∗(s,a)=amaxR(s,a)+γs′∈S∑P(s′∣s,a)v∗(s′)=R(s,a)+γs′∈S∑P(s′∣s,a)a′maxq∗(s′,a′)
v
∗
(
s
)
=
max
a
∈
A
(
s
)
q
π
∗
(
s
,
a
)
=
max
a
E
π
∗
[
G
t
∣
S
t
=
s
,
A
t
=
a
]
=
max
a
E
π
∗
[
R
t
+
1
+
γ
G
t
+
1
∣
S
t
=
s
,
A
t
=
a
]
=
max
a
E
[
R
t
+
1
+
γ
v
∗
(
S
t
+
1
)
∣
S
t
=
s
,
A
t
=
a
]
=
max
a
∈
A
(
s
)
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
v
∗
(
s
′
)
]
\begin{aligned} v_{*}(s) &=\max _{a \in \mathcal{A}(s)} q_{\pi_{*}}(s, a) \\ &=\max _{a} \mathbb{E}_{\pi_{*}}\left[G_{t} \mid S_{t}=s, A_{t}=a\right] \\ &=\max _{a} \mathbb{E}_{\pi_{*}}\left[R_{t+1}+\gamma G_{t+1} \mid S_{t}=s, A_{t}=a\right] \\ &=\max _{a} \mathbb{E}\left[R_{t+1}+\gamma v_{*}\left(S_{t+1}\right) \mid S_{t}=s, A_{t}=a\right] \\ &=\max _{a \in \mathcal{A}(s)} \sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma v_{*}\left(s^{\prime}\right)\right] \end{aligned}
v∗(s)=a∈A(s)maxqπ∗(s,a)=amaxEπ∗[Gt∣St=s,At=a]=amaxEπ∗[Rt+1+γGt+1∣St=s,At=a]=amaxE[Rt+1+γv∗(St+1)∣St=s,At=a]=a∈A(s)maxs′,r∑p(s′,r∣s,a)[r+γv∗(s′)]
最后两个方程是
v
∗
v_{*}
v∗ 的贝尔曼最优方程的两种形式,
q
∗
q_{*}
q∗ 的贝尔曼最优方程为
q
∗
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
∑
a
′
q
∗
(
S
t
+
1
,
a
′
)
∣
S
t
=
s
,
A
t
=
a
]
=
∑
s
′
,
r
p
(
s
′
,
r
∣
s
,
a
)
[
r
+
γ
∑
a
′
q
∗
(
s
′
,
a
′
)
]
\begin{aligned} q_{*}(s, a) &=\mathbb{E}\left[R_{t+1}+\gamma \sum_{a^{\prime}} q_{*}\left(S_{t+1, a^{\prime}}\right) \mid S_{t}=s, A_{t}=a\right] \\ &=\sum_{s^{\prime}, r} p\left(s^{\prime}, r \mid s, a\right)\left[r+\gamma \sum_{a^{\prime}} q_{*}\left(s^{\prime}, a^{\prime}\right)\right] \end{aligned}
q∗(s,a)=E[Rt+1+γa′∑q∗(St+1,a′)∣St=s,At=a]=s′,r∑p(s′,r∣s,a)[r+γa′∑q∗(s′,a′)]
贝尔曼最优方程其实阐述了一个事实:最优策略下各个状态的价值一定等于这个状态下最优动作的期望回报。
对于有限的MDP, v ∗ v_{*} v∗ 的贝尔曼最优方程具有唯一解。贝尔曼最优方程实际上是一个方程组,每个状态一个方程,所以如果有 n n n 个状态, 则有 n n n 个未知数的 n n n 个方程。 如果环境的动态 p p p 是已知,则原则上可以使用解决非线性方程组的各种方法中的任何一种来求解该 v ∗ v_{*} v∗ 的方程组。 同 样, 可以求解 q ∗ q_{*} q∗ 的一組相关方程。
一旦有 v ∗ , v_{*}, v∗, 确定最优策略就比较容易了。对于每个状态, 将在贝尔曼最优方程中获得最大价值的一 个或多个动作。 任何仅为这些操作分配非零概率的策略都是最优策略。你可以将其视为一步步的搜索。 如果具有最优价值函数 v ∗ v_{*} v∗, 则在一步搜索之后出现的动作将是最优动作。 另一种说法的方法是任何对最优评估函数 v ∗ v_{*} v∗ 贪婪的策略是最优策略。
计算机科学中使用术语贪楚来描述任何基于本地或直接考虑来选择替代搜索或决策程序的方法,而不考虑这种选择可能阻止未来获得更好的替代方法的可能性。因此,它描述了根据其短期结果选择行动的策略。
v
∗
v_{*}
v∗ 的美妙之处在于,如果用它来评估行动的短期结果,具体来说是一步到位的结果, 那么贪婪的策略在我们感兴趣的长期意义上 实际上是最优的,因为
v
∗
v_{*}
v∗ 已经考虑到所有可能的未来动作的奖励结果。定义
v
∗
v_{*}
v∗的意义就在于,我们可以将最优的长期(全局)回报期望值转化为每个状态对应的一个当前局部量的计算。因此, 一步一步的搜索产生长期的最佳动作。
有
q
∗
q_{*}
q∗ 使选择最优动作更容易。 给定
q
∗
,
q_{*},
q∗, agent基至不需要进行单步搜索的过程, 对于任何状态
s
s
s 它可以简单地发现任何使
q
∗
(
s
,
a
)
q_{*}(s, a)
q∗(s,a) 最大化的动作。
\quad
动作价值函数有效地缓存了所有单步搜索的结果。 它将最优的长期回报的期望作为本地并立即可用于每个状态一动作对的值。因此, 代表状 态-动作对的功能而不仅仅是状态的代价, 最优动作-价值函数允许选择最优动作而不必知道关于可能的后继状态及其值的任何信息,即不需要知道任何环境的动态变化特性了。
总结也就是说有了 v ∗ v_{*} v∗之后,还需要做单步搜索,但是有了 q ∗ q_{*} q∗后,就不需要了。
显示地求解贝尔曼最优方程提供了求解最优策略的一条途径,从而为解决强化学习问题提供了依据。 但是, 这个解决方案很少直接有用。它类似于穷举搜索,展望所有可能性,计算每种可能性出现的概率及其期望收益。这个解决方案依赖于至少三个假设,在实践中很少是这样的:
- 我们准确地知道环境的动态特性;
- 我们有足够的计算资源来完成解决方案的计算;
- 马尔可夫性。
对于我们感兴趣的任务,通常不能完全满足这三个条件。 例如,虽然第一和第三个假设对于西洋双陆棋游戏没有任何问题, 但第二个是主要的障碍。 因为游戏有 1 0 20 10^{20} 1020 个状态, 所以今天最快的电脑需要数千年的时间才能计算出 v ∗ v_{*} v∗ 的贝尔曼方程式, 而找到 q ∗ q_{*} q∗ 也是如此。在强化学习中,我们通常只能用近似解法来解决这类问题。