强化学习中的应该理解的一些关键概念(笔记)

简而言之,RL是研究代理以及代理如何通过反复试验来学习的方法。它正式提出了这样一种思想,即通过奖励或惩罚人的行为使其将来更有可能重复或放弃该行为。以下两篇文章会结合本篇理论部分给出代码实践:

ppo算法 关键公式+代码(一)
ppo算法 关键公式+代码(二)

1、术语

代理与环境交互

强化学习的主要特征是代理环境。环境是代理生存并与之互动的世界。在交互的每个步骤中,代理都会得到(可能是部分)对世界状态的观察,然后根据状态决定要采取的行动。当代理对它进行操作时,环境会发生变化,但也可能会自行发生变化。

代理还从环境中感知到奖励信号,该数字告诉它当前世界状态的好坏。代理的目标是最大化其累积的奖励,称为return。强化学习方法是代理可以通过学习行为来实现其目标的方法。

为了更具体地讨论RL的作用,我们需要引入其他术语。我们需要了解一下概念:

  • 状态和观察(states and observations),
  • 动作空间(action spaces),
  • 策略(policies),
  • 序列(trajectories),
  • 不同的收益表述(different formulations of return),
  • RL优化问题(the RL optimization problem),
  • 价值函数(value functions)。

1.1状态和观察(States and Observations)

状态 s 是对世界状态的完整描述。不包含关于世界的信息
观察 o 是对状态s的部分描述,可以解释部分被状态忽略的信息。

在深度RL中,我们几乎总是用实值向量,矩阵或高阶张量表示状态和观测值。例如,视觉观察可以用其像素值的RGB矩阵表示。机器人的状态可以用其关节角度和速度来表示。

当代理能够观察到环境的完整状态时,我们说该环境是 fully observed。当主体只能看到部分观察时,我们说环境是partially observed的。

1.2 动作空间(action space)

不同的环境允许不同类型的动作。给定环境中所有有效动作的集合通常称为动作空间。

某些环境(例如Atari和Go),代理能够执行的动作是离散的,例如如上下左右这四个动作,我们称它的动作空间为离散动作空间(discrete action spaces)。而其他环境(例如,代理在物理世界中控制机器人的环境),代理的动作是连续的,例如电机角度控制。我们称为连续动作空间(continuous action spaces),在连续空间中,动作是实值向量。

这种区分对深度RL中的方法产生了一些深远的影响。一些算法系列只能在一种情况下直接应用,而在另一种情况下则必须进行大量修改。

1.3 策略(Policies)

策略是使用代理来决定采取何种行动的规则。

如果它可以是确定性的,通常用 μ \mu 表示:

a t = μ ( s t ) a_t = \mu(s_t)

如果是随机的,通产用 π \pi 表示:
a t π ( s t ) a_t \sim \pi(\cdot | s_t)

在深度RL中,我们处理参数化策略:输出为可计算函数的策略,这些函数取决于一组参数(例如神经网络的权重和偏差),我们可以通过一些优化算法进行调整以更改行为。

我们通常用 θ \theta 或表示这种策略的参数 ϕ \phi ,然后将其作为下标写在策略符号上:
a t = μ θ ( s t ) a_t = \mu_{\theta}(s_t)
a t = π θ ( s t ) a_t = \pi_{\theta}(\cdot | s_t)

1.3.1 确定性策略(Deterministic Policies):

下面使用tensorflow编写的连续动作空间的确定性策略的简单代码:

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

其中,mlp是一个给定结构和激活函数的神经网络,神经网络直接输出动作值。

1.3.2 随机策略(Stochastic Policies)

随机策略指的是神经网络,或者策略模型,它输出的是动作的概率分布,而不是某个特定的动作,然后再根据概率去对动作进行采样,深度RL中两种最常见的随机策略是分类策略(categorical policies )对角高斯策略(diagonal Gaussian policies)

分类策略可用于离散动作空间,而对角线高斯策略可用于连续动作空间。对于使用和训练随机策略,两个关键计算至关重要:

  • 从策略中对行为取样,
  • 计算特定动作的对数可能性(log likelihoods ), log π θ a s \log \pi _ {\theta}(a | s)
分类政策(Categorical Policies)

