【强化学习】强化学习数学基础:贝尔曼公式

news/2024/4/24 8:40:15/文章来源:https://blog.csdn.net/ARPOSPF/article/details/128813438

强化学习数学基础:贝尔曼公式

  • 强化学习的数学原理课程总览
  • 贝尔曼公式(Bellman Equation)
    • 一个示例
    • 状态值
    • 贝尔曼公式:推导过程
    • 贝尔曼公式:矩阵-向量形式(Matrix-vector form)
    • 贝尔曼公式:求解状态值
    • 动作值(Action value)
    • 总结
  • 参考资料

强化学习的数学原理课程总览

强化学习数学基础总览图

贝尔曼公式(Bellman Equation)

  • 一个核心的概念:状态值(state value
  • 一个基础工具:the Bellman equation

一个示例

**为什么return是重要的?**首先我们根据一个轨迹(trajectory)获得rewards的(discounted)sum。如下所示:
trajectory
根据上图所示,有两个问题:

  • 问题1:从s1点出发,哪种policy是“best”?,哪一个是“worst”?
    直观上看,第一个是最优的,第二个是最差的,这是因为第二个经过了forbidden area。

  • 问题2:是否可以用数学公式描述这样一种直观感觉?
    可以,使用return来评估policies。

基于策略1(左边图),从s1开始,the discounted return计算如下:
return1=0+γ1+γ21+...=γ(1+γ+γ2+...)=γ1−γreturn_1=0+\gamma 1+\gamma ^21+...=\gamma (1+\gamma +\gamma ^2+...)=\frac{\gamma }{1-\gamma }return1=0+γ1+γ21+...=γ(1+γ+γ2+...)=1γγ
基于策略2(中间图),从s1开始,the discounted return是:
return2=−1+γ1+γ21+...=−1+γ(1+γ+γ2+...)=−1+γ1−γreturn_2=-1+\gamma 1+\gamma ^21+...=-1+\gamma (1+\gamma +\gamma ^2+...)=-1+\frac{\gamma }{1-\gamma } return2=1+γ1+γ21+...=1+γ(1+γ+γ2+...)=1+1γγ
策略3是随机性的,基于第三个策略(右边图),从s1出发,discounted return是:
return3=0.5(−1+γ1−γ)+0.5(γ1−γ)=−0.5+γ1−γreturn_3=0.5(-1+\frac{\gamma }{1-\gamma } )+0.5(\frac{\gamma }{1-\gamma } )=-0.5+\frac{\gamma }{1-\gamma } return3=0.5(1+1γγ)+0.5(1γγ)=0.5+1γγ

基于上面的计算可知,从s1出发,return1>return3>return2return_1>return_3>return_2return1>return3>return2。因此从结果上看,这是符合之前的直觉的。所以,通过计算return可以评估一个policy的优劣

那么如何计算return?刚才是用return的定义,现在用一个更好的方法来计算它。以如下图为例:
示例

  • 方法1:由定义计算,令viv_ivi表示从si(i=1,2,3,4)s_i(i=1,2,3,4)si(i=1,2,3,4)出发得到的return
    by definition
  • 方法2:先看下面式子
    迭代式子
    从上面式子中可以得出结论:return依赖于其他状态,这个思想称为Boostrapping

如何求解这些等式?我们可以将上面的公式写成一个矩阵向量的形式:
矩阵向量形式
可以写为:
v=r+γPv\mathrm{v}=\mathrm{r}+\gamma \mathrm{Pv}v=r+γPv
这个公式就是一个贝尔曼公式(Bellman equation)(对于这样一个具体的确定性问题):

  • 尽管简单,但是它证明一个关键思想:一个状态的值依赖于其他状态的值
  • 一个矩阵-向量形式可以更加清晰地知道如何求解状态值。

状态值

首先,定义几个概念。考虑这样一个单步(single-step)的过程:
单步过程
其中:

  • t,t+1t, t+1t,t+1:离散时间
  • StS_tSt:在时刻ttt的状态
  • AtA_tAt:在状态StS_tSt采取的动作
  • Rt+1R_{t+1}Rt+1:采取动作AtA_tAt之后得到的奖励
  • St+1S_{t+1}St+1:采取动作AtA_tAt之后转移到的状态

注意:St,At,Rt+1S_t, A_t, R_{t+1}St,At,Rt+1都是随机变量(random variables)。

根据下面的概率分布决定后续的步骤:
条件概率
在某一时刻,我们假设我们知道这个模型,即概率分布。

将上面的单步过程推广到一个多步的trajectory上,可以得到:
multi-step
则discounted return计算如下:
Gt=Rt+1+γRt+2+γ2Rt+3+......G_t=R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+......Gt=Rt+1+γRt+2+γ2Rt+3+......

  • γ∈[0,1)\gamma \in [0,1)γ[0,1)是一个折扣率
  • GtG_tGt是一个随机变量,因为Rt+1,Rt+2,...R_{t+1},R_{t+2},...Rt+1Rt+2...是随机变量。

定义state value: GtG_tGt被的期望(或者称为期望值或均值)被定义为state-value function或者简单地称为state value:
vπ(s)=E[Gt∣St=s]v_\pi(s)=\mathbb{E}[G_t|S_t=s]vπ(s)=E[GtSt=s]
注意:

  • 它是一个关于s的函数。从不同的s出发,得到的期望也是不同的
  • 它是基于策略π\piπ的,对于不同的策略,state value也可能不同
  • 它表示一个状态的“价值”。如果state value比较大,那么这个策略比较好。

问题:return和state value之间有什么关联?
答:state value是从一个state出发得到的所有可能的return的平均值。如果所有——π(a∣s),p(r∣s,a),p(s′∣s,a)\pi(a|s),p(r|s,a), p(s'|s, a)π(as)p(rs,a),p(ss,a)——是确定行的,则state value与return是相同的。

示例:下面三个图分别对应三个策略:π1,π2,π3\pi_1,\pi_2,\pi_3π1,π2,π3
示例
计算从s1s_1s1开始得到的returns:return

贝尔曼公式:推导过程

用一句话来说,贝尔曼公式用于描述所有不同状态值之间的关系。
考虑一个随机的trajectory:
trajectory
return GtG_tGt可以被写为:
Gt
然后,根据state value的定义,用数学形式化:
v(s)
这样就可到了两个部分。然后我们分别计算这两个部分:
首先,计算第一项E[Rt+1∣St=s]\mathbb{E}[R_{t+1}|S_t=s]E[Rt+1St=s]
E[Rt+1∣St=s]=∑aπ(a∣s)E[Rt+1∣St=s,At=a]=∑aπ(a∣s)∑rp(r∣s,a)r\mathbb{E}[R_{t+1}|S_t=s]=\sum _a \pi (a|s)\mathbb{E}[R_{t+1}|S_t=s, A_t=a]=\sum _a\pi (a|s)\sum _rp(r|s,a)rE[Rt+1St=s]=aπ(as)E[Rt+1St=s,At=a]=aπ(as)rp(rs,a)r
注意:这是得到的一个immediate rewards的均值。
再看第二项E[Gt+1∣St=s]\mathbb{E}[G_{t+1}|S_t=s]E[Gt+1St=s]
第二项
注意:

  • 第二项是future reward的均值
  • E[Gt+1∣St=s,St+1=s′]=E[Gt+1∣St+1=s′]\mathbb{E}[G_{t+1}|S_t=s, S_{t+1}=s']=\mathrm{E}[G_{t+1}|S_{t+1}=s']E[Gt+1St=s,St+1=s]=E[Gt+1St+1=s]是由于Markov的无记忆功能,即不需要计算状态s的值。

现在,我们有如下公式:
贝尔曼公式
注意:

  • 上面的公式成为Bellman equation, 其描述了不同状态的state-value functions之间的关系;
  • 它包含两个部分:the immediate reward termthe future reward term,即当前奖励和未来奖励
  • 它是一个等式的集合:所有的state都有这样一个类似的等式
  • vπ(s)v_\pi(s)vπ(s)vπ(s′)v_\pi(s')vπ(s)是需要被计算的state value,计算方法就是Bootstrapping。
  • π(a∣s)\pi(a|s)π(as)是一个给定的策略policy,求解这个等式就被称为策略评估(policy evaluation)
  • p(r∣s,a)p(r|s,a)p(rs,a)p(s′∣s,a)p(s'|s,a)p(ss,a)表示动态模型(dynamic model),分为两种情况,即知道和不知道

网格
根据上面网格,再次将Bellman公式根据最终的一般形式写出来:
vπ(s)=∑aπ(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπ(s′)]v_\pi(s)=\sum _a\pi(a|s)[\sum _rp(r|s,a)r+\gamma \sum _{s'}p(s'|s,a)v_\pi(s')]vπ(s)=aπ(as)[rp(rs,a)r+γsp(ss,a)vπ(s)]
这里非常简单,因为策略是确定性的。
首先,考虑s1s_1s1的state value:
s1出发
这时候将上述公式的结果提交到贝尔曼公式里边,得到:
vπ(s1)=0+γvπ(s3)v_\pi(s_1)=0+\gamma v_\pi(s_3)vπ(s1)=0+γvπ(s3)
类似地,我们有如下公式:
vπ(s1)=0+γvπ(s3)v_\pi(s_1)=0+\gamma v_\pi(s_3)vπ(s1)=0+γvπ(s3)vπ(s2)=1+γvπ(s4)v_\pi(s_2)=1+\gamma v_\pi(s_4)vπ(s2)=1+γvπ(s4)vπ(s3)=1+γvπ(s4)v_\pi(s_3)=1+\gamma v_\pi(s_4)vπ(s3)=1+γvπ(s4)vπ(s4)=1+γvπ(s4)v_\pi(s_4)=1+\gamma v_\pi(s_4)vπ(s4)=1+γvπ(s4)
求解上面等式,通过从最后一个到第一个,逐步求解,得到:
vπ(s4)=11−γv_\pi(s_4)=\frac{1}{1-\gamma }vπ(s4)=1γ1vπ(s3)=11−γv_\pi(s_3)=\frac{1}{1-\gamma }vπ(s3)=1γ1vπ(s2)=11−γv_\pi(s_2)=\frac{1}{1-\gamma }vπ(s2)=1γ1vπ(s1)=γ1−γv_\pi(s_1)=\frac{\gamma}{1-\gamma }vπ(s1)=1γγ
假设γ=0.9\gamma=0.9γ=0.9,带入上面等式中,得到:
vπ(s4)=10v_\pi(s_4)=10vπ(s4)=10vπ(s3)=10v_\pi(s_3)=10vπ(s3)=10vπ(s2)=10v_\pi(s_2)=10vπ(s2)=10vπ(s1)=9v_\pi(s_1)=9vπ(s1)=9
当我们计算完成state value之后呢?需要计算action value和改善policy。

练习如下示例:
不确定性网格
给出一般化的贝尔曼公式:
vπ(s)=∑aπ(a∣s)[∑rp(r∣s,a)r+γ∑s′p(s′∣s,a)vπ(s′)]v_\pi(s)=\sum _a\pi(a|s)[\sum _rp(r|s,a)r+\gamma \sum _{s'}p(s'|s,a)v_\pi(s')]vπ(s)=aπ(as)[rp(rs,a)r+γsp(ss,a)vπ(s)]
现在,对于每个state,写出对应的贝尔曼等式,根据上面的贝尔曼公式求解state value,最后比较不同的policy。
对于第一个问题,每个状态的贝尔曼等式如下:
贝尔曼等式
从后往前计算每个state value,有:
state value
然后,将γ=0.9\gamma=0.9γ=0.9带入上面式子中,得到:
状态值
比较不同的策略,这个策略是比较差的,没有之前的策略好。

贝尔曼公式:矩阵-向量形式(Matrix-vector form)

首先考虑如何求解Bellman公式,
贝尔曼公式
一种unknown依赖于另一种unknown。上面的elementwise form对于每个state s∈Ss\in SsS都是适用的,这意味着将有∣S∣|S|S个类似的公式,如果将这些公式放在一块,将得到一个线性方程组,将它们写为matrix-vector form,这种矩阵-向量形式是优雅而重要(elegant and important)。

Bellman公式的Matrix-vector形式求解如下:
步骤1
假设states可以索引为si(i=1,...,n)s_i(i=1,...,n)si(i=1,...,n)。对于状态sis_isi,Bellman公式是:
Bellman
将所有states的这样等式放在一起,用矩阵向量的形式写为:
vπ=rπ+γPπvπv_\pi=r_\pi+\gamma P_\pi v_\pivπ=rπ+γPπvπ
其中:
matrix-vector
示例如下,假设有4个状态,上面公式可以写为:
矩阵向量展开
进一步地,以网格为例:
网格实例
可以写为如下形式:
等式
再看一个随机性的网格示例,如下:
随机性的示例
有如下结果:
随机性的例子

贝尔曼公式:求解状态值

为什么要求解state values?

  • 给定一个策略policy,找到对应的state values的过程被称为policy evaluation。这是一个强化学习的基础问题,即找出更好的策略。
  • 这对于理解如何求解Bellman公式很重要

如下是Bellman公式的matrix-vector form:vπ=rπ+γPπvπv_\pi=r_\pi+\gamma P_\pi v_\pivπ=rπ+γPπvπ
其解析表达式(closed-form solution)是vπ=(I−γPπ)−1rπv_\pi=(I-\gamma P_\pi)^{-1}r_\pivπ=(IγPπ)1rπ,实际上,我们仍然需要使用数值工具计算矩阵的逆。
因此,在实际中,我们使用迭代算法去求解(iterative solution):vk+1=rπ+γPπvkv_{k+1}=r_\pi +\gamma P_\pi v_kvk+1=rπ+γPπvk,这样的算法将得到一个序列{v0,v1,v2,...}\{v_0,v_1,v_2,...\}{v0,v1,v2,...},如下:
迭代算法
当k趋近于无穷的时候,则vkv_kvk就趋近于vπv_\pivπ。证明如下:
证明
示例:rboundary=rforbidden=−1,rtarget=+1,γ=0.9r_{boundary}=r_{forbidden}=-1,r_{target}=+1, \gamma=0.9rboundary=rforbidden=1,rtarget=+1,γ=0.9,下面是两个”bad“策略和状态值。the state value不如好的policies。
一个示例

动作值(Action value)

state value和action value的区别:

  • State value: 智能体starting from a state得到的平均return
  • Action value:智能体starting from a state并taking an action得到的平均return

通过action value,可以得到哪个action是更好的。

Action value的定义:qπ(s,a)=E[Gt∣St=s,At=a]q_\pi(s,a)=\mathbb{E}[G_t|S_t=s, A_t=a]qπ(s,a)=E[GtSt=s,At=a],其中qπ(s,a)q_\pi(s,a)qπ(s,a)是state-action pair (s,a)(s,a)(s,a)的函数,qπ(s,a)q_\pi(s,a)qπ(s,a)依赖于π\piπ
于是,基于条件期望的性质,可以有:
条件期望
因此,可以将上面式子写为:
vπ(s)=∑aπ(a∣s)qπ(s,a)v_\pi (s)=\sum_a\pi(a|s)q_\pi(s,a)vπ(s)=aπ(as)qπ(s,a)
回顾之前的state value公式:
state value
可以得到action-value函数如下:
action-value
示例:
网格示例
针对s1s_1s1写出action value:qπ(s1,a2)=−1+γvπ(s2)q_\pi (s_1, a_2)=-1+\gamma v_\pi (s_2)qπ(s1,a2)=1+γvπ(s2)
除了采取a2动作之外,还可以采取a1, a3, a4动作,那么它们的action value是多少呢?
action value
总的来说

  • Action value是非常重要的,因为我们关注哪一种action会被采用;
  • 我们可以首先计算所有的state value,然后计算action value;
  • can also directly calculate the action values with or without models.

总结

关键概念:

  • State value: vπ(s)=E[Gt∣St=s]v_\pi (s)=\mathbb{E}[G_t|S_t=s]vπ(s)=E[GtSt=s]

  • Action value: qπ(s,a)=E[Gt∣St=s,At=a]q_\pi (s,a)=\mathbb{E}[G_t|S_t=s, A_t=a]qπ(s,a)=E[GtSt=s,At=a]

  • 贝尔曼公式(elementwise form):
    贝尔曼公式

  • 贝尔曼公式(matrix-vector form):vπ=rπ+γPπvπv_\pi=r_\pi+\gamma P_\pi v_\pivπ=rπ+γPπvπ

  • 如何求解贝尔曼公式:解析法(closed-form solution),迭代法(iterative solution)

参考资料

[1] 《强化学习的数学原理》赵世钰教授 西湖大学工学院
[2] 《动手学强化学习》 俞勇著

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_73997.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于合作型Stackerlberg博弈的考虑差别定价和风险管理的微网运行策略研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

从网易到支付宝,3年外包生涯做完,我这人生算是彻底废了......

我为什么一直做外包呢,原因是薪资和技术方面。 在华三做了一年外包,薪资5k,功能测试,接触Linux和网络,但是说实在的技术很难沉淀,就像雾里看花一样,过年之后,想走的人都走了&#x…

【vue2小知识】实现axios的二次封装

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:在vue2中实现axios的二次封装 目录 一、平常axios的请求发送方式 二、axios的一次封装…

造成android UI卡顿的原因及解决方法

Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的刷新率是 60FPS(Frame Per Second),也就是每秒 60 帧的刷新率,约合 16ms 刷新一次。如果UI线程的执行时间超过16ms,则会产生丢帧…

【log】操作类日志处理 与 报错类日志处理logback

文章目录一、操作类日志处理【环绕增强】aop环绕增强导包第一步:自定义注解interface第二步:在Controller写一个测试的方法:第三步:编写LogAspect增强类与增强方法日志写入数据库(使用mybatis)第一步&#…

MyBatis快速开发

查询user表中的所有数据 步骤: 创建user表 打开Navicat,新建查询,将下面SQL代码复制粘贴并执行: create database mybatis; use mybatis;drop table if exists tb_user;create table tb_user(id int primary key auto_incremen…

Vue3电商项目实战-商品详情模块6【17-商品详情-标签页组件、18-商品详情-热榜组件、19-商品详情-详情组件、20-商品详情-注意事项组件】

文章目录17-商品详情-标签页组件18-商品详情-热榜组件19-商品详情-详情组件20-商品详情-注意事项组件17-商品详情-标签页组件 目的:实现商品详情组件和商品评价组件的切换 大致步骤: 完成基础的tab的导航布局完成tab标签页的切换样式效果使用动态组件完…

【Rust 日报】2023-2-24 Dioxus 0.3 发布,巨大的更新

ascii-d - 画ASCII示意图的工具Rust写的画ASCII示意图的工具。支持各大平台。程序员的最爱啊。https://github.com/huytd/ascii-d/raw/master/_meta/toolbar-final.gifDioxus 0.3 发布,巨大的更新Dioxus 是新出的与 Yew 类似的 Rust Web 前端框架(为什么…

【华为OD机试模拟题】用 C++ 实现 - 最大相连男生数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 货币单位换算(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 选座位(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 停车场最大距离(2023.Q1) 【华为OD机试模拟题】用 C++ 实现 - 重组字符串(2023.Q1) 【华为OD机试模…

Java-多线程-增强篇-锁强化第3篇

Java集合框架中的锁 今天我们继续来学习锁 字符串操作中的锁 String是线程安全的,因为使用final修饰Stringbuilder 是线程不安全的,其方法没有使用synchronized修饰StringBuffer 是线程安全的,其方法使用synchronized修饰 List集合中的锁 …

内核并发消杀器(KCSAN)技术分析

一、KCSAN介绍KCSAN(Kernel Concurrency Sanitizer)是一种动态竞态检测器,它依赖于编译时插装,并使用基于观察点的采样方法来检测竞态,其主要目的是检测数据竞争。KCSAN是一种检测LKMM(Linux内核内存一致性模型)定义的数据竞争(data race)的工…

【网络原理8】HTTP请求篇

在上一篇文章当中,我们也提到了什么是HTTP。 每一个HTTP请求,都会对应一个HTTP响应。 下面这一篇文章,将聊一下HTTP请求的一些内容 目录 一、URL 第一部分:协议名称 第二部分:认证信息(新的版本已经没有了) 第三部分&#xf…

【数通网络交换基础梳理1】二层交换机、以太网帧、MAC地址详解及数据帧转发原理(爆炸细)

一、网络模型 万年不变,先从模型结构分析,现在大家熟知的网络模型有两种。第一种是,OSI七层模型,第二种是TCP/IP模型。在实际运用中,参考更多的是TCP/IP模型。 OSI七层模型 TCP/IP模型 不需要全部理解,…

Spring MVC 源码- HandlerExceptionResolver 组件

HandlerExceptionResolver 组件HandlerExceptionResolver 组件,处理器异常解析器,将处理器( handler )执行时发生的异常(也就是处理请求,执行方法的过程中)解析(转换)成对…

Python变量的定义和使用

定义:变量就是计算机内存中存储某些数据的位置的名称 形象理解变量就是一个存放东西的容器,该容器的名字就叫做变量,容器存放的东西就是变量的值 变量的组成: 标识:标识对象所储存的内存地址,使用内置函数i…

六千字让你明白什么是数字孪生?

文章目录1. 背景2. 数字孪生基础2.1 概念2.2 价值3. 技术生态3.1 技术体系3.2 核心技术3.2.1 多领域、多尺度融合建模3.2.2 数据驱动与物理模型融合的状态评估3.2.3 数据采集和传输3.2.4 全生命周期数据管理3.2.5 虚拟现实呈现3.2.6 高性能计算3.3 建设3.3.1 重点3.3.1.1 数字孪…

SEATA是什么?它的四种分布式事务模式

一、SEATA是什么? Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 在继续学习使用SEATA之前,对s…

数据结构栈的经典OJ题【leetcode最小栈问题大剖析】【leetcode有效的括号问题大剖析】

目录 0.前言 1.最小栈 1.1 原题展示 1.2 思路分析 1.2.1 场景引入 1.2.2 思路 1.3 代码实现 1.3.1 最小栈的删除 1.3.2 最小栈的插入 1.3.3 获取栈顶元素 1.3.4 获取当前栈的最小值 2. 有效的括号 0.前言 本篇博客已经把两个关于栈的OJ题分块,可以根据目…

【华为OD机试模拟题】用 C++ 实现 - 分糖果(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

Jina 3.14 版本发布!支持独立部署Executor

Jina 是一个 MLOps 框架,赋能开发者在云上构建多模态、跨模态的应用程序。Jina 能够将 PoC 提升为生产就绪服务。基础设施的复杂性交给 Jina,开发者能够直接轻松使用高级解决方案和云原生技术。🌟 GitHubhttps://github.com/jina-ai/jina/rel…