深度强化学习——策略学习(3)

news2024/11/23 7:00:07

本文的重点:使用一个神经网络来近似策略函数Π

我们使用一个神经网络来近似策略函数,这个神经网络叫做策略网络,他可以用来控制agent运动,想要训练这个神经网络,就要用到policy gradient算法

策略函数Π的输入是当前状态s,他的输出是一个概率分布(0,2,0.1,0.7),给每一个动作a一个概率值

超级玛丽的例子里面,Π函数的输入是状态s,输出是个三维向量,每个元素是一个动作的概率,有了这三个概率值,agent会做一个随机抽样,得到动作a,左右上这三个动作都有可能被抽到,但是向上被抽到的概率最大,是0.7

e3abd104b1264c1c82cf00c9efe1257e.png

1、如何得到策略函数呢?

假如一个游戏只有5个状态10个动作,那很好办,我们画一张5*10的表,表里面每一格对应一个概率,我们通过玩游戏,把这50个概率值算出来就好了,但是超级玛丽这样的游戏有无数个这样的状态,这张表根本装不下,所以我们没法直接计算policy函数Π,所以我们得做函数近似,学出来一个函数来近似策略函数,函数近似的方法有多种多样,可以用线性函数,可以用曲线函数,也可以用神经网络,这里的θ是神经网络的参数,一开始θ是随机初始化的,后来我们通过学习来改进θ

cc4bf26b666b44d3961908a85ec70876.png

2、如果是超级玛丽这个游戏,我们可以把策略网络设计成这个样: 

输入是状态s,也就是当前屏幕显示的画面,也可以是最近几帧的画面, 然后是一个或者几个卷积层,把画面变成特征向量,然后全连接层把特征向量映射到一个三维向量,由于有3个动作,所以这里的维度是3,随后使用softmax激活函数,这样的输出才是一个概率分布,输出的是一个三维向量,每一个元素对应一个动作,里面的值都是动作的概率

softmax可以让输出的都是整数,且加和=1

3、回顾一下状态价值函数:

动作价值函数QΠ是Ut的条件期望,QΠ的值依赖于policy函数Π,at,st

而状态价值函数VΠ是QΠ的期望,把QΠ中的动作A给积掉,这里的A被当作是随机变量,概率密度是Π,把A给消掉之后,VΠ就只与policy函数Π和状态st有关了

这样一旦你给定策略函数Π,VΠ就可以评价当前状态st的好坏了,VΠ越大说明当前的胜算越大

给定状态s,VΠ 可以评价策略函数Π 的好坏,如果Π很好,VΠ就会比较大,说明胜算大

eedcaa46e9d542efb45bba979a7d068d.png33e01a591dd5474a89d4de620f124111.png

4、策略学习的主要思想:

我们刚刚用策略网络来近似策略函数,这样一来,价值函数就可以写成V(s;θ),V可以评价状态s和策略网络的好坏

5、怎么让策略网络变得越来越好呢?

》不断改进调整策略网络的参数θ

这个期望是关于状态S求的,这里把状态S作为一个随机变量,用期望给去掉,这样一来变量就只剩下θ了,目标函数J(θ)就是对策略网络的评价,策略网络越好,J(θ)就越大,所以策略学习的目标就是改进θ,使J(θ)越大越好

6、怎么改进θ呢?

》使用policy gradient算法

我们让agent玩游戏,每一步都会观测到一个不同的状态s,这个s就相当于是从状态的概率分布当中随机抽样出来的,观测到状态s,把V(s,θ),关于θ求导,得到一个梯度,然后用梯度上升来更新θ,这里的β是学习率,其实这就相当于是随机梯度上升,我们算的不是梯度,真正的梯度是目标函数J(θ),关于θ的导数,这里我们算的是v关于θ的导θ数,其实就是一个随机梯度,随机性来自于S,为什么要用梯度上升呢?因为我们想要使目标函数J(θ)越来越大,这里的v关于θ的导数就被称为policy gradient(策略梯度)

72afbafc547b4afb9eb09943d920d525.png

7、为什么使用梯度上升来更新θ呢?

》因为沿着梯度上升的方向走,我们的目标函数J(θ)就会越接近最大值!

对函数V求导得到的是局部最大值,而对它的期望J求导得到的是全局最大值

下面来讲怎么近似计算policy gradient:

为了简化推导,假设QΠ不依赖于θ(其实是有可能依赖的),这样就可以把QΠ当成一个常数,从求导的运算中提取出来,放到导数的外面

63e9d6c39b654dc18f7820853bf4fbef.png

d48900702daa4dafa084f04c195ff1a9.png

但是实际中通常不会使用这个公式来计算策略梯度,实际通常用的都是这个策略梯度的蒙特卡洛近似

ffd89964f5574204804585cb1057cb90.png

a9aa8564aee84682a6354e59ed7bc8a1.png  bde4b7d5f723434cae59a610b9d749ac.png

