Dynamic programming, 动态规划
以下属于 Model-based 算法,其中 Model 指某个状态下执行某个行为后,获得的奖励概率 和转移到其他状态的概率 ,Model-based 说明是在已知这些信息的条件下求解。
Value iteration
WARNING
这里的 并不表示价值,而只是一个普通的向量或数值。因为迭代算法的目的是求解贝尔曼最优公式,即找到一个最优的策略和其对应的价值,所以在迭代收敛前 都不能赋予价值的含义。
- 初始化 向量,其表示每个状态的值
- 计算 对应的最优策略
对于每个状态- 计算每个行为的值
- 选取 最大的行为
- 得到该状态下的最优策略
- 通过 和 计算新值 。因为使用贪婪策略,所以新值等于各状态下最大的
- 如果 低于设定阈值, 则表示收敛
Policy iteration
- 初始化策略
- Policy evaluation, PE
已知策略 ,代入贝尔曼方程,求解价值向量- 矩阵求解: (计算开销大)
- 迭代求解: 先假定一个 , 再通过贝尔曼方程算出 , 如此迭代直至收敛
- 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。这里的常数项 被并入 :
这个更新公式中的 也是未知的,于是进行估计:
Deep Q-learning, DQN
即 Deep Q-network
和 Q-learning 一样,该算法对最优策略下的行为价值进行估计:
则目标函数或损失函数为:
其中包含两个相同的神经网络: 和 ,每次迭代都会更新主网络参数 ,迭代一定次数后再将 赋给目标网络参数 。之所以分成两个网络,是因为计算目标网络参数的梯度过于复杂,于是采取延迟更新的方法。
参考 off-policy 版本的伪代码:
- 根据给定策略 进行采样,得到以 为元素的集合 ,其称为 replay buffer
- 对目标网络进行迭代训练,每次迭代进行 MBGD:
- 从 中随机均匀地进行一些采样得到小批量样本集,对于每个样本 :
- 使用目标网络计算
- 使用 更新主网络参数 ,以最小化损失值
- 从 中随机均匀地进行一些采样得到小批量样本集,对于每个样本 :
- 每迭代 次后,更新目标网络权重
INFO
在 基本思路 中提到 的理论值是一个包含了状态概率分布信息的期望值,而这里却使用随机均匀抽样从 中获取样本集。这是因为我们并不知道最优策略及其对应的状态概率分布,所以需要确保每个状态被探索的概率均等。
另一方面,因为 是在给定策略下的采样数据,所以满足该策略下的状态概率分布,而不一定是均匀分布。所以需要打乱样本,以破坏样本间关系。
Policy Gradient, PG, 策略梯度
即 Policy Function Approximation,策略函数近似
像 VFA 一样,我们也可以用函数表示策略 ,其中 是策略函数的参数。为了找到最优策略,需要构建一个 metric 函数 ,函数值越大则策略越好。所以问题变成了找一个参数 使 达到最大值,这通常使用梯度上升解决。
Metric
在 VFA 基本思路 中提到每个策略 都对应一个状态概率分布 ,一个好的策略应该能够更多地访问高价值的状态,于是用状态价值的加权平均衡量策略的优劣:
其中 表示状态概率向量,是可设置的。通常我们将 ,表示寻找从任意初始状态出发都能找到最优路径的策略;如果 ,则表示只寻找从 出发的最优策略。
也可以使用奖励的加权平均作为优劣指标,它也表示从任意状态出发走无数步后获得的平均奖励:
当 ,这两个指标是等价的:
Metric 梯度
对于 , , 和给定状态概率分布 情况下的 ,其梯度大致满足以下关系:
该式在不同指标间存在一些差异
令 ,则:
把梯度写成期望值的形式,就可以使用 SGD 进行优化。对于这个公式,需要保证 才有意义,所以使用 softmax 进行归一化,也就是让 满足:
其中 表示 的特征函数,通常是一个神经网络。
PG 参数更新
为了找到 最大值对应的 ,使用随机梯度上升:
由于 未知,所以使用 估计:
- 使用 MC 估计,则得到 REINFORCE 算法
- 使用 TD 估计,则得到 Actor-Critic-* 算法
无论哪种估计方法,都需要先采样,这就涉及到 的概率分布问题。理论中 ,由于环境信息未知,所以实际中难以满足; 说明每次的行为 都应该由 进行采样,因此策略梯度算法是 on-policy 的。
对更新公式进一步转化:
这表明更新公式实际上是在更新 ,其步长为 。 越大,则 增大,说明策略 将在状态 时更倾向选 。 也体现了探索和利用的平衡, 表示利用, 表示探索。
REINFORCE
在每次迭代中:
- 选择初始状态 ,使用 进行采样,对于每个样本 :
- 计算 为折扣奖励总和
- 更新
- 将最后一次 赋给
Actor-Critic, AC
Actor 表示通过 PG 进行策略更新,Critic 表示用结合 VFA 的 TD 进行价值估计。
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。