强化学习的最终目的就是要学会一个使得智能体能够最大化期望回报的 policy,其中的回报就是对奖励进行衰减求和:
和期望回报紧密相关的还有两个概念,一个是动作状态价值函数(观测到状态 ,做完决策,选中动作 ):
另一个是状态价值函数(可以理解为比如下围棋时评价当前状态 的胜率):
了解了上面的定义后我们可以停下来思考一下,强化学习学什么?
主要想学的肯定就是策略 policy 函数,也就是从状态到动作的一个映射,如果直接学习它,那就能够拿来使用了,这类方法也叫做基于 policy 的方法;如果采用间接点的方式,也可以学习值函数,然后根据值的大小来选择动作,这类方法也叫做基于 value 的方法。当然,通常基于 policy 的方法也会涉及到值函数的近似。
从策略梯度到 PPO我们要学一个策略函数,但是并不知道策略函数长什样,怎么去定义它才是合适的。好在有了深度学习这一工具,我们可以无脑用一个神经网络来近似策略函数,然后通过优化神经网络参数的方式来学习得到一个策略函数。
优化神经网络的参数需要有个目标函数,如果一个策略很好,那么状态价值的均值应当很大,因此我们定义目标函数:
这个目标函数排除掉了状态 的因素,只依赖于策略网络 的参数 ;策略越好,则 越大。所以策略学习可以描述为这样一个优化问题:
我们希望通过对策略网络参数 的更新,使得目标函数 越来越大,也就意味着策略 网络越来越强。想要求解最大化问题,显然可以用梯度上升更新模型的参数。值得庆幸的是,策略函数的梯度还能被推导出来:
策略梯度定理的详细推导这里就不展开了,我们需要记住的是能计算出目标函数关于参数的梯度,那就能用来更新参数,也就能学习出策略函数了。
当然这里面还涉及动作价值函数 的估计,如果用实际观测的回报来近似,那就是 REINFORE 算法,如果再用一个神经网络来近似这个价值函数,那就是演员-评论家算法。PS:在实际使用中,策略梯度中的 Q 有多种不同的替代形式,常见效果比较好的形式是采用优势函数 (状态动作值函数 减去状态值函数 )来替代。
传统的策略梯度算法的局限性在于它是 sample-inefficient 的,也就是说每次获取的训练数据只被用来更新一次模型的参数后就丢掉了,因此 PPO 算法的主要改进在于构造了新的目标函数(避免较大的参数变化),使得每次获取的训练数据能够被用于多次的参数更新。
其中比值函数为当前策略和历史策略在状态 下实施动作 的概率的比值
通过这一比值也就能够评估新旧策略的差异性,从而能够保证策略函数在更新参数时不会跟旧策略的差异太大。有时间的同学也可以对比值在不同区间时目标函数的情况进行考虑,也就是如下表的情况(下面的 就是上面提到的比值函数 )。