我们首先总结一下之前学习到的知识:
强化学习术语 | 英文词汇及公式、符号表示 | 简单解释 |
---|---|---|
智能体 | agent | 具有智能的实体 |
演员 |
actor | 负责与环境交互 |
(环境)状态 |
(environment)state: |
在 时刻,环境所达到的状态 |
策略 |
policy:
|
智能体根据状态产生的策略
在
根据概率 |
动作 |
action: |
在 时刻,根据策略决定的下一步动作 |
奖励 |
reward: |
在 时刻,根据做出的动作获得的奖励 |
模型 | model | 智能体对环境的状态的理解 |
状态转移函数 |
|
从 时刻到 时刻的状态转移概率 |
马尔可夫性质 |
|
未来状态的条件概率仅依赖于当前状态 |
折扣回报 |
return:
|
具有折扣的奖励的逐步叠加 |
折扣因子 |
|
对未来奖励的折扣(超参数) |
状态价值函数 |
|
基于策略的回报的期望 |
动作价值函数 |
|
状态 下采取动作 ,可能得到的回报的期望 |
贝尔曼期望方程 |
|
表示了当前状态与未来状态之间的关系 |
策略迭代 |
policy improvement
|
通过最大化价值函数选取最优策略,来进行策略改进 |
价值迭代 |
value iteration
|
通过价值迭代得到最优 ,最后进行策略提取 |
动态规划 | Dynamic Programming | 针对有模型问题,对环境完全已知的情况下,进行的强化学习算法 |
蒙特卡洛算法 | Monte Carlo Method | 针对免模型问题,根据特定概率密度函数进行抽样,从而估计回报函数 |
时序差分方法 |
Temporal Difference
|
针对免模型问题,通过自举的方法在线估计回报,从而更新 |
Sarsa |
|
同策略时序差分控制,单(n)步更新价值和策略 ,使用更新后的策略 与环境交互 |
Q学习 |
|
异策略时序差分控制, 目标策略用来学习最优策略,
行为策略采用 |
策略梯度算法
强化学习中的策略梯度算法,简单来说,就是最大化期望回报函数。
下面我们进行策略梯度的公式推导:
在一场游戏里面,环境是一个函数,演员在看到游戏画面以后,会做出动作,我们把环境输出的
与演员输出的动作
全部组合起来,就是一个轨迹:
给定演员的参数
,轨迹
发生的概率记为
,所对应的总奖励函数记为
:
给定演员参数
,奖励
的期望为:
策略梯度的原理就是通过梯度上升来最大化期望奖励,从而得到最优策略。
我们对
做梯度运算:
通过采样的方式计算上述梯度:
通过梯度上升更新参数
:
重复采样并更新参数,达到局部最优或全局最优。
策略梯度的常用技巧:
1、添加基线(baseline)
在梯度上升的展开公式中,我们对
求梯度,
相当于这一项的权重,由于其总是一个正数,因此会使得所有 “动作状态对” 的概率都在提高。
如果采样的方式不好(例如总是采样到较差的 “动作状态对” ),反而会使得较差的动作的概率一直提升。
我们通过将均值归0化,来避免这个问题,使较好的动作权重为正,较差的动作权重为负:
训练时,我们不断记录轨迹
,计算
的均值来更新参数
,从而达到之前的目的。
2、对动作进行加权
每一个轨迹
下,我们实际上想要着眼于每个动作
本身能获得的分数,而权重
是所有奖励之和,我们通过去掉
时刻前的奖励,并对未来奖励进行折扣,从而着眼于当下的奖励:
同策略学习和异策略学习
需要学习的agent和与环境互动的agent相同时,称为on-policy(同策略),不是同一个agent时,称为off-policy(异策略)。在运用梯度上升算法求解最优期望奖励时,训练一个周期后,我们需要更新参数,然后需要重新训练、收集数据,数据的使用率很低,并且时间消耗很大。
因此考虑进行异策略学习,用actor与环境交互,获得的数据可以重复使用来训练agent,从而提高训练的效率。
重要性采样(Importance Sampling)
为了使用off-policy的方法,我们的运用actor(携带超参数
)与环境交互,来训练agent(携带超参数
)。
由于
在训练前是未知的,我们不能运用其进行采样。我们通过actor与环境交互,运用超参数
采样出轨迹
,再利用下述变换来保证梯度上升算法:
近端策略优化(PPO)算法
在off-policy的训练过程中,超参数
是我们事先选取的,如果它采样出的数据和
采样出的差距较大,那么就很难得到理想的结果。极端情况下
与
采样到完全不同的数据区域,这样就会得到偏差很大的结果。利用足够多的抽样数据,理论上可以解决这个问题,但实际操作情况下效率不高。
因此我们利用PPO算法,引入
和
的KL散度
来约束这两种采样的差异性。
注意,在PPO算法中,与环境交互的策略
在一个小batch中是不变的,这个
用的是旧的策略
,在更新多次
后才会更新这个
,采样的过程中策略没有变化,学习的策略和采样的策略是同一个策略,因此
PPO是on-policy的算法
。
我们用
来表示我们需要训练的重要性采样期望函数:
通过迭代更新
,来优化采样差异:
PPO-Penalty
PPO-Penalty算法通过动态调整超参数
来迭代更新:
如果
,提高参数
;
如果
,降低参数
。
PPO-Clip
PPO-Clip算法通过区间压缩,来逼近
:
注:本文参考《蘑菇书EasyRL》第二章至第五章内容