返回

强化学习入门4—Q-learning和Sarsa

人工智能

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各有特点和适用场景。了解它们的工作原理有助于解决特定类型的强化学习问题,并为更复杂的应用打下基础。

相关资源