Q-러닝

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Fouad Trad

Machine Learning Engineer

Q-러닝 소개

  • quality learning의 약자
  • 모델 프리 기법
  • 상호작용으로 최적 Q-테이블 학습

Q-테이블 초기화, 행동 선택, 환경 보상 수신, 테이블 업데이트 등 Q-러닝 절차를 보여주는 다이어그램. 에이전트는 여러 에피소드 후 수렴할 때까지 반복함.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Q-러닝 vs. SARSA

SARSA

SARSA 업데이트 규칙의 수식 이미지.

  • 수행한 행동에 기반해 업데이트
  • 온-폴리시 학습자
Q-러닝

Q-러닝 업데이트 규칙의 수식 이미지.

  • 수행한 행동과 무관하게 업데이트
  • 오프-폴리시 학습자
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Q-러닝 구현

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 = []
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Q-러닝 구현

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

while not terminated:
# 무작위 행동 선택 action = env.action_space.sample()
# 행동 수행 후 새 상태와 보상 관찰 new_state, reward, terminated, truncated, info = env.step(action)
# Q-테이블 업데이트 update_q_table(state, action, new_state)
episode_reward += reward state = new_state
reward_per_random_episode.append(episode_reward)
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Q-러닝 업데이트

Q-러닝 업데이트 규칙의 수식 이미지.

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)
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

정책 사용하기

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: # 학습된 Q-테이블 기반 최적 행동 선택 action = policy[state] # 행동 수행 후 새 상태 관찰 new_state, reward, terminated, truncated, info = env.step(action) state = new_state
episode_reward += reward
reward_per_learned_episode.append(episode_reward)
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Q-러닝 평가

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()

막대그래프: 무작위 정책의 수익(약 0.01)보다 학습된 정책의 수익(약 0.26)이 훨씬 높음을 보여줌.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

연습해 봅시다!

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Preparing Video For Download...