datawhalechina/easy-rl

/chapter4/chapter4

Opened this issue · 38 comments

捉个虫,第7页slide下面的第三个公式似乎漏了个梯度算子符号

感谢您的反馈,的确是一个虫,错误已纠正,内容已更新

捉个虫,第7页slide下面的第三个公式似乎漏了个梯度算子符号

请问“REINFORCE: Monte Carlo Policy Gradient”这一节的参考资料是 哪里呢?有对应的视频吗

请问“REINFORCE: Monte Carlo Policy Gradient”这一节的参考资料是 哪里呢?有对应的视频吗

主要参考的视频链接如下:
https://aistudio.baidu.com/aistudio/education/lessonvideo/476222

希望能解决您的问题。

这是我目前为止觉得最好的RL教程,nb

这是我目前为止觉得最好的RL教程,nb

感谢您的认可,本教程能对您有所帮助就好

又看完一章啦~ 博主写的超级好!

想请问下为什么reinforce不算单步更新呢,伪代码中也是每个step都对参数更新一次呀,和actor critic一样都是每个step更新,或者说为什么actor critic就算单步更新呢?

@KID0031
想请问下为什么reinforce不算单步更新呢,伪代码中也是每个step都对参数更新一次呀,和actor critic一样都是每个step更新,或者说为什么actor critic就算单步更新呢?

我是这样理解的:REINFORCE必须要得到一整个episode的数据才可以进行更新(也就是等到游戏结束才可以),但是actor-critic在游戏中途就可以更新,不需要等到游戏结束。

我是这样理解的:REINFORCE必须要得到一整个episode的数据才可以进行更新(也就是等到游戏结束才可以),但是actor-critic在游戏中途就可以更新,不需要等到游戏结束。

感谢回复,之前少看了一行公式,有点绕晕了。

还有个问题想请问下,对于actor-critic中policy参数的更新(也是单步更新),如果游戏在中途停止会对训练效果有影响么,因为policy的梯度中含有对t从1到Tn的求和,中途停止的话就只更新了不完整的梯度

@KID0031
还有个问题想请问下,对于actor-critic中policy参数的更新(也是单步更新),如果游戏在中途停止会对训练效果有影响么,因为policy的梯度中含有对t从1到Tn的求和,中途停止的话就只更新了不完整的梯度

游戏中途停止了,那么更新的轮数就变少了,可能模型效果变差了。但是不会有你说的“只更新了不完整的梯度”,这个问题。你可以对比着看看代码~

可能模型效果变差了。但是不会有你说的“只更新了不完整的梯度”,这个问题。你可以对比着看看代码~

image
但公式这里是从1加到Tn,如果从t'停止的话只是从1加到t'了,就不是上面的梯度了。(假设更新的次数一样呢,比如玩了很多轮但每轮都是从中间停止,最后总次数一样)。代码里我的理解是每轮游戏中把每一个step的更新加起来才是上面的梯度

写得太棒了!

写得太棒了!

感谢您的认可,对您有所帮助就好,XD

在REINFORCE:MONTE Carlo Policy Gradient中“类似地,policy gradient 预测每一个状态下面应该要输出的这个行动的概率,就是输入状态 st
,然后输出动作的概率,比如 0.02,0.08,0.09。实际上输出给环境的动作是随机选了一个动作,比如说我选了右这个动作,它的 one-hot 向量就是 0,0,1。”
0.09应为0.9。

在REINFORCE:MONTE Carlo Policy Gradient中“类似地,policy gradient 预测每一个状态下面应该要输出的这个行动的概率,就是输入状态 st ,然后输出动作的概率,比如 0.02,0.08,0.09。实际上输出给环境的动作是随机选了一个动作,比如说我选了右这个动作,它的 one-hot 向量就是 0,0,1。” 0.09应为0.9。

感谢您的纠错,错误已纠正,内容已更新~

我想问一下,采用Basline形式的更新,如果(R-B)为负值,Loss也为负数了吧,这种情况下怎么更新网络

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

书里面这段的ln应该代表的是loss吧?但为啥是自然对数的符号,这里有点不明白

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

书里面这段的ln应该代表的是loss吧?但为啥是自然对数的符号,这里有点不明白

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

@skywalkerwang98 ,感谢您的反馈,这边比较标准的写法应该是 log,loss 具体推导可参考下图
image

@GrangerZyj
我想问一下,采用Basline形式的更新,如果(R-B)为负值,Loss也为负数了吧,这种情况下怎么更新网络

负值就说明相应的action不好,需要降低其概率,即pi(a|s)变小;如果是正值,就说明执行这个action是好的,要增加其概率。直观上是这么理解,回到数学公式推导上,使用梯度上升方法更新网络参数,也会得到这个结果的。
你大概是还没搞清楚为什么要使用baseline吧,再看看原文的解释吧,或者自己想想R-B是正值或负值时梯度上升的具体过程是怎么样的(R-B的正负影响梯度的正负),做完应该会豁然开朗。

