datawhalechina / easy-rl

强化学习中文教程(蘑菇书🍄),在线阅读地址:https://datawhalechina.github.io/easy-rl/
Other
8.93k stars 1.8k forks source link

/chapter7/chapter7 #40

Open qiwang067 opened 3 years ago

qiwang067 commented 3 years ago

https://datawhalechina.github.io/easy-rl/#/chapter7/chapter7

Description

Strawberry47 commented 2 years ago

谢谢博主!不过彩虹图里的A3C 这章没有涉及到呢~

qiwang067 commented 2 years ago

谢谢博主!不过彩虹图里的A3C 这章没有涉及到呢~

感谢您的反馈,A3C 在第九章中有详细的介绍。

0x00000499 commented 2 years ago

您好,竞争深度网络最后举例给A添加约束的地方:

向量是[7,3,2]。加一个归一化,这个归一化做的事情就是把 7+3+2 加起来等于 12,12/3 = 4。 然后把这边通通减掉 4,变成 3, -1, 2。再把 3, -1, 2 加上 1.0,得到最后的 Q 值。

减掉4之后的向量应该是[3,-1,-2]吧?

qiwang067 commented 2 years ago

您好,竞争深度网络最后举例给A添加约束的地方:

向量是[7,3,2]。加一个归一化,这个归一化做的事情就是把 7+3+2 加起来等于 12,12/3 = 4。 然后把这边通通减掉 4,变成 3, -1, 2。再把 3, -1, 2 加上 1.0,得到最后的 Q 值。

减掉4之后的向量应该是[3,-1,-2]吧?

@GaoXinzhi 感谢您的反馈,正确的内容如下: image

建议您先看 pdf 版,在线版这章的内容还没有更新:)

0x00000499 commented 2 years ago

您好,竞争深度网络最后举例给A添加约束的地方: 向量是[7,3,2]。加一个归一化,这个归一化做的事情就是把 7+3+2 加起来等于 12,12/3 = 4。 然后把这边通通减掉 4,变成 3, -1, 2。再把 3, -1, 2 加上 1.0,得到最后的 Q 值。 减掉4之后的向量应该是[3,-1,-2]吧?

@GaoXinzhi 感谢您的反馈,正确的内容如下: image

建议您先看 pdf 版,在线版这章的内容还没有更新:)

您好,最新的pdf版本中也是这样描述的,2-4不应该是-2吗,pdf中写成2了呀。(虽然是个小问题)😂 image

qiwang067 commented 2 years ago

@GaoXinzhi 感谢您的纠错:+1:,确实是 -2,已在纸质版勘误修订表中更新,pdf 版以及在线版会在下次更新时修改这个错误 :)

您好,竞争深度网络最后举例给A添加约束的地方: 向量是[7,3,2]。加一个归一化,这个归一化做的事情就是把 7+3+2 加起来等于 12,12/3 = 4。 然后把这边通通减掉 4,变成 3, -1, 2。再把 3, -1, 2 加上 1.0,得到最后的 Q 值。 减掉4之后的向量应该是[3,-1,-2]吧?

@GaoXinzhi 感谢您的反馈,正确的内容如下: image 建议您先看 pdf 版,在线版这章的内容还没有更新:)

您好,最新的pdf版本中也是这样描述的,2-4不应该是-2吗,pdf中写成2了呀。(虽然是个小问题)😂 image

happinessoverdue commented 1 year ago

有个特别疑惑的地方。 对于dqn和dueling dqn来说,policy_net和target_net是同一个网络

model = MLP(n_states, n_actions, hidden_dim = cfg['hidden_dim']) self.policy_net = model.to(self.device) self.target_net = model.to(self.device) 以上是您的实现,在python和pytorch中,这样的结果就是policy_net和target_net是同一个对象(网络),那么定时地将policy_net的参数复制到target_net还有什么意义呢?

self.policy_net = MLP(n_states, n_actions, hidden_dim = cfg['hidden_dim']).to(self.device) self.target_net = MLP(n_states, n_actions, hidden_dim = cfg['hidden_dim']).to(self.device) 以上是我的理解,policy_net和target_net是两个不同的对象(网络),并且在update时 policy_net每经过若干次更新(cfg. target_update),便将参数复制到target_net。

对于cfg. target_update,您在dqn和dueling dqn中都是设置为每4个eposide左右 同步网络参数,但是在double dqn中是每4次sample_count(即每4个batch)同步网络参数,并且在double dqn中 policy_net和target_net您的实现是两个不同的对象(网络)。 因为您对这三个算法的具体代码写法有些不同,所以解释起来有些麻烦,并且由于这个游戏过于简单,因此并不能很好地对我们两种理解实现进行实验对比,希望您解答一下。 还有就是,因为您将每个eposide内的最大步数设置为200,直观上 对于200这个数量级,每4个batch同步一次policy_net和target_net参数 我觉得似乎更合理;每4个eposide(或者说4个epoch)才同步一次,这似乎不太合理啊。

IamXulin commented 9 months ago

你好,请问在噪声网络中采样需要用到ε-贪心探索吗,我理解的是不用,但是我看你发的代码里用到ε-贪心探索了

yl-jiang commented 8 months ago

感谢提供的精彩教程! 第七章的NoisyDQN.ipynb预测函数predict_action的第一句应该需要加上self.policy_net.eval():

@torch.no_grad()
def predict_action(self, state):
    self.policy_net.eval()
    ...
0x00000499 commented 8 months ago

您的来信我已收到,将尽快查阅,谢谢!

yl-jiang commented 8 months ago

你好,请问在噪声网络中采样需要用到ε-贪心探索吗,我理解的是不用,但是我看你发的代码里用到ε-贪心探索了

使用作者提供的代码,实验了一下,去掉ε-贪心探索最终也可以将模型训练出来,但是需要稍多一点的训练step。由此看来,ε-贪心探索是一个比较通用且有效率的策略,可以在相对较短时间内探索出更多样的样本供网络学习。