REINFORCE及进阶算法讲解笔记

REINFORCE

  • 总结

    估计VALUE-methods没有在理论上证明收敛,而policy-methods不需要估计value function。

    本算法总结了过去的算法,将过去算法作为特例看待,证明了即使是结合函数估计和实际采样的value梯度都可以无偏估计,证明了某种梯度迭代可以收敛到局部最优值。

    Untitled

    拓展:加入baseline,可以由任何方式得到,但不依赖于具体action和θ,可以减少variance

    Untitled

    具体计算时需要t从T开始,不断减小,累计梯度,最后更新θ和w;

    进一步改进:使用TD方法来估计Gt。

    比MC方法学习更迅速,不需要等待整个episode完结。

    Untitled

  • 定理1 得到了一个简便容易的policy梯度

    Untitled

    每一时刻在矩阵分布是之前状态乘以状态转移矩阵

    所有状态连成一片,那么将会得到一个station distribution,只要t足够大,极限与s0无关

    Untitled

    证明了以下定理

    Untitled

    Untitled

  • 定理2 value function和baseline

    Untitled

    提供了一种设计value function思路

    提及了关于baseline的思想

  • 定理3 SGD的直接应用

    Untitled

    Untitled

    得到fw的简单形式

    Untitled

    Untitled

  • 算法核心

    Gt为future reward

    Untitled

    Gt越大,则action概率大。

    定理1是在γ = 1的情况下证明的。引入γ会带来额外的好处。

    首先将QΠ替换为估计值G

    Untitled

    Untitled

  • REINFORCE进阶

    最严重问题:梯度方差太大。这会导致不同sample的梯度互相抵消从而使学习非常低效。

    时间距离越远,sample会拥有越大的varience,而γ^t可以有效控制它。

    在Gt的基础上增加一个与行动At无关的值b

    Untitled

    • 方法1 moving average

      思路:

      action概率增减,由其得到的reward正负决定

      当由多个action和多个reward,影响可能相互抵消,更强的信号会减弱,其余的消失。

      我们使强的信号变弱,弱的信号(小的增长)变成反向的(减少)。取baseline为当前的历史信息的平均值,而不仅仅是此次更新所利用的信息。

      同样的,过去的信息也可能太老旧而没有价值。也可以选取一个固定的window size计算平均值。

    • 方法2 state value function

      varience来自于不同state的G,所以moving average可以细分到每个state

      →对每个state求moving average,但更简单的改进是估计每个state的平均值,即state value function

      Untitled

    • Anather Improvement-Actor Critic

      MC-monte carlo方法得到的估计值虽然是五篇估计,但是有很大方差,Gt本身也不稳定。

      TD-Temporal difference方法虽然有偏差,但是可以极大减小方差

      Untitled

  • 算法核心证明

  • 网络结构设计

    1 构建ACTOR网络并抽样

    1)区别

    value-base策略:Q-learning算法基本流程是计算每个action的Q(s,a),以概率e随机选取action,1-e概率greedy选取Q(s,a)最大值的action

    policy-base策略:直接学习不同action的概率,使用network表示actor,最终输出是一个概率分布,且我们要根据该概率分布抽样得到action。

    2)基本结构

    distribution RL→F.log_sftmax可以学习得到一个分布,即得到一个在N个点上的概率分布,每个action可以看作一个点。

    F.log_softmax与F.softmax推荐明确指定对哪一个维度进行计算。

    设计网络时,每个维度的意义必须明确,意味着输入和输出的维度是固定的。同时,nn.Linear对属于维度没有严格限制,只要求最后一个维度和一开始定义的输入维度相同。如果在F.log_sftmax报错,很可能是nn.Linear的输入输出不是设想的形状。

    log_probs = F.log_softmax(self.fc2(x),**dim = 1**)
    

    3)抽样

    1.将概率从torch.tensor转变为numpy.array,然后用np.random.choice抽样。一次只对一个概率分布进行采样。

    2.使用torch.distributions.Categorical进行抽样。这种方法更为灵活,可以对多个概率同时采样。再使用.log_prob可以得到每个采样的log probability,且带有导数。

    2 构建critic网络

    是简化版的Q网络,只需要输出一个值。

    nn.ModuleList()# 较方便的进行抽样
    

    3 合并Actor Critic

    Deep Neural Network的前几层可能是相同的,都是对于原始输入的特征提取,可能是CNN多应用与图像,RNN多应用于文字,Transformer都有应用。

    最后一俩层则是具体惹怒的学习和处理,所以对于相同environment,学习actor和critic需要的特征可能一直,所以可以将他们合并在一个网络中,也可以理解成一种多任务学习。

    优点:多个任务同时反馈信息,能帮助底层更快更好地学习需要的feature

    缺点:需要谨慎平衡多个任务的loss,否则可能因为某任务loss比重大,导致其他任务学习效果变差。

  • 数据处理

    1 MC方法(无偏,接受较大vaivence,所有episode结束才能计算)

    Gt必须从今后向前计算,简单思路:计算每一个Gt再乘上γ^t

    简化:使用np.cumsum计算当前叠加和,直接对rt乘γ^t后求和,而不是先计算Gt。

    2 TD方法(与MC方法对立)

    Q_learning多使用它,只有vs,而不需要提取Qsa,只需要用Critic计算出所有state values后和获得的reward相加。

  • 主体循环

    在Q-learning种将所有transition存入replay buffer并后续进行抽样学习,这是因为Q-learning的Q(s,a)可以进行offline learning,但是在REINFORCE中,未得到导数的无偏估计,Π改变后所有的transition将不服从当前policy分布

    training loop存在的意义是:所有transition必须在当前policy下得到,如果policy改变,则必须丢弃之前的所有transition记录

    Replay Buffer

    每一次更新,为了使样本使用效率最大化,我们应该使用全部当前policy得到的样本,即使用一个临时的replay buffer来存储policy得到的所有样本。

    为了方便,使用list数据结构(也可以创建更复杂的类),在每个episode开始时,将这些临时replay buffer初始化。

    由于repaly buffer容量不会很大,且之后会对整个buffer进行处理而不需要采样操作,所以不需要像value methods中储存完整transition(St,At,Rt,Dt,St+1),而只需要按时间t将state,action,reward,和done分别储存即可。

    Main Loop

    value methods主体循环大致有四部分:

    1. 获取acton并执行;
    2. 记录当前transition;
    3. 更新参数;
    4. 判断是否episode结束。

    REINFORCE中,1,4时必须的。

    对于2,此时我们不需要储存完整transition,只需按时间t存储state,action,rewward,done,循环中可以保证时间t是统一的,故只需要储存当前值。

    对于3,我们需要移除循环体,获得完整的episode数据后再进行更新。每次更新后,必须将所有临时replay buffer清空。

    Update

    已记录了所有St和At并且知道Actor的情况下,计算lofΠ(at|st)也很简单,只要得到损失函数并直接优化即可。

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

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

