時間差分學習

使用 Python 的 Gymnasium 進行強化學習

Fouad Trad

Machine Learning Engineer

TD 學習 vs. Monte Carlo

 

TD 學習
  • 無模型
  • 依互動估計 Q-table
  • 於每一步更新 Q-table(同一回合內)
  • 適合長回合或無固定長度的任務

 

Monte Carlo
  • 無模型
  • 依互動估計 Q-table
  • 至少完成一個回合後再更新 Q-table
  • 適合短回合任務
使用 Python 的 Gymnasium 進行強化學習

把 TD 學習想成天氣預報

在同一地點不同时刻呈現不同天氣的圖片。

使用 Python 的 Gymnasium 進行強化學習

SARSA

  • TD 演算法
  • On-policy 方法:依已採取的動作調整策略

圖示說明 SARSA 代表當前狀態、採取的動作、得到的報酬、觀察到的下一狀態,以及下一個動作。

使用 Python 的 Gymnasium 進行強化學習

SARSA 更新規則

顯示 SARSA 更新規則數學式的圖片。

  • $\alpha$:學習率
  • $\gamma$:折扣因子
  • 兩者介於 0 到 1 之間
使用 Python 的 Gymnasium 進行強化學習

Frozen Lake

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}

顯示 frozen lake 環境中的最佳策略,動作以箭頭表示,代理如何避開坑洞一目了然。

使用 Python 的 Gymnasium 進行強化學習

一起來練習吧!

使用 Python 的 Gymnasium 進行強化學習

Preparing Video For Download...