强化学习的数学原理学习笔记 - 基于模型(Model-based)

news2024/9/21 0:48:49

文章目录

  • 概览:RL方法分类
  • 基于模型(Model-Based)
    • 值迭代(Value Iteration)
    • 🟦策略迭代(Policy Iteration)
    • 🟡截断策略迭代(Truncated Policy Iteration)


本系列文章介绍强化学习基础知识与经典算法原理,大部分内容来自西湖大学赵世钰老师的强化学习的数学原理课程(参考资料1),并参考了部分参考资料2、3的内容进行补充。

系列博文索引:

  • 强化学习的数学原理学习笔记 - RL基础知识
  • 强化学习的数学原理学习笔记 - 基于模型(Model-based)
  • 强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)
  • 强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)
  • 强化学习的数学原理学习笔记 - 值函数近似(Value Function Approximation)
  • 强化学习的数学原理学习笔记 - 策略梯度(Policy Gradient)
  • 强化学习的数学原理学习笔记 - Actor-Critic

参考资料:

  1. 【强化学习的数学原理】课程:从零开始到透彻理解(完结)(主要)
  2. Sutton & Barto Book: Reinforcement Learning: An Introduction
  3. 机器学习笔记

*注:【】内文字为个人想法,不一定准确

概览:RL方法分类

图源:https://zhuanlan.zhihu.com/p/36494307
*图源:https://zhuanlan.zhihu.com/p/36494307

RL算法中存在两种策略:

  • 行为策略(Behavior policy):与环境交互,生成experience采样
  • 目标策略(Target policy):迭代更新,直到收敛至最优策略

据此,可以将RL算法分为两类:

  • On-policy:Behavior policy即为Target policy,例如MC、Sarsa等
  • Off-policy:Behavior policy与Target policy可以不同,例如Q-learning等
    • 好处:从别的策略得到的经验中学习,允许更为广泛的探索而不必考虑利用

*On-policy可以看作是Off-policy的一种特殊情况,因为Off-policy允许两种策略相同。

基于模型(Model-Based)

基于模型:环境MDP的模型已知,基于动态规划(DP)求解

  • 优:提供了RL的理论基础
  • 劣:假设过强(完美的环境模型,比如状态转移矩阵),计算开销过高

基于模型的方法:

  • 策略迭代:收敛速度较快,适用于小状态空间
  • 值迭代:计算量较少,适用于大状态空间

*值迭代可以看作是策略迭代的一种特殊情况

值迭代(Value Iteration)

算法步骤:在第 k k k次迭代中

  • 策略更新:给定 v k v_k vk,求解对应的策略 π k + 1 = arg max ⁡ π ( r π + γ P π v k ) \pi_{k+1} = \argmax_\pi (r_\pi + \gamma P_\pi v_k) πk+1=argmaxπ(rπ+γPπvk)
  • 值更新:根据策略 π k + 1 \pi_{k+1} πk+1,计算 v k + 1 = r π k + 1 + γ P π k + 1 + v k v_{k+1} = r_{\pi_{k+1}} + \gamma P_{\pi_{k+1}} + v_k vk+1=rπk+1+γPπk+1+vk
    • *此处的 v k v_k vk并非状态值,只是一个值,因为其并不满足贝尔曼方程

*详细步骤见强化学习的数学原理学习笔记 - 基础知识中求解贝尔曼最优方程部分。

