强化学习中的基础概念和术语——spinning up文档翻译

本文翻译自open ai 的spinning up文档,探讨强化学习中的核心概念,包括状态、观测、动作空间、策略、轨迹、奖励、价值函数等,并详细阐述了确定性和随机策略,如分类策略和对角高斯策略,以及它们在深度强化学习中的应用。
摘要由CSDN通过智能技术生成

Key Concepts and Terminology

以下内容翻译自open ai 的spinning up文档,同时加入了一些自己的理解。原始内容来自spinningup


../_images/rl_diagram_transparent_bg.png

RL(强化学习)的主要特征是智能体和环境,环境是智能体交互的世界,在每一步的交互中,智能体看到(可能是部分的看到)世界状态的观测,然后决定采取的行动。环境随着智能体的行动而改变,也可能随着自己改变。

智能体能感知到来自环境的reward(奖励)信号,这是一个告诉它当前世界状态好坏的数字,智能体的目标是最大化当前的累积奖励,叫做return,强化学习是让智能体学习行为去获得它目标的学习方法。

1.States and Observations

State(状态)s是对世界状态的完整描述,对状态来说世界没有隐藏的信息。Observation(观测)是对状态的部分描述,可能忽略了一些信息。

在深度强化学习中,我们几乎总是用一个实值向量,矩阵,高阶张量来表示状态和观测。举个例子,一个视觉观测可以用其像素值的RGB矩阵来表示,一个机器人的状态可以用它关节角度和它的速度来表示。

如果一个智能体能观测环境的完整状态,我们称环境为fully observed(完全观测的)。如果一个智能体只能看见部分观测,我们称环境为partially observed(部分观测的)。

2. Action Spaces

不同的环境允许不同种类的动作,一个给定环境中的合法动作集被称为action space(动作空间),有些环境,像Atari和Go,有discrete action spaces(离散动作空间),其中智能体只能执行有限数目的移动,其他环境,像智能体控制一个机器人在物理世界中,有continuous action spaces(连续动作空间),在连续动作空间中,动作是实值向量。

这种区别对深度强化学习中的方法有相当深刻的影响,一些算法只能直接应用于离散空间,只能通过大幅修改应用于其他环境。

3.Policies

一个policy(策略)是智能体采取动作的规则,它可以是确定性的,这种情况下常用 μ \mu μ表示
a t = μ ( s t ) a_t=\mu(s_t) at=μ(st)

或者它可能是离散的,常用 π \pi π表示
a t = π ( ⋅ ∣ s t ) a_t=\pi(\cdot|s_t) at=π(st)
因为策略是智能体的大脑,因此使用policy代替agent并不罕见,例如:The policy is trying to maximize reward.

在深度强化学习中,我们处理parameterized policies(参数化策略):策略的输出依赖于可计算函数的一组参数(就好像神经网络中的weights和bias),我们可以通过一些优化算法调整行为的改变。

我们通常用 θ \theta θ ϕ \phi ϕ来表示策略的参数,然后将其作为策略符号的下表来强调联系:
a t = μ θ ( s t ) a t = π θ ( ⋅ ∣ s t ) \begin{aligned} a_t&=\mu_\theta(s_t)\\ a_t&=\pi_\theta(\cdot|s_t) \end{aligned} atat=μθ(st)=πθ(st)

3.1 Deterministic Policies

Example:以下为TensorFlow中连续动作中的确定性策略

obs = tf.placeholder(shape=(None, obs_dim), dtype=tf.float32)
net = mlp(obs, hidden_dims=(64,64), activation=tf.tanh)
actions = tf.layers.dense(net, units=act_dim, activation=None)

其中mlp表示通过给定的隐藏层和激活函数连接起来的多层神经网络。

3.2 Stochastic Policies

深度强化学习中最常用的两种随机策略是 categorical policies(分类策略)和diagonal Gaussian policies(对角高斯策略)

分类策略被用于离散动作空间,连续策略被用于连续动作空间。

对于使用和训练随机策略,有两个计算是十分重要的:

  • 从策略中采样动作

  • 计算相应动作的log 似然, l o g π θ ( a t ∣ s t ) log\pi_\theta(a_t|s_t) logπθ(atst)

3.2.1 Categorical Policies

一个分类策略像一个离散动作的分类器,为分类策略构建神经网络的方法和为分类器构建神经网络的方法一样:输入是观测,紧接着是一些层(可能是卷积层或者是全连接层,这依赖于输入的种类),然后你有一个最终的线性层给出每个动作的对数,之后跟随一个softmax将对数转移为概率。

Sampling(采样):给定了每个动作的概率,像TensorFlow这样的框架有内建的工具用于采样,举个例子,像 tf.distributions.Categoricaltf.multinomial

Log-Likelihood(对数似然):定义最后一层概率为 P θ ( s ) P_\theta(s) Pθ(s),它是一个向量,有多少项就有多少个动作,所以我们可以把这些动作视为向量的索引。通过一个向量的索引来获得一个动作 a a a的对数似然:
l o g π θ ( s , a ) = l o g [ P θ ( s ) ] a log\pi_\theta(s,a)=log[P_\theta(s)]_a logπθ(s,a)=log[Pθ(s)]a

