强化学习策略梯度梳理4-SOTA中(DDPG TD3 SAC SAC-dicrete 附代码)

软演员-评论家(SAC)强化学习算法详解与实现 软演员-评论家(Soft Actor-Critic, SAC)是一种基于最大熵框架的深度强化学习算法,在连续动作空间任务中表现出色。下面我将全面介绍SAC的原理、实现细节以及在机器人控制中的应用。 阅读详情


notice!这个系列的梯度回传和前面完全不是一个套路了。

强化学习策略梯度梳理-SOTA中

同前文
这个部分仍然参考周博磊老师的第六节的顺序
主要参考课程 Intro to Reinforcement Learning,Bolei Zhou
相关文中代码 https://github.com/ThousandOfWind/RL-basic-alg.git
DDPG和TD3的实现参考了Addressing Function Approximation Error in Actor-Critic Methods,TD3作者的代码非常清晰明了!
SAC主要参考openai的官方tutorial, pytorch复现版本code , pytorch复现版本2

进阶方向2

Q-learning

这里标出Q-learning只是为了强调DQN的target网络结构和经验池。

然而尽管和DQN关系匪浅,这里的算法都主要适用于连续控制!

DDPG

DDPG很好的继承了DQN的特性,如果DQN用的多其实是很好理解DDPG结构的。

  1. critic网络用于估计Q值,利用奖赏值更新
  2. actor网络用于估计动作,利用 − c r i t i c ( s , a c t o r ( s ) ) -critic(s,actor(s)) −critic(s,actor(s))更新
连续动作空间

代码这里需要注意的是,和上一个系列不同,DDPG这里actor 和critic网络是分别训练的。

        self.Q = DDPG_Critic(param_set)
        self.actor = DDPG_Actor(param_set)

        self.targetQ = copy.deepcopy(self.Q)
        self.targetA = copy.deepcopy(self.actor)

        self.critic_optimiser = Adam(params=self.Q.parameters(), lr=self.learning_rate)
        self.actor_optimiser = Adam(params=self.actor.parameters(), lr=self.learning_rate)
        currentQ = self.Q(obs, action_index)
        targetQ = (reward + self.gamma * (1-done) * self.targetQ(next_obs, self.targetA(next_obs))).detach()
        critic_loss = F.mse_loss(currentQ, targetQ)
        self.writer.add_scalar('Loss/TD_loss', critic_loss.item(), self.step )


        # Optimize the critic
        self.critic_optimiser.zero_grad()
        critic_loss.backward()
        self.critic_optimiser.step()

        actor_loss = - self.Q(obs, self.actor(obs))
        self.writer.add_scalar('Loss/pi_loss', actor_loss.item(), self.step )

        self.actor_optimiser.zero_grad()
        actor_loss.backward()
        self.actor_optimiser.step()

另外target网络一般采用软更新方式

        for param, target_param in zip(self.Q.parameters(), self.targetQ.parameters()):
            target_param.data.copy_(self.tau * param.data + (1 - self.tau) * target_param.data)

        for param, target_param in zip(self.actor.parameters(), self.targetA.parameters()):
            target_param.data.copy_(self.tau * param.data + (1 - self.tau) * target_param.data)

这里有个我一直困惑的问题,当动作时连续的时候显然critic到actor的梯度是通的,但是动作离散时,是怎样向actor回传梯度的呢?
软更新和硬更新各有什么优缺点呢?

离散动作空间 - 待学习

TD3(Twin Delayed DDPG)

这个就有点像Double DQN的扩展版本了
他的两个改进就如同名字

  1. Twin: Q值具有双网络,计算targetQ时,取更小的值
  2. delayed: 用更小的频率更新actor
        currentQ1, currentQ2  = self.Q(obs, action_index)
        targetQ1, targetQ2 = self.targetQ(next_obs, self.targetA(next_obs))
        targetQ = th.min(targetQ1, targetQ2)
        targetQ = (reward + self.gamma * (1-done) * targetQ).detach()
        critic_loss = F.mse_loss(currentQ1, targetQ) + F.mse_loss(currentQ2, targetQ)
        self.writer.add_scalar('Loss/TD_loss', critic_loss.item(), self.step )

        # Optimize the critic
        self.critic_optimiser.zero_grad()
        critic_loss.backward()
        self.critic_optimiser.step()
        
        self.step += 1
        if self.step - self.last_update > self.pi_update_frequncy:
            self.last_update = self.step
            q1, q2 = - self.Q(obs, self.actor(obs))
            actor_loss = - q1

            self.writer.add_scalar('Loss/pi_loss', actor_loss.item(), self.step )

            self.actor_optimiser.zero_grad()
            actor_loss.backward()
            self.actor_optimiser.step()

            for param, target_param in zip(self.Q.parameters(), self.targetQ.parameters()):
                target_param.data.copy_(self.tau * param.data + (1 - self.tau) * target_param.data)

            for param, target_param in zip(self.actor.parameters(), self.targetA.parameters()):
                target_param.data.copy_(self.tau * param.data + (1 - self.tau) * target_param.data)

