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

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

一、本篇在强化学习中的位置

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

二、随机高斯策略

高斯策略属于强化学习的基于策略优化 的分支,用于解决连续动作空间中的任务,本来是打算写入第八章的,但是在Actor-Critic框架中,使用高斯策略能实现更稳定、更高效的策略优化,彼时AC又没讲,所以思来想去,这部分就只能单独开一个篇章讲解了。 所以,当你对第八、九章节非常熟悉了,本算法就是顺水推舟,理所当然,毫无难度。

随机高斯策略求出的是连续动作空间中的随机性策略,就是有概率的策略,我们可以根据动作的概率去对动作进行抽样,得到连续动作空间中一个最优的确定性动作。

1、策略函数的架构设计 (1)左图的输出是有限个动作的随机策略。本篇章学右图,输出的是某个概率分布的参数,具体到这里就是高斯分布的参数:均值和方差。当然你可以根据你自己的实际情况,你可以学习你自己需要的概型。本篇是高斯概型。

(2)上图的策略函数都是用神经网络来拟合,当然你可以用任何函数拟合,只要效果好,都是可以的,不是只局限于神经网络。这里以神经网络为例。

(3)对于左图,输出有限个动作的随机概率,我们之前是特别强调:神经网络的输出层是要加softmax层 的。

但是对于右图,输出层就不适合 添加任何非线性变换了,直接回归两个数值即可。也就是输出层只要两个神经元即可,一个表示高斯分布的均值μ,一个表示高斯分布的方差δ。

(4)我们一般不直接回归方差δ ,而是回归一个log(var) ,就是方差的自然对数。为啥是log(var),而不直接就是方差δ?因为方差都是大于0的数-->大于0的数,经过log以后,就可正可负-->可正可负正符合神经网络的输出。所以我们把神经网络的输出看作是log(var),比去限制网络的输出范围更加简单方便,需要方差时再变换一下即可。

(5)策略函数输出的是高斯分布的参数:均值和方差。但是我们想得到的是连续动作空间中的一个确定性动作,所以我们只要在这个分布中随机采样一个动作输出即可。

2、从策略函数的数据流角度分析策略梯度

我们上面的策略函数架构是极简的形式,我看有的资料是创建两个网络,一个网络输出均值,一个网络输出方差。其实个人感觉没必要这么麻烦,一个网络直接回归2个值也是可以的。为了节省画图的时间,我就用别人的架构图梳理一下策略函数的数据流:(1)采样公式为:a = μ + σ*ϵ,其中ϵ∼N(0,1)是标准正态噪声。

(2)策略函数的正向传播是:输入网络状态s,输出8对儿(μ,log(var))。然后从一个标准正态分布中随机采样一个8维的向量,-->每个维度都 标准差均值-->输出连续动作空间中的一个确定性动作f。所以f(s,a,θ)是一个确定性的数值,就是上图的A。

(3)上图3处的操作叫重参数技巧 ,在深度学习生成网络AVE模型中就有这个操作。感兴趣可参考: https://blog.csdn.net/friday1203/article/details/137709966

(4)我们要求策略函数梯度,优化策略函数,那我们就得看数据流是否可以顺利反向传播。从f(s,a,θ)到(μ,log(var))的映射关系就是上图的A处,可导可微,这部分梯度是可以顺利回传的。从(μ,log(var))到s是神经网络,自然更可以顺利回传。可见反向求梯度毫无障碍。

3、策略梯度的计算-->策略函数的优化

这是我们第八章推导出来的策略梯度公式,由A、B两部分组成:

(1)A部分就是上图中从f->s反向传播的梯度。前面从数据流角度描述了从f->s可以丝滑求导,这个过程可以闭眼交给pytorch即可。

(2)B部分是从策略π 下采集经验数据,从经验数据中学习而来。那策略π是什么呢?策略π是用来指导行动action,从而生成经验数据的。而从经验数据中学习q(s,a)又有MC方法和TD方法,所以随机高斯策略的实现又分基于REINFORCE的实现方法和基于AC的实现方法:

4、小结

高斯策略提供了一个可学习、可微、易实现的方式让策略梯度算法在连续动作空间中工作,从而使得policy(在梯度更新下)收敛到最优或近似最优解。严格来说,高斯策略往往收敛于局部最优,但是在很多连续控制任务中,局部最优已经是相当好了。

对八、九章节非常熟悉的同学,这个算法就非常非常简单。唯一的难点(或者说新知识点)是:重参数技巧,以及在重参数操作下,梯度计算的微小变化。也就是从策略网络的输出(均值,log(var))到随机采样,这个映射过程中的梯度问题。想明白后其实特别特别简单,就是高斯分布的映射关系,而高斯分布又是处处可导可微。这点想明白后,这个算法就不攻自破了。

三、DPG算法

DPG,确定性策略梯度,Deterministic Policy Gradient,是最常用的连续控制算法。DPG是求连续动作空间中的确定性策略 ,是直接在状态s和动作a直接建立映射关系 的算法。此后我们还会学到在此算法的基础上改进的DDPG、TD3模型,这些算法都是解决动作空间连续的问题,并且求出的都是连续动作空间的确定性策略