3.2.2 Diagonal Gaussian Policies

一个多元高斯分布(或者说多元正态分布)由一个均值向量 μ \mu μ和一个协方差矩阵 Σ \Sigma Σ描述。对角高斯分布是一个特例,它的协方差矩阵只有对角项有元素,所以我们能用一个向量表示它。

一个对角高斯策略总是用一个神经网络将观测(状态)映射为动作均值 μ θ ( s ) \mu_\theta(s) μθ(s),而协方差矩阵有两种方式来表示。

第一种:用一个单独的向量表示对数标准差 l o g σ log\sigma logσ,它并不是状态 s s s的函数,只是单独的参数(spinning up中的VPG,TRPO和PPO都使用了这种方式实现)。

第二种:用一个神经网络将状态映射为对数标准差 l o g σ θ ( s ) log\sigma_\theta(s) logσθ(s),可以和平均值网络共享一些层。

注意在这两种方式下我们都输出对数标准差而不是标准差,因为对数标准差可以是 ( − ∞ , + ∞ ) (-\infty,+\infty) (,+)中的任何值,而标准差必须是非负的,如果不需要这些约束训练参数会更容易,标准差可以从对数标准差里求指数而来,所以我们这样做不会损失任何表示。

Sampling(采样):给定均值动作 μ θ ( s ) \mu_\theta(s) μθ(s)和标准差 σ θ ( s ) \sigma_\theta(s) σθ(s),一个来自球面高斯函数的噪声向量 z z z z ∼ N ( 0 , I ) z\sim N(0, I) zN(0,I)),一个动作采样可以如下计算:
a = μ θ ( s ) + σ θ ( s ) ⊙ z a=\mu_\theta(s)+\sigma_\theta(s)\odot z a=μθ(s)+σθ(s)z
⊙ \odot 定义为两个向量的点积,标准框架中内置了方法去计算噪声向量,像tf.random_normal,或者你可以提供均值和标准差直接使用 tf.distributions.Normal 来采样

Log-Likelihood(对数似然):一个 k k k维的动作,一个均值 u = μ θ ( s ) u=\mu_\theta(s) u=μθ(s)和标准差 σ = σ θ ( s ) \sigma=\sigma_\theta(s) σ=σθ(s)的对角高斯策略形成的对数似然为:
log ⁡ π θ ( a ∣ s ) = − 1 2 ( ∑ i = 1 k ( ( a i − μ i ) 2 σ i 2 + 2 log ⁡ σ i ) + k log ⁡ 2 π ) \log \pi_{\theta}(a | s)=-\frac{1}{2}\left(\sum_{i=1}^{k}\left(\frac{\left(a_{i}-\mu_{i}\right)^{2}}{\sigma_{i}^{2}}+2 \log \sigma_{i}\right)+k \log 2 \pi\right) logπθ(as)=21(i=1k(σi2(aiμi)2+2logσi)+klog2π)

推导:对某一个状态 s s s,采样某一维动作 a i a_i ai的概率为:
π θ ( s , a i ) = 1 2 π σ i e − ( μ θ ( s ) − a i ) 2 2 σ 2 \pi_\theta(s,a_i)=\frac{1}{\sqrt{2\pi}\sigma_i}e^{-\frac{(\mu_\theta(s)-a_i)^2}{2\sigma^2}} πθ(s,ai)=2π σi1e2σ2(μθ(s)ai)2
其中 μ θ ( s ) \mu_\theta(s) μθ(s)为神经网络映射的某一维动作均值 μ i \mu_i μi

k k k维动作的联合概率(对角协方差表示了独立)为:
π θ ( s , a ) = ∏ i = 1 k π θ ( s , a i ) = ∏ i = 1 k 1 2 π σ i e − ( μ i − a i ) 2 2 σ 2 \pi_\theta(s,a)=\prod_{i=1}^{k}\pi_\theta(s,a_i)=\prod_{i=1}^{k}\frac{1}{\sqrt{2\pi}\sigma_i}e^{-\frac{(\mu_i-a_i)^2}{2\sigma^2}} πθ(s,a)=i=1kπθ(s,ai)=i=1

spinningup是一个开源的强化学习库,用于实现和研究强化学习算法。你引用的命令是在运行spinningup的一个脚本,用于绘制训练过程的数据图表。\[1\] 在强化学习,随机性策略是指在每个状态下,代理根据概率分布选择动作。这种策略可以帮助代理在探索和利用之间找到平衡。\[2\] 基于策略的动作-价值函数是用来评估在给定策略下,执行某个动作后的预期回报。它表示在状态s下选择动作a后,按照策略π执行动作所获得的预期回报。\[3\] 关于spinningup的笔记,可以参考官方文档和教程,其包含了详细的使用说明和示例代码,可以帮助你更好地理解和使用spinningup库。 #### 引用[.reference_title] - *1* [spinningup源码学习一](https://blog.csdn.net/CAIYUNFREEDOM/article/details/127507478)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [OpenAI Spinning Up强化学习笔记——关键概念术语](https://blog.csdn.net/weixin_42722013/article/details/121001614)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值