算法公式:
v k + 1 ( s ) = max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] v_{k+1} (s) = \max_a \sum_{s', r} p(s', r|s, a) [r + \gamma v_k(s')] vk+1(s)=amaxs,rp(s,rs,a)[r+γvk(s)]

伪代码:

v[0] = init_state_value()

while ||v_[k] - v_[k-1]|| >= threshold:
    for s in StateSpace:
        for a in ActionSpace:
            q[a] = calculate_q_value(s, a, v_[k])
    
    	a_star = get_optimal_action(q)

        # policy update
        pi[k+1] = update_policy(a_star)

        # value update
        v[k+1] = update_value(pi[k+1], v_[k])

    k = k + 1

值迭代可以看作将贝尔曼优化方程转为一个更新规则:先计算最优值函数,再从中提取对应的策略作为最优策略

🟦策略迭代(Policy Iteration)

反复执行策略评估(Policy Evaluation,PE)和策略提升(Policy Improvement,PI),直至收敛至最优策略。【*能够收敛的要求:有限MDP仅有有限个策略】

  • 策略评估:评价某个策略本身如何,即计算任意策略 π \pi π的状态值函数 v π v_{\pi} vπ,称之为预测问题(Prediction Problem )
    • v k + 1 ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v k ( s ′ ) ] v_{k+1} (s) = \sum_a \pi (a|s) \sum_{s', r} p(s', r|s, a) [r + \gamma v_k(s')] vk+1(s)=aπ(as)s,rp(s,rs,a)[r+γvk(s)]
      • 注意这里与值迭代的区别:值迭代直接求解最优的状态值,而策略评估仅是计算当前策略的状态值(并不一定是最优)
  • 策略提升:寻找每个状态下的最好的动作
    • 考虑在状态 s s s下找到了一个优于现有策略 π \pi π的动作 a = π ′ ( s ) ≠ π ( s ) a = \pi'(s) \neq \pi(s) a=π(s)=π(s),则对应的动作值函数 q π ( s , a ) q_{\pi} (s, a) qπ(s,a)不低于状态值函数 v π ( s ) v_{\pi} (s) vπ(s),即: q π ( s , π ′ ( s ) ) ≥ v π ( s ) q_{\pi}(s, \pi'(s)) \geq v_{\pi} (s) qπ(s,π(s))vπ(s)
    • 新策略 π ′ \pi' π不差于现有策略 π \pi π,即满足: v π ′ ( s ) ≥ v π ( s ) v_{\pi'} (s) \geq v_{\pi} (s) vπ(s)vπ(s)
    • 那么策略提升就是以贪心的方式选择每个状态下能使动作值函数最大的动作,进而更新策略: π ′ ( s ) = arg max ⁡ a q π ( s , a ) = arg max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ v π ( s ′ ) ] \pi'(s) = \argmax_a q_\pi (s, a) = \argmax_a \sum_{s', r} p(s', r|s, a) [r + \gamma v_\pi(s')] π(s)=argmaxaqπ(s,a)=argmaxas,rp(s,rs,a)[r+γvπ(s)]

