Open qiwang067 opened 3 years ago
在Q-learning: Off-policy TD Control章节,提到了“Sarsa 在更新 Q 表格的时候,它用到的 A' 。我要获取下一个 Q 值的时候,A' 是下一个 step 一定会执行的 action。这个 action 有可能是 ε-greedy 方法采样出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作,但这是它实际执行的那个动作。”。我想问下,ε-greedy 方法采样出来的值不是就包括了 max Q对应的动作和随机动作吗?
在Q-learning: Off-policy TD Control章节,提到了“Sarsa 在更新 Q 表格的时候,它用到的 A' 。我要获取下一个 Q 值的时候,A' 是下一个 step 一定会执行的 action。这个 action 有可能是 ε-greedy 方法采样出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作,但这是它实际执行的那个动作。”。我想问下,ε-greedy 方法采样出来的值不是就包括了 max Q对应的动作和随机动作吗?
你可能误解了,这边是指用的策略,可以用 ε-greedy 方法,也可采用 max Q 方法或随机采样方法,这三种策略是并行的。
在Q-learning: Off-policy TD Control章节,提到了“Sarsa 在更新 Q 表格的时候,它用到的 A' 。我要获取下一个 Q 值的时候,A' 是下一个 step 一定会执行的 action。这个 action 有可能是 ε-greedy 方法采样出来的值,也有可能是 max Q 对应的 action,也有可能是随机动作,但这是它实际执行的那个动作。”。我想问下,ε-greedy 方法采样出来的值不是就包括了 max Q对应的动作和随机动作吗?
你可能误解了,这边是指用的策略,可以用 ε-greedy 方法,也可采用 max Q 方法或随机采样方法,这三种策略是并行的。
噢噢,理解你的意思了。感谢!
我在实践MonterCarlo和Sarsa代码的过程中,发现了以下几个问题:
我在实践MonterCarlo和Sarsa代码的过程中,发现了以下几个问题:
- 在MonterCarlo章节中,train函数中print('Start to eval !')应该换成print('Start to train !')
在Sarsa章节中
- SarsaConfig中的算法名与环境名有误
- agent.py中,没有分情况讨论state是否在Q表格的key中,会导致出现新的state时,有Undefined control sequence \epslion1-\epslion的可能选择第一个动作而不是随机
- 在train函数中,next_state的动作并不是next_action,而是update之后的新的action,这是不是将Sarsa的on-policy变为了off-policy
感谢你的细心指点,MC改了,Sarsa第一点已改,第二点设置了一个defaultdict也就是新的state对应的Q为0,如果还有错误,也麻烦截图一下~,理论上应该可以的,第三点如下:
next_action = agent.choose_action(next_state) agent.update(state, action, reward, next_state, next_action,done)
先选取next_action再更新的,不太明白你的意思,可以说得再详细点?
讲义中,Sarsa的的流程我理解是这样的:
1.利用当前策略,在初始状态S下,选择动作A,得到下一个状态与奖励R
2.得到下一个状态与奖励R
3.利用当前策略,在状态S’,选择下一动作A'
4.利用Q函数的迭代公式更新Q函数
5.把赋给S,A'赋给A
6.重复上述2~4过程得到最终的结果
但是在代码中流程是这样的:
1.利用当前策略,在初始状态S下,选择动作A,得到下一个状态与奖励R
2.利用当前策略,在状态S’,选择下一动作A'
3.利用Q函数的迭代公式更新Q函数
4.把赋给S
5.重复上述1~4过程得到最终的结果
也就是说,虽然是先选下一时刻的动作,再更新;但是这个动作是下一时刻肯定会执行的动作,而不应该是根据更新后的策略采样的动作
我不知道我理解的对不对
------------------ 原始邮件 ------------------ 发件人: "datawhalechina/easy-rl" @.>; 发送时间: 2021年7月14日(星期三) 下午5:36 @.>; 抄送: "王腾 @.**@.>; 主题: Re: [datawhalechina/easy-rl] /chapter3/chapter3 (#38)
我在实践MonterCarlo和Sarsa代码的过程中,发现了以下几个问题:
在MonterCarlo章节中,train函数中print('Start to eval !')应该换成print('Start to train !')
在Sarsa章节中
SarsaConfig中的算法名与环境名有误
agent.py中,没有分情况讨论state是否在Q表格的key中,会导致出现新的state时,有Undefined control sequence \epslion1-\epslion的可能选择第一个动作而不是随机
在train函数中,next_state的动作并不是next_action,而是update之后的新的action,这是不是将Sarsa的on-policy变为了off-policy
感谢你的细心指点,MC改了,Sarsa第一点已改,第二点设置了一个defaultdict也就是新的state对应的Q为0,如果还有错误,也麻烦截图一下~,理论上应该可以的,第三点如下“ next_action = agent.choose_action(next_state) agent.update(state, action, reward, next_state, next_action,done) 先选取next_action再更新的,不太明白你的意思,可以说得再详细点?
— You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
讲义中,Sarsa的的流程我理解是这样的: 1.利用当前策略,在初始状态S下,选择动作A,得到下一个状态与奖励R 2.得到下一个状态与奖励R 3.利用当前策略,在状态S’,选择下一动作A' 4.利用Q函数的迭代公式更新Q函数 5.把赋给S,A'赋给A 6.重复上述2~4过程得到最终的结果 但是在代码中流程是这样的: 1.利用当前策略,在初始状态S下,选择动作A,得到下一个状态与奖励R 2.利用当前策略,在状态S’,选择下一动作A' 3.利用Q函数的迭代公式更新Q函数 4.把赋给S 5.重复上述1~4过程得到最终的结果 也就是说,虽然是先选下一时刻的动作,再更新;但是这个动作是下一时刻肯定会执行的动作,而不应该是根据更新后的策略采样的动作 我不知道我理解的对不对 … ------------------ 原始邮件 ------------------ 发件人: "datawhalechina/easy-rl" @.>; 发送时间: 2021年7月14日(星期三) 下午5:36 @.>; 抄送: "王腾 @.**@.>; 主题: Re: [datawhalechina/easy-rl] /chapter3/chapter3 (#38) 我在实践MonterCarlo和Sarsa代码的过程中,发现了以下几个问题: 在MonterCarlo章节中,train函数中print('Start to eval !')应该换成print('Start to train !') 在Sarsa章节中 SarsaConfig中的算法名与环境名有误 agent.py中,没有分情况讨论state是否在Q表格的key中,会导致出现新的state时,有Undefined control sequence \epslion1-\epslion的可能选择第一个动作而不是随机 在train函数中,next_state的动作并不是next_action,而是update之后的新的action,这是不是将Sarsa的on-policy变为了off-policy 感谢你的细心指点,MC改了,Sarsa第一点已改,第二点设置了一个defaultdict也就是新的state对应的Q为0,如果还有错误,也麻烦截图一下~,理论上应该可以的,第三点如下“ next_action = agent.choose_action(next_state) agent.update(state, action, reward, next_state, next_action,done) 先选取next_action再更新的,不太明白你的意思,可以说得再详细点? — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.
同学,谢谢你的建议,你的理解是对的,已更正~
最后一部分,"On-Policy vs. Off-policy",“它只用了一个 policyπ”出现了两遍哦
最后一部分,"On-Policy vs. Off-policy",“它只用了一个 policyπ”出现了两遍哦
感谢您的纠正,错误已修改;
另外,最新版教程可以看我们的pdf版本: https://github.com/datawhalechina/easy-rl/releases
我们后面会慢慢对在线教程进行更新。
上面 @johnjim0816 指出的SARSA实现的错误,当前代码并未更新吧?需要PR吗
上面 @johnjim0816 指出的SARSA实现的错误,当前代码并未更新吧?需要PR吗
谢谢同学提醒,已改~
图 3.32 上面那张图的标号错了,应该是 3.31
@jzhangCSER01 感谢您的纠错,文章已更新 👍
实验测试结果,Sarsa会考虑安全性,QLearning更加激进。Sarsa 是一个典型的同策略算法,它只用了一个策略 𝜋 π,它不仅使用策略 𝜋 π 学习,还使用策略 𝜋 π 与环境交互产生经验。 如果策略采用 𝜀 ε-贪心算法,它需要兼顾探索,为了兼顾探索和利用,它训练的时候会显得有点“胆小”。它在解决悬崖行走问题的时候,会尽可能地远离悬崖边,确保哪怕自己不小心探索了一点儿,也还是在安全区域内。此外,因为采用的是 𝜀 ε-贪心 算法,策略会不断改变( 𝜀 ε 值会不断变小),所以策略不稳定。
Q学习是一个典型的异策略算法,它有两种策略————目标策略和行为策略,它分离了目标策略与行为策略。Q学习可以大胆地用行为策略探索得到的经验轨迹来优化目标策略,从而更有可能探索到最佳策略。行为策略可以采用 𝜀 ε-贪心 算法,但目标策略采用的是贪心算法,它直接根据行为策略采集到的数据来采用最佳策略,所以 Q学习 不需要兼顾探索。
我们比较一下 Q学习 和 Sarsa 的更新公式,就可以发现 Sarsa 并没有选取最大值的最大化操作。因此,Q学习是一个非常激进的方法,它希望每一步都获得最大的利益;Sarsa 则相对较为保守,它会选择一条相对安全的迭代路线。
图3.25是不是错了,应该是(s_t,a_t)没有出现在前面的序列中。
图3.25是不是错了,应该是(s_t,a_t)没有出现在前面的序列中。
@Woodman3 没错的~
https://datawhalechina.github.io/easy-rl/#/chapter3/chapter3
Description