值迭代和策略迭代【强化学习】

news/2024/5/18 22:17:05 标签: 强化学习, 策略迭代, 值迭代

强化学习笔记

主要基于b站西湖大学赵世钰老师的【强化学习的数学原理】课程,个人觉得赵老师的课件深入浅出,很适合入门.

第一章 强化学习基本概念
第二章 贝尔曼方程
第三章 贝尔曼最优方程
第四章 值迭代策略迭代


文章目录

  • 强化学习笔记
  • 一、Value Iteration
    • 1 原理
    • 2 实例
  • 二、Policy Iteration
    • 1 原理
    • 2 实例
    • 参考资料


一、Value Iteration

1 原理

上一章讲贝尔曼最优方程(BOE)时,介绍了如何求解贝尔曼最优方程,将压缩映射原理应用到BOE上,我们得到了一个求解BOE的迭代算法,而那个迭代算法就是Value Iteration.回顾一下迭代算法的格式:
v k + 1 = f ( v k ) = max ⁡ π ( r π + γ P π v k ) , k = 1 , 2 , 3 … v_{k+1}=f(v_k)=\max_{\pi}(r_\pi+\gamma P_\pi v_k),\quad k=1,2,3\ldots vk+1=f(vk)=πmax(rπ+γPπvk),k=1,2,3这个迭代可以分解为两个步骤:

  1. 步骤1:策略更新
    这一步就是根据 v k v_k vk,更新策略
    π k + 1 = arg ⁡ max ⁡ π ( r π + γ P π v k ) \begin{aligned}\pi_{k+1}=\arg\max_{\pi}(r_{\pi}+\gamma P_{\pi}v_{k})\end{aligned} πk+1=argπmax(rπ+γPπvk)
  2. 步骤2:状态值更新
    v k + 1 = r π k + 1 + γ P π k + 1 v k \begin{aligned}v_{k+1}&=r_{\pi_{k+1}}+\gamma P_{\pi_{k+1}}v_k\end{aligned} vk+1=rπk+1+γPπk+1vk

上面都是用向量的形式写的,我们来具体看一下每个状态 s s s每一步是怎么做的:

截屏2024-03-20 14.13.00

截屏2024-03-20 14.13.59

2 实例

仍然来看agent-网格例子,下图的 a 1 , a 2 , a 3 , a 4 , a 5 a_1,a_2,a_3,a_4,a_5 a1a2a3,a4,a5分别代表向上、向右、向下、向左、原地不动.

截屏2024-03-20 14.16.48

给定一个初始值 v 0 ( s ) v_0(s) v0(s),可以计算出 q 0 ( s , a ) q_0(s,a) q0(s,a),每个状态下选择最大的 q q q值对应的动作作为策略.

截屏2024-03-20 14.19.34

第一次迭代我们发现 s 1 s_1 s1的策略不是最优的,继续迭代,我们发现通过两次迭代就能得到最优策略,当然算法停止还得根据停机准则来.

截屏2024-03-20 14.21.53

二、Policy Iteration

1 原理

相较于值迭代算法,策略迭代算法是给定一个初始策略而不是给定一个初始的 v v v。下面首先介绍一下Policy Iteration算法框架:

  1. 首先给定随机初始策略 π 0 \pi_0 π0.
  2. 第一步:策略评估(PE)
    这一步是计算 π k \pi_k πk的状态值 v π k v_{\pi_k} vπk是:
    v π k = r π k + γ P π k v π k \begin{aligned}v_{\pi_k}&=r_{\pi_k}+\gamma P_{\pi_k}v_{\pi_k}\end{aligned} vπk=rπk+γPπkvπk
  3. 第二步:策略改进(Pl)
    基于上一步算出的 v π k v_{\pi_k} vπk,更新策略:
    π k + 1 = arg ⁡ max ⁡ π ( r π + γ P π v π k ) \pi_{k+1}=\arg\max_{\pi}(r_{\pi}+\gamma P_{\pi}v_{\pi_k}) πk+1=argπmax(rπ+γPπvπk)

下面我们具体来看一下每一步是怎么做的,首先来看PE,我们发现给定了策略,我们要求的是 v π k v_{\pi_k} vπk这不就是解贝尔曼方程吗!前面介绍过解贝尔曼方程的两种方法,所以这里我们同样可以用迭代法来求解得到一个 v π k v_{\pi_k} vπk的近似值.

