若需观看机器人系列相关博客,请劳驾至:【足式机器人无死角系列之-【强化学习基础-通用】、【仿真及训练环境】、【强化学习】:isaac-gym 与 isaac-lab 从零开始
郑重声明:该系列博客为本人 ( W e n h a i Z h u ) 独家私有 , 禁止转载与抄袭 , 首次举报有谢 , 若有需请私信授权! \color{red}郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权! 郑重声明:该系列博客为本人(WenhaiZhu)独家私有,禁止转载与抄袭,首次举报有谢,若有需请私信授权!
引导: 在上一篇博客中提到贝尔曼最优公式依旧为贝尔曼公式 v=r+γPv,只是其中的状态矩阵 P 特殊一些。最后提及到,其是一个 f(x)=x 形式的矩阵方程。这种方程式有一种很特别的迭代求解方式,会在该篇博客进行展开讲解。 |
本系列博客链接为: {\color{blue}本系列博客链接为:} 本系列博客链接为:【强化学习理论基础-通用】(01)从零开始白话给你讲,简单推导公式,深刻理解,一眼万年!:https://blog.csdn.net/weixin_43013761/article/details/143168169
本博客编写于: 20241028 ,台式机为 u b u n t u 20.04 , 3090 G e F o r c e R T X 显存 24 G { \color{purple} 本博客编写于:20241028,台式机为 ubuntu 20.04,3090 GeForce RTX 显存24G} 本博客编写于:20241028,台式机为ubuntu20.04,3090GeForceRTX显存24G:与你现在的代码,或者环境等存在一定差异也在情理之中,故切勿认为该系列博客绝对正确,且百密必有一疏,若发现错误处,恳请各位读者直接指出,本人会尽快进行整改,尽量使得后面的读者少踩坑,评论部分我会进行记录与感谢,只有这样,该系列博客才能成为精品,这里先拜谢各位朋友了。
文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证,请备注 强化学习 。 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证,请备注\color{red} 强化学习}。 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证,请备注强化学习。
一、前言
这里把贝尔曼公式最优公式先列一下,毕竟是上一篇博客成果:
v
π
=
r
π
+
γ
P
v
π
(01)
\color{purple} \tag{01} v_\pi=r_{\pi}+\gamma \mathrm P v_\pi
vπ=rπ+γPvπ(01)其是一种比较特殊的函数形式,这里我们把
r
π
+
γ
P
v
π
r_{\pi}+\gamma \mathrm P v_\pi
rπ+γPvπ 记做
f
(
v
π
)
f(v_\pi)
f(vπ),那么我们可以获得一个有意思的矩阵函数如下所示:
f
(
v
π
)
=
v
π
为方便记:
f
(
x
)
=
x
(02)
\color{blue} \tag{02} f(v_\pi)=v_\pi~~~~~~~~~~~~~为方便记:f(x)=x
f(vπ)=vπ 为方便记:f(x)=x(02) 有点意思吧,一个变量
v
π
v_\pi
vπ 经过函数
f
f
f 变换之后,依旧是其本身。于这种函数是存在不动点(fixed point)的。具体为什么这样称呼呢?
不动点(fixed point): 这个还是比较好理解的,就是一个变量x,其经过函数 f(x) 之后,依旧为 x,有点类似于一个球一样,从任意点出发,绕一圈之后都是回到原点。如果函数的有限次迭代之后回到相同值的点叫做周期点;不动点是周期等于 1 的周期点,也就是说不动点是周期点的一种特殊情况。这样理解更加直白:连续映射 f 的定义域包含值域,则存在一个 x 使得 f(x)=x |
不动点函数在某些条件的约束,可以成为 contraction function(压缩函数)、contraction mapping(压缩映射),他们是一样的,因为数学中的函数本身就是映射的意思。定义如下:
contraction function(压缩函数)、contraction mapping(压缩映射): 这两个表达的是一个意思,只是叫法不同,定义是这样的:∥f(x1)−f(x 2)∥≤γ∥x1−x 2∥,其中 0 < r <1。|| 表示为求模长。可以直观的感到的是,原本定义域为 [x1,x2] 或[x2,x1]。经过函数时候 f 之后呢,输出的值域比定义域范围变少了。注意,是范围变小了,输出的值域必须是定义域的子集。 |
二、普通压缩函数
严格定义: \color{blue}严格定义: 严格定义: 设函数 f 在区间 [ a , b ] [a, b] [a,b] 上定义, f ( [ a , b ] ) ⊂ ( a , b ) f([a, b]) \subset(a, b) f([a,b])⊂(a,b) ,并存在一个常数 γ γ γ ,满足 0 < γ < 1 0<γ<1 0<γ<1 ,使得对一切 x , y ∈ [ a , b ] x, y \in[a, b] x,y∈[a,b] , 成立不等式 ∣ f ( x ) − f ( y ) ∣ ≤ γ ∣ x − y ∣ |f(x)-f(y)| \leq γ |x-y| ∣f(x)−f(y)∣≤γ∣x−y∣ , 则称 f f f 是 [ a , b ] [a, b] [a,b] 上的一个压缩映射, 称常数 γ γ γ为压缩常数.
判定定理: \color{blue}判定定理: 判定定理: γ γ γ 如果在区间 [ a , b ] [a, b] [a,b] 上有定义的函数 f ( x ) f(x) f(x) 满足: ∀ x ∈ [ a , b ] , ∣ f ′ ( x ) ∣ ⩽ k < 1 \forall x \in[a, b],\left|f^{\prime}(x)\right| \leqslant k<1 ∀x∈[a,b],∣f′(x)∣⩽k<1 , 则 f ( x ) f(x) f(x) 是区间 [ a , b ] [a, b] [a,b],上的压缩函数, 且压缩系数, λ = ∣ f ′ ( x ) ∣ m a x \lambda=\left|f^{\prime}(x)\right|_{ max } λ=∣f′(x)∣max
为了更加深刻的体会到什么事压缩函数,这里先举一个简单的例子,比如说:
x
=
f
(
x
)
=
0.7
x
(03)
\color{green} \tag{03} x=f(x)=0.7x
x=f(x)=0.7x(03)其存在一个不动点,也就是该函数的解 0,另外其符合压缩函数的定义:
∥
f
(
x
1
)
−
f
(
x
2
)
∥
≤
γ
∥
x
1
−
x
2
∥
=
∣
∣
0.7
x
1
−
0.7
x
2
∣
∣
≤
γ
∣
∣
x
1
−
x
2
∣
∣
=
0.7
∣
∣
x
1
−
x
2
∣
∣
≤
γ
∣
∣
x
1
−
x
2
∣
∣
\color{green} \tag{04} \begin{align*} & ∥f(x_1)−f(x_2)∥≤γ∥x_1−x_2∥ & \\ =&||0.7x_1-0.7x_2||≤ γ||x_1-x_2|| &\\ =&0.7||x_1-x_2||≤ γ||x_1-x_2|| & \end{align*}
==∥f(x1)−f(x2)∥≤γ∥x1−x2∥∣∣0.7x1−0.7x2∣∣≤γ∣∣x1−x2∣∣0.7∣∣x1−x2∣∣≤γ∣∣x1−x2∣∣(04) 可以知道当
γ
∈
[
0.7
,
1
]
\gamma \in [0.7,1]
γ∈[0.7,1] 是满足压缩函数定义,故在该条件下,其为压缩函数。
三、矩阵压缩函数
那么对于一个矩阵函数,如何判断其是否为压缩函数呢,这里需要了解的一个知识点是,矩阵
A
A
A 作用于一个向量上(如左乘),其行列式的意义是表示对原向量空间的缩放程度,如果其行列式为
∣
∣
A
∣
∣
=
1
||A||=1
∣∣A∣∣=1,则表示没有
进行缩放,
∣
∣
A
∣
∣
>
1
||A|| > 1
∣∣A∣∣>1 则表示对原向量空间的拉升,如果
∣
∣
A
∣
∣
<
1
||A|| < 1
∣∣A∣∣<1 则表示一堆原向量空间的压缩。这些知识点都是线性代数或高等代数的相关知识,这里就不多说了。
如果一个函数 x = A x x=Ax x=Ax,且 x ∈ R n x \in \mathbb{R}^{n} x∈Rn, ∃ γ ∈ ( 0 , 1 ) \exists ~\gamma \in (0,1) ∃ γ∈(0,1) 使得: ∥ A x 1 − A x 2 ∥ = ∥ A ( x 1 − x 2 ) ∥ ≤ ∥ A ∥ ∥ x 1 − x 2 ∥ ≤ γ ∥ x 1 − x 2 ∥ (05) \color{green} \tag{05} \left\|A x_{1}-A x_{2}\right\|=\left\|A\left(x_{1}-x_{2}\right)\right\| \leq\|A\|\left\|x_{1}-x_{2}\right\| \leq \gamma\left\|x_{1}-x_{2}\right\| ∥Ax1−Ax2∥=∥A(x1−x2)∥≤∥A∥∥x1−x2∥≤γ∥x1−x2∥(05) 那么则认为其是一个关于矩阵的压缩行数。可以很明显的知道存在一个不动点 0 0 0 向量,因为 0 = A 0 0=A0 0=A0。
四、压缩函数迭代求解
对于压缩函数来说,其可以通过迭代的方式压缩求解,比如说
x
=
γ
f
(
x
)
x=\gamma f(x)
x=γf(x),我们可以给定一个初始值,
x
0
x_0
x0,让后带入获得
x
1
=
f
(
x
0
)
x_1=f(x_0)
x1=f(x0),下一次呢,再把
x
1
x_1
x1 带入得
x
2
=
f
(
x
1
)
x_2=f(x_1)
x2=f(x1),一直循环迭代下去。知道
x
k
=
f
(
x
k
−
1
)
x_k=f(x_{k-1})
xk=f(xk−1),当
k
k
k 趋向于无穷时,
x
k
x_k
xk 则与该函数的解相等。比如还是拿前面的例子来说:
x
=
f
(
x
)
=
0.7
x
(07)
\color{green} \tag{07} x=f(x)=0.7x
x=f(x)=0.7x(07)
给定初始值
x
0
=
5
x_0=5
x0=5,多次带入之后可得:
x
1
=
f
(
5
)
=
0.7
∗
5
=
3.5
x
2
=
f
(
x
1
)
=
0.7
∗
3.5
=
2.45
x
3
=
f
(
x
2
)
=
0.7
∗
2.24
=
1.715
(08)
\color{green} \tag{08} x_1=f(5)=0.7*5=3.5~~~~~~~x_2=f(x_1)=0.7*3.5=2.45~~~~~~~x_3=f(x_2)=0.7*2.24=1.715
x1=f(5)=0.7∗5=3.5 x2=f(x1)=0.7∗3.5=2.45 x3=f(x2)=0.7∗2.24=1.715(08)
一直这样循环迭代下去,当
k
→
+
∞
k \to +\infty
k→+∞ 可以求得
x
≈
0
x \approx 0
x≈0。
五、贝尔曼公式最优公式求解
通过上一篇博客的推导,我们已经知道,贝尔曼最优公式,其实也是贝尔曼公式,这是其转移矩阵特殊一点而已,这里再把其矩阵形式抄写一遍,毕竟他很重要嘛:
v
π
=
r
π
+
γ
P
v
π
(10)
\color{purple} \tag{10} v_\pi=r_{\pi}+\gamma \mathrm P v_\pi
vπ=rπ+γPvπ(10)首先来证明其是一个矩阵形式的压缩函数,把其写成(05)式的形式:
∣
∣
f
(
v
π
1
)
−
f
(
v
π
2
)
∣
∣
=
∥
(
r
π
+
γ
P
v
π
1
)
−
(
r
π
+
γ
P
v
π
2
)
∣
∣
=
γ
∣
∣
P
∣
∣
∣
∣
v
π
1
−
v
π
2
∣
∣
\color{green} \tag{04} \begin{align*} & ||f(v_{\pi_1}) - f(v_{\pi_2})|| \\ =& ∥(r_\pi+\gamma P v_{\pi_1}) −(r_\pi+\gamma P v_{\pi_2})||\\ =&\gamma ||P|| ||v_{\pi_1} -v_{\pi_2}|| \end{align*}
==∣∣f(vπ1)−f(vπ2)∣∣∥(rπ+γPvπ1)−(rπ+γPvπ2)∣∣γ∣∣P∣∣∣∣vπ1−vπ2∣∣(04)可以知道,若想成立
γ
∣
∣
P
∣
∣
∣
∣
v
π
1
−
v
π
2
∣
∣
≤
∣
∣
∣
v
π
1
−
v
π
2
∣
∣
(11)
\color{green} \tag{11} \gamma ||P|| ||v_{\pi_1} -v_{\pi_2}|| ≤ |||v_{\pi_1} -v_{\pi_2}||
γ∣∣P∣∣∣∣vπ1−vπ2∣∣≤∣∣∣vπ1−vπ2∣∣(11)
知需要保证
0
<
γ
∣
∣
P
∣
∣
≤
1
0 < \gamma ||P|| ≤ 1
0<γ∣∣P∣∣≤1 即可。需要
注意
\color{red} 注意
注意 的是,这里是求行列式
∣
∣
P
∣
∣
||P||
∣∣P∣∣,而不是前面推导的
∣
∣
(
I
−
γ
P
)
∣
∣
||(I-\gamma \mathrm P)||
∣∣(I−γP)∣∣。因为贝尔曼最优公式的状态转移矩阵
P
P
P:
P
=
[
p
(
s
0
∣
s
0
)
p
(
s
1
∣
s
0
)
⋯
p
(
s
n
∣
s
0
)
p
(
s
0
∣
s
1
)
p
(
s
1
∣
s
1
)
⋯
p
(
s
n
∣
s
1
)
⋮
⋮
⋱
⋮
p
(
s
0
∣
s
n
)
p
(
s
1
∣
s
n
)
⋯
p
(
s
n
∣
s
n
)
]
(24)
\color{blue} \tag{24} \mathrm P= \begin{bmatrix} \mathrm p(s_0 \mid s_0) & \mathrm p(s_1 \mid s_0) & \cdots& \mathrm p(s_n \mid s_0) \\ \mathrm p(s_0 \mid s_1) & \mathrm p(s_1 \mid s_1) & \cdots& \mathrm p(s_n \mid s_1) \\ \vdots & \vdots & \ddots& \vdots\\ \mathrm p(s_0 \mid s_n) & \mathrm p(s_1 \mid s_n) & \cdots& \mathrm p(s_n \mid s_n) \end{bmatrix}
P=
p(s0∣s0)p(s0∣s1)⋮p(s0∣sn)p(s1∣s0)p(s1∣s1)⋮p(s1∣sn)⋯⋯⋱⋯p(sn∣s0)p(sn∣s1)⋮p(sn∣sn)
(24) 的每一行,只有一个 元素为
1
1
1,其余全为
0
0
0,那么他的行列式只能位于
[
0
,
1
]
[0,1]
[0,1] 之间。这里就不进行详细推到了,毕竟是强化学习的博客。不过这里可以为大家举两个极端的例子,比如说矩阵的最后一列,即:
[
p
(
s
n
∣
s
0
)
,
p
(
s
n
∣
s
0
)
,
p
(
s
n
∣
s
0
)
,
⋯
,
p
(
s
n
∣
s
0
)
]
T
(25)
\color{green} \tag{25} [p(s_n \mid s_0), p(s_n \mid s_0), p(s_n \mid s_0),\cdots, p(s_n \mid s_0)] ^{\mathrm T}
[p(sn∣s0),p(sn∣s0),p(sn∣s0),⋯,p(sn∣s0)]T(25)全为
1
1
1 时,如果用迷宫游戏来表示他的含义就是,无论你在什么位置,下一步都会到达终点
s
3
=
s
n
s_3=s_n
s3=sn。容易知道每一行都是线性相关的,那么该矩阵
P
P
P 不可逆,所以其对应的行列式为
0
0
0。此时依旧满足 (11) 式。另外一种情况,就是
P
P
P 为一个单位矩阵,那么他的行列式
∣
∣
P
∣
∣
||P||
∣∣P∣∣=1。此时正需保证
γ
<
0
\gamma<0
γ<0 那么
11
11
11 式则成立。
说了这么多,总的来说,就是 v π = r π + γ P v π v_\pi=r_{\pi}+\gamma \mathrm P v_\pi vπ=rπ+γPvπ 其是一个矩阵形式的压缩函数或者说映射,那么我们可以通过迭代的方式,求解该矩阵方程,先随机给定一个初值 v π 0 v_{\pi_0} vπ0,然后开始迭代运算: v π 1 = r π + γ P v π 0 v π 2 = r π + γ P v π 1 ⋯ v π k = r π + γ P v π k − 1 \color{green} \tag{26} \begin{align*} v_{\pi_1}=&r_{\pi}+\gamma \mathrm P v_{\pi_0}\\ v_{\pi_2}=&r_{\pi}+\gamma \mathrm P v_{\pi_1}\\ \cdots\\ v_{\pi_k}=&r_{\pi}+\gamma \mathrm P v_{\pi_{k-1}}\\ \end{align*} vπ1=vπ2=⋯vπk=rπ+γPvπ0rπ+γPvπ1rπ+γPvπk−1(26)当 k → + ∞ k \to +\infty k→+∞ 时, v π k v_{\pi_k} vπk即为矩阵方程的解。不过通常来说,我们不需要迭代那么多次,可以设定一个阈值 t,当 v π k − v π k − 1 < t v_{\pi_k}-v_{\pi_{k-1}}<t vπk−vπk−1<t 时,则认为结果已经收敛。
六、总结
通过该篇博客,我们知道了贝尔曼公式与贝尔曼最优公式都可以通过循环迭代的方式进行求解,因为他们是contraction function(压缩函数)、contraction mapping(压缩映射)。不过该推导过程都得建立在一个基础上,那就是状态转移矩阵式确定的,而不是变化的。且我们能够回到前面的一些列问题:
①: 贝尔曼最优方程成立,且有解。 ②: 贝尔曼最优方程的解是唯一确定的,且是贪婪(Greedy)的,因为其回报最大的动作概率为 1 ③: 贝尔曼最优方程是压缩函数,可以根据其性质使用迭代的方式求解 |
最后需要提到的一点是,贝尔曼最优公式中,所确认的是 π ( s , a m ) \pi(s,a_m) π(s,am) 固定为最大,但是并没有固定 π \pi π 是唯一的。比如说,你训练神经网络,只需要回报最高那个动作执行概率为 1 1 1 即可,而不是说,神经网络只能有一组参数。