你好,请问 REINFORCE 伪代码中,为什么更新参数的时候,梯度还需要乘以 gamma 的 t 次方?计算 G 的时候不是已经考虑了奖励的折扣?

你好,请问 REINFORCE 伪代码中,为什么更新参数的时候,梯度还需要乘以 gamma 的 t 次方?计算 G 的时候不是已经考虑了奖励的折扣?

@JinProton 感谢您的反馈,REINFORCE 的严谨的数学推导可以推出梯度前面需要乘以 gamma 的 t 次方。

有个不理解的地方,策略网络输出的概率是0-1之间,那么对数的结果总是小于0的,为了让似然函数尽可能大,网络会不会总是采取一些不好的动作,使得回报为负数呢,这样似然总会是正的

为了研究chatgpt里的ppo算法,在网上找了很多ppo的教程,都看不懂;终于想起了这个教程,从第一章开始看,终于看懂了策略梯度算法,下一站ppo,粗发~

@kijiang 加油 👍

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

@qiwang067

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

看了伪代码,里面也没有描述 “实际动作At”是如何引入的

@qiwang067

书里面这段的ln应该代表的是loss吧?但为啥是自然对数的符号,这里有点不明白

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

@skywalkerwang98 ,感谢您的反馈,这边比较标准的写法应该是 log,loss 具体推导可参考下图
image

这个推导里面没有看到At啊 ! 看很多代码,也没有这个At

@qiwang067

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

REINFORCE 算法伪代码也只是结论啊,这个结论是怎么推导出来的呢?

@qiwang067

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

REINFORCE 算法伪代码也只是结论啊,这个结论是怎么推导出来的呢?

@qiwang067

你好,请问 REINFORCE 伪代码中,为什么更新参数的时候,梯度还需要乘以 gamma 的 t 次方?计算 G 的时候不是已经考虑了奖励的折扣?

@JinProton 感谢您的反馈,REINFORCE 的严谨的数学推导可以推出梯度前面需要乘以 gamma 的 t 次方。

参考赵世钰 强化学习的数学原理9.4节 确实是不需要乘以gamma 的 t 次方,如果真的有的话,请给出具体的推导公式,谢谢!

@JinProton
你好,请问 REINFORCE 伪代码中,为什么更新参数的时候,梯度还需要乘以 gamma 的 t 次方?计算 G 的时候不是已经考虑了奖励的折扣?

我觉得你是对的,不知道你后续有没有研究到底需不需要乘以gamma 的 t 次方

@chensisi0730

@qiwang067

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

REINFORCE 算法伪代码也只是结论啊,这个结论是怎么推导出来的呢?

@qiwang067

@qiwang067
@amy-jiang-fiirst 感谢您的反馈,回复如下图所示:
image

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

有推理的依据吗?还是拍脑袋出来的?

具体可看 REINFORCE 算法伪代码

REINFORCE 算法伪代码也只是结论啊,这个结论是怎么推导出来的呢?

@chensisi0730

@qiwang067

书里面这段的ln应该代表的是loss吧?但为啥是自然对数的符号,这里有点不明白

文中有一句“就拿实际执行的这个动作,先取个 one-hot 向量,然后再拿到神经网络预测的动作概率,这两个一相乘,我就可以拿到算法里面的那个 ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)”,请问神经网络预测的动作概率不就是𝜋(𝐴𝑡∣𝑆𝑡,𝜃)吗?算法里的ln𝜋(𝐴𝑡∣𝑆𝑡,𝜃)直接对神经网络输出取对数不就可以了嘛?

@skywalkerwang98 ,感谢您的反馈,这边比较标准的写法应该是 log,loss 具体推导可参考下图
image

这个推导里面没有看到At啊 ! 看很多代码,也没有这个At

At 代表实际动作,就像监督学习里面的正标签一样,分类问题最后计算交叉熵也是loss(y_hat, y),这里的At就相当于y,y_hat相当于p_theta,只不过损失函数前面要加一个系数G_t

有个不理解的地方,策略网络输出的概率是0-1之间,那么对数的结果总是小于0的,为了让似然函数尽可能大,网络会不会总是采取一些不好的动作,使得回报为负数呢,这样似然总会是正的

我也考虑过这个问题,前面说的是奖励R全部是正值没有这个问题,但是后来引入基线后,R<0,则R约小,目标函数反而越大,不太理解

我觉得求梯度应该这么说,真实动作转换为one-hot编码(相当于一个向量),然后乘神经网络输出动作概率的log(也是一个向量),相当于两个向量相乘。那里就一句话说相乘给我整懵了,最好是加上两个向量相乘的描述(其实结果就应该真实动作是one-hot编码后,那个动作对应概率的log值,比如[1,0,0]·log[0.6,0.2,0.2]就应该是log 0.6)