深度强化学习——actor-critic算法(4)

news/2024/4/29 10:52:42/文章来源:https://blog.csdn.net/Tandy12356_/article/details/130210074

一、本文概要:

actor是策略网络,用来控制agent运动,你可以把他看作是运动员,critic是价值网络,用来给动作打分,你可以把critic看作是裁判,这节课的内容就是构造这两个神经网络,然后通过环境给的奖励来学习这两个网络

1、首先看一下如何构造价值网络value network:

Π 和QΠ这两个函数我们都不知道,应该怎么办呢?

》可以用两个神经网络分别近似这两个函数,然后用actor-critic方法同时学习这两个神经网络 

策略网络:Policy network(actor):

我们用策略网络来控制agent做运动,决策是由策略网络做的

价值网络:Value network(critic):

这里的价值网络不控制agent运动,价值网络只是给动作打分而已,所以价值网络被称为critic,它相当于裁判,来给运动员的表现打分

你可以这样理解:actor是一个体操运动员,它可以做动作,如果它想让自己做的更好,就得改进自己的技术,可是它不知道怎样改进自己,这就需要裁判,裁判给运动员打分,运动员就知道什么样的动作得分高,什么样的动作得分低,这样一来运动员就会改进自己,让自己的分数越来越高

我们用策略网络来近似Π函数,用价值网络来近似QΠ函数,Π是策略网络,相当于运动员,q是价值网络相当于裁判 

我们现在来搭建这两个神经网络:

1、策略网络

2、价值网络:

价值网络有两个输入:一个是状态s,一个是动作a,如果动作是离散的,就可以使用onehot-encoding独热编码来表示一个动作, 比如向左可以表示成100,向右可以表示成010,向上表示成001,分别用卷积层和全连接层从输入中提取特征,得到两个特征向量,然后把这两个特征向量给拼接起来,得到一个更高的特征向量,最后用全连接层输出一个实数q(s,a;w),这个数,就是裁判给运动员打的分数,这个分数说明,出在状态s的情况下,做出动作a是好还是坏

这个价值网络可以和策略网络共享卷积层的参数,也可以跟策略网络完全独立,各自有各自的参数

同时训练策略网络和价值网络,就被称为是Actor-Critic Method,可以这样理解Actor-Critic Method:策略网络用来控制agent运动,所以叫做actor,你可以把策略网络当成是一个体操运动员,他要做一连串的动作,价值网络的用途是评价动作的好坏,所以把他叫做critic,你可以把价值网络当作是裁判,他给运动员的动作打分,学习这两个网络的目的是让运动员的平均分越来越高,并且让裁判的打分越来越精准

下面我们来训练这两个神经网络:

我们用了策略网络来近似策略函数Π,用了价值网络来近似动作价值函数QΠ,这样一来,状态价值函数就可以用V(s;θ,w)来近似,θ是策略网络的参数,w是价值网络的参数,训练的时候要更新两个神经网络的参数θ和w,但是更新θ和w的目标是不同的,更新策略网络Π的参数θ,是为了让V函数的值增加,V函数是对策略Π和状态s的评价,如果固定s,V越大则说明策略Π越好,所以很显然我们需要更新参数θ使得V的平均值(期望)增加,学习策略网络Π的时候,监督是由价值网络Q提供的,怎么理解呢?

策略网络Π 相当于体操运动员,它做出动作之后,裁判会给动作打分,裁判相当于价值网络Q,运动员努力改进自己的技术,争取让裁判打的分数更高,裁判打的分数就是监督信号,运动员靠裁判打的分数来改进自己的技术。更新价值网络q的参数w是为了让q的打分更精准,从而更好地估计未来得到的奖励的总和,价值网络q相当于是裁判,一开始是随机初始化的,所以一开始裁判没有判断能力,裁判会逐渐改善自己的水平,让打分越来越精准。裁判是靠什么改进自己的呢?

裁判靠的是环境给的奖励reward,你可以把环境给的奖励理解成是上帝给打的分数,但是上帝不会轻易把他的分数告诉别人,直到运动会结束了,上帝才会把他的打分全部公开,裁判要做的就是要让它的打分越来越接近上帝的打分

通过学习两个神经网络,运动员的得分越来越高,裁判员的打分越来越精准

 

我们通过如下5个步骤来对两个神经网络做一次更新

1、观测到当前状态st

2、 把状态st当作输入,用策略网络Π来计算概率分布,然后随机抽样得到动作at

3、agent执行动作at,这时候环境会更新状态st+1,并给agent一个奖励rt

4、有了奖励rt,就可以用TD算法来更新价值网络的参数w,也就是让裁判变得更准确