算法步骤:在第 k k k次迭代中,给定策略 π k \pi_k πk(随机初始策略: π 0 \pi_0 π0

  • 策略评估:计算 π k \pi_k πk的状态值 v π k = r π k + γ P π k v π k v_{\pi_k} = r_{\pi_k} + \gamma P_{\pi_k} v_{\pi_k} vπk=rπk+γPπkvπk
    • *迭代中嵌套迭代,求解每次迭代策略的迭代状态值
  • 策略提升:根据 π k \pi_k πk的状态值 v π k v_{\pi_k} vπk,求解当前的最优策略 π k + 1 \pi_{k+1} πk+1

伪代码:

pi[0] = init_policy()

while not pi[k].is_converged:
    # policy evaluation
    while ||v_[j] - v_[j-1]|| >= threshold:
        for s in StateSpace:
            v_[j+1][s] = calculate_state_value(pi[k], v_[j][s])
        j = j + 1

    # policy improvement
    for s in StateSpace:
        for a in ActionSpace:
            q[a] = calculate_q_value(s, a, v[j])
    
    	a_star = get_optimal_action(q)
        pi[k+1] = update_policy(a_star)

	k = k + 1

*策略迭代中,距离最终目标状态(考虑一个episode的最终状态)越近的状态的策略会越早收敛,离目标状态越远的状态的策略会越晚收敛

🟡截断策略迭代(Truncated Policy Iteration)

截断策略迭代是值迭代与策略迭代的一般化推广;反过来讲,值迭代与策略迭代都是截断策略迭代的特殊情况。

值迭代 vs. 策略迭代:

  • v 0 = v π 0 v_0 = v_{\pi_0} v0=vπ0,使得二者具有相同的初始值,便于比较
  • 发现:二者的区别在于第四步的 v π 1 ≠ v 1 v_{\pi_1} \neq v_1 vπ1=v1,因此后续的所有迭代中,二者结果均不相同(收敛前)
    • v π 1 v_{\pi_1} vπ1是由贝尔曼最优方程计算出的状态值,而 v 1 v_1 v1只是一个值(不是状态值)

image.png

可以发现,值迭代与策略迭代的根本差异,在于基于贝尔曼最优公式求解状态值的过程

  • 值迭代:仅基于初始状态值,求解一次贝尔曼最优公式
  • 策略迭代:在策略评估部分,每次迭代求解贝尔曼公式(∞次)
    • *实际中,当两次迭代的状态值差异不大的时候,可以认为已经收敛了

而截断策略迭代就是更一般化的情况:迭代 j j j次计算状态值,其中 1 ≤ j < ∞ 1\leq j < \infin 1j<
image.png
注:实际上,策略评估与策略提升是一种非常通用的强化学习思想(称为通用策略迭代,GPI),并在许多后续的强化学习方法(如蒙特卡洛方法、时序差分学习等)中有着广泛应用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tiff图片像素轻松降低,批量管理助您无忧优化!

在数字图像处理中&#xff0c;降低图片像素是一个常见的需求。无论是为了节省存储空间&#xff0c;还是为了适应不同的显示需求&#xff0c;像素的调整都至关重要。然而&#xff0c;逐个处理图片既耗时又容易出错。现在&#xff0c;有了我们的工具&#xff0c;tiff图片像素降低…

所有行业的最终归宿-知识付费saas租户平台 打造知识付费平台

随着科技的不断进步和全球化的加速发展&#xff0c;我们生活在一个信息爆炸的时代。各行各业都在努力适应这一变化&#xff0c;寻找新的商业模式和增长机会。在这个过程中&#xff0c;一个趋势逐渐凸显出来&#xff0c;那就是知识付费。可以说&#xff0c;知识付费正在成为所有…

OpenHarmony沙箱文件

一.前言 1.前景提要 DevEcoStudio版本&#xff1a;DevEco Studio 3.1 Release SDK版本&#xff1a;3.2.2.5 API版本&#xff1a;9 2.概念 在openharmony文件管理模块中&#xff0c;按文件所有者分类分为应用文件和用户文件和系统文件。 1&#xff09;沙箱文件。也叫做应…

Docker实战06|深入剖析Docker Run命令

前几篇文章中&#xff0c;重点讲解了Linux Namespace、Cgroups、AUFS的核心原理&#xff0c;同样也是Docker的底层原理实现。目录如下&#xff1a; • 《Docker实战01&#xff5c;容器与开发语言》 • 《Docker实战02&#xff5c;Namespace》 • 《Docker实战03&#xff5c;C…

SwiftUI 打造一款收缩自如的 HStack(四):Layout 自定义布局

概览 我们分别在前 3 篇博文中完成了一款可收缩“HStack”的 3 种不同解法,它们分别是: 使用 HStack 以求得“原汁原味”;使用对齐 + ZStack 以充分利用最大的可操控性;使用“魔镜”实现子视图 @ViewBuilder 更简洁多语法构造器;虽然我们最后可以达偿所愿,但是上面这几种…

uniapp自定义封装只有时分秒的组件,时分秒范围选择

说实话&#xff0c;uniapp和uview的关于只有时分秒的组件实在是不行。全是日历&#xff0c;但是实际根本就不需要日历这玩意。百度了下&#xff0c;终于看到了一个只有时分秒的组件。原地址&#xff1a;原地址&#xff0c;如若侵犯请联系我删除 <template><view clas…

文本可视化之词云图的使用

环境安装&#xff1a; pip install wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple/ conda install wordcloud # -i 后面加镜像源网站​ WordCloud(background_color,repeat,max_words600,height480, width584, max_font_size,font_path colormap,mask,mode,coll…

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…

建筑模板每平方价格怎么算?

在建筑行业中&#xff0c;建筑模板是一种常用的辅助材料&#xff0c;主要用于浇筑混凝土时形成所需的结构形状。了解建筑模板的定价方式对于预算控制和成本估算至关重要。本文将详细介绍建筑模板每平方米价格的计算方法。 1. 建筑模板的类型和特点建筑模板的种类繁多&#xff0…

大模型笔记【2】 LLM in Flash

Apple最近发表了一篇文章&#xff0c;可以在iphone, MAC 上运行大模型&#xff1a;【LLM in a flash: Efficient Large Language Model Inference with Limited Memory】。 主要解决的问题是在DRAM中无法存放完整的模型和计算&#xff0c;但是Flash Memory可以存放完整的模型。…

DRF-源码解析-1.2-CBV流程(视图函数执行流程)

在DRF中&#xff0c;所有drf的操作都是在路由匹配完成后&#xff0c;即视图函数执行前和执行后做文章的。 一、代码准备 演示的视图&#xff1a; class TestAPIView(APIView):def get(self,request)return Respponse({code:200,msg:测试通过}) 演示的路由&#xff1a; path…

Samtec卓越应用 | SEARAY:最大限度提高设计灵活性和密度

【摘要/前言】 SEARAY™是Samtec 的高速、高密度栅格阵列连接器系列。SEARAY™为设计人员提供了大量的设计灵活性&#xff0c;远远超过业内任何其他阵列产品。 【灵活性】 SEARAY™ 是一种 1.27 毫米 X 1.27 毫米的栅格。它是一种开放式引脚字段栅格阵列&#xff0c;即引脚不…

Jmeter扩展函数?年薪50W+的测试大佬教你怎么玩

很多同学&#xff0c;都问我&#xff1a;“老师&#xff0c;我的 jmeter 里面&#xff0c;怎么没有 MD5 函数&#xff0c;base64 函数也没有&#xff0c;我是不是用了假的 jmeter&#xff1f;” 哈哈哈&#xff0c;不是的。jmeter 的函数&#xff0c;有自带函数和扩展函数两大…

Apollo 9.0搭建问题记录

虚拟机安装 可以看这个&#xff1a;https://blog.csdn.net/qq_45138078/article/details/129815408 写的很详细 内存 为了学习 Apollo &#xff0c;所以只是使用了虚拟机&#xff0c;内存得大一点&#xff08;128G&#xff09;&#xff0c;第一次&#xff0c;就是因为分配内…

Python办公自动化 – 对数据进行正则表达式匹配

Python办公自动化 – 对数据进行正则表达式匹配 以下是往期的文章目录&#xff0c;需要可以查看哦。 Python办公自动化 – Excel和Word的操作运用 Python办公自动化 – Python发送电子邮件和Outlook的集成 Python办公自动化 – 对PDF文档和PPT文档的处理 Python办公自动化 – …

2023年度总结:技术沉淀、持续学习

2023年度总结&#xff1a;技术沉淀、持续学习 一、引言 今年是我毕业的第二个年头&#xff0c;也是完整的一年&#xff0c;到了做年终总结的时候了 这一年谈了女朋友&#xff0c;学习了不少技术&#xff0c;是充实且美好的一年&#xff01; 首先先看年初定的小目标&#xf…

安达发|基于APS排程系统的PDM功能

APS系统&#xff08;Advanced Planning and Scheduling&#xff0c;先进计划与排程&#xff09;是一种基于APS系统&#xff08;Advanced Planning and Scheduling&#xff0c;先进计划与排程&#xff09;是一种基于供应链管理和生产管理的综合性软件系统。它通过整合企业内外部…

C# Winform 在低DPI创建窗体后,在高DPI运行时,窗体会自动拉伸,导致窗体显示不全

C# Winform 在低DPI创建窗体后&#xff0c;在高DPI运行时&#xff0c;窗体会自动拉伸&#xff0c;导致窗体显示不全&#xff0c; 比如在分辨率为100% 的电脑创建C#项目&#xff0c;当运动到分辨率为125%的电脑运行时&#xff0c;后者运行的窗体会自动拉伸&#xff0c;窗体显示…

C++ OpenGL 3D Game Tutorial 2: Making OpenGL 3D Engine学习笔记

视频地址https://www.youtube.com/watch?vPH5kH8h82L8&listPLv8DnRaQOs5-MR-zbP1QUdq5FL0FWqVzg&index3 一、main类 接上一篇内容&#xff0c;main.cpp的内容增加了一些代码&#xff0c;显得严谨一些&#xff1a; #include<OGL3D/Game/OGame.h> #include<i…

5分钟使用Hologres实时湖仓加速分析挑战赛来袭

活动简介 5分钟快速使用Hologres实时湖仓能力&#xff0c;加速分析数据湖OSS上Hudi、Delta、Paimon、ORC等格式数据&#xff0c;赢取精美礼品 活动入口&#xff1a;Hologres实时湖仓分析挑战赛-阿里云开发者社区 或点击文末【阅读全文】参与挑战 活动时间 2024年1月4日-202…