简而言之,RL是研究代理以及代理如何通过反复试验来学习的方法。它正式提出了这样一种思想,即通过奖励或惩罚人的行为使其将来更有可能重复或放弃该行为。
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)
策略是使用代理来决定采取何种行动的规则。
如果它可以是确定性的,通常用μ表示:
at=μ(st)
如果是随机的,通产用π表示:
at∼π(⋅∣st)
在深度RL中,我们处理参数化策略:输出为可计算函数的策略,这些函数取决于一组参数(例如神经网络的权重和偏差),我们可以通过一些优化算法进行调整以更改行为。
我们通常用θ或表示这种策略的参数ϕ,然后将其作为下标写在策略符号上:
at=μθ(st)
at=πθ(⋅∣st)
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)。
分类政策(Categorical Policies)
分类策略就像是针对离散操作的分类器。他给出当前状态下每个离散动作的概率。我们可以与构建分类模型相同的方式为分类策略构建神经网络:输入是观察值,然后是若干层(卷积层或全连接层,具体取决于输入的类型),然后便得到最后一个线性层提供每个动作的logit,然后再加上softmax将logit转换为概率。
采样 :给定每个动作的概率,像Tensorflow Probability这样的框架具有内置的采样工具。例如,请参阅tfp.distributions.Categorical文档或tfp.distributions.Multinomial。
对数似然 : 将最后一层概率表示为Pθ。它是一个包含很多动作的向量,因此我们可以将动作视为向量的索引。我们可以通过索引来获得向量中的动作的对数似然率:
logπθ(a∣s)=log[Pθ(s)]a
高斯策略(Diagonal Gaussian Policies)
多元高斯分布(或多元正态分布)由均值向量μ和协方差矩阵Σ来描述。对角高斯分布是一种特殊情况,其中协方差矩阵仅在对角线上有数值。所以,我们可以用一个向量表示它。
对角高斯策略始终具有一个神经网络,该神经网络将观测值映射为平均动作μθ。然后通常有两种不同的方式表示协方差矩阵:
-
用一个对数标准偏差的向量logσ表示,它不是关于状态的函数:logσ是独立参数。(VPG,TRPO和PPO的实现是通过这种方式实现的。)
-
由一个神经网络提供,是一个关于状态的函数,以记录标准偏差logσθ(s)。它可以选择与均值网络共享某些层。
请注意,在两种情况下,我们都输出对数标准偏差而不是直接输出标准偏差。这是因为log stds可以随意接受中的任何值(−∞,∞),而stds必须为非负数。如果您不必强制执行这些约束,则训练参数会更容易。可以通过对数标准偏差取幂,立即获得标准偏差,因此通过这种方式表示它们不会损失任何信息。
采样:给定平均动作μθ和标准偏差σθ(s),以及一个,来自高斯分布(z∼N(0,I))的噪声向量z,可以使用以下公式计算动作样本:
a=μθ(s)+σθ(s)⊙z
其中⊙表示两个向量的元素之间乘积。我们可以使用标准函数来计算噪声向量,例如tf.random.normal。或者,您可以直接将均值和标准差提供给tfp.distributions.Normal对象,然后使用该值进行采样。
对数似然:具有k维的动作a向量,其高斯分布具有均值μ=μθ(s) 方差为σ=σθ(s) 。其对数似然由以下公式给出:
logπθ(a∣s)=−21(i=1∑k(σi2(ai−μi)2+2logσi)+klog2π)。
1.4序列(Trajectories)
序列τ是由代理与环境交互过程中的一系列状态和动作所组成,其形式如下:
τ=(s0,a0,s1,a1,...)
初始状态s0从初始状态分布中随机抽取,又或者由ρ0决定:
s0∼ρ0(⋅)
状态转移(即t时刻状态st,与t+1时刻状态st+1之间世界发生了什么),只依赖于最近的动作at。
确定性动作:st+1=f(st,at)
随机动作:st+1∼P(⋅∣st,at)
这个序列通常也被叫做 episodes 或者 rollouts.
1.5奖励和收益(Reward and Return)
奖励功能R在强化学习中至关重要。这取决于当前的世界状态,刚刚采取的行动以及下一世界的状态:
rt=R(st,at,st+1)
不过通常将其简化为仅依赖于当前状态rt=R(st)或状态-动作rt=R(st,at)。代理的目标是使某个序列上累积的奖励值最大化,当然这也不一定,实际上可能只是一小部分情况。根据实际情况我们再详说。最常见的有有下两种:
- 有限无折扣收益,这种情况的回报只是单纯地将每一步所产生的奖励加起来:
R(τ)=t=0∑Trt
- 无限折扣收益, 与上一种情况相反,给每一步动作奖励都打个折:
R(τ)=t=0∑∞γtrt
但是,为什么我们要折扣系数呢?我们不是只想获得所有奖励吗?可以不用,但是使用折扣率在直观上和数学上都很方便。从直觉上讲:现在现金比以后现金要值钱。数学上:无限水平的奖励之和可能不会收敛到有限的值,并且很难在方程中处理。但是在有折现因子的情况下,并且在合理的条件下,无穷大是收敛的。
1.6 RL优化问题
无论选择哪种收益度量(有限,无限),无论采取何种策略选择方式(随机,确定),RL的目标都是选择一种策略模型,该策略模型使得代理采取行动时能最大化预期收益。
要讨论预期收益,我们首先必须讨论序列上的概率分布。假设环境转变和策略都是随机的。在这种情况下,T阶跃序列的概率为:
P(τ∣π)=ρ0(s0)t=0∏T−1P(st+1∣st,at)π(at∣st)
因此,用表示的预期收益(无论采用哪种度量)为J(π):
J(π)=∫τP(τ∣π)R(τ)=τ∼πE[R(τ)]
RL中的集中优化问题可以表示为:
π∗=argπmaxJ(π)
其中π∗为最优策略
1.7 价值函数(Value Functions)
了解 状态 或 状态-动作 的价值通常很有用。所谓价值,是指如果从那个状态或状态-动作开始,然后再根据特定策略采取永远行动,所获得的期望收益。几乎每种RL算法都使用一种或另一种方法使用价值函数。
这里给出主要四种价值函数:
1、On-Policy Value Function —— Vπ(s):从状态s开始然后一直根据决策模型π采取行动
Vπ(s)=τ∼πE[R(τ)∣s0=s]
2、On-Policy Action-Value Function——Qπ(s,a):从状态s开始,采取随机动作a(该动作比一定来自决策模型),然后一直根据决策模型π采取行动
Qπ(s,a)=τ∼πE[R(τ)∣s0=s,a0=a]
3、Optimal Value Function ——V∗(s):从状态s开始,一直根据当前环境中的最优策略采取行动
V∗(s)=πmaxτ∼πE[R(τ)∣s0=s]
4、Optimal Action-Value Function——Q∗(s,a):从状态s开始,采取随机动作a,然后一直根据当前环境中的最优策略采取行动
Q∗(s,a)=πmaxτ∼πE[R(τ)∣s0=s,a0=a]
有两个很关键的联系:
Vπ(s)=a∼πEQπ(s,a)
V∗(s)=amaxQ∗(s,a)
1.8 最优Q函数和最优策略(The Optimal Q-Function and the Optimal Action)
optimal action-value函数Q∗(s,a)与最优策略模型选择出来的动作之间存在重要的联系。根据Q∗(s,a)定义,最优策略模型会根据当前状态s选择出能够使收益最大化的动作,因此,如果我们知道了Q∗,就能直接获取最优动作,
a∗(s)=argamaxQ∗(s,a)
注意:可能会有多个动作最大化Q∗(s,a),在这种情况下,所有动作都是最优的,最优策略可能会随机选择其中的任何一个。但是总会有一个确定性地选择动作的最佳策略。
1.9 贝尔曼方程(Bellman Equations)
所有四个值函数都遵循称为Bellman方程的特殊自洽方程。Bellman方程背后的基本思想是:
起点的价值是您期望从那里得到的回报,再加上下一次到达的地方的价值。
- on-policy value functions 的贝尔曼方程为:
Vπ(s)=a∼π s′∼PE[r(s,a)+γVπ(s′)]
Qπ(s,a)=s′∼PE[r(s,a)+γa′∼πEQπ(s′,a′)]
其中
s′指下一状态,
s′∼P=s′∼P(⋅∣s,a)
a∼π=a∼π(⋅∣s)
a′∼π=a′∼π(⋅∣s′)
- optimal value functions的bellman方程:
V∗(s)&= maxa underEs′ simPr(s,a)+ gammaV∗(s′)
Q∗(s,a)&= underEs′ simPr(s,a)+ gamma maxa′Q∗(s′,a′)
策略模型的价值函数和最优价值函数的Bellman方程之间的关键区别是 max过度动作的存在与否。它的包含反映了这样一个事实,即代理每当选择其行动时,为了采取最佳行动,就必须选择导致最高价值的行动。
2.0 优势函数
有时在RL中,我们不需要描述一个动作的绝对意义,而只需描述它比其他动作平均好多少。也就是说,我们想知道该行动的相对优势。我们利用优势函数使这个概念变得精确。
决策π的Aπ(s,a)描述了,在状态s下执行特定动作a,比根据π(⋅∣s)随机选择一个动作要好多少,假定往后的行为都是根据π产生的。在数学上,优势函数定义为:
Aπ(s,a)=Qπ(s,a)−Vπ(s)