分类策略就像是针对离散操作的分类器。他给出当前状态下每个离散动作的概率。我们可以与构建分类模型相同的方式为分类策略构建神经网络:输入是观察值,然后是若干层(卷积层或全连接层,具体取决于输入的类型),然后便得到最后一个线性层提供每个动作的logit,然后再加上softmax将logit转换为概率。

采样 :给定每个动作的概率,像Tensorflow Probability这样的框架具有内置的采样工具。例如,请参阅tfp.distributions.Categorical文档或tfp.distributions.Multinomial

对数似然 : 将最后一层概率表示为 P θ P _ {\theta} 。它是一个包含很多动作的向量,因此我们可以将动作视为向量的索引。我们可以通过索引来获得向量中的动作的对数似然率:
log π θ a s = log [ P θ ( s ) ] a \log \pi _ {\theta}(a | s)= \log [P _ {\theta} (s)]_a

高斯策略(Diagonal Gaussian Policies)

多元高斯分布(或多元正态分布)由均值向量 μ \mu 和协方差矩阵 Σ \Sigma 来描述。对角高斯分布是一种特殊情况,其中协方差矩阵仅在对角线上有数值。所以,我们可以用一个向量表示它。

对角高斯策略始终具有一个神经网络,该神经网络将观测值映射为平均动作 μ θ \mu _ {\theta} 。然后通常有两种不同的方式表示协方差矩阵:

  • 用一个对数标准偏差的向量 log σ \log \sigma 表示,它不是关于状态的函数: log σ \log \sigma 是独立参数。(VPG,TRPO和PPO的实现是通过这种方式实现的。)

  • 由一个神经网络提供,是一个关于状态的函数,以记录标准偏差 log σ θ s \log \sigma _ {\theta}(s) 。它可以选择与均值网络共享某些层。

请注意,在两种情况下,我们都输出对数标准偏差而不是直接输出标准偏差。这是因为log stds可以随意接受中的任何值 (-\infty,\infty) ,而stds必须为非负数。如果您不必强制执行这些约束,则训练参数会更容易。可以通过对数标准偏差取幂,立即获得标准偏差,因此通过这种方式表示它们不会损失任何信息。

采样:给定平均动作 μ θ \mu _ {\theta} 和标准偏差 σ θ ( s ) \sigma _ {\theta}(s) ,以及一个,来自高斯分布 ( z N ( 0 I ) ) (z \sim \mathcal {N}(0,I)) 的噪声向量 z z ,可以使用以下公式计算动作样本:

a = μ θ s + σ θ s z a = \mu _ {\theta}(s)+ \sigma _ {\theta}(s)\odot z

其中 \odot 表示两个向量的元素之间乘积。我们可以使用标准函数来计算噪声向量,例如tf.random.normal。或者,您可以直接将均值和标准差提供给tfp.distributions.Normal对象,然后使用该值进行采样。

对数似然:具有k维的动作a向量,其高斯分布具有均值 μ = μ θ ( s ) \mu = \mu_{\theta}(s) 方差为 σ = σ θ ( s ) \sigma = \sigma_{\theta}(s) 。其对数似然由以下公式给出:

l o g π θ ( a s ) = 1 2 ( i = 1 k ( ( a i μ i ) 2 σ i 2 + 2 l o g σ i ) + k l o g 2 π ) log \pi_ \theta(a|s) = -\frac{1}{2}\left ( \sum_{i=1}^{k}\left ( \frac{(a_i-\mu_i)^2}{\sigma _i ^2 }+ 2 log \sigma_i \right) +k log2 \pi\right )

1.4序列(Trajectories)

序列 τ \tau 是由代理与环境交互过程中的一系列状态和动作所组成,其形式如下:
τ = ( s 0 , a 0 , s 1 , a 1 , . . . ) \tau = (s_0,a_0,s_1,a_1,...)
初始状态 s 0 s_0 从初始状态分布中随机抽取,又或者由 ρ 0 \rho_0 决定:
s 0 ρ 0 ( ) s_0 \sim \rho_0(\cdot)

状态转移(即 t t 时刻状态 s t s_t ,与 t + 1 t+1 时刻状态 s t + 1 s_{t+1} 之间世界发生了什么),只依赖于最近的动作 a t a_t

