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

news2024/11/20 15:37:13

一、本文概要:

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.coloradmin.cn/o/450806.html

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

相关文章

项目结束倒数2

今天,解决了,多个点的最短路问题 用的dfs,配上了floyed计算出的广源距离 难点是要记录路线,dfs记录路线就很烦 但是好在结束了,经过无数的测试,确保没啥问题(应该把) 来看看我的代码 void dfs(int b[], int x, int* sum, int last, int sums, int a[], BFS& s, Floyd_A…

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

Java核心技术 卷1-总结-14 映射更新映射项弱散列映射链接散列集与映射枚举集与映射 视图与包装器轻量级集合包装器 映射 更新映射项 处理映射时的一个难点就是更新映射项。正常情况下,可以得到与一个键关联的原值,完成更新,再放回更新后的值…

【二叉树】遍历二叉树

前言 二叉树有前中后序和层序四种常用的遍历方式,今天我们来学习一下如何用这四种方法遍历二叉树。 前序:根、左、右 中序:左、右、根 后序:左、右、根 层序:第一层、第二层… 递归 递归是一种将复杂问题不断细分成…

RHCE(五)

目录 一.判断当前磁盘剩余空间是否有20G,如果小于20G,则将报警邮件发送给管理员,每天检查一次磁盘剩余空间 1.创建脚本test1.sh 2.下载邮件服务并执行 3.测试 4.做计划任务 二.判断web服务是否运行(1、查看进程的方式判断该程…

ChatGPT 速通手册——模仿唐诗宋词,和模仿莎士比亚十四行诗的中英文差距

模仿唐诗宋词,和模仿莎士比亚十四行诗的中英文差距 根据前文介绍的三大反例特性,我们可以尝试给出几个典型的反例。比如诗词创作,尤其是长短句约束更加严格的词牌,对照反例特性: 有明确且唯一可行的标准定义——一个…

Windows OpenVino安装squeezenet1.1失败 —— 已解决

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,YOLO,python领域博主爱笑的男孩。擅长深度学习,YOLO,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollec…

【排序】冒泡排序与快速排序(三个版本+非递归图示详解哦)

全文目录 引言冒泡排序快速排序思路实现Hoare版本快排优化 挖坑法前后指针法 快排非递归版本思路实现 总结 引言 在这篇文章中,将继续介绍排序算法:冒泡排序与快速排序: 它们都属于交换排序,即通过两两比较交换,将较…

小朋友崇拜圈+灌溉(JAVA解法)

目录 小朋友崇拜圈 题目链接: 题目描述 输入描述 输出描述 输入输出样例 灌溉 题目链接: 题目描述 输入描述 输出描述 输入输出样例 小朋友崇拜圈 题目链接: https://www.lanqiao.cn/problems/182/learning/?page5&first_c…

手撕源码(一)HashMap-JDK8

目录 1.使用示例2.new HashMap<>() 解析2.1 加载因子2.2 构造方法 3.put() 解析3.1 原始put(k, v)3.2 计算哈希1&#xff09;为什么要进行二次hash&#xff1f;2&#xff09;二次hash计算示例&#xff1a;3&#xff09;为什么使用 (length-1)&hash 而不是 hash%lengt…

互联网医院系统|线上问诊系统定制|互联网医院源码开发技术

当下医疗成为人们比较关注的问题&#xff0c;移动医疗技术不断的进步&#xff0c;互联网医院系统成为了医疗企业发展的必经之路&#xff0c;通过移动终端与互联网医院系统进行连接&#xff0c;实现医疗服务的远程交互与管理。可以使医疗机构的医生通过移动设备随时随地的查看患…

词的表示方法笔记——词向量+代码练习

词的表示方法&#xff1a; 一、one-hot&#xff08;最简单&#xff09; 独热编码是一种将单词转化为稀疏向量的方法&#xff0c;其中每个单词都表示为一个只有一个元素为1其余元素均为0的向量&#xff0c;其维度由词库的大小决定。。例如&#xff0c;对于包含 4个单词的词汇表 …

Python二分查找(折半查找)的实现

时间复杂度 最优时间复杂度&#xff1a;O(1) 最坏时间复杂度&#xff1a;O(logn) 思路 对有序的顺序表进行查找&#xff0c;以下标查找&#xff0c;每次取一半查找&#xff0c;如[1,2,3,4,5,6,7,8,9]&#xff0c;查3, 下标从0~8&#xff0c;(08)//24,对比折半到下标为2的元素…

【基础算法】栈和队列

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招算法的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于代码随想录进行的&#xff0c;每个算法代码参考leetcode高赞回答和…

手写axios源码系列二:创建axios函数对象

文章目录 一、模块化目录介绍二、创建 axios 函数对象1、创建 axios.js 文件2、创建 defaults.js 文件3、创建 _Axios.js 文件4、总结 当前篇章正式进入手写 axios 源码系列&#xff0c;我们要真枪实弹的开始写代码了。 因为 axios 源码的代码量比较庞大&#xff0c;所以我们这…

Xilinx FPGA下如何加快QSPI Flash加载速度

1. 首先&#xff0c;不同型号的FPGA对外部QSPI Flash支持的最高频率是不一样的。XC6SLX45支持的最高频率仅为26MHz&#xff0c; 而XC7K325T支持的最高频率高达66MHz。 所以&#xff0c;当我们添加 set_property BITSTREAM.CONFIG.CONFIGRATE 50 [current_design] 的时候&…

特征选择算法 | Matlab实现基于互信息特征选择算法的分类数据特征选择 MI

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 特征选择算法 | Matlab实现基于互信息特征选择算法的分类数据特征选择 MI 部分源码 %

【1105. 填充书架】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给定一个数组 books &#xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先…

题目3180:蓝桥杯2023年第十四届省赛真题-互质数的个数======及探讨互质专题

原题链接 https://www.dotcpp.com/oj/problem3162.html 想直接看题解的&#xff0c;跳转到第三次尝试即可。 已AC。 解析&#xff1a; &#xff08;1&#xff09;首先大家要知道什么叫互质&#xff1a; 以及它们的性质&#xff1a; 欧拉函数 在数论中&#xff0c;对正整…

世界读书日|这些值得程序员反复阅读的经典书

2023年是第28个世界读书日&#xff0c;每年的这个时候&#xff0c;小编都会准备一份书单与您分享。 与经典同行&#xff0c;伴书香成长。小编今天推荐一份值得程序员反复阅读的经典书。 1、浪潮之巅 第四版 这不只是一部科技产业发展历史集…… 更是在这个智能时代&#xff…

【远程工具】- MobaXterm 的下载、安装、使用、配置【Telnet/ssh/Serial】

一、MobaXterm 概述 在远程终端工具中&#xff0c;secureCrt 和 XShell 是两款比较有名的远程工具&#xff0c;但这两款软件现在都是收费的&#xff0c;有些公司不允许破解使用。今天就推荐一款免费的、免安装的、功能丰富的远程终端软件–MobaXterm。 MobaXterm是由Mobatek开…