5、最后用policy gradient策略梯度算法,来更新策略网络的参数θ,这会让运动员的技术更好

更新策略网络的参数要用到裁判对动作at的打分,下面具体来讲如何更新这两个神经网络的参数:

1)价值网络q可以用TD算法来更新

1、首先用价值网络q来给动作at和at+1打分,这里的动作是根据策略网络Π随机抽样得到的

2、然后算一下TD target,把计算出来的数值记作yt,其中γ是折扣率,他让未来的奖励没有当前奖励的权重更高

3、用梯度下降更新w,使得yt-qt的值越来越小

2)使用策略梯度算法来更新策略网络Π,让运动员的得分更高:

这里的函数V是状态价值函数,相当于是这位运动员所有动作的平均分(V是动作价值函数的期望也即平均值),策略梯度是函数V关于参数θ的导数,我们直接用一个g(a,θ)就行了,一个g(a,θ)就是对这个期望的蒙特卡洛近似,既然g(a,θ)是对策略梯度的无偏估计,我们就拿g函数来代替策略梯度,具体是这样做的:

首先拿策略网络Π来随机抽样得到动作a,这个随机抽样的目的是为了保证样本的无偏性,必须要根据Π来做随机抽样,否则保证不了无偏性,有了随机梯度g,就可以做一次梯度上升,其中β是学习率,由于梯度是函数V关于θ的导数,所以梯度上升可以增加V函数的值

我们来总结一下Actor-Critic Method:

策略网络actor观测到当前的状态s,它控制agent做出动作a,这个actor就相当于一个体操运动员,他会做出一个动作,它的目标是让自己的动作越来越好,所以他要通过学习来让自己进步,问题是什么样的动作才算更好呢?

运动员自己并不知道什么样的动作才算是更好,所以它很难改进自己的技术,为了让运动员表现的更好,我们请裁判来帮忙,运动员做出动作之后,裁判会根据状态s和动作a来打一个分数,记作q,裁判把分数q告诉运动员,这样运动员就有办法改进自己了

这位运动员要靠裁判打分q来改进自己的技术,这里的技术指的是神经网络里的参数,它通过状态s,自己的动作a,以及裁判打分q来近似算出策略梯度,然后做梯度上升来更新参数,通过改善自己的技术,运动员会获得越来越高的平均分,其实运动员这样做只是在迎合裁判的喜好而已,运动员获得的平均分越来越高,原因是运动员在迎合裁判的喜好,使得裁判的打分q越来越高了,更高的q未必能说明这个运动员变得越来越优秀了,裁判的水平也很重要,迎合一个二流的裁判并不会让一个运动员成为一个顶尖的运动员,这就需要一个顶尖的裁判,来打出最准确的分数,所以为了让运动员变得越来越优秀,还需要裁判不断改进他的打分能力

裁判要靠奖励r来提高它的打分水平,奖励r相当于是上帝的判断,相当于是ground truth,裁判基于状态s和动作a来打分,计算出分值q,可以比较两次相邻打分qt和qt+1,以及奖励rt,然后用TD算法来更新价值网络参数,这样可以让裁判打分越来越精准

最后我们过一遍算法:

1、观测到旧的状态st,用策略网络Π来计算概率分布,再根据算出的概率,来随机抽样得到动作at

2、执行动作at,然后环境会更新st+1并给出一个奖励rt

3、拿新的状态st+1作为输入,用策略网络Π计算出新的概率,然后随机抽样得到新的动作~at+1,这个动作~at+1只是一个假想的动作而已,拿来算一下q值,agent并不会真正去做~at+1(tiuta)这个动作,算法的每一轮循环里面agent只做一次动作,agent这一轮已经做了动作at,所以就不会再做~at+1了

4、算2次价值网络的输出:用st和at作为输入算出裁判打分qt,用st+1和~at+1算出裁判打分qt+1,这里的~at+1用完就丢掉了,agent并不会真正执行~at+1这个动作

5、计算出TD error(预测与TD target之间的差)

6、对价值网络求导,tensorflow和pytorch系统都可以自动做反向传播,自动算出q网络关于参数w的梯度(这里的梯度是q函数的梯度),记作dw,t他的形状和w是完全一样的,是同样大小的矩阵或者张量

7、用TD算法来更新价值网络,让裁判打分变得更精准这里的δt*dw,t是损失函数Loss的梯度,做梯度下降,可以让预测离TD target变得更近

8、对策略网络Π求导,软件系统会自动帮你求导,只要你调用一下gardient函数就行了,这里的dθ,t和θ的形状也是一样的

9、最后一步:用梯度上升来更新策略网络,让运动员的平均分更高这里的qt*dθ,t是策略梯度的蒙特卡洛近似