确定性动作: s t + 1 = f ( s t , a t ) s_{t+1} = f(s_t, a_t)
随机动作: s t + 1 P ( s t , a t ) s_{t+1} \sim P(\cdot | s_t, a_t)

这个序列通常也被叫做 episodes 或者 rollouts.

1.5奖励和收益(Reward and Return)

奖励功能 R R 在强化学习中至关重要。这取决于当前的世界状态,刚刚采取的行动以及下一世界的状态:

r t = R ( s t , a t , s t + 1 ) r_t = R(s_t, a_t, s_{t+1})

不过通常将其简化为仅依赖于当前状态 r t = R s t r_t = R(s_t) 或状态-动作 r t = R s t a t r_t = R(s_t,a_t) 。代理的目标是使某个序列上累积的奖励值最大化,当然这也不一定,实际上可能只是一小部分情况。根据实际情况我们再详说。最常见的有有下两种:

  • 有限无折扣收益,这种情况的回报只是单纯地将每一步所产生的奖励加起来:

R ( τ ) = t = 0 T r t R(\tau) = \sum_{t=0}^{T} r_t

  • 无限折扣收益, 与上一种情况相反,给每一步动作奖励都打个折:

R ( τ ) = t = 0 γ t r t R(\tau) = \sum_{t=0}^{\infty}\gamma ^t r_t

但是,为什么我们要折扣系数呢?我们不是只想获得所有奖励吗?可以不用,但是使用折扣率在直观上和数学上都很方便。从直觉上讲:现在现金比以后现金要值钱。数学上:无限水平的奖励之和可能不会收敛到有限的值,并且很难在方程中处理。但是在有折现因子的情况下,并且在合理的条件下,无穷大是收敛的。

1.6 RL优化问题

无论选择哪种收益度量(有限,无限),无论采取何种策略选择方式(随机,确定),RL的目标都是选择一种策略模型,该策略模型使得代理采取行动时能最大化预期收益。

要讨论预期收益,我们首先必须讨论序列上的概率分布。假设环境转变和策略都是随机的。在这种情况下, T T 阶跃序列的概率为:
P ( τ π ) = ρ 0 ( s 0 ) t = 0 T 1 P ( s t + 1 s t , a t ) π ( a t s t ) P(\tau|\pi) = \rho_0(s_0)\prod_{t=0}^{T-1}P(s_{t+1}|s_t,a_t)\pi(a_t|s_t)

因此,用表示的预期收益(无论采用哪种度量)为 J ( π ) J(\pi)

J ( π ) = τ P ( τ π ) R ( τ ) = E τ π [ R ( τ ) ] J(\pi) = \int_{\tau} P(\tau|\pi)R(\tau) = \underset{\tau \sim \pi}{E}[R(\tau)]

RL中的集中优化问题可以表示为:

π = a r g m a x π J ( π ) \pi ^* = arg \underset{\pi}{max}J(\pi)

其中 π \pi ^* 最优策略

1.7 价值函数(Value Functions)

了解 状态 或 状态-动作 的价值通常很有用。所谓价值,是指如果从那个状态或状态-动作开始,然后再根据特定策略采取永远行动,所获得的期望收益。几乎每种RL算法都使用一种或另一种方法使用价值函数。

这里给出主要四种价值函数:

1、On-Policy Value Function —— V π ( s ) V^{\pi}(s) :从状态s开始然后一直根据决策模型 π \pi 采取行动

V π ( s ) = E τ π [ R ( τ ) s 0 = s ] V^{\pi}(s) = \underset{\tau \sim \pi}{E}[R(\tau) | s_0 = s]

2、On-Policy Action-Value Function—— Q π ( s , a ) Q^{\pi}(s,a) :从状态s开始,采取随机动作a(该动作比一定来自决策模型),然后一直根据决策模型 π \pi 采取行动

Q π ( s , a ) = E τ π [ R ( τ ) s 0 = s , a 0 = a ] Q^{\pi}(s,a) = \underset{\tau \sim \pi}{E}[R(\tau) | s_0 = s, a_0 = a]

3、Optimal Value Function —— V ( s ) V^*(s) :从状态s开始,一直根据当前环境中的最优策略采取行动

V ( s ) = m a x π E τ π [ R ( τ ) s 0 = s ] V^{*}(s) =\underset{\pi}{max} \underset{\tau \sim \pi}{E}[R(\tau) | s_0 = s]