相关文章

Java基础(一)--语法入门

文章目录 第一章、语法入门一、Java简介1、JVM2、Java程序执行过程3、JDK4、JRE5、JDK、JRE和JVM三者关系 二、Java常量与变量1、标识符2、关键字3、保留字4、变量5、数据类型6、常量 三、运算符1、算术运算符2、赋值运算符3、关系运算符4、逻辑运算符5、条件运算符6、运算符的…

Spring5深入浅出篇:Spring自定义类型转换器

Spring5深入浅出篇:Spring自定义类型转换器 类型转换器 首先要知道什么叫做类型转换器 ,我们通过配置的属性值是以字符串的形式为什么在查看对象成员变量时已经变成了int,这就是Spring的内置类型转换器帮我们做了自动类型转换. 作⽤:Spring通过类型转换器把配置⽂件…

Leetcode二十三题:合并K个升序链表【22/1000 python】

“合并K个升序链表”,这是一道中等难度的题目,经常出现在编程面试中。以下是该问题的详细描述、解题步骤、不同算法的比较、代码示例及其分析。 问题描述 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中…

数据结构书后习题

p17 1&#xff0c; 个人解答&#xff1a; int DeleteMinElem(SqList &L,int &min) {int j 0;if (L.length 0){printf("error!");return 0;}int min L.data[0];for (int i 1; i < L.length; i){if (L.data[i] < min){min L.data[i];j i;}}L.dat…

软考127-上午题-【软件工程】-McCabe度量法

一、McCabe度量法 1-1、定义 McCabe 度量法是通过定义环路复杂度&#xff0c;建立程序复杂性的度量。 它基于一个程序模块的程序图中环路的个数。计算有向图G的环路复杂性的公式为&#xff1a; V(G) m - n 2 闭合区域 1 其中V(G)是有向图 G 中的环路个数&#xff0c;m 是…

【C语言__结构体__复习篇3】

目录 前言 一、结构体基础知识 1.1 结构体的语法形式 1.2 创建结构体变量 1.3 结构体变量的初始化 1.4 点(.)操作符和箭头(->)操作符 二、匿名结构体 三、结构体自引用 四、结构体内存对齐 4.1 内存对齐的规则 4.2 出现结构体内存对齐的原因 4.3 修改默认对齐数 五、结…

8:系统开发基础--8.1:软件工程概述、8.2:软件开发方法 、8.3:软件开发模型、8.4:系统分析