每一轮迭代都做这9个步骤,每一轮迭代都只做一次动作 ,观测一个奖励,更新一次神经网络的参数论文和书中在这一步大多数使用δt而不是qt,使用qt是标准算法,使用δt叫做policy gradien with baseline,这两种策略梯度的期望完全相等,实际上用baseline效果更好,原因是虽然用不用baseline不影响期望,但是用个好的baseline可以降低方差,让算法收敛的更快

那么baseline是什么呢?

事实上任何接近qt的数都可以被认为是baseline,但是这个baseline不能是动作at的函数

我们可以使用:

来作为baseline

最后总结一下actor-critic这部分的内容:

我们的目标函数是V(Π)的期望,我们希望学到策略Π ,让V(Π)的期望越大越好,但是直接学Π函数不容易,所以我们用神经网络来近似Π函数这个神经网络叫做policy network策略网络,当时我们计算策略梯度的时候有个困难,就是我们不知道动作价值函数Q(Π),所以要用神经网络来近似Q(Π)这个神经网络叫做value network价值网络actor-critic method里面有两个神经网络,策略网络Π叫做actor,价值网络q叫做critic

价值网络q的作用是辅助训练策略网络Π,裁判打的分数就相当于监督学习中的标签,运动员就是靠裁判打的分数来改进自己的动作

训练结束之后,价值网络q就没用了,总之呢,actor-critic method的终极目的是用来学习策略网络,而价值网络只是作为裁判员起辅助作用,帮助学习,学完了就不需要这个裁判了

该怎么样训练这两个神经网络呢?

策略网络Π要用到策略梯度算法来训练, 学习策略网络Π的目标是让状态价值函数V的平均值变大

补充一点:使用actor-critic method我们最终既能够学习策略网络Π参数θ使得状态价值函数V的平均值变大,同时也能够使得价值网络q打分越来越准(误差越来越小)

接下来我们将探索AlphaGo的基本原理,看看深度强化学习是如何解决实际问题的!

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

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

相关文章

优思学院|西门子精益六西格玛的历程

最新阅读了一份案例报告,报告中仔细研究了西门子公司实施精益六西格玛的历程,也谈到它们利用了线上课程后,取得了更大的成功。 2014年,西门子工业自动化部门(IA)的高管们认识到他们必须采取措施来加强内部效…

研报精选230420

目录 【行业230420浙商证券】卫浴行业深度报告:智能卫浴新变局,国货崛起正当时 【行业230420平安证券】氢能全景图(上)制氢篇:商业模式起步,绿氢初试锋芒 【行业230420天风证券】建筑装饰行业深度研究&…

走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】

文章目录 🌟前言🌟效果展示🌟使用Echarts🌟Echarts官网🌟体验示例小程序🌟下载🌟引入组件🌟创建图表🌟暂不支持的功能 🌟使用地图🌟map组件&#…

设计模式:创建者模式 - 工厂模式

文章目录 1.概述2.简单工厂模式(非23种)2.1 结构2.2 实现2.3 优缺点2.4 扩展 3.工厂方法模式3.1 概念3.2 结构3.3 实现3.4 优缺点 4.抽象工厂模式4.1 概念4.2 结构4.3 实现4.4 优缺点4.5 使用场景 5.模式扩展6.JDK源码解析-Collection.iterator方法 1.概…

【Unity VR开发】结合VRTK4.0:摄像机碰撞变黑

语录: 人是要长大的,有天你也会推着婴儿车幸福地在街上行走,而曾经的喜欢,不管曾经怎样,都会幻化成风,消失在时光的隧道。所以向前走,向前走,无须回头。 前言: 往往我们在…

MySQL_第05章_排序与分页

第05章_排序与分页 讲师:尚硅谷 - 宋红康(江湖人称:康师傅) 官网: http://www.atguigu.com 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(desc…

15、虚拟内存LLDB高级调试

一、虚拟内存 早期的操作系统 早期的操作系统,并没有虚拟内存的概念.系统由进程直接访问内存中的物理地址,这种方式存在严重的安全隐患.内存中的不同进程,可以计算出他们的物理地址,可以跨进程访问,可以随意进行数据的篡改.早期的程序也比较小,在运行时,会将整个程序全部加载到…

jenkins安装(Linux)

文章目录 请谨慎安装最新版本的jenkins1. Jenkins 介绍1.1 jenkins使用场景 2.jenkins下载2.1上传至Linux2.2 rpm安装jenkins2.3 修改jenkins配置2.3.1 修改内容 2.4 开放端口2.5 启动jenkins2.5.1 启动错误2.5.2 添加JAVA_HOME 2.6 jenkins配置添加自定义安装java目录2.7 Erro…

