탐색과 활용의 균형

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Fouad Trad

Machine Learning Engineer

무작위 행동으로 학습하기

  • 에이전트가 환경을 탐색
  • 학습한 지식으로 전략 최적화는 없음
  • 학습 종료 후 지식 활용

환경 안의 에이전트 이미지

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

탐색-활용 상충관계

 

  • 탐색과 활용을 균형 있게 수행
  • 지속적 탐색은 전략 정교화를 방해
  • 활용만 하면 미발견 기회를 놓침

더 많은 보상을 찾으려 새 행동을 탐색하고, 지식을 활용하되 일부 보상을 놓칠 수 있는 에이전트 이미지.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

식당 선택

레스토랑 테이블 이미지.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

엡실론-그리디 전략

 

  • 확률 epsilon으로 탐색

확률 epsilon에서 무작위 행동으로 탐색하는 다이어그램.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

엡실론-그리디 전략

 

  • 확률 epsilon으로 탐색
  • 확률 1-epsilon으로 활용
  • 지식을 쓰면서 지속적으로 탐색 보장

확률 epsilon에서는 무작위 행동으로 탐색하고, 확률 1 - epsilon에서는 가장 좋은 알려진 행동을 선택해 활용하는 다이어그램.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

감쇠형 엡실론-그리디 전략

 

  • 시간에 따라 epsilon 감소
  • 초기에는 더 많이 탐색
  • 이후에는 더 많이 활용
  • 누적 지식 의존도 점진적 증가

시간에 따라 epsilon이 감소하는 그래프.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Frozen Lake로 구현하기

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

action_size = env.action_space.n
state_size = env.observation_space.n
Q = np.zeros((state_size, action_size))

alpha = 0.1 gamma = 0.99 total_episodes = 10000

Frozen Lake 환경의 스냅샷 이미지.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

epsilon_greedy() 구현

def epsilon_greedy(state):

if np.random.rand() < epsilon: action = env.action_space.sample() # Explore
else: action = np.argmax(Q[state, :]) # Exploit return action
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

엡실론-그리디 학습

epsilon = 0.9   # Exploration rate

rewards_eps_greedy = []
for episode in range(total_episodes):
    state, info = env.reset()
    terminated = False
    episode_reward = 0
    while not terminated:
        action = epsilon_greedy(state)
        new_state, reward, terminated, truncated, info = env.step(action)       
        Q[state, action] = update_q_table(state, action, new_state) 
        state = new_state

episode_reward += reward rewards_eps_greedy.append(episode_reward)
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

감쇠형 엡실론-그리디 학습

epsilon = 1.0   # Exploration rate
epsilon_decay = 0.999
min_epsilon = 0.01

rewards_decay_eps_greedy = [] for episode in range(total_episodes): state, info = env.reset() terminated = False episode_reward = 0 while not terminated: action = epsilon_greedy(state) new_state, reward, terminated, truncated, info = env.step(action) episode_reward += reward Q[state, action] = update_q_table(state, action, new_state) state = new_state rewards_decay_eps_greedy.append(episode_reward)
epsilon = max(min_epsilon, epsilon * epsilon_decay)
Python으로 배우는 Gymnasium 기반 Reinforcement Learning

전략 비교

avg_eps_greedy= np.mean(rewards_eps_greedy)
avg_decay = np.mean(rewards_decay_eps_greedy)
plt.bar(['Epsilon Greedy', 'Decayed Epsilon Greedy'],
        [avg_eps_greedy, avg_decay], 
        color=['blue', 'green'])
plt.title('Average Reward per Episode')
plt.ylabel('Average Reward')
plt.show()

막대그래프: 엡실론-그리디의 평균 보상은 약 0.02, 감쇠형 엡실론-그리디는 약 0.55.

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

연습해 봅시다!

Python으로 배우는 Gymnasium 기반 Reinforcement Learning

Preparing Video For Download...