Баланс між дослідженням і використанням

Reinforcement Learning з Gymnasium у Python

Fouad Trad

Machine Learning Engineer

Навчання з випадковими діями

  • Аґент досліджує середовище
  • Без оптимізації стратегії на основі знань
  • Аґент використовує знання після завершення навчання

Зображення аґента в середовищі

Reinforcement Learning з Gymnasium у Python

Компроміс «дослідження – використання»

 

  • Балансує дослідження й використання
  • Безперервне дослідження заважає вдосконалювати стратегію
  • Лише використання пропускає невідкриті можливості

Зображення: аґент намагається досліджувати нові дії, щоб знайти більше винагород, і водночас використовує наявні знання, ризикуючи втратити частину винагород.

Reinforcement Learning з Gymnasium у Python

Вибір закладу для обіду

Зображення ресторанного столу.

Reinforcement Learning з Gymnasium у Python

Стратегія epsilon-greedy

 

  • Досліджуйте з ймовірністю epsilon

Діаграма: з ймовірністю epsilon аґент досліджує, обираючи випадкову дію.

Reinforcement Learning з Gymnasium у Python

Стратегія epsilon-greedy

 

  • Досліджуйте з ймовірністю epsilon
  • Використовуйте з ймовірністю 1-epsilon
  • Забезпечує постійне дослідження з використанням знань

Діаграма: з ймовірністю epsilon аґент досліджує, обираючи випадкову дію, а з ймовірністю 1 - epsilon використовує, обираючи найкращу відому дію.

Reinforcement Learning з Gymnasium у Python

Згасаюча стратегія epsilon-greedy

 

  • Зменшує epsilon з часом
  • Спочатку більше дослідження
  • Потім більше використання
  • Аґент дедалі більше спирається на накопичені знання

Зображення, як epsilon зменшується з часом.

Reinforcement Learning з Gymnasium у Python

Реалізація з 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.

Reinforcement Learning з Gymnasium у Python

Реалізація 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
Reinforcement Learning з Gymnasium у Python

Навчання epsilon-greedy

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)
Reinforcement Learning з Gymnasium у Python

Навчання зі згасанням epsilon-greedy

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)
Reinforcement Learning з Gymnasium у Python

Порівняння стратегій

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

Стовпчикова діаграма: середня винагорода для epsilon-greedy ≈ 0,02, для згасаючої epsilon-greedy ≈ 0,55.

Reinforcement Learning з Gymnasium у Python

Давайте потренуємось!

Reinforcement Learning з Gymnasium у Python

Preparing Video For Download...