离散的动作: 

8351d76f850c4873a0dd95c2e839de4c.png连续的动作:

A是连续变量,所以想要直接求这个期望就要做定积分,但是积分是做不到的,因为Π函数是个神经网络,非常复杂,没办法直接计算出来,所以只能做蒙特卡洛近似

蒙特卡洛近似的过程:

1、随机抽样一个动作记作a hat,抽样是根据概率密度函数Π来抽的

2、计算g(a hat,θ),这里的a hat是一个确定的动作,有了a hat直接算一下g(a hat,θ)的值就好了

由于a hat是根据概率密度函数Π随机抽样出来的,所以g(a hat,θ)是策略梯度的一个无偏估计

 809933d4d98e4e1d92726a88cb145f27.png

由于g()是策略梯度的无偏估计,所以可以用g()来近似策略梯度,这个被称为蒙特卡洛近似,蒙特卡洛就是抽一个或者几个随机样本,用随机样本来近似期望,更新模型参数θ的时候,用g()来作为近似的梯度就可以了

4d588b2047cd4d6696c6a212f580215b.png总结一下策略梯度算法:

1、在第t个时间点,观测到了状态st

2、使用蒙特卡洛近似来计算策略梯度,把策略网络Π作为概率密度函数,用它随机抽样得到一个动作at,比如at是向左的动作

3、计算价值函数QΠ的值,把结果记作qt

4、对策略网络Π求导,算出logΠ关于θ的导数,得到的结果dθ,t是向量、矩阵或者是张量,dθ,t的大小和θ是一样的,如果θ是100*100的矩阵,那么dθ,t也是100*100的矩阵,tensorflow和pytorch这些系统都支持自动求梯度你告诉系统当前at,st还有当前参数θt,系统可以自动求出来梯度dθ,t

5、近似地计算策略梯度,用一个样本a来算策略梯度的蒙特卡洛近似

6、最后一步,有了近似的策略梯度,就可以用它来更新策略网络的参数θ了

 42ef4c300abc4c5dbcc4e8aade0db3da.png

目前还有一个没解决的问题就是QΠ是什么呢?

我们不知道QΠ,所以没法算qt,那么如何近似去算qt呢?

法一:用策略网络Π来控制agent运动,从一开始一直玩到游戏结束,把整个游戏的轨迹都记录下来,s1,a1,r1,s2,a2,r2,...sn,an,rn,观测到所有奖励r,我们就可以算出ut

由于价值函数QΠ是Ut的期望,我们可以用大Ut的观测值小ut来近似QΠ,所以reinforce强化算法就是使用观测到的ut来代替QΠ函数,reinforce算法需要玩完一局游戏,观测到所有的奖励,然后才能更新策略网络

2a4fb7f8769147c2b568207cd60851a9.png

法二:用一个神经网络来做近似:

原本已经用神经网络近似了策略函数Π,现在用另一个神经网络来近似价值函数QΠ,这样就有了两个神经网络,一个被称为Actor,一个被称为Critic,这样就有了actor-critic方法 

总结:

直接求策略函数比较困难,所以我们要用神经网络来近似测量函数

θ是神经网络的参数,一开始随机初始化,然后通过policy gradient算法来学习参数θ

这节课的主要内容就是推导策略梯度和计算策略梯度

策略梯度是价值函数V关于θ的导数,算出了策略梯度,就做梯度上升来更新参数θ,为什么要做梯度上升呢?因为我们希望价值函数V越大越好,目标函数是E(V),可以理解为使用策略函数Π,agent的平均胜算有多大,策略函数越好,这个目标函数的值就会越大,agent的评价胜算也就越大

如果大家对这节课的内容比较迷糊的话,我会在下一篇答疑篇给大家指点一下迷津,希望能对你有所帮助!

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

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

相关文章

苹果离开中国制造影响有多大?后果不堪设想,可能是灭顶之灾

由于苹果力推印度制造,各方都对苹果与中国制造的关系高度关注,那么苹果真的离开中国制造的话,结果会如何呢?对双方来说,影响会非常大,超出想象。 一、中国制造对苹果的依赖 苹果对产业链拥有巨大的影响力&a…

Python基础快速入门

一、中文编码问题 带大家过一遍菜鸟学python的基础内容 二、Python基础语法 1、Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from x…

用Socket API建立简易TCP服务端、客户端

//---------------------- //-- 用Socket API建立简易TCP客户端 // 1 建立一个Socket // 2 连接服务器 connect // 3 接收服务器信息 recv // 4关闭套接字 closesocket // -- 用Socket API建立简易TCP服务端 // 1 建立一个socket // 2 bind 绑…

JetBrains Gateway IDEA远程开发

为什么进行远程开发? 无论身处何处数秒内连接至远程环境 充分利用远程计算机的强大功能 在任何笔记本电脑上都可以轻松工作,无论其性能如何。借助远程计算机的计算资源,充分利用最大规模的数据集和代码库。在远程服务器上保护敏感代码 如果…

