强化学习——动态规划法
文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot
文章目录
前言
关于动态规划法的详细介绍:动态规划法
一、动态规划法简单认识
1.基本概念
我们在这里关注的是作为一种算法设计技术,作为一种使用多阶段决策过程最优的通用方法。
它是应用数学中用于解决某类最优化问题的重要工具。
假设问题是由交叠的子问题所构成,我们就能够用动态规划技术来解决它。一般来说,这种子问题出如今对给定问题求解的递推关系中,这个递推关系包括了同样问题的更小子问题的解。动态规划法建议,与其对交叠子问题一次重新的求解,不如把每一个较小子问题仅仅求解一次并把结果记录在表中(动态规划也是空间换时间的)。这样就能够从表中得到原始问题的解。
2.适用情况
能采用动态规划求解的问题的一般要具有3个性质:
- 最优化原理:假设问题的最优解所包括的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
- 无后效性:即某阶段状态一旦确定。就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响曾经的状态。仅仅与当前状态有关;(该性质与马尔科夫性非常相似,这也是为什么动态规划会用在强化学习中)
- 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到(该性质并非动态规划适用的必要条件,可是假设没有这条性质。动态规划算法同其它算法相比就不具备优势)。
3.求解步骤
实际应用中能够按下面几个简化的步骤进行设计:
- 分析最优解的性质。并刻画其结构特征。
- 递归的定义最优解。
- 以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值。
- 依据计算最优值时得到的信息,构造问题的最优解。
4.典型案例
在这里列举一个三角数塔的问题,从顶点出发,能够向左走或向右走,要求从顶点开始走到最底层,请找出一条路径,使路径之和最大。
正确路径为13-8-26-15-24(和为86)。
我淦,好难写。。。
我觉得大部分人一看到这个问题会想到从起点开始,一步步尝试,计算总和,然后对比不同的路线,但是这么操作非常地麻烦,会遇到重复计算的部分。
用动态规划法来求解:
拆分问题:从顶点开始的最优路径,就是从第二行两个点开始的最优路径取最大,按照这个思路逐次推广到最底层。问题就被逐渐拆分了。
由底向上:最底层的问题无法继续拆分,从最底层开始,比如比较底层12和7的大小,就能知道倒数第二行6的位置对应的后续最优路径(
6
→
12
6\to12
6→12)。
算法流程:
1.初始化层数N,
Q
N
=
0
Q_N=0
QN=0
2. 比较第n层相邻两个数大小,将最大值与(n-1)层对应的数相加并记录为
Q
n
−
1
Q_{n-1}
Qn−1
迭代公式:
Q
n
−
1
i
=
M
a
x
(
n
i
+
Q
n
i
,
n
i
+
1
+
Q
n
i
+
1
)
Q_{n-1}^i=Max(n_i+Q_n^i,n_{i+1}+Q_n^{i+1})
Qn−1i=Max(ni+Qni,ni+1+Qni+1)
二、值函数
MDP序列: s 0 , a 0 , r 1 → s 1 , a 1 , r 2 → s 2 , a 2 , r 3 → s 3 , a 3 , r 4 … s t , a t , r t + 1 → … s T − 1 , a T − 1 , r T → s T ( 终 止 状 态 ) s_0,a_0,r_1 \rightarrow s_1,a_1,r_2 \rightarrow s_2,a_2,r_3 \rightarrow s_3,a_3,r_4 \dots s_t,a_t,r_{t+1}\rightarrow\dots s_{T-1},a_{T-1},r_T\rightarrow s_T(终止状态) s0,a0,r1→s1,a1,r2→s2,a2,r3→s3,a3,r4…st,at,rt+1→…sT−1,aT−1,rT→sT(终止状态)
1.累计折扣奖励
G t = r t + 1 + γ r t + 2 + γ 2 r r + 3 + ⋯ + γ T − t − 1 r T G_t=r_{t+1}+\gamma r_{t+2}+\mathop{\gamma}^2r_{r+3}+\dots+\mathop{\gamma}^{T-t-1}r_T Gt=rt+1+γrt+2+γ2rr+3+⋯+γT−t−1rT
2.状态值函数
从当前状态开始的累计折扣奖励的期望,与策略有关
V
π
(
s
)
=
E
[
r
t
+
1
+
γ
r
t
+
2
+
γ
2
r
r
+
3
+
…
∣
s
t
=
s
]
V_\pi(s)=E[r_{t+1}+\gamma r_{t+2}+\mathop{\gamma}^2r_{r+3}+\dots|s_t=s]
Vπ(s)=E[rt+1+γrt+2+γ2rr+3+…∣st=s]
对求期望的理解:后续的马尔科夫链有多条(多种可能),我们用期望表示,以状态
s
s
s开始的一条MDP序列可以计算一个
V
π
V_\pi
Vπ,多条MDP序列求平均就是估计。
观察改公式的形式,可改写成如下形式:
V
π
(
s
)
=
E
[
r
t
+
1
+
γ
V
π
(
s
t
+
1
)
∣
s
t
=
s
]
=
E
[
r
t
+
1
∣
s
t
=
s
]
+
γ
E
[
V
π
(
s
t
+
1
)
∣
s
t
=
s
]
V_\pi(s)=E[r_{t+1}+\gamma V_\pi(s_{t+1})|s_t=s]=E[r_{t+1}|s_t=s]+\gamma E[V_\pi(s_{t+1})|s_t=s]
Vπ(s)=E[rt+1+γVπ(st+1)∣st=s]=E[rt+1∣st=s]+γE[Vπ(st+1)∣st=s]
状态值函数的理解:
E
[
r
t
+
1
∣
s
t
=
s
]
E[r_{t+1}|s_{t}=s]
E[rt+1∣st=s]:当
t
t
t时刻状态为
s
s
s时,采取动作
a
′
a'
a′未知,但
a
′
∽
π
(
a
′
∣
s
)
a'\backsim\pi(a'|s)
a′∽π(a′∣s),
t
+
1
t+1
t+1时刻的奖励可以用期望
E
[
r
t
+
1
]
E[r_{t+1}]
E[rt+1]表示,更进一步:
E
[
r
t
+
1
∣
s
t
=
s
]
=
∑
[
π
(
a
′
∣
s
t
)
∗
R
s
a
(
s
t
,
a
′
)
]
E[r_{t+1}|s_t=s]=\sum [\pi(a' |s_t)*Rsa(s_t,a')]
E[rt+1∣st=s]=∑[π(a′∣st)∗Rsa(st,a′)]
E
[
V
π
(
s
t
+
1
)
∣
s
t
=
s
]
E[V_\pi(s_{t+1})|s_t=s]
E[Vπ(st+1)∣st=s]:状态由
s
s
s转移为
s
t
+
1
=
s
′
s_{t+1}=s'
st+1=s′未知,但
s
′
∼
P
s
a
(
s
′
)
s'\sim Psa(s')
s′∼Psa(s′),所以
t
+
1
t+1
t+1时刻的状态值函数也用期望表示,类似的:
E
[
V
π
(
s
t
+
1
)
∣
s
t
=
s
]
=
∑
(
π
(
a
′
∣
s
t
)
∗
∑
(
P
s
a
(
s
t
+
1
=
s
′
)
∗
V
π
[
s
′
]
)
)
E[V_\pi(s_{t+1})|s_t=s]=\sum\Big(\pi(a' |s_t)*\sum\big(Psa(s_{t+1}=s')*V_\pi[s']\big)\Big)
E[Vπ(st+1)∣st=s]=∑(π(a′∣st)∗∑(Psa(st+1=s′)∗Vπ[s′]))
整理状态值函数公式(Bellman方程):
V
π
(
s
)
=
∑
(
π
(
a
′
∣
s
)
∗
(
R
s
a
(
s
,
a
′
)
+
γ
∑
(
P
s
a
′
(
s
′
)
∗
V
π
(
s
′
)
)
)
)
V_\pi(s)=\sum \bigg(\pi(a' |s)*\Big(Rsa(s,a')+\gamma\sum\big(Psa'(s')*V_\pi(s')\big)\Big)\bigg)
Vπ(s)=∑(π(a′∣s)∗(Rsa(s,a′)+γ∑(Psa′(s′)∗Vπ(s′))))
由该公式可以看出,只要我们已知状态转移概率
P
s
a
Psa
Psa以及奖励函数
R
s
a
Rsa
Rsa,即已知环境模型,那么通过该公式就可以评价策略函数
π
\pi
π的好坏。
3.动作值函数
从当前状态开始(不包括当前状态),采取动作
a
a
a,所得到的后续累计折扣奖励的期望。
Q
π
:
S
∗
A
→
R
Q_\pi:S*A\to R
Qπ:S∗A→R
Q
π
(
s
,
a
)
=
E
[
r
t
+
1
+
γ
r
t
+
2
+
γ
2
r
r
+
3
+
…
∣
s
t
=
s
,
a
t
=
a
]
Q_\pi(s,a)=E[r_{t+1}+\gamma r_{t+2}+\mathop{\gamma}^2r_{r+3}+\dots|s_t=s,a_t=a]
Qπ(s,a)=E[rt+1+γrt+2+γ2rr+3+…∣st=s,at=a],其中
r
t
+
1
r_{t+1}
rt+1是常数
易看出动作值函数与状态值函数之间的关系:
Q
π
(
s
,
a
)
=
E
[
r
t
+
1
+
γ
V
π
(
s
t
+
1
)
∣
s
t
=
s
,
a
t
=
a
]
Q_\pi(s,a)=E[r_{t+1}+\gamma V_\pi(s_{t+1})|s_t=s,a_t=a]
Qπ(s,a)=E[rt+1+γVπ(st+1)∣st=s,at=a]
还是用概率计算期望:
Q
π
(
s
,
a
)
=
r
t
+
1
+
γ
∑
P
s
a
(
s
′
)
∗
V
π
(
s
′
)
=
R
s
a
(
s
,
a
)
+
γ
∑
P
s
a
(
s
′
)
∗
V
π
(
s
′
)
Q_\pi(s,a)=r_{t+1}+\gamma\sum Psa(s')*V_\pi(s')=Rsa(s,a)+\gamma\sum Psa(s')*V_\pi(s')
Qπ(s,a)=rt+1+γ∑Psa(s′)∗Vπ(s′)=Rsa(s,a)+γ∑Psa(s′)∗Vπ(s′)
4.状态值函数与动作值函数的关系
Q
π
(
s
,
a
)
=
R
s
a
(
s
,
a
)
+
γ
∑
P
s
a
(
s
′
)
∗
V
π
(
s
′
)
Q_\pi(s,a)=Rsa(s,a)+\gamma\sum Psa(s')*V_\pi(s')
Qπ(s,a)=Rsa(s,a)+γ∑Psa(s′)∗Vπ(s′)
V
π
(
s
)
=
∑
π
(
a
∣
s
)
∗
Q
π
(
s
,
a
)
V_\pi(s)=\sum\pi(a|s)*Q_\pi(s,a)
Vπ(s)=∑π(a∣s)∗Qπ(s,a)
5.贝尔曼方程(动态规划法核心)
{
Q
π
(
s
,
a
)
=
R
s
a
(
s
,
a
)
+
γ
∑
P
s
a
(
s
′
)
∗
V
π
(
s
′
)
V
π
(
s
)
=
∑
π
(
a
∣
s
)
∗
Q
π
(
s
,
a
)
\begin{cases} Q_\pi(s,a)=Rsa(s,a)+\gamma\sum Psa(s')*V_\pi(s')\\ V_\pi(s)=\sum\pi(a|s)*Q_\pi(s,a) \end{cases}
{Qπ(s,a)=Rsa(s,a)+γ∑Psa(s′)∗Vπ(s′)Vπ(s)=∑π(a∣s)∗Qπ(s,a)
⇒
V
π
(
s
)
=
∑
(
π
(
a
′
∣
s
)
∗
(
R
s
a
(
s
,
a
′
)
+
γ
∑
(
P
s
a
′
(
s
′
)
∗
V
π
(
s
′
)
)
)
)
\rArr V_\pi(s)=\sum \bigg(\pi(a' |s)*\Big(Rsa(s,a')+\gamma\sum\big(Psa'(s')*V_\pi(s')\big)\Big)\bigg)
⇒Vπ(s)=∑(π(a′∣s)∗(Rsa(s,a′)+γ∑(Psa′(s′)∗Vπ(s′))))
⇒
Q
π
(
s
,
a
)
=
R
s
a
(
s
,
a
)
+
γ
(
∑
P
s
a
(
s
′
)
∗
(
∑
π
(
a
′
∣
s
)
∗
Q
π
(
s
′
,
a
′
)
)
)
\rArr Q_\pi(s,a)=Rsa(s,a)+\gamma\Big(\sum Psa(s')*\big(\sum\pi(a'|s)*Q_\pi(s',a')\big)\Big)
⇒Qπ(s,a)=Rsa(s,a)+γ(∑Psa(s′)∗(∑π(a′∣s)∗Qπ(s′,a′)))
三、策略评估
给定一个策略 π \pi π,求在这一策略下的值函数
1.基于状态值函数评估策略
V π ( s ) = ∑ ( π ( a ′ ∣ s ) ∗ ( R s a ( s , a ′ ) + γ ∑ ( P s a ′ ( s ′ ) ∗ V π ( s ′ ) ) ) ) V_\pi(s)=\sum \bigg(\pi(a' |s)*\Big(Rsa(s,a')+\gamma\sum\big(Psa'(s')*V_\pi(s')\big)\Big)\bigg) Vπ(s)=∑(π(a′∣s)∗(Rsa(s,a′)+γ∑(Psa′(s′)∗Vπ(s′))))
2.基于动作值函数评估策略
Q π ( s , a ) = R s a ( s , a ) + γ ( ∑ P s a ( s ′ ) ∗ ( ∑ π ( a ′ ∣ s ) ∗ Q π ( s ′ , a ′ ) ) ) Q_\pi(s,a)=Rsa(s,a)+\gamma\Big(\sum Psa(s')*\big(\sum\pi(a'|s)*Q_\pi(s',a')\big)\Big) Qπ(s,a)=Rsa(s,a)+γ(∑Psa(s′)∗(∑π(a′∣s)∗Qπ(s′,a′)))
四、策略改进(策略求解)
已知状态值函数或动作值函数,求在这一值函数下的最优策略,也叫做贪心策略或者确定性策略
1.基于状态值函数的策略改进
π ( s ∣ a ) = { 1 if a = a r g m a x ( R ( s , a ) + γ ∑ P s a ( s ′ ) ∗ V π ( s ′ ) ) 0 else \pi(s|a) =\begin{cases} 1 &\text{if } a=argmax\big(R(s,a)+\gamma\sum Psa(s')*V_\pi(s')\big) \\ 0 &\text{else } \end{cases} π(s∣a)={10if a=argmax(R(s,a)+γ∑Psa(s′)∗Vπ(s′))else
2.基于动作值函数的策略改进
π
(
s
∣
a
)
=
{
1
if
a
=
a
r
g
m
a
x
(
Q
π
(
s
,
a
)
)
0
else
\pi(s|a) =\begin{cases} 1 &\text{if } a=argmax\big(Q_\pi(s,a)\big) \\ 0 &\text{else } \end{cases}
π(s∣a)={10if a=argmax(Qπ(s,a))else
这两种改进策略在我看来实质是一样的,都是要去找最大的
Q
(
s
,
a
)
Q(s,a)
Q(s,a),然后将对应的
π
(
s
∣
a
)
=
1
\pi(s|a)=1
π(s∣a)=1(贪心策略)
在已知环境模型的情况下,策略迭代法就是策略评估 → \to →策略改进 → \to →策略评估 → \to →策略改进 … \dots …
五、动态规划法与强化学习的联系
为了评估策略的好坏,我们定义了动作值函数
Q
π
(
s
∣
a
)
Q_\pi(s|a)
Qπ(s∣a)与状态值函数
V
π
(
s
)
V_\pi(s)
Vπ(s),在贪心策略下,我们需要求解
M
a
x
(
Q
π
(
s
∣
a
)
)
Max\big(Q_\pi(s|a)\big)
Max(Qπ(s∣a))
值函数记录了单个小问题的解,Bellman方程将序列求最优问题拆分成递归问题。
参照博客:动态规划与强化学习
1.动态规划和前面的有什么联系?
答:强化学习前面已经说过,是一种序列决策问题,一开始不清楚环境的工作方式,不知道执行什么动作是对的,什么是错的,然后就只好不断的在环境试错,进而发现一个好的策略。同样,规划(planning)也属于序列决策问题,不同的是规划的环境是已知的,比如游戏的规则已知等,那么agent就不需要靠与环境的交互来获取下一个状态了,而是知道自己执行某个动作后的状态是什么,然后再优化自己的策略。这两者是不一样的。
动态规划可以将一个复杂问题分为一系列简单的子问题,一旦解决了这些简单的子问题,再将这些子问题的解结合起来就变成复杂问题的解了,并且同时将它们的解保存起来,如果下次遇到相同的子问题,就不用重新计算了。动态规划本质上就是一种环境模型已知的规划方法(planning)。
2.动态规划到底是干什么的?
动态规划的“动态”,指的是某个问题由序列化状态组成,状态的转换是step-by-step进行的。因此,可以step-by-step解决问题。“规划”就是优化子问题。上一节我们提到,通过Bellman方程MDP被递归的切分成子问题,同时它有值函数,保存了每一个子问题的解,因此它能通过动态规划来求解。针对MDP,切分成的子问题就是在每个状态下应该选择的action是什么,MDP的子问题是以一种递归的方式存在,这一时刻的子问题取决于上一时刻的子问题选择了哪个action。
动态规划简单说可以分为两部分,一是预测(prediction),也就是已知MDP的状态、动作、奖励、转移概率、折扣因子和策略,求出每一个状态下的值函数,也就是每个状态下能获得的reward是多少。第二就是控制,什么意思呢,就是在前面的状态、动作等等都已知,但策略未知的情况下,计算出最优的值函数,并且借此计算出最优的策略。动态规划的目的就是完成上面的两件事。适用于动态规划的问题,一般状态转移矩阵都是已知的,简单说就是环境模型已知了,这个时候就可以看做planning问题了。
总结
定义值函数来求解累计折扣奖励,并进一步写出值函数的迭代公式 (Bellman方程),在环境已知的条件下(Model Base),通过求解一组Bellman方程(策略评估)就可以评价当前策略好坏,在通过动作值函数按照贪心策略更新策略,当策略不再改变就代表求出了最优策略。该过程也叫做策略迭代法,依靠模型。
经典强化学习算法后续:
蒙特卡罗法不依赖模型,大致原理是通过采集大量MDP序列后,抽样求解状态转移概率(打比方,抛硬币1000次,记录正反出现的次数,我们就可以计算出正面出现的概率为0.5),同样的我们从大量的MDP序列中求出
P
s
a
Psa
Psa。后面更新策略的方法同策略迭代类似。该方法也是需要再大量采集数据后才能进行更新策略。
时序差分法可以做到在线学习,即实时更新。大致原理:随机初始化Q表,每执行一步动作通过以前记录的Q表+当前动作奖励来更新Q表,最后的策略是通过最大Q值来反推(或者说动作选择基于Q表,选取最大Q值对应的动作)。
更多推荐
所有评论(0)