TD Learning,SARSA,Q Learning

作者读强化学习综述时发现SARSA伪代码有误,需在step迭代前初始化action。TD Learning包含Q Learning和SARSA,Q Learning是off - policy,更新时选下一个state最优动作;SARSA是on - policy,更新前确定下一个state和action,三种方法特定条件下收敛。

最近在读一篇增强学习的综述
DEEP REINFORCEMENT LEARNING : AN OVERVIEW
发现里边介绍SARSA时,伪代码是错误的。
1.TD Learning
这里写图片描述
2.SARSA
这里写图片描述
错误就在于,sarsa算法的下一个动作在这次更新时就已经确定了。所以需要在step迭代之前对action进行初始化。
3.Q Learning
这里写图片描述
TD Learning包含Q Learning和sarsa。
我们说Q Learning是off-policy的,而sarsa是on-policy的。为什么这么说呢?
是因为更新Q时,sarsa是确定好下一个状态和action才进行更新的。但是Q Learning更新时,是选取下一个state的最优动作进行更新,而下一个state实际上采取的action是不能在这次更新时确定的。Q Learning好比是观察你上一次的情况,这次我在做决定。但是sarsa这次更新之前就已经确定好了下一个state和action。这也是Q Learning和sarsa的区别。
这三种方法在特定条件下收敛。根据最优值函数,我们能得到最优策略。

### SARSA 和 Q-Learning 的定义 SARSA (State-Action-Reward-State-Action) 是一种用于估计给定策略下状态动作价值函数的方法。该方法通过更新当前状态下采取的动作的价值来工作,这依赖于下一个状态下的实际选取动作[^2]。 相比之下,Q-learning 则是一种离线策略算法,旨在找到最优的行为价值函数 \( Q(s,a) \),即在遵循任意行为策略的情况下获得的最大预期回报。此过程不需要知道环境模型即可完成学习,并且可以收敛到最佳策略即使是在探索过程中执行的是随机行动。 ### 区别 主要的区别在于如何选择下一时刻的状态-动作对来进行价值评估: - **在线 vs 离线策略**: SARSA 属于在线策略的学习方式;而 Q-learning 被认为是离线策略的代表。 - **更新机制的不同**: 在 SARSA 中,当更新某个特定状态-动作对的价值时会考虑后续的真实采样得到的新状态及其对应的实际发生过的动作;而在 Q-learning 更新法则里,则假设总是会选择使得新状态下最大可能收益最大的那个动作作为未来要发生的动作。 ### 应用场景 两种算法都广泛应用于各种领域内的决策制定问题上,比如机器人导航、游戏AI以及资源管理等。具体来说, - 对于那些希望保持现有良好表现而不愿意冒险尝试未知选项的应用场合,可能会更倾向于采用像 SARSA 这样的保守型方案; - 如果目标是最优化长期奖励并允许一定程度上的试探性操作的话,那么 Q-learning 可能更适合一些因为其能够更好地平衡短期利益与长远规划之间的关系。 ### 实现方法 下面给出 Python 版本简单的伪代码实现这两个算法的例子: #### SARSA ```python def sarsa(env, num_episodes, alpha, gamma, epsilon): q_table = np.zeros([env.observation_space.n, env.action_space.n]) for i in range(num_episodes): state = env.reset() action = choose_action(state, q_table, epsilon) done = False while not done: next_state, reward, done, _ = env.step(action) next_action = choose_action(next_state, q_table, epsilon) # Update rule for SARSA td_target = reward + gamma * q_table[next_state][next_action] td_error = td_target - q_table[state][action] q_table[state][action] += alpha * td_error state = next_state action = next_action return q_table def choose_action(state, q_table, epsilon): if random.uniform(0, 1) < epsilon: return env.action_space.sample() # Explore action space else: return np.argmax(q_table[state]) # Exploit learned values ``` #### Q-Learning ```python def q_learning(env, num_episodes, alpha, gamma, epsilon): q_table = np.zeros([env.observation_space.n, env.action_space.n]) for i in range(num_episodes): state = env.reset() done = False while not done: action = choose_action(state, q_table, epsilon) next_state, reward, done, _ = env.step(action) # Update rule for Q-Learning best_next_action = np.argmax(q_table[next_state]) td_target = reward + gamma * q_table[next_state][best_next_action] td_error = td_target - q_table[state][action] q_table[state][action] += alpha * td_error state = next_state return q_table ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值