强化学习策略梯度梳理2 - AC(附代码)

03 强化学习——Actor-Critic(AC)基础篇(TD-AC) 一、算法描述 根据上一章PG算法可以得知对于策略梯度下降的方法我们关注的是: 因此从广义的策略理论上,策略梯度可以写成: 可以表示为一下几种 1、,轨迹的总回报。 2、,动作后的总汇报(从该动作往后算,可以看成前期的对后面没有影响) 3、,加入基线的累计回报 4、,状态-值函数 5、,优势函数 6、,TD误差 将广义的策略梯度分开来看,是一个评价器(critic),评估策略的好坏(策略为actor),在PG中使用的是一条轨迹的累计回报来评价策略的好坏,但这种评价比较粗糙,不够精确 阅读详情

主要参考文献 Reinforcement Learning: An introduction,Sutton
主要参考课程 Intro to Reinforcement Learning,Bolei Zhou
相关文中代码
https://github.com/ThousandOfWind/RL-basic-alg.git

Actor-Critic

Actor-Critic Policy Gradient (QAC)

从REINFORCE到AC主要就是把MC的估计方式换成自举。
可以把REINFORCE里的 G t G_t Gt​ 替换为critic: Q ( S t , A t , w ) Q(S_t, A_t, \boldsymbol{w}) Q(St​,At​,w)
∇ J ( θ ) ∝ E π [ Q ( S t , A t , w ) ∇ ln ⁡ ( π ( A t ∣ S t , θ ) ) ] \nabla J(\boldsymbol{\theta}) \propto \mathbb{E}_{\pi}\left[Q(S_t, A_t, \boldsymbol{w})\nabla \operatorname{ln}(\pi(A_t \mid S_t, \boldsymbol{\theta}))\right] ∇J(θ)∝Eπ​[Q(St​,At​,w)∇ln(π(At​∣St​,θ))]
这个Q可以简单的用TD更新在这里插入图片描述

    def get_action(self, observation, *arg):
        obs = th.FloatTensor(observation)
        pi = self.pi(obs=obs)
        m = Categorical(pi)
        action_index = m.sample()

        self.log_pi_batch.append(m.log_prob(action_index))
        self.value_batch.append(self.Q(obs=obs)[action_index])
        return int(action_index), pi
    def learn(self, memory):
        batch = memory.get_last_trajectory()

        reward = th.FloatTensor(batch['reward'][0])
        log_pi = th.stack(self.log_pi_batch)

        value = th.stack(self.value_batch)
        mask = th.ones_like(value)
        mask[-1] = 0
        next_value = th.cat([value[1:], value[0:1]],dim=-1) * mask

        td_error = reward + self.gamma * next_value.detach() - value
        td_loss = (td_error ** 2).mean()
        J = - (value.detach() * log_pi).mean()

        loss = J + td_loss

        self.writer.add_scalar('Loss/J', J.item(), self._episode)
        self.writer.add_scalar('Loss/TD_loss', td_loss.item(), self._episode)
        self.writer.add_scalar('Loss/loss', loss.item(), self._episode)


        self.optimiser.zero_grad()
        loss.backward()
        grad_norm = th.nn.utils.clip_grad_norm_(self.params, 10)
        self.optimiser.step()

        self._episode += 1

感觉结果还是挺悲剧的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QAC with shared network

这个理论其实很简单,只是是共享actor网络和critic网络的特征提取层
但是常常担心会发生耦合而同流合污
在这里插入图片描述
在这里插入图片描述

至少最左边有几个点黄了。。。
在这里插入图片描述

这结果烂着烂着我都习惯了

one-step AC

