对于强化学习中策略梯度为什么取log的问题

随手更新~

今天有个同学来问我,为什么强化学习的策略梯度要取log。总结可以直接看最后。

首先,我们先回顾一下什么是策略梯度:

\tau在强化学习中叫做trajectory(轨迹)

\tau^n = s_1, a_1, ..., s_n, a_n

计算策略梯度的目的,简单的来说,就是通过改变神经网络的参数,使神经网络产生的 能够得到大的奖励的 动作的 概率变大。是不是有点绕……我们知道,策略迭代算法,产生的是一个策略,也就是动作的概率分布。通过调整这个分布(其实也就是均值,因为方差会逐步减少),使之更靠近一个好的动作,这个动作比其他的动作让智能体收获更多的奖励。

哎,啰嗦了一大堆,反正既然要朝累积奖励增大的方向更新,那我们直接在奖励R前面加一个符号,再求梯度不就可以了

\nabla \overline R_\theta = \sum_\tau{R(\tau) \nabla p_\theta(\tau)}

我们先看一下不转化为log的怎么求。从\tau^1\tau^N,每个轨迹求一个概率\begin{align}p_\theta(\tau^n)&=p_\theta(s_1,a_1,...,s_n,a_n)\nonumber\\&=p_\theta(s_1,a_1,s_2)p_\theta(s_2,a_2,s_3)...p_\theta(s_{n-1},a_{n-1},s_n)\nonumber\\&=p_\theta(s_1)p_\theta(a_1|s_1)p(s_2|s_1,a_1)...p_\theta(s_{n-1})p_\theta(a_{n-1}|s_{n-1})p(s_n|s_{n-1},a_{n-1})\nonumber\end{align}

可以看出,如果要n从1到N,我们要保存这些概率,先别说这些概率怎么计算出来,不断进行概率相乘,在trajectory的最后的动作,无论多么出色,R多大,这么多0~1的数乘起来,首先可能发生数据下溢,其次,出色的动作反而得不到概率上的提升,这是不对的。

如果我们使用log呢?

\begin{align} \nabla \overline R_\theta &= \sum_\tau{R(\tau) \nabla p_\theta(\tau)}\nonumber\\&=\sum_\tau R(\tau)p_\theta(\tau)\nabla logp_\theta(\tau)\nonumber\\&=E_{\tau \sim p_\theta(\tau)} R(\tau)\nabla logp_\theta(\tau)\nonumber\\& \approx \frac{1}{N} \sum_n R_n\nabla logp_\theta(a_n|s_n) \nonumber\end{align}

感觉是不是很神奇,每个样本的关联性打消了,不用计算多个概率连乘了。有的人可能问为什么少了一项p_\theta(s_n),嗯,李宏毅老师说 你可以理解成 你没法计算一个状态出现的概率,所以就去掉了,嗯,话糙理不糙,具体真的是为啥,大家可以查查……

话说回来,上式确实会比不加log的好算很多……

再说从策略的收敛速度上吧。通过log运算,把原来0~1区间上的数映射到了 (-\infty , 0),并且没有改变数据的性质和相关关系

区间范围扩大了,一方面增大了梯度的大小,更新的更快了;另一方面,可以进一步拉大好的动作和差的动作之间的差距,使得策略尽可能朝着好的动作的方向去更新。

计算策略梯度时要使用对数的原因,总结如下吧:

1)打消同一个轨迹中样本计算上的关联性,方便计算

2)增大数据范围,加快策略更新速度

最后附上李宏毅老师的传送门,目前看过讲解强化学习的最好的课程,没有之一 ~

https://www.bilibili.com/video/av24724071

 

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值