截屏2024-03-20 15.46.15

再来看PI,得到 v π k v_{\pi_k} vπk之后我们需要更新策略,这里就和Value Iteration一样了,可以采用greedy policy的方式更新策略,根据 v π k v_{\pi_k} vπk计算 q ( s , a ) q(s,a) q(s,a),选择每个状态最大的 q q q对应的动作即可。

截屏2024-03-20 15.48.37

值得注意的是在第二步策略更新中,我们更新的策略一定比原策略好吗?可以证明确实是这样的,详见参考资料对应的章节,只要通过这样的迭代一定会收敛到最优策略。

2 实例

仍然来看agent-网格例子,(a)中是给定的初始策略。

截屏2024-03-20 15.59.21

第一步就是解贝尔曼方程,下面给了两种方法,算法中常用的是迭代法.

截屏2024-03-20 16.00.15

第二步是策略改进,和Value Iteration一样的做法.

截屏2024-03-20 16.00.55

参考资料

  1. Zhao, S… Mathematical Foundations of Reinforcement Learning. Springer Nature Press and Tsinghua University Press.
  2. Sutton, Richard S., and Andrew G. Barto. Reinforcement learning: An introduction. MIT press, 2018.

http://www.niftyadmin.cn/n/5456078.html

相关文章

【Java程序设计】【C00345】基于Springboot的船舶监造管理系统(有论文)

基于Springboot的船舶监造管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 🍅文末点击卡片获取源码🍅 开发环境 运行环境:推荐jdk1.8; 开发工具:eclipse以及i…

【C语言】tcp_sendmsg_locked

一、讲解 tcp_sendmsg_locked 函数是 Linux 内核中实现 TCP 数据发送的一个核心函数。这个函数被调用来将用户空间的数据通过 TCP 发送出去。以下是该函数的基本工作流程的中文解释: 1. 函数初始化和检查: - 它首先检查是否使用了 TCP 零拷贝发送&am…

std::map的使用

需求 插入 std::map<uint8_t, std::string> requestInfo_; requestInfo_.insert( std::pair<int, std::string>(taskid, topicStr) ); 检索 m.find(key) ! m.end() // key值存在 删除

Es之正排索引与倒排索引

文章目录 概要一、正排索引二、倒排索引三、Q&A四、参考 概要 很早就研究了Es倒排索引的具体实现&#xff0c;但对倒排索引和正派索引的定义不是那么清晰&#xff0c;本文就是简述本人对二者的理解。 正排索引和倒排索引的概念来源于 正排索引是文档(ID)到关键词的映射&am…

3723. 字符串查询:做题笔记

目录 思路 代码 注意点 3723. 字符串查询 思路 这道题感觉和常见的前缀和问题不太一样&#xff0c;前缀和的另一种应用&#xff1a;可以统计次数。 这道题我们想判断一个单词的其中一段子序列A是否可以通过重新排列得到另一段子序列B。 我看到这道题的时候想着可能要判…

SQLiteC/C++接口详细介绍sqlite3_stmt类(十三)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;十二&#xff09; 下一篇&#xff1a; SQLite数据库文件损坏的可能几种情况 51、sqlite3_stmt_scanstatus_reset sqlite3_stmt_scanstatus_reset 函数用于重置指…

Linux的介绍以及其发展历史

文章目录 前言一、技术是推动社会发展的基本动力1.人为什么能成为万物之长呢&#xff1f;2.人为什么要发明工具&#xff0c;进行进化呢&#xff1f;3.人是如何发明工具的&#xff1f;4.为什么要有不同的岗位和行业&#xff1f; 二、计算机(操作系统)发展的基本脉络1.第一台计算…

STM32通用输入输出

一、GPIO介绍 功能&#xff1a; 输入&#xff08;Input&#xff09;&#xff1a; 浮空:输入没有接上拉和下拉 模拟&#xff1a;输入没有走上拉和下拉走的是模拟输入 上拉&#xff1a;上拉电阻是合上的&#xff0c;接入点为上拉电阻 下拉&#xff1a;下拉电阻是合上的 输…