4、Optimal Action-Value Function—— Q ( s , a ) Q^{*}(s,a) :从状态s开始,采取随机动作a,然后一直根据当前环境中的最优策略采取行动

Q ( s , a ) = m a x π E τ π [ R ( τ ) s 0 = s , a 0 = a ] Q^*(s,a) = \underset{\pi}{max} \underset{\tau \sim \pi}{E}[R(\tau)| s_0 = s, a_0 = a ]

有两个很关键的联系:
V π ( s ) = E a π Q π ( s , a ) V^{\pi}(s) = \underset{a\sim \pi}{E}{Q^{\pi}(s,a)}
V ( s ) = max a Q ( s , a ) V^*(s) = \max_a Q^* (s,a)

1.8 最优Q函数和最优策略(The Optimal Q-Function and the Optimal Action)

optimal action-value函数 Q ( s , a ) Q ^ *(s,a) 与最优策略模型选择出来的动作之间存在重要的联系。根据 Q ( s , a ) Q ^ *(s,a) 定义,最优策略模型会根据当前状态s选择出能够使收益最大化的动作,因此,如果我们知道了 Q Q^* ,就能直接获取最优动作,
a s = arg max a Q ( s , a ) a ^ *(s)= \arg \max_a Q ^ *(s,a)

注意:可能会有多个动作最大化 Q ( s , a ) Q ^ *(s,a) ,在这种情况下,所有动作都是最优的,最优策略可能会随机选择其中的任何一个。但是总会有一个确定性地选择动作的最佳策略。

1.9 贝尔曼方程(Bellman Equations)

所有四个值函数都遵循称为Bellman方程的特殊自洽方程。Bellman方程背后的基本思想是:

起点的价值是您期望从那里得到的回报,再加上下一次到达的地方的价值。

  • on-policy value functions 的贝尔曼方程为:

V π ( s ) = E a π   s P [ r ( s , a ) + γ V π ( s ) ] V^{\pi}(s)= \underset{a \sim \pi \ s'\sim P}{E}[r(s,a) + \gamma V^{\pi}(s')]

Q π ( s , a ) = E s P [ r ( s , a ) + γ E a π Q π ( s , a ) ] Q^{\pi}(s,a) = \underset{s'\sim P}{E}[{r(s,a) + \gamma \underset{a'\sim \pi}{E}{Q^{\pi}(s',a')}}]

其中
s s' 指下一状态,
s P = s P ( s , a ) s' \sim P = s' \sim P(\cdot |s,a)
a π = a π ( s ) a \sim \pi = a \sim \pi(\cdot|s)
a π = a π ( s ) a' \sim \pi=a' \sim \pi(\cdot|s')

  • optimal value functions的bellman方程:

V s =   m a x a   u n d e r E s   s i m P r s a +   g a m m a V s V ^ *(s)&= \ max_a \ underE {s'\ sim P} {r(s,a)+ \ gamma V ^ *(s')}

Q s a =   u n d e r E s   s i m P r s a +   g a m m a   m a x a Q s a Q ^ *( s,a)&= \ underE {s'\ sim P} {r(s,a)+ \ gamma \ max_ {a'} Q ^ *(s',a')}

策略模型的价值函数和最优价值函数的Bellman方程之间的关键区别是   m a x \ max 过度动作的存在与否。它的包含反映了这样一个事实,即代理每当选择其行动时,为了采取最佳行动,就必须选择导致最高价值的行动。

2.0 优势函数

有时在RL中,我们不需要描述一个动作的绝对意义,而只需描述它比其他动作平均好多少。也就是说,我们想知道该行动的相对优势。我们利用优势函数使这个概念变得精确。

决策 π \pi A π ( s , a ) A ^ {\pi}(s,a) 描述了,在状态s下执行特定动作a,比根据 π ( s ) \pi(\cdot | s) 随机选择一个动作要好多少,假定往后的行为都是根据 π \pi 产生的。在数学上,优势函数定义为:
A π ( s , a ) = Q π ( s , a ) V π ( s ) A^{\pi}(s,a) = Q^{\pi}(s,a) - V^{\pi}(s)

发布了33 篇原创文章 · 获赞 216 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/weixin_41045354/article/details/104109726
今日推荐