知识变现海哥|你为什么知识却不富有,是你不懂这个道理

要有价值观念,要有交换思维。商业的本质都是基于价值交换,你能为别人提供多少价值,你就能赚多少米,你帮助别人处理的问题越多你越有价值,你能成就多少人你就能被多少人成就。这是商业行为的底层逻辑。 你没赚到米 一是…

老胡的周刊(第088期)

老胡的信息周刊[1],记录这周我看到的有价值的信息,主要针对计算机领域,内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 🎯 项目 nginx-ui[2] Nginx 后台管理 UI:…

港联证券|TMT板块全线退潮,这些个股获主力逆市抢筹

计算机、电子、传媒、通讯职业流出规模居前。 今天沪深两市主力资金净流出709.92亿元,其中创业板净流出218.36亿元,沪深300成份股净流出187.92亿元。 资金流向上,今天申万一级职业普跌,除了国防军工职业小幅上涨,获主…

vim编辑器使用教程

文章目录 前言一、vim 的三种工作模式二、vim 基本操作1、编辑2、复制粘贴3、撤销4、跳转5、查找和替换6、自动缩进7、分屏8、其他 三、vim 配置文件 前言 vim 是 Linux 系统内置的「文本编辑器」,用于查看或编辑文件的内容,学会使用 vim 编辑器&#x…

【ros】7.ros导航navigation(定位规划)

物竞天择,优胜劣汰;苟不自新,何以获存。——梁启超 文章目录 :smirk:1. ros导航:blush:2. 2d导航:satisfied:3. 3d导航 😏1. ros导航 ros机器人有个导航功能,类似自动驾驶车辆的规控部分,即根据地图&…

性能测试:深入理解线程数,并发量,TPS,看这一篇就够了

并发数,线程数,吞吐量,每秒事务数(TPS)都是性能测试领域非常关键的数据和指标。 那么他们之间究竟是怎样的一个对应关系和内在联系? 测试时,我们经常容易将线程数等同于表述为并发数&#xff…

短视频app搭建的技术难点是什么?

近年来,短视频app的流行引起了广泛关注。越来越多的企业开始投入资源来开发短视频app,以满足用户的需求。然而,短视频app的开发过程中,存在许多技术难点需要解决。本文将深入分析短视频app搭建的技术难点。 短视频app的意义 随着…

Centos 7 内核在线升级

目录 一、参考文档 二、升级centos内核 三、centos内核一键升级脚本 一、参考文档 1、内核版本的分类等相关信息见官网:https://www.kernel.org/ 2、 第三方仓库ELRepo参考官网:http://elrepo.org/tiki/HomePage 3、国内yum源:https://…

为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...

被裁究竟是因为自身能力不行,还是因为大环境不行? 一位网友说: 被裁后找不到工作,本质上还是因为原来的能力就配不上薪资。如果确实有技术在身,根本不怕被裁,相当于白送n1! 有人赞同楼主的观点&…

如何在视频直播网站开发上集成即时聊天功能

视频直播网站开发需要考虑许多因素,其中一个非常重要的因素是与观众的互动。为了增强观众的参与度和留存率,许多视频直播网站都已经开始集成即时聊天功能。本文将介绍如何在视频直播网站开发上集成即时聊天功能,以提高观众的参与度和留存率。…

SQL Server基础 第五章 函数的使用(日期、字符串、时间、数学、转换等函数)

前言 在SQL Server中提供了许多内置函数,SQL Server中的内置函数就相当于Java、C#等编程语言中的内置API函数。按照函数种类可以分为聚合函数、数学函数、字符串函数、日期函数和时间函数、转换函数和元数据的数6种。在本章中重点讲解比较常用的4种函数&#xff0c…

python从入门到入狱系列-帮你彻底搞懂python的项目实战,爬虫获取NBA成员信息

作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…

020 - C++ 枚举

今天我们要讲的是 C 中的枚举。 enum 是 enumeration 的缩写,基本上可以说,它就是一个数值集合。如果你想要给枚举一个更实际的定义,它们是给一个值命名的一种方法。 所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个枚举数。它的值是…

Flask 与 Django 先学哪个呢

本文把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验。希望我可以帮助您选择学习哪个框架,因为学习一个框架可能会非常耗时 —— 当然也很有趣! 相似之处 让我们从相似之处开始。 No. 1 Flask 和 Djang…

ROS学习第二十七节——URDF集成Rviz基本流程

前面介绍过,URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于…

ROS学习第二十八节——URDF之robot link

1.概述 URDF 文件是一个标准的 XML 文件,在 ROS 中预定义了一系列的标签用于描述机器人模型,机器人模型可能较为复杂,但是 ROS 的 URDF 中机器人的组成却是较为简单,可以主要简化为两部分:连杆(link标签) 与 关节(joint标签)&…