由于在REINFORCE-baseline中已经在用
∇ J ( θ ) ∝ E π [ ( G ( S t , A t ) − v ( S t ) ) ∇ ln ⁡ ( π ( A t ∣ S t , θ ) ) ] \nabla J(\boldsymbol{\theta}) \propto \mathbb{E}_{\pi}\left[\left(G(S_{t},A_t) -v(S_t)\right)\nabla \operatorname{ln}(\pi(A_t \mid S_t, \boldsymbol{\theta}))\right] ∇J(θ)∝Eπ​[(G(St​,At​)−v(St​))∇ln(π(At​∣St​,θ))]
很自然的就可以
∇ J ( θ ) ∝ E π [ ( R ( S t , A t ) + γ v ( S t + 1 ) − v ( S t ) ) ∇ ln ⁡ ( π ( A t ∣ S t , θ ) ) ] \nabla J(\boldsymbol{\theta}) \propto \mathbb{E}_{\pi}\left[\left(R(S_{t},A_t) + \gamma v(S_{t+1}) -v(S_t)\right)\nabla \operatorname{ln}(\pi(A_t \mid S_t, \boldsymbol{\theta}))\right] ∇J(θ)∝Eπ​[(R(St​,At​)+γv(St+1​)−v(St​))∇ln(π(At​∣St​,θ))]
这样我们就有了one step AC算法
在这里插入图片描述

    def get_action(self, observation, *arg):
        obs = th.FloatTensor(observation)
        pi = self.pi(obs=obs)
        m = Categorical(pi)
        action_index = m.sample()
        self.log_pi = m.log_prob(action_index)
        return int(action_index), pi
    def learn(self, memory):
        batch = memory.get_last_trajectory()

        obs = th.FloatTensor(batch['observation'])
        next_obs = th.FloatTensor(batch['next_obs'])

        value = self.V(obs).squeeze(0)
        next_value = self.V(next_obs).squeeze()

        td_error = batch['reward'][0] + batch['done'][0] * self.gamma * next_value.detach() - value

        J = - ((self.I * td_error).detach() * self.log_pi)
        value_loss = (td_error ** 2)
        loss = J + value_loss
        self.I *= self.gamma

        self.writer.add_scalar('Loss/J', J.item(), self._episode)
        self.writer.add_scalar('Loss/B', value_loss.item(), self._episode)
        self.writer.add_scalar('Loss/loss', loss.item(), self._episode)

        self.optimiser.zero_grad()
        loss.backward()
        grad_norm = th.nn.utils.clip_grad_norm_(self.pi.parameters(), 10)
        grad_norm = th.nn.utils.clip_grad_norm_(self.V.parameters(), 10)
        self.optimiser.step()

        self._episode += 1

结果,
在这里插入图片描述

在这里插入图片描述

为什么J-loss会出现负数还是没没整明白这个理论上看式子应该始终是正才对 忘了这里引入了baseline, 那自然会有正有负没毛病
Sutton 书里是这样的,但我不是很明白为什么 I I I 被用在 θ \theta θ的更新中,。后面的资格迹也是我从前没有涉及过的领域,等我看完前章再来复现吧

AC( λ \lambda λ)

如果把一步自举推广到多步,利用资格迹,就有
在这里插入图片描述

强化学习:Actor-Critic (AC)算法 阅读详情

相关推荐

基于策略的强化学习:Actor-Critic算法

Actor-Crtic算法伪代码和pytorch以及stable-baselines3代码实现

溯源的专栏 2189

AC自动机算法详解以及Java代码实现

详细介绍了AC自动机算法详解以及Java代码实现。

终生学习践行者 3508

梳理确定性策略梯度,随机策略梯度,AC,DPG,DDPG之间的联系

1、随机策略 1.1  随机策略公式为: 这里的P是一个概率函数,就是说,在给定状态和参数的情况下,输出的的动作服从一个概率分布,也就意味着每次走进这个状态的时候,输出的动作可能不同。 1.2  随机策略梯度公式为:   表明,策略梯度公式是关于状态和动作的期望,在求期望时,需要对状态分布和动作分布进行求积分。这就要求在状态空间和动作空间采集大量的样本,这样求均值才能近似期望。 ...

德米安 9369

强化学习之AC系列算法(AC、A2C、A3C)

强化学习之AC系列算法(AC、A2C、A3C)

qq_43838114的博客 7607

强化学习基础:强化学习分类,强化学习表示,值函数,策略迭代/值迭代, 主要的强化学习技术(蒙特卡洛学习/时间差分学习,DQN.,策略梯度/REINFORCE/AC系列算法)

强化学习

weixin_36378508的博客 3422

强化学习之Actor-Critic (AC, A2C, A3C, DDPG)

目录1. Review Policy Gradient2. Review Q-learning3. Actor-Critic4. Advantage Actor-Critic5. A2C解决CartPole-v11)构建actor和critic2)算法总体流程3)从概率分布选择动作4)Critic学习5)Actor学习6. A3C7. PDPG (Pathwise Derivative Policy Gradient)8. DDPG (Deep Determistic Policy Gradient)9.

weixin_42863507的博客 3617

强化学习策略梯度算法梳理:从REINFORCE到PPO2(REINFORCE、QAC、A2C、Off-Policy AC、PP01、PPO2))

策略优化方法的发展过程梳理,从REINFORCE到ppo2(REINFORCE、QAC、A2C、Off-Policy AC、PP01、PPO2)

dc_young的博客 774

深度强化学习(一)之脉络梳理

