随手更新~
今天有个同学来问我,为什么强化学习的策略梯度要取log。总结可以直接看最后。
首先,我们先回顾一下什么是策略梯度:
在强化学习中叫做trajectory(轨迹)
计算策略梯度的目的,简单的来说,就是通过改变神经网络的参数,使神经网络产生的 能够得到大的奖励的 动作的 概率变大。是不是有点绕……我们知道,策略迭代算法,产生的是一个策略,也就是动作的概率分布。通过调整这个分布(其实也就是均值,因为方差会逐步减少),使之更靠近一个好的动作,这个动作比其他的动作让智能体收获更多的奖励。
哎,啰嗦了一大堆,反正既然要朝累积奖励增大的方向更新,那我们直接在奖励R前面加一个符号,再求梯度不就可以了
我们先看一下不转化为log的怎么求。从到
,每个轨迹求一个概率
可以看出,如果要n从1到N,我们要保存这些概率,先别说这些概率怎么计算出来,不断进行概率相乘,在trajectory的最后的动作,无论多么出色,R多大,这么多0~1的数乘起来,首先可能发生数据下溢,其次,出色的动作反而得不到概率上的提升,这是不对的。
如果我们使用log呢?
感觉是不是很神奇,每个样本的关联性打消了,不用计算多个概率连乘了。有的人可能问为什么少了一项,嗯,李宏毅老师说 你可以理解成 你没法计算一个状态出现的概率,所以就去掉了,嗯,话糙理不糙,具体真的是为啥,大家可以查查……
话说回来,上式确实会比不加log的好算很多……
再说从策略的收敛速度上吧。通过log运算,把原来0~1区间上的数映射到了 ,并且没有改变数据的性质和相关关系
区间范围扩大了,一方面增大了梯度的大小,更新的更快了;另一方面,可以进一步拉大好的动作和差的动作之间的差距,使得策略尽可能朝着好的动作的方向去更新。
计算策略梯度时要使用对数的原因,总结如下吧:
1)打消同一个轨迹中样本计算上的关联性,方便计算
2)增大数据范围,加快策略更新速度
最后附上李宏毅老师的传送门,目前看过讲解强化学习的最好的课程,没有之一 ~
https://www.bilibili.com/video/av24724071