暴力快速入门强化学习

强化学习算法的基本思想(直觉)

众所周知,强化学习是能让智能体实现某个具体任务的强大算法。
强化学习的基本思想是让智能体跟环境交互,通过环境的反馈让智能体调整自己的策略,从反馈中学习,不断学习来得到最优的策略(即以最优的方式实现某个具体任务)。

形式化强化学习的直觉(将算法的直觉变成可以量化的数学形式)

经过大量的研究,人们探索出一种适用于实现强化学习这个目标的数学框架——马尔科夫决策过程。
其实这个框架也不复杂,通过理解强化学习的思想,想想就知道起码得有这些简单的东西:

  1. 智能体的动作(肯定要行动,才能达成某个任务的目的)
  2. 环境的状态(智能体要根据环境状态决定自己要怎么样行动)
  3. 环境的反馈(智能体每次行动完,需要得到反馈才能知道自己的行动好还是不好)

仅仅从直觉上看差不多是这三个,因为直觉还是比较抽象的,要带入实际的案例才会发现还缺少哪些东西。
比如随便想想,下围棋的时候,是不是从下棋一开始到胜利都全部被智能体接管了,所以在这个过程中智能体需要连续进行行动,那么问题就来了,我定义只有下棋最终胜利的那一步行动才有奖励(正反馈),其余行动都没有奖励,这个定义很合理吧,但是在这个过程中每一步都没有奖励,也就相当于没有反馈,那智能体还怎么学习呢?
所以这个时候又要靠直觉思考一下,虽然围棋在胜利前每一步都没有奖励,但是这并不代表每一步都没有价值,如果是一个围棋高手,他下的每一步棋都是为了最后的胜利而铺垫的,可以说每一步棋的价值都很大。所以直觉上想通了,怎么把直觉转化为数学上可以精确量化的定义呢?
其实可以使用累积奖励作为该行动的价值,具体就是从当前状态出发,一直按照某个决策行动下去,到最后游戏结束得到的奖励总和,公式很简单就是 G ( S t ) = Σ k = t R k + 1 G(S_t) = \Sigma_{k=t} R_{k+1} G(St)=Σk=tRk+1,即表示从时刻t开始,棋盘状态为S,该时刻的状态按照智能体的策略一直执行下去,到最终游戏结束,得到的奖励累计之和,就用这个表示当前状态S的价值。不过实操起来还是有问题,第一,我希望以尽可能短的步数赢下比赛,而这个公式似乎没有对于步数的惩罚,1000步赢下比赛和100赢下比赛的奖励总和是一样的,所以要进行修正,这里我们引入一个折扣因子 γ ∈ [ 0 , 1 ] \gamma \in [0, 1] γ[0,1],每走一步就要将当前行动得到的奖励乘以 γ \gamma γ,这样步数越多,最后得到的奖励越少,公式是: G ( S t ) = Σ k = 0 γ k R t + k + 1 G(S_t) = \Sigma_{k=0} \gamma^kR_{t+k+1} G(St)=Σk=0γkRt+k+1
这样看起来就很完美了是吧?还没完,这个累加公式看起来很不错,但是缺少了关键的信息,这个公式是把每次行动后跳到一个状态时得到的奖励进行折扣累加,但是我怎么知道从一个状态做出行动后会跳到哪一个动作呢?假设t时刻,环境处于状态 S t S_t St,智能体进行行动 A t A_t At之后,环境变成什么样子了?即我想知道某个状态执行某个动作之后,跳转到下一个状态这之间的映射关系,即 S t + 1 = f ( S t , A t ) S_{t+1} = f(S_t, A_t) St+1=f(St,At)这个函数具体是什么样子,不过这个函数映射的形式是确定性的,就是说 S t S_t St A t A_t At确定了之后, S t + 1 S_{t+1} St+1也就唯一确定了,但很多情况往往是不确定的,比如你每学期你的状态都是摆烂,然后考试前你的行动都是通宵复习,但有时候你挂科了,有时候你及格了,还有时候你满分了,这就是不确定的,这是有概率的,当然在及格边缘的概率更大,所以我们定义这个环境变换的映射情况就叫做状态转移概率,即 P ( S t + 1 ∣ S t , A t ) P(S_{t+1} \mid S_t,A_t) P(St+1St,At)。当然对于游戏来说都是一般都是确定的,概率直接为1或者0就行。
总结一下,马尔科夫决策模型包含以下几个东西:

  1. S S S:环境状态的集合
  2. A A A:智能体动作的集合
  3. r ( s , a ) r(s,a) r(s,a):每个状态下行动后得到奖励函数,人为定义
  4. P ( s ′ ∣ s , a ) P(s'\mid s, a) P(ss,a) :环境的状态转移概率
  5. γ \gamma γ:折扣因子

马尔科夫决策过程终于写完了,啰啰嗦嗦写了一大堆,强化学习的思想直觉两句话就搞定,把强化学习的思想形式化需要写这么多,看来直觉是不负责任的,将直觉转化成数学才是负责任的,难的东西。终于知道为什么有的论文明明很简单的方法,却能写那么多页了,因为将直觉形式化、数学化这中间有很多细节需要商榷和讨论。

不过这还只是强化学习算法的前提框架,在这个框架下各种算法的挖掘才是大头。

利用马尔科夫决策过程提供的抽象框架来真正得到最优决策

写累了,前面说一大堆,其实最后都是为了能够求解出智能体针对某个具体任务的最优决策。有了前面的基础,后面的求解算法其实没那么复杂了,我也写累了,所以这部分直接精简逻辑,让最本质的东西呈现出来,很简单。
我们想得到最优策略,这只是直觉上,还是那句话,形式化到数学上,其实就是最大化累计奖励。从某个状态出发,智能体进行一系列的决策已经得到了最大的累计奖励,再也没有别的决策能得到比这个决策更大的累计奖励了,所以自然该决策就是最优决策。
现在这个圈子内把这个累计奖励直接叫做回报(Return),用 G t G_t Gt表示从t时刻(或者从某个状态开始)一直到结束得到的累计奖励,那么随便游戏从什么时候什么状态开始,我都希望该智能体的决策能够得到最大化的回报。
π \pi π代表的是智能体的策略,更具体一点,就是在状态 s s s下采取行动 a a a的策略,同样,策略一般也是用一个概率分布表示,即 π ( a ∣ s ) \pi(a \mid s) π(as)。前面说到用累计奖励作为状态的价值,其实就是用某个状态的回报作为该状态的价值,不过因为回报 G t G_t Gt其实是一个随机变量,由状态转移概率 p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a) π ( a ∣ s ) \pi(a |s) π(as)这两个分布决定,所以不好直接量化状态的价值,不过随机变量的期望是一个确定的值,可以作为量化的标准,所以很自然的,某个状态s的价值就可以化为这样一个状态价值函数: v π ( s ) = E ( G t ∣ S t = s ) v_{\pi}(s) = E(G_t|S_t=s) vπ(s)=E(GtSt=s),这个方程表示从t时刻开始,环境的状态是 s s s,在这个给定的条件下, G t G_t Gt(回报)的期望就是状态s的价值。
那现在其实就秀一下数学推理能力,把 v π ( s ) = E ( G t ∣ S t = s ) v_{\pi}(s) = E(G_t|S_t=s) vπ(s)=E(GtSt=s)这个公式展开,然后经过三四步推理,很容易就能得到(推理要注意条件期望怎么展开怎么求,这一步有点绕,不过小心点还是很容易就能推出来): v π ( s ) = E [ R t + 1 + γ v π ( s ′ ) ] v_{\pi}(s) = E[R_{t+1} + \gamma v_{\pi}(s')] vπ(s)=E[Rt+1+γvπ(s)]这就是贝尔曼方程,即当前状态 s s s的价值可以用下一个状态 s ′ s' s的价值来表示。贝尔曼最优方程就是价值最大的那个 v π ∗ = m a x π v ( s ) v_{\pi}^* = max_{\pi}v(s) vπ=maxπv(s)
那这个时候不要忘记我们的初心,我们如果得到了最大的 v ( s ) v(s) v(s),代表当前的策略是最优的策略,但这个最优的策略我怎么形式化表示出来呢?换句话说,处于状态 s s s时,我要选择什么样的动作a呢?显然在状态s下,我要选择价值最大的那个 a a a,这个价值最大是不是很熟悉,同理我们也可以定义状态-动作函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a),那这个 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)等于什么呢?还是跟之前一样的,还是用累计奖励呗! q π ( s , a ) = E [ R t + 1 + γ q π ( s ′ , a ′ ) ∣ S t = s , A t = a ] q_{\pi}(s,a) = E[R_{t+1}+\gamma q_{\pi}(s',a') | S_t=s,A_t=a] qπ(s,a)=E[Rt+1+γqπ(s,a)St=s,At=a]
直观来看 q π ( s , a ) q_{\pi}(s,a) qπ(s,a) v π ( s ) v_{\pi}(s) vπ(s)应该满足这样的关系:在状态s下,智能体可以有多个动作可以选择: a 1 , a 2 , . . . a_1,a_2,... a1,a2,...,所以 v π ( s ) v_{\pi}(s) vπ(s)应该是 q π ( s , a ) q_{\pi}(s,a) qπ(s,a)关于a的期望,即: v π ( s ) = Σ a ∈ A π ( a ∣ s ) q π ( s , a ) v_{\pi}(s) = \Sigma_{a \in A}\pi(a|s)q_{\pi}(s,a) vπ(s)=ΣaAπ(as)qπ(s,a)
言归正传,我要得到最优策略的形式化表述,其实就是希望在每个状态下面采取价值最大的那个行动,即希望找到 q π ∗ ( s , a ) = m a x π q ( s , a ) q_{\pi}^*(s,a) = max_{\pi}q(s,a) qπ(s,a)=maxπq(s,a)。那么根据 v π ( s ) v_{\pi}(s) vπ(s) q π ( s , a ) q_{\pi}(s,a) qπ(s,a)的关系,其实可以推导出来 q π ( s , a ) = R s a + γ Σ s ′ ∈ S P s s ′ a v π ( s ′ ) q_{\pi}(s,a) = R_s^a+\gamma \Sigma_{s'\in S}P_{ss'}^av_{\pi}(s') qπ(s,a)=Rsa+γΣsSPssavπ(s)。那其实问题就解决了,找到最优的 v π ∗ = m a x π v ( s ) v_{\pi}^* = max_{\pi}v(s) vπ=maxπv(s)就行了。
那该怎么求解 v π ∗ v_{\pi}^* vπ呢?

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

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

相关文章

欧科云链:2024将聚焦发展与安全,用技术助力链上数据安全和合规

近期,OpenAI和Web3.0两大新技术发展势头迅猛。OpenAI 再次引领AI领域的新浪潮,推出了创新的文本转视频模型——Sora,Sora 可以创建长达60 秒的视频,包含高度详细的场景、複杂的摄像机运动以及情感丰富角色,再次将AI 的…

6-190 先序输出叶节点

本题要求按照先序遍历的顺序输出给定二叉树的叶结点。 函数接口定义: void PreorderPrintLeaves( BiTree BT ); 函数PreorderPrintLeaves应按照先序遍历的顺序输出给定二叉树BT的叶结点,格式为一个字符跟着一个空格。 裁判测试程序样例: #include<stdio.h> #inc…

lora-scripts 训练IP形象

CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型&#xff08;使用lora-scripts&#xff09;-CSDN博客文章浏览阅读1.1k次…

怿星科技Neptune CHT-S测试系统,让智能座舱测试更加高效便捷

随着汽车“智能化”浪潮的推进&#xff0c;汽车的智能化水平正在持续刷新行业认知。在这股智能化潮流中&#xff0c;智能座舱作为客户体验最为直观的部分&#xff0c;其重要性不言而喻。倘若座舱设备出现死机、黑屏、卡顿等现象&#xff0c;都将对客户的使用体验产生非常大的影…

ChatGPT无法登录,提示我们检测到可疑的登录行为?如何解决?

OnlyFans 订阅教程移步&#xff1a;【保姆级】2024年最新Onlyfans订阅教程 Midjourney 订阅教程移步&#xff1a; 【一看就会】五分钟完成MidJourney订阅 GPT-4.0 升级教程移步&#xff1a;五分钟开通GPT4.0 如果你需要使用Wildcard开通GPT4、Midjourney或是Onlyfans的话&am…

c语言--内存函数的使用(memcpy、memcmp、memset、memmove)

目录 一、memcpy()1.1声明1.2参数1.3返回值1.4memcpy的使用1.5memcpy模拟使用1.6注意 二、memmove()2.1声明2.2参数2.3返回值2.4使用2.5memmove&#xff08;&#xff09;模拟实现 三、memset3.1声明3.2参数3.3返回值3.4使用 四、memcmp()4.1声明4.2参数4.3返回值4.4使用 五、注…

【python】Anaconda安装后打不开jupyter notebook(网页不自动跳出)

文章目录 一、遇到的问题&#xff1a;jupyter notebook网页不自动跳出&#xff08;一&#xff09;输入jupyter notebook命令&#xff08;二&#xff09;手动打开网页 二、解决办法&#xff1a;指定浏览器&#xff08;一&#xff09;找文件 jupyter_notebook_config.py&#xff…

设计模式,简单工厂模式

23种设计模式是基于面向对象的一些编程逻辑思想&#xff0c;无意间看了看《大话设计模式》&#xff0c;我觉得还挺好玩&#xff0c;虽然设计模式我这个阶段确实可以不着急学&#xff0c;但我觉得这些内容挺吸引我的&#xff0c;反正时间也还多&#xff0c;就学着玩玩。而且设计…

Flink 架构深度解析

## 1. 引言 在当今的数据驱动世界中&#xff0c;实时数据处理变得越来越重要。Flink 提供了一个高性能、可扩展的平台&#xff0c;用于构建实时数据分析和处理应用。它支持事件时间处理和精确一次&#xff08;exactly-once&#xff09;处理语义&#xff0c;确保数据的准确性和…

Linux swapon命令教程:如何管理你的交换空间(附案例详解和注意事项)

Linux swapon命令介绍 swapon命令用于启用设备或文件中的交换空间。交换空间是当系统的物理内存不足时&#xff0c;系统会使用的一部分硬盘空间。 Linux swapon命令适用的Linux版本 swapon命令在大多数Linux发行版中都是可用的&#xff0c;包括Debian、Ubuntu、Alpine、Arch…

大模型在天体物理学研究中的辅助作用与案例分析

大模型在天体物理学研究中的辅助作用与案例分析 1. 背景介绍 天体物理学是研究宇宙中各种天体的物理性质和运动规律的科学。随着观测技术的进步&#xff0c;天体物理学家们获得了大量的数据&#xff0c;这些数据往往具有高维度、非线性、非平稳等特点&#xff0c;给传统的数据…

Struts2的工作原理是什么?Struts2中的MVC模式包含哪些核心组件?在Struts2中如何实现转发和重定向?

Struts2的工作原理是什么&#xff1f; Struts2的工作原理主要基于MVC设计模式&#xff0c;它充当Web应用框架的控制器层&#xff08;Controller&#xff09;&#xff0c;负责建立模型与视图之间的数据交互。 具体来说&#xff0c;Struts2的工作流程如下&#xff1a; 启动与加…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

ubuntu20.04 安装ros1

详细介绍如何在ubuntu20.04中安装ROS系统&#xff0c;超快完成安装&#xff08;最新版教程&#xff09;_ubuntu安装ros-CSDN博客Ros noetic : XTDrone安装-CSDN博客 gazebo11卸载&#xff0c;安装gazebo9 我的ROS学习日记-环境搭建 - 知乎 需要选择分支 GitHub - ros-simulat…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记18_竞争市场

1. 竞争市场 1.1. 算法、大数据、超级平台的风起云涌似乎预示了市场竞争机制的加速终结&#xff0c;而我们似乎也对这种市场机制的衰退见怪不怪 1.1.1. 它有效节省了消费者的搜寻成本&#xff0c;降低了市场准入壁垒&#xff0c;开辟了市场扩张与准入之间的崭新通道&#xff…

指针空值nullptr(C++11)

c98中的指针空值 在良好的C/C编程习惯中&#xff0c;声明一个变量时最好给该变量一个合适的初始值&#xff0c;否则可能会出现不可预料的错误&#xff0c;比如未初始化的指针。如果一个指针没有合法的指向&#xff0c;我们基本都是按照如下方式对其进行初始化&#xff1a; void…

Spark-Scala语言实战(5)

在之前的文章中&#xff0c;我们学习了如何在scala中定义与使用集合和元组。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-Scala语言实战&#xff08;…

伪分布式部署Hive

文章目录 1 Hadoop 伪分布式安装1 Hive下载2 Hive配置3 安装MySQL JDBC连接器4 连接Hive CLI4.1 初始化数据库4.2 连接Hive 1 Hadoop 伪分布式安装 假设我们已经安装好hadoop伪分布式 1 Hive下载 Hive下载地址 2 Hive配置 Hive伪分布式需要在conf文件夹下修改两个文件&…

c++核心学习5

4.6继承 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; 我们发现&#xff0c;定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。这个时候我们就可以考虑利用继承的技术&#xff0c;减少重复代码 4.6.1继承的基本语法…

VTK9.2.0+Qt5.14.0 绘制点云

背景 为了显示结构光重建后的点云&#xff0c;开发QT5.14.0VTK9.2.0的上位机软件&#xff0c;用于对结构光3D相机进行控制&#xff0c;并接收传输回来的3D数据&#xff0c;显示在窗口中。 配置QT和VTK VTK9.2.0下载源码&#xff0c;用Cmake编译&#xff0c;编译好的VTK9.2.0…