强化学习的数学原理-07时序差分方法

news/2024/10/29 21:12:42/文章来源:https://www.cnblogs.com/cxy8/p/18514476

目录
  • 引入
  • TD learing of state values
  • TD learing of action values Sarsa
  • TD learing of action values Expected Sarsa
  • TD learing of action values n-step Sarsa
  • TD learing of optimal action values:Q-learning
  • a unified point of view

引入

1730182586924.png

1730182626855.png

1730182679541.png

这三个例子是层层递进的,都可以用\(RM\)算法去解决

TD learing of state values

这个算法是求解给定策略\(\pi\)\(state \; value\),为什么求解\(state \; value\)其实就又回到了之前的\(PE\),有了\(state \; value\)就可进行\(policy \; improvement\)

\(TD \; learning\)是指的一类强化学习算法。

\(TD \; learning\)也是一种\(model \; free\)的算法他也是依赖于\(data\)

\(TD \;\)算法需要的数据有\((s_0,r_1,s_1,...,s_t,r_{t+1},s_{t+1},...)\),表示成另一种形式就是\((s_t,r_{t+1},s_{t+1})\)这些数据的生成依赖于给定的策略\(\pi\)

下面是\(TD\)算法的形式

\[v_{t+1}(s_t)=v_t(s_t)-\alpha_t (s_t)\left[ v_t(s_t) - [r_{t+1}+\gamma v_t(s_{t+1})] \right] \]

\[v_{t+1}(s) = v_t(s), \forall s \neq s_t \]

\(where \; t = 0,1,2,...\),这里\(v_t(s_t)\)\(state \; value \; v_{\pi}(s_t)\)的估计

\(\alpha_t(s_t)\)是状态\(s_t\)\(t\)时刻的学习率

  • \(t\)时刻,只有被\(visited\)\(state \; s_t\)被更新,而其他未被访问的\(states \; s \neq s_t\)保持不变
  • 一般第二个式子很多地方都会省略,但这里写出来更清楚

1730193628454.png

  • \(TD \; target \;\):\(\bar{v_t}r_{t+1} +\gamma v(s_{t+1})\)实际上希望\(v_t\)朝着\(TD \; target\)的方向去改进
  • \(TD \; error \;\)\(\delta_t = v(s_t)-[r_{t+1}+\gamma v_t(s_{t+1})] = v(s_t) - \bar{v_t}\)

为什么把\(\bar{v_t}\)叫做\(TD \; target ?\)

​ 这是因为算法是要将\(v(s_t)\)朝着\(\bar{v_t}\)的方向改进,也就是说下一个时刻 \(v(s_t)\)\(\bar{v_t}\)会更接近,所以\(\bar{v_t}\)叫做\(TD \; target\)

\[v_{t+1}(s_t)=v_t(s_t)-\alpha_t(s_t)[v_t(s_t)-\bar{v_t}] \]

对上面的方程进行等价变形

\[v_{t+1}(s_t) - \bar{v_t}=v_t(s_t)-\bar{v_t}-\alpha_t(s_t)[v_t(s_t) - \bar{v_t}] \]

\[v_{t+1}(s_t)- \bar{v_t} = [1-\alpha_t(s_t)][v_t(s_t) - \bar{v_t}] \]

上面的方程在描述一件事情:\(v_t\)\(\bar{v_t}\)之间差的变化,左边是\(t+1\)时刻的,右边是\(t\)时刻的.

对上面方程两边求绝对值.

\[\mid v_{t+1}(s_t)- \bar{v_t} \mid = \mid [1-\alpha_t(s_t)]\mid \mid [v_t(s_t) - \bar{v_t}] \mid \]

因为\(\alpha_t(s_t)\)是一个比较小的正数,所以\(0<1-\alpha_t(s_t)<1\)

所以就有:

\[\mid v_{t+1}(s_t)- \bar{v_t} \mid \le \mid [v_t(s_t) - \bar{v_t}] \mid \]

上面的式子就说明在下一个时刻\(t+1\),\(v(s_t)\)\(\bar{v_t}\)的距离更近了,所以这个算法就是把\(v_t(s_t)\)朝着\(\bar{v_t}\)的方向改进.


