date: 2020/05/17

加油! - 林俊杰/MC Hotdog


参考:


策略梯度

策略梯度(Policy Gradient)是一种policy-based的RL算法。


基本形式

image.png

将游戏图像输入给神经网络,输出各个动作的决策概率,在预测阶段直接挑选概率最大的动作,在训练阶段则按照概率随机执行动作。

我们用采取某个动作之后的奖励总和(包括后续动作产生的奖励)来评估执行者actor的好坏,也即

其中,是采取该动作后第个状态所获的奖励。

由于状态的复杂多变,以及每次采取动作的随机性,这里的显然是一个随机变量,实际操作中我们使用它的期望来评估执行者的好坏。


一个动作序列(通常成为片段episode)为

表示该片段中第个状态下采取动作后获得了奖励


【这里强调一下上下标的含义,上标代表采样序号,下标代表本次采用的时间序号,如下文的代表第次采样中,第个时间点的阶段(三元组;另外,长得可太像了,千万别看错!


实际中我们几乎不可能遍历所有可能的动作序列,一般都是通过次采样的平均结果来估计期望,也即

我们的目标是最大化奖励期望,即

自然而然想到,可以用梯度上升法迭代更新权重

接下来考虑如何求解,直接对求导

注意无关,它不需要可导,即使是个黑盒都无关紧要;

这里都与无关,看起来可太碍事了,不如我们取个对数

显然,

这可干净多了。为了应用对数形式的梯度,那么将奖励梯度做一下简单变换,


为什么要使用对数呢?

除了前边提到的求导形式简单之外,还有一个理由——首先考虑原始的

假设某种相对极端的情况,在一个片段中频繁采取动作a,那么在训练时会倾向于增加动作a的概率,即使动作b的奖励要高于动作a(但动作b的采用概率很低),这显然是不合理的,而按照前述,对数形式有

这相当于用概率对原始的梯度做了规范化,从而避免了前边提到的极端情况。


两点改进

接下来我们看看,有些任务可能并没有惩罚,也就是;即使任务有惩罚,但也有可能出现一个片段中所有奖励都是正值的情况,那么此时所有采样涉及的动作概率都会增加——但不用担心,由于所有动作的概率之和约束为1,所以概率“增加”较少的动作会被其他同样“增加”概率的动作挤兑,实际上概率是下降了。

image.png

但这只考虑了大家都被采样到的情况,假如有某个动作很倒霉,它在当前片段中一次都没有被采样,但它的概率依旧被降低了,这明显是不合理的。

image.png

所以我们可以为奖励引入一个baseline,让reward有正有负,从而缓解这样的问题。

baseline可以手工设计;也可以取奖励的期望,即


再来讨论权重的合理性。

考虑一个很小的片段,可以算出它的奖励为,这样一来的权重都是+3。可是总奖励的正值贡献主要来源于,但我们又以相同的力度鼓励甚至,这显然是有问题的。更合理的做法应当是统计当前阶段之后的奖励之和来作为自己的权重,而不是整个片段的总奖励,也即

而且,为了鼓励尽早取得奖励(或者反过来说,为了减弱遥远未来的奖励的重要性),可以引入一个超参数折扣因子(discount factor),奖励值进一步改造为

最终变为

事实上,这一项被称为Advantage Function,记为,甚至可以训练一个critic来替代这里的手工设计,也即之后会讲的Value-based方法。


Off-Policy

如果用于采样的模型跟实际训练的模型是同一个模型,则称为On-Policy;如果不是同一个模型,则称为Off-Policy。为什么好好的不用同一个模型呢?这是因为我们可以用之前的模型进行采样获得很多数据,而用这些数据来做多次迭代,每迭代一定部署后再用训练模型的参数去更新采样模型,从而有效加快强化学习的训练过程。


分布修正

由于经过迭代,采样的模型的采样结果跟实际训练的模型的采样是会有差距的,因此需要引入一些措施来修正。

原始的梯度为

训练模型的样本分布、采样模型的样本分布分别为

修正后的梯度可以表示为

也即用采样的数据来训练,并且给奖励乘以一个重要性因子作为修正(称为Importance Sample),修正后的梯度,可以保证采样数据的样本上期望是一致的。

展开来的话

根据可以由梯度反推出目标函数


有了修正,是不是就可以为所欲为了呢?其实也不是,从方差上看

显然方差是不完全相同的,而且随着差异变大,方差的差异也会随之变大。

举个直观点的例子,

image.png

因为左半部分概率比较高,而且这部分,显然是负数;

因为在右半部分概率比较高,所以有可能采样点都在右侧,此时算出来却是正数,这下可差得远了。


所以需要采取一些额外措施,来避免相差太大。


TRPO和PPO

原始的目标函数为


信任区域策略优化(Trust Region Policy Optimization, TRPO)对目标函数做了一些约束,要求采样模型和训练模型在输出分布上的差异不能太大,

注意:这里指的不是参数分布的KL散度,而是模型输出的分布,下文的PPO也是如此。

但带条件约束的目标函数在实际操作中并不好处理;


邻近策略优化(Proximal Policy Optimization, PPO)将该约束体现在了计算公式中去,直接用它来做惩罚,

同时也有一种更简洁的形式,通常称为PPO2

看起来复杂,实际上是加了一个自适应的一个权重,

image.png