目录一、技术构成二、深度学习和强化学习区别三、两种决策方法四、强化学习的工作方式五、强化学习网络设计六、奖励的使用 一、技术构成 深度强化学习由两个技术构成: 1)RL:Reinforce Learning 强化学习 2)DL:Deep Learning 深度学习 二、深度学习和强化学习区别 1)强化学习完成两个任务:规划 和 决策 2)深度学习完成:特征映射,提取语义信息。 规划:达到最终状态,中间采取的一系列动作,不仅对当前状态做反应,还要考虑到未来。 三、两种决策方法 1)DQN 基于value做

JimmyOrigin的博客 882

强化学习算法伪代码对比

Value-Based Q-learning: 1、在迭代模型时Q-learning算法目标值的计算是选取下一状态最大的动作价值 2、下一状态的动作选取使用的是e-greedy算法,因此产生数据的策略(e-greedy)和迭代模型的策略(贪心:选取最大动作价值)不同,属于off-policy SARSA: 1、在迭代模型时Q-learning算法目标值的计算是选取e-greedy算法产生的下...

心之所向 7988

从数学小白到看懂PPO:手把手拆解策略梯度家族30+个核心概念(附手写笔记)

本文从数学小白视角出发,手把手拆解策略梯度家族(PG→NPG→TRPO→PPO)30+核心概念,结合几何直观和手写笔记,深入浅出讲解强化学习中的策略梯度、自然梯度、TRPO置信域约束及PPO的Clipped Surrogate Objective等关键技术,帮助读者系统掌握PPO算法原理与实践应用。

weixin_30256901的博客 227

Actor-Critic原理与实战:从策略梯度到PPO/SAC的演进与机械臂应用

强化学习是人工智能领域的重要分支,其核心挑战在于如何在高维连续动作空间中稳定地学到最优策略。Actor-Critic架构通过同时训练策略网络(Actor)和价值网络(Critic),有效解决了传统策略梯度方法方差大、训练不稳定的问题。从优势函数到GAE(广义优势估计),AC框架为算法提供了低方差梯度信号,成为PPO、SAC等现代主流算法的共同基石。在实际工程中,无论是游戏控制还是机械臂操作,AC家族都展现出强大的适应能力。从基础原理出发,解析策略梯度与价值估计的结合方式,并深入探讨算法选型与工程实现中的关键

weixin_33842304的博客 304

策略梯度定理(Policy Gradient)系列算法Pytorch代码实现

在学习强化学习算法的过程中发现,实际上基于策略梯度定理的强化学习算法是一个大类,会接触到一系列算法与相关的名词(例如REINRECE, Acotr-critic, A2C, A3C等等)。但实际发现网上大多数相关介绍与代码实现似乎并没搞清楚他们之间的区别和联系,经常张冠李戴(比如一些标题为A2C的代码实际里面为REINRECE+baseline算法),因此本文希望直接通过代码来对策略梯度定理系列算法进行一个总结,供大家参考。

duyangyi的博客 796

ESP32-CAM实战:从零构建高精度QR二维码识别系统

本文详细介绍了如何使用ESP32-CAM构建高精度QR二维码识别系统,涵盖硬件配置、开发环境搭建、二维码识别库选择与优化、完整系统实现及实战问题排查。通过优化识别算法和电源管理,系统可实现快速、稳定的二维码识别,适用于物联网设备绑定等场景。

weixin_42524703的博客 437

深度强化学习Actor-Critic的更新逻辑梳理笔记

深度强化学习Actor-Critic的更新逻辑梳理笔记 文章目录深度强化学习Actor-Critic的更新逻辑梳理笔记前言:Actor-Critic架构简介:critic的更新逻辑actor的更新逻辑: 前言: 前几天在给师弟讲actor-critic架构更新逻辑的时候,actor的优化逻辑我卡了好一会儿,最终也没有完整的把逻辑梳理出来,今天刚好趁着脑子清醒,把之前的PPT拿出来,借着PPT的内容,将AC架构的更新逻辑说明白,特此做一个笔记。 Actor-Critic架构简介: 关于AC架构,还是简单的说说

hehedadaq的博客 3287

单片机通识之UART通信协议(如何用汇编实现)

使用汇编实现UART通信

smart_num_1的博客 997

学习STM32的无人机控制

设计并实现无人机控制系统,使用STM32单片机进行控制。无人机控制系统主要包括飞行控制、姿态控制、定位导航等功能。以下是一个基于STM32的无人机控制系统的代码案例。以上是一个基于STM32的无人机控制系统的代码案例,包括飞行控制、姿态控制和定位导航等功能。请根据实际情况进行修改和完善。

qq_67153941的博客 839

【强化学习】第十章:随机高斯策略