如何理解\(TD \; error\)

\[\delta_t = v(s_t) - [r_{t+1}+\gamma v(s_{t+1})] \]

  • 描述在两个时刻上面的\(difference\)
  • 描述\(v_{\pi}和v_{t}\)之间的误差,也就是说当\(v_t=v_{\pi}\)\(\delta_t=0\),反过来说当\(\delta_t\neq0\)时,\(v_t \neq v_{\pi}\)

1730195434109.png


上面的\(TD\)算法仅仅能用来估计\(state \; value\),不能直接估计\(action \; value\),同时也不能找到\(optimal \; policies\)

TD learing of action values Sarsa

\(Sarsa\)算法及其变形在做的事情是给定一个策略能够估计出来一个\(action \; value\),这也是\(policy \; evaluation \; (PE)\)的过程,然后再结合\(policy \; improvement \; (PE)\)就可以找到最优策略.


\(First\),给定一个\(policy \; \pi\)去估计\(action \; value\)

假设我们有一些\(experience \; \{(s_t, a_t, r_{t+1}, s_{t+1}, a_{t+1})\}_t\)

有了上面的\(experience\),我们就可以进行算法了

\[q_{t+1}(s_t,a_t)=q_t(s_t,a_t)-\alpha_t(s_t, a_t)[q_t(s_t, a_t)-[r_{t+1}+\gamma q_{t}(s_{t+1}, a_{t+1})]] \]

\[q_{t+1}(s,a)=q_{t}(s,a), \forall(s,a) \neq(s_t,a_t) \]

\(where \; t=0,1,2,...\)

  • \(q_t(s_t,a_t)\)\(q_{\pi}(s_t,a_t)\)的一个估计
  • \(\alpha_t(s_t,a_t)\)是依赖于\((s_t,a_t)\)的学习率

\(sarsa\)算法是\(state \; action \; reward \; state \; action \;\)的首字母的缩写

\(sarsa\)算法和上面的\(TD \; learning\)基本上是一摸一样的,只不过是将对状态的估计,变成了对动作\((action \; value)\)的估计

\(sarsa\)实际上也是在求解一个贝尔曼公式,只不过这个贝尔曼公式的形式和\(TD \; learning\)中的贝尔曼公式的形式不同

\[q_{\pi}(s,a)=\mathbb{E}[R+\gamma q_{\pi}(S^{'}, A^{'}|s,a)], \forall s,a \]

和之前使用\(state \; value\)不同的是,这个贝尔曼期望方程是使用\(action \; value\)来表示的,刻画了不同的\(action \; value\)之间的关系.


上面算法只是对\(action \; value\)进行求解,为了找到最优策略,还需要进行\(policy \; improvement(PE)\)

实际上\(Sarsa\)算法通常就指的是将\(Sarsa\)\(policy \; improvement \; step\)

1730196830078.png

注意上面\(policy \; improvement\)是采用的之前内容中的\(\epsilon-gready\)算法


关于传统的\(Policy \; iteration\)和广义的\(GPI\)

1730197254319.png

TD learing of action values Expected Sarsa

这个算法和下面的\(n-step \; sarsa\)算法实际上是没有那么重要的,但是从一个经典算法出发,然后去推广改进,这种思路对于做研究来说是非常常见的

1730197693831.png

相比于原始的\(sarsa\),需要计算期望,也就需要更大的计算量,但是随机性减少了

TD learing of action values n-step Sarsa

\(n-step \; Sarsa\)包含了\(Sarsa\)\(Monte \; Carlo \; learning\)两种方法

先复习一下\(action \; value\)的定义

\[q_{\pi}(s,a)=\mathbb{E}[G_t \mid S_t = s, A_t = a] \]

\(discounted \; return\)的写法有很多种形式

\(Sarsa \leftarrow G_t^{(1)} = R_{t+1}+ \gamma q_{\pi}(S_{t+1}+A_{t+1})\)

\[\leftarrow G_t^{(2)} = R_{t+1} + \gamma R_{t+2} + \gamma^2 q_{\pi}(S_{t+2}+A_{t+2}) \]

