Skip to content

Dynamic programming, 动态规划

以下属于 Model-based 算法,其中 Model 指某个状态下执行某个行为后,获得的奖励概率 和转移到其他状态的概率 ,Model-based 说明是在已知这些信息的条件下求解。

Value iteration

WARNING

这里的 并不表示价值,而只是一个普通的向量或数值。因为迭代算法的目的是求解贝尔曼最优公式,即找到一个最优的策略和其对应的价值,所以在迭代收敛前 都不能赋予价值的含义。

  1. 初始化 向量,其表示每个状态的值
  2. 计算 对应的最优策略
    对于每个状态
    1. 计算每个行为的值
    2. 选取 最大的行为
    3. 得到该状态下的最优策略
  3. 通过 计算新值 。因为使用贪婪策略,所以新值等于各状态下最大的
  4. 如果 低于设定阈值, 则表示收敛

Policy iteration

  1. 初始化策略
  2. Policy evaluation, PE
    已知策略 ,代入贝尔曼方程,求解价值向量
    • 矩阵求解: (计算开销大)
    • 迭代求解: 先假定一个 , 再通过贝尔曼方程算出 , 如此迭代直至收敛
  3. Policy improvement, PI
    计算 对应的最优策略 ,同值迭代

Truncated policy iteration

对比 2 种迭代算法:

值迭代:

策略迭代:

其中 的步骤是一样的,关键区别在于 的步骤。 其中值迭代只进行一次计算: , 而策略迭代进行多次计算:

所以我们可以把 变成更一般化的形式,即用参数 表示在求 过程中的迭代次数。当 就是值迭代,当 就是策略迭代。

这个算法和策略迭代几乎一样,除了在 步骤中的迭代终止条件由是否收敛变成了是否达到迭代次数

Monte Carlo, 蒙特卡洛

本节及其后均属于 Model-free 算法,即在不知道 Model 的情况下进行求解。

MC Basic

Model-free 的主要思想是把策略迭代中关于 Model 的部分移除。 在 步骤中,原本需要通过 Model 计算 ,现在直接用 次采样得到的数据估计 :

采样表示让智能体与环境进行一次交互。在状态 采用行为 后,每次到达一个新状态都随机选择一个行为,形成一条长度为 的路径 ,则第 次交互得到路径对应的奖励总和为:

每次交互可以看作一次探索,而 表示探索步数。探索步数需要足够长,才能保证可以从每个初始状态到达目标状态,否则有些初始状态将无法达到目标状态。

Exploring Starts

考虑从 开始交互得到的某条路径: ,这条路径同时也包含了从 开始的路径:,同时也包含了从 开始的路径:,以此类推。 这意味着,仅计算这一条路径就可以同时估计 。对于每条路径,有两种使用方法:

  • first-visit: 仅在第一次遇到 时估计
  • every-visit: 每次遇到相同的 时估计

在每次迭代中,对 的估计也分为两类方法:

  • 对于每个 ,多次采样取均值,见 MC Basic
  • 对于每个 ,只采样一次,但控制探索步数

由于使用贪婪策略,使得每次 步骤只会选取一个行为,则无法保证每次交互能够达到所有 ,所以这种算法需要满足 exploring starts 条件,即对每个 从头开始探索。

epsilon-Greedy

为了突破 exploring starts 条件,可以采用 -贪婪策略:

其中 , 表示状态 下的行为数量,通过这种方法平衡了探索(exploration)和利用(exploitation)。当 时,变成贪婪策略,表示对数据的充分利用;当 时,变成随机策略,表示不依赖数据的完全探索。

这样可以保证在一次交互中,只要探索步数足够长,智能体就可以达到所有的

INFO

这里实际上将求解贝尔曼最优公式的目的从“从所有可能的策略中找到最优策略”变成“从所有可能的 -贪婪策略中找到最优策略”,即找到最优 。这样牺牲了求解出策略的最优性,最优策略应该是贪婪策略,所以可以在迭代过程中使

Temporal-Difference, TD, 时序差分

所有 TD 算法都可以看作使用 随机近似 算法求解贝尔曼方程或贝尔曼最优方程,它们的更新公式都可以表示为:

其中 表示在时间步 下的状态价值或行为价值, 是 TD 目标, 是 TD 误差。不同算法的区别在于 TD 目标不同。

通过不断迭代更新, 将逐渐逼近 TD 目标

可以发现,随着时间步 的增大, 的距离逐渐缩小。

TD, 估计状态价值

该算法用于求解在给定策略 下的 。由于不知道 Model 信息,所以考虑贝尔曼期望方程:

使用 RM 算法逼近

