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

文章目录

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


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

系列博文索引:(更新中)

  • 强化学习的数学原理学习笔记 - RL基础知识
  • 强化学习的数学原理学习笔记 - 基于模型(Model-based)
  • 强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)
  • 强化学习的数学原理学习笔记 - 时序差分学习(Temporal Difference)

参考资料:

  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 updatepi[k+1] = update_policy(a_star)# value updatev[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 evaluationwhile ||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 improvementfor 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.mzph.cn/news/604896.shtml

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

相关文章

YOLOv5改进 | 损失函数篇 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了YOLOv5的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Focus”思想,创造了一系列新的损失函数。这些组合形式的损失函数超过了二十余种,每种都针对特定的…

K8S--安装MySQL8(单机)

原文网址&#xff1a;K8S--安装MySQL8&#xff08;单机&#xff09;-CSDN博客 简介 本文介绍K8S部署MySQL8&#xff08;单机&#xff09;的方法。 本文的目标 1.通过PV和PVC&#xff08;hostPath方式&#xff09;存储MySQL的数据 2.通过Deployment、Service部署MySQL8&…

Java异常机制:从混乱到控制的错误管理艺术

&#x1f451;专栏内容&#xff1a;Java⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、异常的体系结构1、异常的体系结构2、异常的分类 二、异常的处理1、异常的抛出2、异常的捕获2.1、异常声明throws2.2、try-c…

leaflet:加载本地shp文件,并在地图上显示出来 (138)

第138个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载本地shp文件,利用shapefile读取shp数据,转换为json,利用L.geoJSON()在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果安装加载shapefile.j…

Docker使用扩展

日升时奋斗&#xff0c;日落时自省 目录 1、容器 1.1、容器的生命周期 1.1.1、容器OOM 1.1.2、容器异常退出 1.1.3、容器暂停 1.2、容器命令 1.2.1、创建容器 1.2.2、启动容器 1.2.3、容器日志 1.2.4、容器交互 1.2.5、容器停止 1.2.6、扩展 1.3、综合演示 2、存…

ChatGPT | 模型架构 | 应用 | 思考

介绍 ChatGPT 3.5 是 OpenAI 推出的语言模型的一个版本&#xff0c;是 GPT&#xff08;生成式预训练模型&#xff09;系列的一部分。在自然语言理解和生成方面具有强大的能力&#xff0c;可以应用于问答系统、文本生成、翻译和对话系统等多个领域。 模型架构 GPT-3.5&#x…

【代码】Keras3.0:实现残差连接

简介 残差连接是一种非常重要的网络结构创新&#xff0c;最早被广泛应用于ResNet&#xff08;Residual Neural Network&#xff09;模型中&#xff0c;由何凯明等人在2015年的论文"Deep Residual Learning for Image Recognition"中提出。 核心思想 通过引入“short…

Linux stm32串口下载程序

一、工具 使用stm32flash进行串口下载 二、stm32flash安装 sudo apt-get install stm32flash 三、查看串口设备名称 先拔掉串口运行下面指令&#xff0c;获得所有设备名称,插上串口再运行一次&#xff0c;新增的就是串口设备名称&#xff0c;记住串口设备名称&#xff0c;以…

【Hadoop】说下HDFS读文件和写文件的底层原理?

文件读取文件的写入 文件读取 客户端调用 FileSystem 对象的 open&#xff08;&#xff09;函数&#xff0c;打开想要读取的文件。其中FileSystem 是 DistributeFileSystem 的一个实例&#xff1b;DistributedFileSystem 通过使用 RPC&#xff08;远程过程调用&#xff09; 访N…

Unity 了解Input Manage下默认的输入轴

在Unity菜单Edit->Project Settings->Input Manager->Axes下有一些默认的输入轴&#xff0c;如 这些输入轴代表不同类型的输入&#xff0c;其中&#xff1a; Horizontal&#xff1a;水平移动输入轴。通常与键盘的左右箭头键、A和D键、游戏手柄的左摇杆水平轴等相关联…

【AI视野·今日CV 计算机视觉论文速览 第282期】Wed, 3 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Wed, 3 Jan 2024 Totally 70 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Street Gaussians for Modeling Dynamic Urban Scenes Authors Yunzhi Yan, Haotong Lin, Chenxu Zhou, Weijie Wang, Haiya…

nvm安装教程,实现node的多版本管理(图文界面)

目录 前言1. 安装配置2. 使用方式 前言 由于前端项目不同的node版本&#xff0c;导致重复的卸载安装会比较麻烦&#xff0c;对此需要nvm来管理 类似python版本的差异&#xff0c;可以使用虚拟环境管理&#xff08;anconda&#xff09;&#xff0c;在我原先的文章也有讲解过 …

从法律和经济学角度看工业数据共享

文章目录 前言一、工业数据利用现状二、工业数据的新特点三、数据再利用和储备的现状(一)防止先行者通过数据进行垄断(二)数据储备情况以及数据成本、数量和价值四、工业数据共享的法律经济学模型分析情形一:在没有数据共享政策的情况下,尝试给出如下命题。情形二:有数据…

LeetCode-加一(66)

题目描述&#xff1a; 给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 思路&#xff1a; 这里主要分…

《路由与交换技术》---简答题

1、什么是STP&#xff1f;解决什么问题&#xff1f; STP代表生成树协议&#xff08;Spanning Tree Protocol&#xff09;。它是用于在计算机网络中解决环路问题的一种协议。 STP的主要目标是消除环路&#xff0c;保持网络的稳定性和可靠性&#xff0c;同时提供冗余路径以实现网…

快速实现产品智能:用 AI 武装你的 API | 开源日报 No.138

openchatai/OpenCopilot Stars: 3.8k License: MIT OpenCopilot 是一个允许你拥有自己产品的 AI 副驾驶员的项目。它集成了产品底层 API&#xff0c;并可以在需要时执行 API 调用。它使用 LLMs 来确定用户请求是否需要调用 API 端点&#xff0c;然后决定调用哪个端点并根据给定…

【办公软件】手机当电脑摄像头Iriun Webcam软件安装与试用

家里电脑是台式的没有摄像头&#xff0c;但老安卓手机有一台。本来想用小爱摄像头做电脑摄像头&#xff0c;但是发现像素有点差&#xff0c;捣鼓了半天没成功。看网上别人都用旧手机来当电脑摄像头&#xff0c;并且也能使用音频&#xff0c;所以还是用旧手机做摄像头比较香。 …

爆肝整理,接口测试+为什么要做接口测试总结,策底贯通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是接口测试…

创建Vue3项目

介绍 使用命令创建vue3项目 示例 第一步&#xff1a;执行创建项目命令 npm create vuelatest第二步&#xff1a;填写输入项 第三步&#xff1a;进入study-front-vue3文件夹 cd study-front-vue3第四步&#xff1a;执行npm命令安装依赖 npm install第五步&#xff1a;运行…

YOLO蒸馏原理篇之---MGD、CWD蒸馏

一、MGD蒸馏 论文地址:https://arxiv.org/abs/2205.01529 论文翻译:https://mp.weixin.qq.com/s/FSvo3ns2maTpiTTWsE91kQ 1.1 摘要 知识蒸馏已成功应用于各种任务。当前的蒸馏算法通常通过模仿教师的输出来提高学生的表现。本文表明,教师还可以通过指导学生的特征恢复来提…