Баланс между исследованием и использованием знаний

Обучение с подкреплением с Gymnasium на Python

Fouad Trad

Machine Learning Engineer

Обучение со случайными действиями

  • Агент исследует среду
  • Стратегия не оптимизируется на основе накопленных знаний
  • Агент применяет знания после завершения обучения

Изображение агента в среде

Обучение с подкреплением с Gymnasium на Python

Компромисс между исследованием и использованием знаний

 

  • Баланс между исследованием и использованием знаний
  • Постоянное исследование мешает совершенствованию стратегии
  • Только использование знаний не даёт открыть новые возможности

Диаграмма: агент исследует новые действия в поисках большего вознаграждения и использует накопленные знания, рискуя упустить часть вознаграждений.

Обучение с подкреплением с Gymnasium на Python

Выбор блюда

Изображение ресторанного стола.

Обучение с подкреплением с Gymnasium на Python

Стратегия epsilon-жадности

 

  • Исследование с вероятностью epsilon

Диаграмма: с вероятностью epsilon агент исследует среду, выбирая случайное действие.

Обучение с подкреплением с Gymnasium на Python

Стратегия epsilon-жадности

 

  • Исследование с вероятностью epsilon
  • Использование знаний с вероятностью 1-epsilon
  • Непрерывное исследование в сочетании с использованием знаний

Диаграмма: с вероятностью epsilon агент исследует среду, выбирая случайное действие, а с вероятностью 1 - epsilon — использует знания, выбирая наилучшее известное действие.

Обучение с подкреплением с Gymnasium на Python

Стратегия epsilon-жадности с затуханием

 

  • Epsilon уменьшается со временем
  • В начале — больше исследования
  • Позднее — больше использования знаний
  • Агент всё больше опирается на накопленный опыт

График убывания epsilon со временем.

Обучение с подкреплением с 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.

Обучение с подкреплением с 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
Обучение с подкреплением с Gymnasium на Python

Обучение с epsilon-жадностью

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)
Обучение с подкреплением с Gymnasium на Python

Обучение с затухающей epsilon-жадностью

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)
Обучение с подкреплением с 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-жадности — около 0,02, при затухающей epsilon-жадности — около 0,55.

Обучение с подкреплением с Gymnasium на Python

Давайте потренируемся!

Обучение с подкреплением с Gymnasium на Python

Preparing Video For Download...