返回
强化学习入门4—Q-learning和Sarsa
人工智能
2023-11-19 09:44:58
Q-Learning与SARSA的比较
在强化学习中,价值函数方法被广泛应用于解决决策问题。在这类算法中,Q-learning和SARSA是两种常用的方法。虽然两者都属于时序差分(Temporal-Difference, TD)学习,但它们使用不同的方式来更新状态-动作值函数。
Q-Learning
Q-Learning是一种off-policy方法,它独立于当前策略进行价值估计,并采用贪婪策略来选择行动。这意味着,在每个时间步骤t,Q-learning会根据下一时刻的最大Q值来决定采取的动作,而不是基于执行的策略。
原理与实现
其更新规则如下:
[ Q(s, a) \leftarrow Q(s,a) + \alpha [ r + \gamma\max_{a'} Q(s', a') - Q(s,a)] ]
这里的(Q(s,a))是状态s和动作a的值函数,(\alpha)表示学习率,决定了旧值与新估计值之间的权重。(r)是指即时奖励,而(\gamma)是折扣因子,反映了未来奖励的重要性。
代码示例
def q_learning(env, num_episodes=500):
Q = defaultdict(lambda: np.zeros(env.action_space.n))
alpha, gamma, epsilon = 0.1, 0.99, 1.0
for i in range(num_episodes):
state = env.reset()
done = False
while not done:
if random.uniform(0, 1) < epsilon: # 探索
action = env.action_space.sample()
else: # 利用
action = np.argmax(Q[state])
next_state, reward, done, _ = env.step(action)
best_next_action = np.argmax(Q[next_state])
td_target = reward + gamma * Q[next_state][best_next_action]
td_delta = td_target - Q[state][action]
Q[state][action] += alpha * td_delta
state = next_state
return Q
SARSA
SARSA(State-Action-Reward-State-Action)是一种on-policy方法,它遵循当前策略来进行更新。这意味着,在每一步中采取的动作是按照策略来选择的。
原理与实现
其更新规则如下:
[ Q(s,a) \leftarrow Q(s, a) + \alpha [ r + \gamma Q(s', a') - Q(s,a)] ]
这里的(Q(s',a'))是下一个状态和动作对的价值,((s', a'))是由当前策略决定的。
代码示例
def sarsa(env, num_episodes=500):
Q = defaultdict(lambda: np.zeros(env.action_space.n))
alpha, gamma, epsilon = 0.1, 0.99, 1.0
for i in range(num_episodes):
state = env.reset()
action = epsilon_greedy(Q[state])
done = False
while not done:
next_state, reward, done, _ = env.step(action)
next_action = epsilon_greedy(Q[next_state]) # 根据当前策略选择动作
td_target = reward + gamma * Q[next_state][next_action]
td_delta = td_target - Q[state][action]
Q[state][action] += alpha * td_delta
state, action = next_state, next_action
return Q
实现过程中的注意事项
- 探索与利用的平衡:在训练初期,应采用更多的探索策略(如高epsilon值)以收集更多关于环境的信息。随着学习的进行,逐渐减少探索,增加利用。
- 超参数选择:alpha, gamma, epsilon等都是影响算法性能的关键参数,需要通过实验来确定最佳设置。
结论
Q-learning与SARSA各有特点和适用场景。了解它们的工作原理有助于解决特定类型的强化学习问题,并为更复杂的应用打下基础。