双重 Q-learning

Python 中的 Gymnasium 强化学习

Fouad Trad

Machine Learning Engineer

Q-learning

  • 估计最优动作-价值函数
  • 基于最大片段更新会高估 Q 值
  • 可能导致次优策略

 

显示 Q-learning 更新公式的图片。

Python 中的 Gymnasium 强化学习

双重 Q-learning

  • 维护两张 Q 表
  • 每张表基于另一张更新
  • 降低 Q 值高估风险

显示两张 Q 表(Q0 和 Q1),相互基于对方更新的图片。

Python 中的 Gymnasium 强化学习

双重 Q-learning 的更新

  • 随机选择一张表

显示两张 Q 表(Q0 和 Q1),相互基于对方更新的图片。

Python 中的 Gymnasium 强化学习

Q0 更新

显示两张 Q 表(Q0 和 Q1),相互基于对方更新的图片。

显示在更新 Q0 时如何找到最优下一动作的图片。

显示 Q0 更新规则的图片。

Python 中的 Gymnasium 强化学习

Q1 更新

显示两张 Q 表(Q0 和 Q1),相互基于对方更新的图片。

显示在更新 Q1 时如何找到最优下一动作的图片。

显示 Q1 更新规则的图片。

Python 中的 Gymnasium 强化学习

双重 Q-learning

显示两张 Q 表(Q1 和 Q2),相互基于对方更新的图片。

  • 降低高估偏差
  • 在 Q0 与 Q1 更新间交替
  • 两张表共同参与学习
Python 中的 Gymnasium 强化学习

在冰湖中的实现

env = gym.make('FrozenLake-v1', 
               is_slippery=False)

num_states = env.observation_space.n
n_actions = env.action_space.n
Q = [np.zeros((num_states, n_actions))] * 2

num_episodes = 1000 alpha = 0.5 gamma = 0.99

显示智能体在冰湖环境中导航的图片。

Python 中的 Gymnasium 强化学习

实现 update_q_tables()

def update_q_tables(state, action, reward, next_state):
    # Select a random Q-table index (0 or 1)
    i = np.random.randint(2)

# Update the corresponding Q-table best_next_action = np.argmax(Q[i][next_state])
Q[i][state, action] = (1 - alpha) * Q[i][state, action] + alpha * (reward + gamma * Q[1-i][next_state, best_next_action])

显示 Q1 更新规则的图片。

显示 Q2 更新规则的图片。

Python 中的 Gymnasium 强化学习

训练

for episode in range(num_episodes):
    state, info = env.reset()
    terminated = False

    while not terminated:
        action = np.random.choice(n_actions)  
        next_state, reward, terminated, truncated,  info = env.step(action)
        update_q_tables(state, action, reward, next_state)
        state = next_state

final_Q = (Q[0] + Q[1])/2 # OR final_Q = Q[0] + Q[1]
Python 中的 Gymnasium 强化学习

智能体的策略

policy = {state: np.argmax(final_Q[state]) 
          for state in range(num_states)}
print(policy)
{ 0: 1,  1: 0,  2: 0,  3: 0, 
  4: 1,  5: 0,  6: 1,  7: 0, 
  8: 2,  9: 1, 10: 1, 11: 0, 
 12: 0, 13: 2, 14: 2, 15: 0}

显示智能体学到的策略:每个状态对应应执行的动作。

Python 中的 Gymnasium 强化学习

Passons à la pratique !

Python 中的 Gymnasium 强化学习

Preparing Video For Download...