转上一节&#xff1a; http://t.csdnimg.cn/G7lfmhttp://t.csdnimg.cn/G7lfm 课程内容提要&#xff1a; 8&#xff1a;知识点考点详解 8.1&#xff1a;软件工程概述 1.软件的生存周期 2.软件过程改进—CMM Capability Maturity Model能力成熟度模型 3.软件过程改进—CMMI—…

Jmeter配置服务器监控插件

1.安装插件管理器 插件官网地址&#xff1a;JMeter Plugins :: JMeter-Plugins.org 点击 Plugins Manager,如上图所示&#xff0c; &#xff0c;点击jar file下载“plugins-manager.jar”&#xff0c;下载后放到“jmeter\lib\ext”目录下&#xff0c;重启jmeter。 2.安装资源…

LeetCode 94 二叉树的中序遍历

题目描述 二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入…

Composite 组合

意图 将对象组合成树形结构以表示“部分-整体”的层级结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 结构 其中&#xff1a; Component为组合中的对象声明接口&#xff1b;在适当情况下实现所有类共有接口的默认行为&#xff1b;声明一个接口用于访问和管…

Spring Boot(二)— 自定义Spring Boot Starter

在Spring Boot中&#xff0c;自定义Spring Boot Starter是一个常见且强大的功能&#xff0c;它允许开发者为特定的功能或库创建自己的自动配置&#xff0c;从而简化集成过程。 1 前置知识 Spring Boot的事件为应用的启动和关闭提供了详细的上下文信息&#xff0c;使得开发者能…

OSI七层网络模型 —— 筑梦之路

在信息技术领域&#xff0c;OSI七层模型是一个经典的网络通信框架&#xff0c;它将网络通信分为七个层次&#xff0c;每一层都有其独特的功能和作用。为了帮助记忆这七个层次&#xff0c;有一个巧妙的方法&#xff1a;将每个层次的英文单词首字母组合起来&#xff0c;形成了一句…

腾讯云优惠券详细介绍及领券步骤详解

随着云计算技术的不断发展和普及&#xff0c;越来越多的企业和个人开始选择使用云服务来满足自身的需求。腾讯云作为国内领先的云服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了广大用户的信赖。为了回馈广大用户&#xff0c;腾讯云经常推出各种优惠活动&#xff0c;…

【JS】数组交换位置

公式 arr.splice(oldIndex, delCount, ...arr.splice(newIndex, delCount, arr[oldIndex])) arr - 操作的数组delCount - 删除的数组个数oldIndex - 交换位置的数组下标1newIndex - 交换位置的数组下标2...arr - 提取数组里的元素 splice删除元素时&#xff0c;返回一个数组&a…

利用计算机视觉算法提取裂纹相关特征参数信息

ABCnutter/CrackFeature: &#x1f680;使用计算机视觉相关算法提取裂缝的骨架&#xff08;矢量化&#xff09;、轮廓【支持提前修复断裂裂缝】&#xff0c;以及几何特征参数&#xff08;长度、宽度、面积和主要方向&#xff09;【欢迎Star】。主要流程以及相关算法如下&#x…

异构超图嵌入的图分类 笔记

1 Title Heterogeneous Hypergraph Embedding for Graph Classification&#xff08;Xiangguo Sun , PictureHongzhi Yin , PictureBo Liu , PictureHongxu Chen , PictureJiuxin Cao , PictureYingxia Shao , PictureNguyen Quoc Viet Hung&#xff09;【WSDM 2021】 2 Co…

1038: 顺序表中重复数据的删除

解法&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n, k;cin >> n;vector<int> arr(n);for (auto& x : arr) cin >> x;cin >> k;int sum 0;for (auto x : arr…

句柄ros::NodeHandle nh(“~“)与nh对launch文件参数配置(param)的影响

ros::NodeHandle nh("~"); 改为&#xff1a; ros::NodeHandle nh; 即可 /*************************分割线 ************************/ 如果原本是&#xff1a; ros::NodeHandle nh;可以改成&#xff1a; ros::NodeHandle nh("~"); 试试

反射与动态代理

一、反射 什么是反射? 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问 1.获取class对象的三种方式 Class这个类里面的静态方法forName&#xff08;“全类名”&#xff09;&#xff08;最常用&#xff09; 通过class属性获取 通过对象获取字节码文件对…

浏览器原理---事件循环

浏览器原理 学习浏览器原理对于我们开发是很有必要的 我们可以了解到浏览器内部工作原理对自己的代码进行优化 进程线程 首先了解进程和线程 进程就就是内存在正在进行的应用程序 在内存中独占一个内存空间 并且进程之间是隔离的 可以看到每个应用都有一个进程 占用空间内存…