\[n-step \; Sarsa \leftarrow G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + ...+\gamma^n q_{\pi}(S_{t+n}+A_{t+n}) \]

\[MC \leftarrow G_t^{\infty} = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3}+... \]

1730198567873.png

  • \(n-step \; sarsa\)所需要的数据既不像\(sarsa\)那样只需要前面5个\((s_t, a_t,r_{t+1},s_{t+1},a_{t+1})\)也不像\(MC\)那样需要整个\(episode\)d额全部,而是只需要中间一部分
  • 存在问题,在\(t\)时刻是不知道后面\((r_{t+n},s_{t+n}, a_{t+n})\)的,在t时刻虽然得到了一些数据,但是不不能立刻去更新,而是需要等待,等待需要的数据都收集到,才能进行更新

\(online\)\(offline\)\(MC\)方法是\(offline\)的,\(Sarsa\)\(online\)

\(n-step \; sarsa\)是一种特殊的\(onlilne\)

1730199021551.png

TD learing of optimal action values:Q-learning

终于结束了\(Sarsa\)来到了大名鼎鼎\(Q-learning\)

\(Q-learning\)是直接估计\(optimal \; action \; value\)不需要去做\(policy \; evaluation\)\(policy \; improvement\),而是能直接去估计最优的\(action \; value\)


下面是\(Q-learning \; algorithm :\)