SAC

最大熵强化学习

所谓最大熵是希望最大化策略的熵
H ( P ) = E x ∼ P [ − log ⁡ P ( x ) ] H(P)=\underset{x \sim P}{\mathrm{E}}[-\log P(x)] H(P)=x∼PE​[−logP(x)]
可想而知该项会鼓励智能体尽可能的均匀探索环境
以下是SAC的loss方式
L ( ϕ i , D ) = E ( s , a , r , s ′ , d ) ∼ D [ ( Q ϕ i ( s , a ) − y ( r , s ′ , d ) ) 2 ] L\left(\phi_{i}, \mathcal{D}\right)=\underset{\left(s, a, r, s^{\prime}, d\right) \sim \mathcal{D}}{\mathrm{E}}\left[\left(Q_{\phi_{i}}(s, a)-y\left(r, s^{\prime}, d\right)\right)^{2}\right] L(ϕi​,D)=(s,a,r,s′,d)∼DE​[(Qϕi​​(s,a)−y(r,s′,d))2]
y ( r , s ′ , d ) = r + γ ( 1 − d ) ( min ⁡ j = 1 , 2 Q . ϕ targ  , j ( s ′ , a ~ ′ ) − α log ⁡ π θ ( a ~ ′ ∣ s ′ ) , a ~ ′ ∼ π θ ( ⋅ ∣ s ′ ) y\left(r, s^{\prime}, d\right)=r+\gamma(1-d)\left(\min _{j=1,2} Q_{.\phi_{\text {targ }, j}}\left(s^{\prime}, \tilde{a}^{\prime}\right)-\alpha \log \pi_{\theta}\left(\tilde{a}^{\prime} \mid s^{\prime}\right), \quad \tilde{a}^{\prime} \sim \pi_{\theta}\left(\cdot \mid s^{\prime}\right)\right. y(r,s′,d)=r+γ(1−d)(j=1,2min​Q.ϕtarg ,j​​(s′,a~′)−αlogπθ​(a~′∣s′),a~′∼πθ​(⋅∣s′)

我这里有一个疑惑,一般信息熵是 ∑ p ( x ) log ⁡ p ( x ) \sum p(x)\log p(x) ∑p(x)logp(x) 为什么这边的熵项就只剩一半了啊

v.s. TD3

SAC继承了TD3的双网络特性
但也有以下几点不同:

  1. loss项加入了信息熵
  2. 不需要target actor网络; target Q中,next action 通过当前策略计算
  3. TD3是一个确定策略,而SAC是随机策略,所以不需要对策略进行平滑。

第三项其实我不是特别特别清楚啊,大概意思就是TD3是通过网络直接输出了动作,而SAC其实输出的动作的概率,所以就。。。
Unlike in TD3, there is no explicit target policy smoothing. TD3 trains a deterministic policy, and so it accomplishes smoothing by adding random noise to the next-state actions. SAC trains a stochastic policy, and so the noise from that stochasticity is sufficient to get a similar effect.
but 我没有康到TD3平滑策略的部分呀

code
引入一个分布

首先因为我们希望得到的连续动作自带分布,我们就需要引入这个,具体这个是怎么回事,还没有研究


class TanhNormal(Distribution):
    """
    Represent distribution of X where
        X ~ tanh(Z)
        Z ~ N(mean, std)

    Note: this is not very numerically stable.
    """
    def __init__(self, normal_mean, normal_std, epsilon=1e-6):
        """
        :param normal_mean: Mean of the normal distribution
        :param normal_std: Std of the normal distribution
        :param epsilon: Numerical stability epsilon when computing log-prob.
        """
        self.normal_mean = normal_mean
        self.normal_std = normal_std
        self.normal = Normal(normal_mean, normal_std)
        self.epsilon = epsilon

    def sample_n(self, n, return_pre_tanh_value=False):
        z = self.normal.sample_n(n)
        if return_pre_tanh_value:
            return torch.tanh(z), z
        else:
            return torch.tanh(z)

    def log_prob(self, value, pre_tanh_value=None):
        """

        :param value: some value, x
        :param pre_tanh_value: arctanh(x)
        :return:
        """
        if pre_tanh_value is None:
            pre_tanh_value = torch.log(
                (1+value) / (1-value)
            ) / 2
        return self.normal.log_prob(pre_tanh_value) - torch.log(
            1 - value * value + self.epsilon
        )

    def sample(self, return_pretanh_value=False):
        """
        Gradients will and should *not* pass through this operation.

        See https://github.com/pytorch/pytorch/issues/4620 for discussion.
        """
        z = self.normal.sample().detach()

        if return_pretanh_value:
            return torch.tanh(z), z
        else:
            return torch.tanh(z)

    def rsample(self, return_pretanh_value=False):
        """
        Sampling in the reparameterization case.
        """
        z = (
            self.normal_mean +
            self.normal_std *
            Normal(
                torch.zeros(self.normal_mean.size()),
                torch.ones(self.normal_std.size())
            ).sample()
        )
        z.requires_grad_()

        if return_pretanh_value:
            return torch.tanh(z), z
        else:
            return torch.tanh(z)
动作选择
    def get_action(self, observation, sample=False):
        obs = th.FloatTensor(observation)
        dist = self.actor(obs)
        action = dist.sample() if sample else dist.mean
        action = action.clamp(*self.action_range)
        return action
critic loss
        currentQ1, currentQ2  = self.Q(obs, action_index)

        next_dist = self.actor(obs)
        next_action = next_dist.rsample()
        targetnextQ1, targetnextQ2 = self.targetQ(next_obs, next_action)

        next_log_prob = next_dist.log_prob(next_action).sum(-1, keepdim=True)
        targetV = th.min(targetnextQ1, targetnextQ2) - self.alpha * next_log_prob
        targetQ = (reward + self.gamma * (1-done) * targetV).detach()
        critic_loss = F.mse_loss(currentQ1, targetQ) + F.mse_loss(currentQ2, targetQ)

        # Optimize the critic
        self.critic_optimiser.zero_grad()
        critic_loss.backward()
        self.critic_optimiser.step()
actor loss
            dist = self.actor(obs)
            action = dist.rsample()
            q1, q2 = - self.Q(obs, action)
            q = th.min(q1, q2)
            log_prob = dist.log_prob(action).sum(-1, keepdim=True)

            actor_loss = self.alpha.detach() * log_prob - q

            self.actor_optimiser.zero_grad()
            actor_loss.backward()
            self.actor_optimiser.step()
alpha loss (option)
               self.alpha_optimiser.zero_grad()
                alpha_loss = (self.alpha *
                              (-log_prob - self.target_entropy).detach()).mean()
                alpha_loss.backward()
                self.alpha_optimiser.step()

SAC discrete

因为很多工作都是在这个路线基础上扩展的,甚至蔓延到了离散动作控制问题,所以我们这里就要探究怎么样去离散。

如果只是将离散动作读入网络显然梯度无法回传,所以自然的我们就会想到用动作概率,具体就是说critic不再只输出一维,而是像一般的DQN网络,有 ∣ A ∣ |A| ∣A∣维,然后和动作概率结合得到Q

code
critic loss
        currentQ1, currentQ2  = self.Q(obs)
        currentQ1 = currentQ1.gather(1, action_index)
        currentQ2 = currentQ2.gather(1, action_index)

        next_action_index, next_action_log_probs, next_pi = self.actor(next_obs)
        target_next_Q = th.min(self.targetQ(next_obs))
        targetV = (next_pi * (target_next_Q - self.alpha * next_action_log_probs)).sum(dim=1, keepdim=True)

        targetQ = (reward + self.gamma * (1-done) * targetV).detach()
        critic_loss = F.mse_loss(currentQ1, targetQ) + F.mse_loss(currentQ2, targetQ)
actor loss
            action_index, action_log_probs, pi = self.actor(obs)
            q1, q2 = - self.Q(obs)
            q = (th.min(q1, q2) * pi).sum(dim=1, keepdim=True)
            entropies = -(action_log_probs * pi).sum(dim=1, keepdim=True)
            actor_loss = (- self.alpha.detach() * entropies - q).mean()
alpha loss
                alpha_loss = (self.alpha *
                              (entropies.detach() - self.target_entropy).detach()).mean()
强化学习小笔记 —— 从 Normal 正态分布的对数概率密度到 tanh-Normal的对数概率密度 因为动作是从正态分布中采样得到的,然后使用tanh()进行转换,经过转换后的动作的对数概率密度不能再使用从正态分布中获取的log_prob。所以,我们需要计算的是这个转换后的动作的对数概率密度,而不是转换前的动作的对数概率密度。从代码里可以看到,策略网络的目标是输出一个动作,这个动作是从一个参数为 mu 和 std 的正态分布中采样得到的。然后,这个动作被一个 tanh 函数转换到 -1 到 1 的范围内,以满足环境的动作空间要求。这里的 log_prob 是动作的对数概率密度。,y对应的概率密度函数为。 阅读详情

相关推荐

【强化学习】TD3和SAC的区别?请详细进行解释。两者网络架构一样么?

TD3是一种基于确定性策略的强化学习算法,适用于相对简单的任务,优化目标为最大化奖励,而探索性较弱,通常依赖于噪声进行探索。SAC是基于最大熵强化学习的算法,使用随机策略并显式地最大化策略的熵,能够在复杂的环境中保持较强的探索性,因此通常能获得更好的性能,尤其在高维状态空间和不确定性较高的任务中。选择使用TD3或SAC主要取决于任务的复杂性以及对探索和利用平衡的需求。

wq6qeg88的博客 1568

探索强化学习新边界:SAC-Discrete in PyTorch

探索强化学习新边界:SAC-Discrete in PyTorch 项目地址:https://gitcode.com/gh_mirrors/sa/sac-discrete.pytorch 在人工智能的前沿,强化学习正不断开创新的可能。今天,我们将向您推荐一个基于PyTorch实现的优秀开源项目——SAC-Discrete,这是一个旨在帮助开发者和研究人员更好地理解并应用离散动作空间中的软Actor...

gitblog_00041的博客 867

详解DDPG算法:解决对大量的超参数、随机重启、任务环境敏感问题,完成月球着陆器,双足机器人demo、以及超参数调优教学

详解DDPG算法:解决对大量的超参数、随机重启、任务环境敏感问题,完成月球着陆器,双足机器人demo、以及超参数调优教学

丨汀、的博客 5948

SAC-Discrete.PyTorch 开源项目教程

SAC-Discrete.PyTorch 开源项目教程 项目介绍 SAC-Discrete.PyTorch 是一个基于 PyTorch 实现的自适应策略梯度(Soft Actor-Critic, SAC)算法的开源项目,特别针对离散动作空间进行了优化。该项目旨在为研究人员和开发者提供一个高效、易用的工具,以便在离散动作空间中进行强化学习实验和应用。 项目快速启动 环境配置 首先,确保你已经安装了 ...

gitblog_00289的博客 620

强化学习调参经验大集成:TD3、PPO+GAE、SAC、离散动作噪声探索、以及Off-policy 、On-policy 算法常见超参数

强化学习调参经验大集成:TD3、PPO+GAE、SAC、离散动作噪声探索、以及Off-policy 、On-policy 算法常见超参数

丨汀、的博客 1万+

drsac-discrete.pytorch

PyTorch中的SAC-Discrete 这是SAC-Discrete 的PyTorch实现。 我试图使读者更容易理解算法。 请让我知道,如果你有任何问题。 更新 2020.5.10 重构代码并修复SAC-Discrete算法的错误。 实现优先体验重放 ,N步返回和决斗网络 。 测试他们。 建立 如果您正在使用Anaconda,请首先创建虚拟环境。 conda create -n sacd python=3.7 -y conda activate sacd 您可以使用pip安装Python库。 pip install -r requirements.txt 如果您使用的不是CUDA 10.2,则可能需要安装PyTorch以获取正确版本的CUDA。 有关更多详细信息,请参见。 例子 您可以此示例中训练SAC-Discrete代理。 python train.py --c

(元)强化学习相关开源代码

本地代码:https://github.com/lucifer2859/meta-RL 元强化学习简介:https://www.cnblogs.com/lucifer1997/p/13603979.html 一、Meta-RL 1、Learning to Reinforcement Learn:CogSci 2017 https://github.com/awjuliani/Meta-RL 环境:TensorFlow,CPU; 任务:Dependent(Easy, Medium, Hard, Uniform

sir927的博客 2713

NT35310 LCD屏的初始化与图形显示实战:从画点到UI设计的完整指南

本文详细介绍了NT35310 LCD屏的初始化与图形显示实战,从硬件配置到UI设计全流程。内容包括8080总线连接、初始化序列、基础图形绘制算法、显示优化技巧以及UI框架实现,帮助开发者快速掌握TFT-LCD驱动开发技术,适用于工业控制和智能家居等嵌入式应用场景。

table的专栏 371

C. Discrete Acceleration (二分)

题目传送 题意: 有俩个人,一个人在起点,一个人在终点,俩人同时相向而行每经过一个特殊的点,速度都会增加1,初始速度都为1,问,俩人相遇的时间 思路: 二分时间找俩人走的路程,俩人走的路程再和走路程比较,如果大于了总路程,那么r = mid。 注意,二分的时候,把起始点和终点的坐标加进去。 AC代码 #include <bits/stdc++.h> inline long long read(){char c = getchar();long long x = 0,s = 1; while(c

give it a try 198

超详细 Git创建仓库及上传项目至Github操作(Windows系统)

文章目录前言一、Git下载及安装二、创建代码仓库1.配置身份2.创建本地仓库3.提交本地代码三、使用Git上传代码至Github1.创建ssh keys2.在Github中新建仓库3.关联本地仓库与Github仓库4.推送代码至Github仓库总结 前言 本文对于Windows系统上git的安装及基本使用方法进行简单介绍,并介绍如何使用git将仓库中的项目上传至个人的Github中去。内容参考《第一行代码》以及一些博客。 本文适合新手阅读哦~ 一、Git下载及安装 打开网站 git下载 下载安装包(直接

lijianyi0219的博客 2万+

STM32H743 ADC多通道采样实战:CubeMX配置+DMA传输避坑指南

本文详细介绍了STM32H743 ADC多通道采样的实战配置,包括CubeMX参数设置、DMA传输优化及常见问题解决方案。重点解析了ADC模块的核心特性、多通道采样序列配置、Cache一致性处理等关键技术,帮助开发者高效实现稳定可靠的模拟信号采集系统。

weixin_29175469的博客 613

强化学习策略梯度梳理-SOTA下(A2C,A3C 代码)

强化学习策略梯度梳理-SOTA上策略梯度SOTAA3C (Asynchronous Advantage Actor critic)QAC -> A3C 策略梯度SOTA 这个部分主要参考周博磊老师的第九节的顺序 主要参考课程 Intro to Reinforcement Learning,Bolei Zhou 相关文中代码 https://github.com/ThousandOfWind/RL-basic-alg.git 参考到了pytorch a3c A3C (Asynchronous Adva

thousandsofwind的博客 1085

SAP销售订单POD实操:从VL01N创建到VLPOD差异处理,保姆级避坑指南

本文详细解析SAP销售订单POD全流程,从VL01N创建到VLPOD差异处理,提供保姆级避坑指南。涵盖核心业务逻辑、前置配置、销售订单创建、交货单处理及差异解决方案,帮助用户高效管理供应链执行环节,确保财务与物流的准确对接。

weixin_27219587的博客 626

【DeepMind】新算法MuZero在Atari基准上取得了新SOTA效果,成果问鼎Nature

深度强化学习实验室来源:AI科技评论作者:陈彩娴、青暮编辑:DeepRL近日,DeepMind一篇关于MuZero的论文“Mastering Atari, Go, Chess and ...

深度强化学习实验室:一个“开源开放、共享共进”的强化学习学术组织。 1270

【G4基础08】GPS-2-Macro Commands宏命令

GPS-2

adelall的博客 3741

TextView部分文字可以被点击的效果。TextView拼接图片,图片可以被点击

今有一需求,就是列表标题后拼接图标,点击图标跳转一个web页; 这里简单做下笔记,以供需要的人参考: //设置部分文字点击事件 ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(conte...

LXFX1108的专栏 696

强化学习库torchrl介绍和强化学习五问

torchrl是一个基于pytorch的强化学习库,我发现根据torchrl的结构可以对强化学习知识点有更加深入的理解,下面将我的理解记录如下:'next''reward'4.4f可以看出torchrl对强化学习的抽象做的比较好,另外也提供了一个叫做Trainer的类,可以不需要手动迭代了。

HGGshiwo的博客 2759

如何给数据添加高斯白噪声?

首先测试集应该是加噪声的,至于训练集需不需要加噪声就见仁见智了。我个人测试的结果是,训练集如果不加噪声的话效果特别差,如果加噪声的话效果就比较好接受,大家可以自己试试看。在轴承故障研究中免不了要涉及到给数据主动加入噪声的情况,一般我们加的是高斯白噪声。由于热噪声是由大量自由电子的运动产生的,其统计特性服从高斯分布,故常将热噪声称为高斯白噪声。的频谱是均匀分布的,好像白光的频谱在可见光的频谱范围内均匀分布那样,所以热噪声又常称为。定义一:如果一个噪声,它的瞬时值服从。又是均匀分布的,则称它为高斯白噪声。

weixin_50642818的博客 5220

强化学习策略梯度梳理3-SOTA上(附PPO2代码)

强化学习策略梯度梳理-SOTA一级目录策略梯度方法总结进阶方向1Trust region policy optimization(TRPO) 一级目录 这个部分主要参考周博磊老师的第六节的顺序 主要参考课程 Intro to Reinforcement Learning,Bolei Zhou 相关文中代码 https://github.com/ThousandOfWind/RL-basic-alg.git 策略梯度方法 首先策略的优化目标是 J(θ)=Eτ∼πθ[R(τ)] J(\theta)=\math

thousandsofwind的博客 979

电路设计仿真软件:Mentor Graphics_(11).MentorGraphics软件操作与技巧

/ 定义自定义仿真命令// 加载设计文件// 运行仿真// 主函数return 1;return 0;// 自定义设计检查// 获取设计中的所有模块// 遍历所有模块// 检查模块名称是否符合规范if (!// 检查模块中的所有引脚if (!// 主函数main() {通过本节的学习,您应该已经掌握了如何在 Mentor Graphics 中进行二次开发,包括使用 Tcl、C++ 和 Python 进行基本和高级操作。

kkchenjj的博客 1647

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SAC-Discrete.PyTorch 项目教程

SAC-Discrete.PyTorch 项目教程 1. 项目的目录结构及介绍 sac-discrete.pytorch/ ├── configs/ │ └── default.yaml ├── models/ │ ├── actor.py │ ├── critic.py │ └── __init__.py ├── utils/ │ ├── logger.py │ ├── ...

gitblog_00600的博客 394

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度强化学习算法进阶:从 SAC 到 Discrete SAC

深度强化学习算法进阶:连续/离散环境下的超稳定高效算法SAC/Discrete SAC。从入门到了解到掌握,值得一看!

qq_40641591的博客 468

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

强化学习之SAC

个人观看周博磊课程的浅薄理解,如有错误请不吝指正。

小星AI 2481

强化学习笔记【12】DDPG

该系列主要是听李宏毅老师的《深度强化学习》过程中记下的一些听课心得,除了李宏毅老师的强化学习课程之外,为保证内容的完整性,我还参考了一些其他的课程,包括周博磊老师的《强化学习纲要》、李科浇老师的《百度强化学习》以及多个强化学习的经典资料作为补充。 使用说明 笔记【4】到笔记【11】为李宏毅《深度强化学习》的部分; 笔记 【1】和笔记【2】根据《强化学习纲要》整理而来; 笔记 【3】和笔记【12】根据《百度强化学习》整理而来。 一、离散动作vs连续动作 图1. 离散动作vs连续动作 ...

qq_41030408的博客 3726

深度学习常见名词概念:Sota、Benchmark、Baseline、端到端模型、迁移学习等的定义

深度学习:Sota的定义 sota实际上就是State of the arts 的缩写,指的是在某一个领域做的Performance最好的model,一般就是指在一些benchmark的数据集上跑分非常高的那些模型。

Hanze的博客 13万+

GNN携手强化学习!刷爆顶会SOTA,霸榜的28个顶会方案!

图神经网络(GNN)与强化学习(RL)的结合,是一个充满活力的研究领域,它融合了GNN在图数据表示上的深度学习能力和RL在决策过程中的策略优化能力。这种结合为处理具有复杂图结构的数据问题提供了强大的工具。GNN能够深入挖掘图中的模式和关系,而RL则擅长在动态环境中进行序列决策,尤其是在需要长期规划和适应环境变化的情况下。通过将两者结合起来,可以开发出能够同时学习图结构表示和做出最优决策的智能模型。

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值