Balansowanie eksploracji i eksploatacji

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Fouad Trad

Machine Learning Engineer

Trening z losowymi akcjami

  • Agent eksploruje środowisko
  • Brak optymalizacji strategii na podstawie wiedzy
  • Agent korzysta z wiedzy po zakończeniu treningu

Obraz przedstawiający agenta w środowisku

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Dylemat eksploracji i eksploatacji

 

  • Równoważy eksplorację i eksploatację
  • Ciągła eksploracja hamuje doskonalenie strategii
  • Wyłączna eksploatacja pomija nieodkryte możliwości

Obraz pokazujący agenta eksplorującego nowe akcje w celu odkrycia większych nagród oraz eksploatującego wiedzę, pomijając część nagród.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Wybory restauracyjne

Obraz przedstawiający stół w restauracji.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Strategia epsilon-zachłanna

 

  • Eksploracja z prawdopodobieństwem epsilon

Diagram pokazujący, że z prawdopodobieństwem epsilon agent eksploruje, wybierając losową akcję.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Strategia epsilon-zachłanna

 

  • Eksploracja z prawdopodobieństwem epsilon
  • Eksploatacja z prawdopodobieństwem 1-epsilon
  • Zapewnia ciągłą eksplorację przy wykorzystaniu wiedzy

Diagram pokazujący, że z prawdopodobieństwem epsilon agent eksploruje, wybierając losową akcję, a z prawdopodobieństwem 1-epsilon eksploatuje, wybierając najlepszą znaną akcję.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Strategia epsilon-zachłanna z zanikaniem

 

  • Zmniejsza epsilon w czasie
  • Więcej eksploracji na początku
  • Więcej eksploatacji później
  • Agent coraz bardziej polega na zgromadzonej wiedzy

Wykres pokazujący, jak epsilon maleje w czasie.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Implementacja z 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

Zrzut ekranu środowiska Frozen Lake.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Implementacja funkcji 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
Uczenie przez wzmacnianie z Gymnasium w Pythonie

Trening epsilon-zachłanny

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)
Uczenie przez wzmacnianie z Gymnasium w Pythonie

Trening z zanikającym 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)
Uczenie przez wzmacnianie z Gymnasium w Pythonie

Porównanie strategii

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

Wykres słupkowy pokazujący, że średnia nagroda dla epsilon-zachłannego wynosi około 0,02, a dla zanikającego epsilon-zachłannego około 0,55.

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Czas na ćwiczenia!

Uczenie przez wzmacnianie z Gymnasium w Pythonie

Preparing Video For Download...