DPG来自David Silver在ICML2014年发表的论文Deterministic Policy Gradient Algorithms。这个论文的很大一个贡献在于,在这个论文之前大家都觉得环境模型无关的确定性策略是不存在的,而David Silver等通过严密的数学推导证明了DPG的存在。根据DPG论文的证明,当概率策略的方差趋近于0的时候,就是确定性策略。

1、DPG的网络架构

DPG是Actor-Critic框架下的算法,所以它至少有两个子网络:一个策略网络(演员Actor)、一个价值网络(评委Critic)。具体网络架构如下:策略网络(Actor):用μ(s,θ) 表示,输入是状态s,输出是动作a,网络参数是θ。

价值网络(Critic):用q(s,a,ω)表示,输入是状态s和动作a,输出是动作价值值(一个实数),网络参数是ω。

下面对这个两个网络展开详细说一下。

(1)策略网络可见,策略网络μ是直接建立了从s到a的映射。μ is a mapping from S to A.

动作a直接就是一个确定性动作。比如我们要控制一个机械手臂,完成某个任务,获取奖励。机械臂有两个关节,分别可以在[0,360]和[0,180]的范围内转动,也就是这个动作是一个自由度为d=2的二维向量,动作空间是连续集合[0,360]x[0,180]。那这个例子对应到策略网络的输出a就是一个二维向量。

(2)价值网络价值网络是对动作价值函数Qπ(s,a)的近似。连续动作空间和离散动作空间在网络架构的形式上也是不同的。

2、计算DPG的策略梯度-->优化策略网络

计算策略梯度,我们首先要弄清楚DPG网络的数据流:数据流的正向传播:给定状态s,策略网络会输出动作a=μ(s,θ)--> 动作a + s 输入价值网络,价值网络输出动作价值q(s,a,w)。

我们把q(s,a,w)看作是对动作a的打分,我们希望价值网络对a的打分越高越好。所以我们训练策略网络的目标就是:改进θ,使得q最大

此时数据流反向传播求策略梯度 就是:

策略函数的梯度求出来以后,就用梯度值来更新策略网络:

3、训练DPG网络

由于策略网络是直接输出确定性的动作a,所以我们是无法获取 动作a所属的策略π,也就是策略π是无法表示或者是无法知道的。所以DPG算法是一个离轨算法。the deterministic policy gradient method is off-policy.

离轨的意思就是收集经验数据和更新策略是分开做的。所以我们训练DPG网络前,要先整理手头上已经获取的经验数据。如何整理?经验回放(Experience replay)!我们在第七章讲DQN时详细讲过了,不懂的小伙伴回看第七章。这里简单说一下:

经验数据整理完毕后,按照下面的训练流程,训练策略网络和价值网络:

4、DPG伪代码 DPG基本上就是这么多细节。重点有四:

一是,策略函数的网络架构设计,输出层是直接输出动作。

二是,策略函数的梯度值是从价值函数q开始回传的。所以从a到q这部分的梯度(价值函数的梯度)可以看作是调整策略函数梯度的步长。

三是,DPG的训练过程。DPG是一个离轨算法,所以经验数据要整理成回放数组。

四是,由于动作空间是连续的,所以DPG的动作价值学习只能用基于TD的方法来估计动作价值,也所以DPG也只能是基于AC框架来实现。

说明:本篇两个算法让我写得非常非常简单,没有晦涩的数学推导。我只是想说,其实它们就是这么简单,如果你有疑问有看不懂的地方,回看七八九三章,所有的原理都在这三章中。

相关推荐
未来之窗软件服务1 小时前
AI人工智能(二十三)错误示范ASR 语音识别C#—东方仙盟练气期
人工智能·c#·语音识别·仙盟创梦ide·东方仙盟
isyoungboy1 小时前
从图像中提取亚像素边缘点
算法
郝学胜-神的一滴1 小时前
深入理解链表:从基础到实践
开发语言·数据结构·c++·算法·链表·架构
金智维科技官方1 小时前
智能体,重构企业自动化未来
人工智能·自动化·agent·智能体·数字员工
桂花饼1 小时前
谷歌正式发布 Gemini 3.1 Pro:核心智能升级与国内极速接入指南
人工智能·qwen3-next·claude-sonnet·sora2pro·gemini-3.1pro·grok-420-fast·openclaw 配置教程
岛雨QA1 小时前
排序算法「Java数据结构与算法学习笔记6」
数据结构·算法
熬夜有啥好2 小时前
Linux软件编程——综合小练习
linux·算法·目录遍历·fgets·strcpy·linux内核与用户交互·strtok
Mixtral2 小时前
2026年3款AI会议记录工具测评:告别会后整理
人工智能
民乐团扒谱机2 小时前
【硬核解析】网易云听歌/哼歌识曲底层技术:从算法实现到工程落地(附核心公式/伪代码)
算法