时序差分学习

Python 中的 Gymnasium 强化学习

Fouad Trad

Machine Learning Engineer

TD 学习 vs. 蒙特卡洛

 

TD 学习
  • 无模型
  • 基于交互估计 Q 表
  • 在每个回合内每步更新 Q 表
  • 适合长/不定长回合任务

 

蒙特卡洛
  • 无模型
  • 基于交互估计 Q 表
  • 至少完成一回合后更新 Q 表
  • 适合短回合任务
Python 中的 Gymnasium 强化学习

将 TD 学习类比为天气预报

展示同一地点不同时刻天气状况的图片。

Python 中的 Gymnasium 强化学习

SARSA

  • TD 算法
  • 兼容策略方法:依据已执行动作调整策略

展示 SARSA 代表当前状态、所采取动作、获得奖励、观察到的下一状态及下一动作的图片。

Python 中的 Gymnasium 强化学习

SARSA 更新规则

展示 SARSA 更新公式的图片。

  • $\alpha$:学习率
  • $\gamma$:折扣因子
  • 二者取值在 0 到 1 之间
Python 中的 Gymnasium 强化学习

冰湖(Frozen Lake)

展示冰湖环境的图片

Python 中的 Gymnasium 强化学习

初始化

env = gym.make("FrozenLake", is_slippery=False)

num_states = env.observation_space.n num_actions = env.action_space.n
Q = np.zeros((num_states, num_actions))
alpha = 0.1 gamma = 1 num_episodes = 1000
Python 中的 Gymnasium 强化学习

SARSA 循环

for episode in range(num_episodes):

state, info = env.reset() action = env.action_space.sample()
terminated = False while not terminated: next_state, reward, terminated, truncated, info = env.step(action)
next_action = env.action_space.sample()
update_q_table(state, action, reward, next_state, next_action)
state, action = next_state, next_action
Python 中的 Gymnasium 强化学习

SARSA 更新

def update_q_table(state, action, reward, next_state, next_action):

old_value = Q[state, action]
next_value = Q[next_state, next_action]
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_value)

  展示 SARSA 更新公式的图片。

Python 中的 Gymnasium 强化学习

推导最优策略

policy = get_policy()
print(policy)
{ 0: 1,  1: 2,  2: 1,  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 强化学习

¡Vamos a practicar!

Python 中的 Gymnasium 强化学习

Preparing Video For Download...