text: 策略梯度方法以及REINFORCE方法分析
  把强化学习问题建模为马尔可夫决策过程，解决MDP主要有两类主流的方法：基于价值（动作价值函数）的方法：通过估计动作价值函数间接选择策略。基于策略梯度的方法：不依赖价值函数，直接优化一个参数化的策略，得到最优动作。但是在这个过程中，有时也需要计算价值函数。如带基线的REINFORCE方法（作为基线）和Actor-Critic（作为critic）方法。但是此时的价值函数，只是在优化策略参数过程中，辅助策略参数的学习，不用来做决策。本文重点分析策略梯度方法1.回顾一下，基于价值的方法是怎样寻找最优策略的？在基于价值的方法中，核心是状态价值以及动作状态价值（是从一个状态出发，或者通过该状态发出的特定动作，所能获得的带折扣的总奖励）。如果知道每个状态的价值，那么就可以贪心的在每一步选择使得价值最大的动作。这样，在结束的时候可以获得最大的总奖励。使用Bellman方程计算价值，该公式使用下一步的价值来表示当前步的价值。这种方法可以看做，使用价值来定义策略，意味着每个策略是使得在每个状态下都能达到最大的Q值的动作。在这种情况下，策略和价值的关系是明显和直观的。2. 基于价值的方法有哪些缺陷？（1）在实际的RL中，相比于价值，策略更有用在RL问题中，当agent获得了观测数据后，下一步需要的是一个策略，从而决定出执行什么动作。虽然，我们最终的目标是想要得到一个最大的奖励值，但是对于处于某个状态而言，对于状态的准确价值并不是第一关心的。（2）无法处理连续动作空间问题对于DQN，通过近似状态的价值从而选择最优动作，可以看做通过价值间接得到策略，这种方法，在只有少数的几个离散动作的环境下是可以的，比如Atari的游戏中。 但是，在一些情况下存在大量动作，如果通过基于价值的方法来决定动作，即要解一个优化问题，才能找到使得价值最大的动作，如果是在连续的动作空间中，这个优化问题将变得更加困难。因为价值函数一般是由非线性神经网络表示的。 （3）随机策略的学习困难基于价值的方法学习到的都是给定状态下的确定性策略，不适合那些最优策略就是随机策略的例子。比如，石头剪刀布中的最优策略是各三分之一。（4）解决方案避开价值，直接使用策略更为可行，即直接学习策略。3. 意识到基于价值方法的问题后，如何将策略参数化，从而后序进行优化？如何参数化动作，借鉴分类任务，返回各个动作的概率分布。对于N个互斥的动作，返回N个数字，表示在给定的状态下，执行各个动作的概率。这样做的好处是可以平滑的表示动作。虽然稍微改变网络的权重，网络的输出也会跟着改变。但是如果输出是概率分布，权重微小变化只会导致输出分布的微小变化，从而增加或减少动作相比于其他动作的执行概率，而不会像输出是离散数字的情况，导致直接跳转到其他动作上。这是一个比较好的属性，因为梯度优化就是通过微调模型参数来改变结果的。4.如何对参数化策略中的参数进行优化——策略梯度算法（1）策略梯度方法：将策略参数化表示为策略参数 的学习都基于某种性能度量 的梯度。策略梯度就是通过计算某个性能指标 的梯度，来更新策略参数。为了最大化性能指标，通过随机梯度上升更新策略参数。上式是一个随机估计，这个估计的期望就近似等于性能指标的梯度。（2）如何计算（估计）这个梯度？首先找到一个性能指标 , 对于episode 任务，定义为初始状态的值。有了函数近似，如何更新策略参数，保证性能指标改善是一个有挑战的事。因为性能指标既依赖动作的选择，也依赖动作选择时所处的状态分布。而动作选择和状态分布都会受到策略参数的影响。给定一个状态，策略参数对动作的选择和回报的影响可以根据参数直观的算出来。但是，状态分布和环境（转移概率）都有关，而环境因素是未知的。也就是说，性能指标对策略参数的梯度，依赖于这种未知的影响。那么该梯度如何计算?（3）策略梯度定理幸运的是，策略梯度定理证明了性能指标关于策略参数的导数具有一个解析形式解。这个推导过程并不涉及状态的分布。在episode任务中，策略梯度定理如下： 是策略分布含义：策略梯度是根据累计的总奖励，定义了改进策略所需要更改的神经网络参数的方向。梯度的缩放大小与执行动作的价值成比例关系。梯度本身等于所执行动作的对数概率的梯度。最外层的E是期望值，表示平均了在环境中执行了好几步的梯度。从实践角度，可以通过优化损失函数，实现策略梯度方法。5.基于价值和基于策略方法的区别：基于策略方法直接优化策略，而基于价值的方法通过价值间接优化行为。基于策略方法属于on-policy,基于价值方法属于off-policy，因此可以从历史数据中获益。基于策略方法采样效率低，意味着要与环境多交互，基于价值的方法样本利用率高，但是不一定计算效率高。基于策略方法，访问一次NN，得到策略，基于价值方法，需要利用当前状态和下一状态用于bellman计算。6.第一个策略梯度学习算法——REINFORCE （1）思路分析：策略梯度方法的思想是，首先找到一个性能指标，然后使用随机梯度上升更新策略参数，从而最大化指标。关键问题是：具体的，怎么估计这个梯度？找到一种采样方法，使得通过采样样本估计的梯度的期望正比于性能指标对于策略参数的实际梯度。为什幺正比于就可以？因为任何常数的正比系数都可以被吸收到步长参数中。正好策略梯度定理给出了一个正比于梯度的精确表达式。上式中，把每个状态出现的频率作为加权系数求和变成了期望。就得到了一个采样量，它的期望就是真实的梯度。采样值如下：按照随机梯度上升方法，构造如下算法： 表示的 的近似值，所以是all-action方法，因为梯度更新中考虑了所有的动作。而经典的REINFORCE（1992年）方法，在每个更新中只考虑一个实际采取的动作。即t时刻的更新只涉及了t时刻被实际采用的动作 。所以，所以要把 引入，把对动作的求和也变成对策略求期望。然后对期望采样。上式中括号里面的表达式，就是我们想要的采样量，每步可以采样得到。（2）REINFORCE 算法公式：基于上面的形式，得到新的随机梯度上升表达式 如下： （3）公式解释每一个增量更新都正比于回报 和一个向量的乘积。这个向量是参数空间中，使得将来在状态 下，重复选择动作 的概率增加最大的方向。这个更新使得向量沿着这个方向增加。更新大小正比于回报，使得参数向着有利于产生最大回报的动作的方向更新。换言之，如果回报是有利的，就增加这个动作出现的概率。回报越大，梯度更新幅度越大，概率增加越大。更新大小反比于选择动作的概率，因为频繁被选择的动作会占优，会在这些方向上频繁更新。尽管这些动作不是产生最大回报的动作，最后也有可能胜出。 表示从 时刻开始的回报总和，表示从当前开始，到episode结束的所有收益。从这个角度说，REINFORCE 是一个蒙特卡洛算法。因此，只能在episode任务中使用，因为必须要采样一个完整的episode才能更新参数。基于策略梯度定理，该方法有很好的理论收敛保证，保证收敛到局部最优。7.REINFORCE 方法的问题（1）需要完整episode问题：在每步训练之前，都需要等待完整的episode完成。episode越多，训练效果越好。但是一些游戏中，一个episode可能有几百步，上千步。从训练的角度看，这是不好的，导致训练batch次变得特别大。从样本效率看，更是不好的，进行一次单步训练需要进行大量的环境交互。原因：为了尽可能准确的计算策略梯度中的动作价值。解决方案：思路：如何不需要完整episode数据，就可以得到尽可能准确的动作价值使用网络估计价值 ，以此来获得动作价值 ，这种方法就是Actor-Critic（2）高梯度方差原因：在策略梯度公式中，有一个与给定状态的的折扣奖励成比例的梯度。但是，这种奖励很大程度上取决于环境。因此，这个奖励的方差可能会很大，从而导致计算的策略梯度会有高方差。导致训练过程变得不稳定，学习速率变慢。解决方案：思路：从折扣奖励中减去一个基线，就有了带基线的REINFORCE方法常用的基线：状态价值、折扣奖励的平均值（3）探索状态价值原因：即便将策略表示为概率分布，智能体也有可能收敛到某些局部策略而停止探索。DQN中，使用 ，从而有一定概率执行随机动作，而不是当前策略决定的动作。解决方案：使用熵奖励，熵是系统中不确定性的度量。应用到智能体的策略中，可以表示智能体对执行何种动作的不确定程度。熵始终>0，策略平均分布时，熵最大，当某个策略概率为1，其他为0时，熵最小。为了防止智能体陷入局部最小值，在损失函数中，减去熵，以惩罚智能体过于确定要采取的动作。（4）样本相关性原因：单个episode中的训练样本通常是高度相关，这对使用SGD或SGA不利。在DQN中，使用巨大的回放缓冲区，通过采样训练批解决。当时这不适合策略梯度方法，因为其属于在线策略。解决方案：使用并行环境，就有了后面的A3C。使用多个环境同时交互，得到的所有状态转移作为训练数据。