\[q_{t+1}(s_t,a_t)=q_t(s_t,a_t)-\alpha_t(s_t,a_t)\left[ q_t(s_t,a_t)-[r_{t+1}+\gamma \max_{a \in A}q_t(s_{t+1},a] \right] \]

\[q_{t+1}(s,a)=q_t(s,a), \forall (s,a) \neq (s_t,a_t) \]

\(Q-learning\)\(Sarsa\)非常相似,它们之间的区别仅仅在于\(TD \; target\)不同

\(Q-learning\)\(TD \; target\)\(r_{t+1} + \gamma \max_{a \in A}q(s_{t+1}, a)\)

\(Saras\)中的\(TD \; target\)\(r_{t+1}+\gamma q_t(s_{t+1},a_{t+1})\)

\(Q-learning\)在数学上是在求解一个用\(action \; value\)表示的贝尔曼最优方程

\[q(s,a)=\mathbb{E}[R_{t+1} + \gamma \max_{a}q(S_{t+1},a|S_t=t,A_t=a)], \forall s,a \]

上面的就是大名鼎鼎\(Q-learning\)了,经过前面\(TD \; learning\)还有贝尔曼方程的铺垫,\(Q-learning\)理解起来就简单多了,下面是关于\(Q-leanring\)的一些性质


\(Off-policy\) \(vs\) \(on-policy\)

\(TD \; learning\)中存在两个\(policy\)

  • 一个是\(behavior \; policy\)是用来和环境交互生成\(experience \; samples\)
  • 另一个是\(target \; policy\)是用来不断朝着\(optimal \; policy\)去更新的

on-policy\(behavior \; policy\)\(target \; policy\)是相同的

off-policy\(behavior \; policy\)\(target \; policy\)是可以不相同的

\(Sarsa\)是一种\(on-policy\)的算法,而\(Q-learning\)\(off-policy\)的算法

1730205503353.png

如何判断一个算法是\(on-policy\)还是\(off-policy\)

  • 看算法在解决什么数学问题
  • 可以看执行算法需要什么东西

image

image

image


两种\(q-learning\)的算法伪代码

1730206385197.png

1730206422316.png

\(off-policy\)可以直接使用\(Gready\)是因为不需要用\(target \; policy\)去探索生成数据,因为生成数据是\(\pi_b\)的事情

a unified point of view

image

image

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

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

相关文章

HarmonyOS NEXT 组件市场在DevEco Studio,安装出现Fail to load plugin descriptor from file cases-master.zip

HarmonyOS NEXT开源组件市场 https://gitee.com/harmonyos-cases/cases根据gitee的下载连接,下载了cases-master.zip。如果在dev studio -settings-plugins-设置按钮-install from disk ,会报错,说明这个不是真正的插件包。 解压这个zip,在plugin文件夹下有个case_plugin-…

网络攻防实验 -- 渗透测试作业三

目录漏洞复现:1.利用宏病毒感染word文档获取shell复现2.实现CVE-2020-0796永恒之黑漏洞利用3.实现Microsoft Windows远程溢出漏洞CVE-2012-0002利用4.实现MS11-003(CVE-2001-0036)漏洞利用5.实现IE浏览器的极光漏洞利用6.实现Adobe Reader 9漏洞利用7.渗透攻击Metasploitabl…

2024网鼎杯初赛-青龙组-WEB gxngxngxn

WEB01 开局随便随便输入都可以登录,登上去以后生成了一个token和一个session,一个是jwt一个是flask框架的 这边先伪造jwt,是国外的原题 CTFtime.org / DownUnderCTF 2021 (线上) / JWT / Writeup 先生成两个token,然后利用rsa_sign2n工具来生成公钥python3 jwt_forgery.py…

网络攻防实验 -- 渗透测试作业一

一 nmap命令 SERVICE/VERSION DETECTION:-sV: Probe open ports to determine service/version infoHOST DISCOVERY:-sn: Ping Scan - disable port scan # 检测主机是否在线,不显示任何端口信息。1.使用nmap搜寻网络内活跃的主机2.使用nmap扫描目标主机端口信息和服务版本号3.…

手机app开发用的是什么语言有哪些优势

手机APP开发是一项涉及多种编程语言的任务。开发者可以根据需求、平台以及个人偏好选择合适的语言。手机app开发用的语言有:1、Java;2、Kotlin;3、Swift;4、JavaScript/TypeScript;5、Dart。作为Android平台的主要开发语言,Java拥有庞大的开发者社区和丰富的开源库。它的…

代码随想录一刷-day3

T209 长度最小子数组 核心:滑动窗口思想,如何用一个for循环达到两个循环的效果 for(int j=0;j<num.size();j++){ sum+=nums[j];//外层for循环内负责将窗口结束的坐标++; while(sum>=target){window_length=j-i+1;result=min(result,window_length);sum-=nums[ i++ ]; …

IDEA如何在线安装一个插件,超简单

前言 我们在使用IDEA开发Java应用时,经常是需要安装插件的,这些各种各样的插件帮助我们快速的开发应用,今天,就来介绍下如何在IDEA中安装插件。 那么,我们该如何安装插件呢? 如何安装插件 首先,我们打开设置面板。然后,我们点击【Plugins】,我们再在右侧点击【Marketp…

【Azure Bot Service】部署Python ChatBot代码到App Service中

问题描述 使用Python编写了ChatBot,在部署到App Service,却无法启动。 通过高级工具(Kudu站点:https://<your site name>.scm.chinacloudsites.cn/newui)查看日志显示:Failed to find attribute app in app.2024-10-25T02:43:29.242073529Z _____ …

系统类型中的标准、VHD和VHDX是什

系统类型中的标准、VHD和VHDX是指计算机系统中的不同类型和格式。标准系统类型是指常见的操作系统,如Windows、Linux和macOS等,它们具有广泛的应用和用户基础。VHD(Virtual Hard Disk)和VHDX是虚拟硬盘的文件格式,用于在虚拟化环境中模拟硬盘存储。标准系统类型是操作系统…

Vue基础–v-model表单

v-model的基本使用基本使用<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</titl…

测试方法

测试方法分类 静态测试方法不执行程序的测试方法 主要用于测试文档和代码 静态测试包括评审和静态分析方法 可使用一些静态分析工具动态测试方法通过运行程序来发现缺陷的测试方法。黑盒测试方法(不涉及程序内部接口)功能测试,数据驱动测试,基于说明书的测试 从用户观点出发…

基于Material Design风格开源、免费的WinForms UI控件库

前言 今天大姚给大家分享一个基于 Google 的 Material Design 风格开源、免费的.NET WinForms UI控件库:MaterialSkin。 WinForms介绍 WinForms是一个传统的桌面应用程序框架,它基于 Windows 操作系统的原生控件和窗体。通过简单易用的 API,开发者可以快速构建基于窗体的应用…