从公式中可看出,要想对价值估计值 进行一次更新,至少需要 3 个信息:

  • 当前状态
  • 及时奖励
  • 下一个状态

于是通过采样得到 ,这些数据以 为一组,每组仅能用于更新该组初始状态的价值估计:

由于 未知,所以这里使用 估计

Sarsa, 估计行为价值

该算法用于求解在给定策略 下的 ,将贝尔曼期望方程改写成 形式:

TD 一样,使用 RM 算法逼近 。要想进行一次价值估计的更新,则需要

这种算法在 步骤中只进行一次 更新,接着在 步骤使用 -greedy

Expected Sarsa

该算法对应的贝尔曼期望方程为:

更新需要 。由于 未知,所以使用 估计

-step Sarsa

该算法对应的贝尔曼期望方程为:

其中 表示从 开始的累积奖励:

其中 表示表达式的展开步数,无论 取值多少,这些表达式都等价。对应的迭代更新公式为:

由公式可知,当 时,得到 Sarsa;当 时,得到 Monte Carlo

INFO

这里的 表示更新价值估计所需的步数。 说明在每次采样中,智能体每走一步就更新一次价值估计和策略,这形成了增量更新。

Q-learning, 估计最优行为价值

该算法并不求解给定策略 对应的 ,而是直接求解最优的 ,表示为贝尔曼最优方程的 形式:

更新公式为:

INFO

RL 中有两种策略:

  • behavior policy:用于从环境中采样数据
  • target policy:被迭代优化的策略

由此分为两大类学习算法:

  • on-policy:behavior policy 与 target policy 相同
    即在每一次迭代中,用优化后的策略进行下一次采样。
  • off-policy:behavior policy 与 target policy 不同
    即用 behavior policy 采样的数据训练 target policy。

Q-learning 可以分为 on-policy 和 off-policy 两种版本。 由于 on-policy 版需要用 target policy 采样数据,要想保证探索性的话,就需要让 target policy 为 -greedy。 而 off-policy 版不需要用 target policy 采样数据,所以可以直接使用 greedy。

Value Function Approximation, VFA, 价值函数近似

基于表格的 TD 中, 都是离散的,即可以用一个表格来装满所有可能的 值。但对于复杂的现实世界,状态空间或行为空间很可能是无限的,这时候需要使用函数近似来表示 。这个函数可以是一个线性的多项式,也可以是非线性的神经网络。

VFA 基本思路

给定一个策略 ,要找到函数 使其最接近真值 。也就是找到一个 使目标函数 达到最小值:

由于 是一个期望值,即一个无限采样求均值的过程,所以我们需要知道状态 的概率分布,也就是在每次采样时出现状态 的概率 。由于状态转移的马尔可夫性质,最终的状态概率分布是一种稳态分布,它表示当智能体执行了无数次行为后到达各状态的频率分布:

其中 是贝尔曼方程中的状态转移矩阵, 是表示状态概率分布的列向量。

要找到 最小值对应的 ,通常使用 梯度下降

由于 的梯度是一个期望值,通常使用一次采样估计真实梯度,即 SGD。这里的常数项 被并入

这个更新公式中的 也是未知的,于是进行估计:

  • MC 使用奖励总和 估计
  • TD 使用 TD target 估计

INFO

Sarsa 为例。 不同与传统算法的更新 ,基于函数近似的算法是更新行为价值函数 的参数 ,然后再用新参数计算行为价值:

Deep Q-learning, DQN

即 Deep Q-network

Q-learning 一样,该算法对最优策略下的行为价值进行估计:

则目标函数或损失函数为:

其中包含两个相同的神经网络:,每次迭代都会更新主网络参数 ,迭代一定次数后再将 赋给目标网络参数 。之所以分成两个网络,是因为计算目标网络参数的梯度过于复杂,于是采取延迟更新的方法。

参考 off-policy 版本的伪代码:

  1. 根据给定策略 进行采样,得到以 为元素的集合 ,其称为 replay buffer
  2. 对目标网络进行迭代训练,每次迭代进行 MBGD
    1. 中随机均匀地进行一些采样得到小批量样本集,对于每个样本
      1. 使用目标网络计算
      2. 使用 更新主网络参数 ,以最小化损失值
  3. 每迭代 次后,更新目标网络权重

INFO

基本思路 中提到 的理论值是一个包含了状态概率分布信息的期望值,而这里却使用随机均匀抽样从 中获取样本集。这是因为我们并不知道最优策略及其对应的状态概率分布,所以需要确保每个状态被探索的概率均等。

另一方面,因为 是在给定策略下的采样数据,所以满足该策略下的状态概率分布,而不一定是均匀分布。所以需要打乱样本,以破坏样本间关系。