就是方差的自然对数。我们上面的策略函数架构是极简的形式,我看有的资料是创建两个网络,一个网络输出均值,一个网络输出方差。从f(s,a,θ)到(μ,log(var))的映射关系就是上图的A处,可导可微,这部分梯度是可以顺利回传的。中的任务,本来是打算写入第八章的,但是在Actor-Critic框架中,使用高斯策略能实现更稳定、更高效的策略优化,彼时AC又没讲,所以思来想去,这部分就只能单独开一个篇章讲解了。,就是有概率的策略,我们可以根据动作的概率去对动作进行抽样,得到连续动作空间中一个最优的确定性动作。

因为热爱所以坚持 789

Unity抖音小游戏上架实战:从零到一,详解流程与避坑指南

本文详细介绍了Unity抖音小游戏上架的全流程,包括环境准备、SDK集成、开发者账号注册、软著申请、打包提交流程及常见问题解决方案。重点解析了抖音小游戏平台特有的配置细节和避坑技巧,帮助开发者高效完成游戏上架并优化用户体验。

weixin_33704234的博客 261

从A2C、TRPO、PPO到GRPO,强化学习策略梯度算法完整演进与大模型落地实战解析

在深度强化学习与大模型对齐的工程体系中,策略梯度算法是贯穿行业十几年发展的核心底座。我们日常使用的ChatGPT、DeepSeek、各类开源对话大模型、数学推理模型、代码生成模型,其最终贴合人类偏好、逻辑通顺、输出高质量内容的能力,全部来源于强化学习对齐技术的迭代打磨。其中A2C、TRPO、PPO、GRPO四款算法,构成了一条的完整进化链路。

小程故事多的博客 458

Python爬虫实战:如何抓取旅游论坛上的帖子、旅行攻略和评论内容

无论是知名的旅游网站,还是地方性的旅游讨论区,用户发布的旅行贴文、攻略和评论往往包含着大量的宝贵信息。本文将详细介绍如何使用Python编写一个爬虫,抓取旅游论坛上的帖子、旅行攻略和评论内容,涵盖从获取页面内容、解析数据到处理动态加载等各个方面的技术。从基本的请求和网页解析,到动态加载页面的处理,再到数据存储和反爬虫技巧,我们详细讲解了抓取旅游论坛数据的全过程。通过本文的介绍,你可以将所学的爬虫技术应用到其他类似的网站抓取任务中,为后续的数据分析、机器学习等任务提供丰富的数据源。在这种情况下,传统的。

2201_76125261的博客 1557

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写?

如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处,

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 5万+

【强化学习】第十章:连续动作空间强化学习:随机高斯策略、DPG算法

之前我们学的算法,不管是确定性最优策略还是随机性最优策略,其输出都是有限个动作的最优策略。本篇讲连续动作空间的强化学习,重点讲两个算法:随机高斯策略和DPG。其中,随机高斯策略输出的是连续动作空间的随机性最优策略,DPG是连续动作空间的确定性最优策略。

因为热爱所以坚持 799

实战案例七:Claude Code 构建完整的 Web 应用

前面的案例大多是单一功能的演示,本章将展示如何使用 Claude Code 从零开始构建一个完整的 Web 应用,涵盖需求分析、架构设计、编码实现、测试部署的全流程。

gaoxiang_120的专栏 584

【具身智能基础】强化学习

本文系统介绍了强化学习的核心概念与主流算法。首先阐述了强化学习的基本框架,包括智能体与环境交互、马尔可夫决策过程、蒙特卡洛采样等基础理论。随后详细解析了时序差分(TD)方法体系,包括Q-Learning、SARSA及其深度版本DQN等价值型算法。然后重点讨论了策略梯度(PG)方法及其改进版本Actor-Critic架构,涵盖A2C、A3C、DDPG、PPO、GRPO、DPO等算法。

AI²OT的博客 997

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

赵世钰《强化学习的数学原理》第十章重点总结

策略梯度方法(Policy Gradient Methods)的基本思想是最大化一个目标函数JθJ(\theta)Jθ来得到最优策略。用于最大化JθJ(\theta)Jθ的梯度上升算法是θt1θtα∇θ​ln⁡πat∣stθt⋅qtstatθt1​θt​α∇θ​​lnπat​∣st​θt​⋅qt​st​at​该式清楚地展示了如何融合基于策略的方法和基于价值的方法。

gongfuyd的博客 699

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: 强化学习策略梯度梳理1 - REINFORCE(附代码)
下一篇: 强化学习策略梯度梳理3-SOTA上(附PPO2代码)
ThousandsOfWind
博客等级 码龄11年 21粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值