策略梯度(Policy Gradient)的基本思想,就是直接根据状态输出动作或者动作的概率。注意这里和DQN的区别就是DQN输出动作获取的Q值,而Policy Gradient输出的是动作的概率,两者的输出维度是一样的,但是含义不同。
我们使用神经网络输入当前的状态,网络就可以输出我们在这个状态下采取每个动作的概率,那么网络应该如何训练来实现最终的收敛呢?我们之前在训练神经网络时,使用最多的方法就是反向传播算法,我们需要一个误差函数,通过梯度下降来使我们的损失最小。但对于强化学习来说,我们不知道动作的正确与否,只能通过奖励值来判断这个动作的相对好坏。基于上面的想法,我们有个非常简单的想法:
如果一个动作得到的reward多,那么我们就使其出现的概率增加,如果一个动作得到的reward少,我们就使其出现的概率减小。
根据这个思想,我们构造如下的损失函数:loss= -log(prob)*vt
上式中log(prob)表示在状态 s 时所选动作为a的概率值,prob<=1,因此log(prob)<0。显然prob这个值越大越好,此时-log(prob)<0并且越小越好。
而vt代表的是当前状态s下采取动作a所能得到的奖励,这是当前的奖励和未来奖励的贴现值的求和。如果在prob很小的情况下, 得到了一个大的结果,也就是大的vt, 那么-log(prob)*vt