Policy Gradient, PG, 策略梯度

即 Policy Function Approximation,策略函数近似

VFA 一样,我们也可以用函数表示策略 ,其中 是策略函数的参数。为了找到最优策略,需要构建一个 metric 函数 ,函数值越大则策略越好。所以问题变成了找一个参数 使 达到最大值,这通常使用梯度上升解决。

Metric

VFA 基本思路 中提到每个策略 都对应一个状态概率分布 ,一个好的策略应该能够更多地访问高价值的状态,于是用状态价值的加权平均衡量策略的优劣:

其中 表示状态概率向量,是可设置的。通常我们将 ,表示寻找从任意初始状态出发都能找到最优路径的策略;如果 ,则表示只寻找从 出发的最优策略。

也可以使用奖励的加权平均作为优劣指标,它也表示从任意状态出发走无数步后获得的平均奖励:

,这两个指标是等价的:

Metric 梯度

对于 , , 和给定状态概率分布 情况下的 ,其梯度大致满足以下关系:

该式在不同指标间存在一些差异

,则:

把梯度写成期望值的形式,就可以使用 SGD 进行优化。对于这个公式,需要保证 才有意义,所以使用 softmax 进行归一化,也就是让 满足:

其中 表示 的特征函数,通常是一个神经网络。

PG 参数更新

为了找到 最大值对应的 ,使用随机梯度上升:

由于 未知,所以使用 估计:

无论哪种估计方法,都需要先采样,这就涉及到 的概率分布问题。理论中 ,由于环境信息未知,所以实际中难以满足; 说明每次的行为 都应该由 进行采样,因此策略梯度算法是 on-policy 的。

对更新公式进一步转化:

这表明更新公式实际上是在更新 ,其步长为 越大,则 增大,说明策略 将在状态 时更倾向选 也体现了探索和利用的平衡, 表示利用, 表示探索。

REINFORCE

在每次迭代中:

  1. 选择初始状态 ,使用 进行采样,对于每个样本
    1. 计算 为折扣奖励总和
    2. 更新
  2. 将最后一次 赋给

Actor-Critic, AC

Actor 表示通过 PG 进行策略更新,Critic 表示用结合 VFATD 进行价值估计。

Q actor-critic, QAC

使用 Sarsa 进行价值估计。在 Critic 阶段进行价值函数参数更新:

在 Actor 阶段进行策略函数参数更新:

Advantage actor-critic, A2C

向策略函数参数梯度公式中引入偏置量:

不影响采样梯度的期望值,但可以影响方差。所以通过控制 使方差最小,以减小对梯度的抽样误差。计算理论最优偏置量 过于复杂,通常使用估计值:

代入参数更新公式:

其中 称为 advantage function 优势函数, 可以看作 的均值,则 表示某个行为的价值比平均行为价值多出的部分,即该行为的优势。再考虑更新公式中的步长 ,见 PG 参数更新

其中分子部分表示对数据的充分利用,相比之前的绝对行为价值 ,使用相对行为价值 能更好地评估行为的优劣。

结合 TD 得到具体更新公式,其中 也表示 TD 误差:

off-policy actor-critic

由于 是一个满足 的期望值,即用于采样的策略同时也是需要进行迭代更新的策略,所以使用 on-policy 算法,见 PG 参数更新。如果我们想利用已有策略的经验训练新策略,则需要使用 off-policy 算法。

由于 behavior policy 与 target policy 不同,所以其对应的状态概率分布 不同,那么就需要引入新 metric:

Importance Sampling

对于 off-policy 算法,需要引入 importance sampling,即在更新参数时,使用旧策略的采样结果来估计新策略的期望。

由此得到 更新公式:

其中步长的分母 是一个定值,则表示不进行任何探索,也就是使用已有策略 的经验进行更新。

Deterministic actor-critic, DPG

之前选择行为的概率都满足 ,但理论最优策略应该是一个确定性策略,即只选择价值最大的行为。只考虑确定性策略时, 可以表示成一个连续值,用 的映射表示策略:

函数简写为 ,通常是一个神经网络。由此得到 metric 函数:

其中 是一个可设置的状态概率分布,见 Metric 是另一个由 推导出的状态概率分布。代入更新公式:

如果要把该算法改成 on-policy,即使用 target policy 进行采样,会存在一个问题: 是一个确定性策略,即遇到相同的 只选相同的 ,所以失去了探索的机会。这时可以向 函数中加入噪声,使其不确定性增加,从而增加探索的机会。

该算法还涉及 函数的选取,如果使用神经网络则得到 Deep Deterministic Policy Gradient, DDPG。