Q-learning

Reinforcement Learning with Gymnasium ใน Python

Fouad Trad

Machine Learning Engineer

แนะนำ Q-learning

  • ย่อมาจาก quality learning
  • เทคนิคแบบ model-free
  • เรียนรู้ Q-table ที่เหมาะสมผ่านการโต้ตอบกับสภาพแวดล้อม

ไดอะแกรมแสดงขั้นตอนของ Q-learning ได้แก่ การกำหนดค่าเริ่มต้น Q-table การเลือกการกระทำ การรับรางวัลจากสภาพแวดล้อม และการอัปเดตตาราง โดยตัวแทนวนซ้ำจนกว่าจะลู่เข้าหลังจากหลายตอน

Reinforcement Learning with Gymnasium ใน Python

Q-learning vs. SARSA

SARSA

ภาพแสดงสูตรคณิตศาสตร์ของกฎการอัปเดต SARSA

  • อัปเดตตามการกระทำที่เลือกจริง
  • ผู้เรียนแบบ on-policy
Q-learning

ภาพแสดงสูตรคณิตศาสตร์ของกฎการอัปเดต Q-learning

  • อัปเดตโดยไม่ขึ้นกับการกระทำที่เลือก
  • ผู้เรียนแบบ off-policy
Reinforcement Learning with Gymnasium ใน Python

การ implement Q-learning

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

num_episodes = 1000 alpha = 0.1 gamma = 1
num_states, num_actions = env.observation_space.n, env.action_space.n Q = np.zeros((num_states, num_actions))
reward_per_random_episode = []
Reinforcement Learning with Gymnasium ใน Python

การ implement Q-learning

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

while not terminated:
# Random action selection action = env.action_space.sample()
# Take action and observe new state and reward new_state, reward, terminated, truncated, info = env.step(action)
# Update Q-table update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Reinforcement Learning with Gymnasium ใน Python

การอัปเดต Q-learning

ภาพแสดงสูตรคณิตศาสตร์ของกฎการอัปเดต Q-learning

def update_q_table(state, action, reward, new_state):

old_value = Q[state, action]
next_max = max(Q[new_state])
Q[state, action] = (1 - alpha) * old_value + alpha * (reward + gamma * next_max)
Reinforcement Learning with Gymnasium ใน Python

การใช้งาน policy

reward_per_learned_episode = []
policy = get_policy()

for episode in range(num_episodes): state, info = env.reset() terminated = False episode_reward = 0 while not terminated: # Select the best action based on learned Q-table action = policy[state] # Take action and observe new state new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Reinforcement Learning with Gymnasium ใน Python

การประเมินผล Q-learning

import numpy as np
import matplotlib.pyplot as plt

avg_random_reward = np.mean(reward_per_random_episode) avg_learned_reward = np.mean(reward_per_learned_episode)
plt.bar(['Random Policy', 'Learned Policy'], [avg_random_reward, avg_learned_reward], color=['blue', 'green']) plt.title('Average Reward per Episode') plt.ylabel('Average Reward') plt.show()

ภาพกราฟแท่งแสดงว่า learned policy ให้ผลตอบแทนเฉลี่ยสูงกว่า (ประมาณ 0.26) เมื่อเทียบกับ random policy (ประมาณ 0.01)

Reinforcement Learning with Gymnasium ใน Python

มาฝึกกันเถอะ!

Reinforcement Learning with Gymnasium ใน Python

Preparing Video For Download...