Python每日一练(20230423)

目录 1. 删除链表的倒数第 N 个结点 🌟🌟 2. 最小覆盖子串 🌟🌟🌟 3. 二叉树的层序遍历 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏…

小米集团Jira实战:如何在高负载状态下保持Jira性能与运行稳定

2023年4月14日,Atlassian中国合作伙伴企业日上海站圆满落幕。作为Atlassian全球白金合作伙伴、云专业伙伴,龙智参与了此次活动,并邀请小米集团信息技术部SRE薛世英作为演讲嘉宾,分享了小米公司的Jira实战经验。 以“小米集团Jira实…

【手撕MyBatis源码】执行器与缓存

文章目录 概述执行器(Executor)执行器总结 缓存MyBatis缓存概述一级缓存(LocalCache)Spring集成MyBatis后一级缓存失效的问题二级缓存二级缓存组件结构二级缓存的使用为什么要提交之后才能命中二级缓存?二级缓存结构二级缓存执行流程 概述 通过一条修改语句,我们来…

完美解决丨RuntimeError: create_session() called before __init__().

错误&#xff1a; import sys sys.path.append(/home/pi/ssd-detect) import ssd_detect ssd_detect.detect(/home/pi/ssd-detect/test.jpg) 报错如下&#xff1a; Traceback (most recent call last): File "test.py", line 6, in <module ssd_detect.detect(/ho…

java二维数组遍历

在 java中&#xff0c;二维数组是指在二维平面上的一个数组。在二维数组中&#xff0c;数据都是按行排序的。我们通常可以用“从上到下”、“从左到右”、“从后到前”等方法来遍历二维数组。由于二维数组中数据的有序性&#xff0c;我们可以在二维数组中快速地找到我们所需要的…

Python数据结构与算法-RAS算法(p96)

一、RSA加密算法简介 1、加密算法概念 传统密码: 加密算法是秘密的 现代密码系统:加密算法是公开的&#xff0c;密钥是秘密的&#xff1b;&#xff08;密钥可能是随机生成的&#xff0c;与他人不一致&#xff09; 对称加密—加密和解密用的同一个密钥 非对称加密—加密和解密用…

客户端请求耗时严重原因排查优化 (Nginx导致)

客户端请求耗时严重&#xff0c;初步从几个方面进行排查 1.检查网络连接&#xff0c;是否实现丢包&#xff0c;网络波动&#xff0c;网络拥堵等问题。 2.检查客户端请求耗时和project api 接口耗时差异&#xff0c;判断是nginx问题还是接口问题 如果是nginx耗时导致&#xff0c…

用CentOS服务器自己搭建部署个Discuz论坛网站,网站搭建教程

Linux系统CentOS服务器使用堡塔搭建论坛网站全套教程。服务器大本营&#xff0c;技术文章内容集合站发车啦&#xff01; 操作系统&#xff1a;Centos 7.6 网站程序&#xff1a;Discuz-X3.4 前言 首先&#xff0c;搭建一个网站需要准备&#xff1a;服务器、域名、网站程序。 …

php使用tcpdf,通过html生成的pdf文件,合同章(图片)错位?需要怎么解决

php使用tcpdf&#xff0c;通过html生成的pdf文件&#xff0c;合同章有错位&#xff1f;需要怎么解决&#xff1f; 1、html下的排版正确&#xff0c;如图&#xff1a; 2、html代码&#xff0c;如图 3、生成pdf后的文件&#xff0c;如图 $pdf->Image()&#xff0c;计算一下x、…

如何利用工时表来帮助项目管理做得更完善?

项目管理是一项复杂的任务&#xff0c;需要协调各种资源以确保项目按时交付。其中一个关键方面是管理各个员工工时。工时表软件是一种可以帮助企业记录各个员工工作时效的工具&#xff0c;而且还可以帮助项目管理者记录和跟踪项目成员的时间。那么如何利用工时表来帮助项目管理…

贝叶斯学习(Bayesian Learning)基础篇

Bayesian Learning 前言Motivation and IntroductionThink about Spam Filtering.先验概率后验概率似然度边际概率 Basic assumptionRelevancePractical diculties Bayes TheoremProbability: random eventsBayesian Learning Maximum A Posteriori HypothesisBayes Optimal Cl…

Java核心技术 卷1-总结-9

Java核心技术 卷1-总结-9 使用异常机制的技巧为什么要使用泛型程序设计定义简单泛型类泛型方法类型变量的限定 泛型类型的继承规则 使用异常机制的技巧 1.异常处理不能代替简单的测试。 使用异常的基本规则是&#xff1a;只在异常情况下使用异常机制。 2.不要过分地细化异常。…