Key Concepts and Terminology
以下内容翻译自open ai 的spinning up文档,同时加入了一些自己的理解。原始内容来自spinningup
文章目录
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πθ(at∣st)
3.2.1 Categorical Policies
一个分类策略像一个离散动作的分类器,为分类策略构建神经网络的方法和为分类器构建神经网络的方法一样:输入是观测,紧接着是一些层(可能是卷积层或者是全连接层,这依赖于输入的种类),然后你有一个最终的线性层给出每个动作的对数,之后跟随一个softmax将对数转移为概率。
Sampling(采样):给定了每个动作的概率,像TensorFlow这样的框架有内建的工具用于采样,举个例子,像 tf.distributions.Categorical或tf.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) z∼N(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πθ(a∣s)=−21(i=1∑k(σ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πσi1e−2σ2(μθ(s)−ai)2
其中 μ θ ( s ) \mu_\theta(s) μθ(s)为神经网络映射的某一维动作均值 μ i \mu_i μik 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=1∏kπθ(s,ai)=i=1∏