Vyvažování průzkumu a využívání

Reinforcement Learning with Gymnasium in Python

Fouad Trad

Machine Learning Engineer

Trénování s náhodnými akcemi

  • Agent prozkoumává prostředí
  • Žádná optimalizace strategie na základě získaných znalostí
  • Po dokončení trénování agent využívá znalosti

Obrázek agenta v prostředí

Reinforcement Learning with Gymnasium in Python

Kompromis průzkum–využívání

 

  • Vyvažuje průzkum a využívání
  • Neustálý průzkum brání zdokonalování strategie
  • Výhradní využívání přehlíží neobjevené příležitosti

Obrázek agenta, který zkoumá nové akce za účelem objevení dalších odměn a využívá své znalosti, přičemž může přijít o některé odměny.

Reinforcement Learning with Gymnasium in Python

Výběr restaurace

Obrázek restauračního stolu.

Reinforcement Learning with Gymnasium in Python

Strategie epsilon-greedy

 

  • Průzkum s pravděpodobností epsilon

Diagram znázorňující, že s pravděpodobností epsilon agent provádí průzkum výběrem náhodné akce.

Reinforcement Learning with Gymnasium in Python

Strategie epsilon-greedy

 

  • Průzkum s pravděpodobností epsilon
  • Využívání s pravděpodobností 1-epsilon
  • Zajišťuje průběžný průzkum při využívání znalostí

Diagram znázorňující, že s pravděpodobností epsilon agent provádí průzkum výběrem náhodné akce, a s pravděpodobností 1 - epsilon využívá nejlepší známou akci.

Reinforcement Learning with Gymnasium in Python

Strategie epsilon-greedy s útlumem

 

  • Epsilon se postupně snižuje
  • Zpočátku více průzkumu
  • Později více využívání
  • Agent se stále více opírá o nabyté znalosti

Obrázek znázorňující, jak epsilon v čase klesá.

Reinforcement Learning with Gymnasium in Python

Implementace s 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

Obrázek zobrazující snímek prostředí Frozen Lake.

Reinforcement Learning with Gymnasium in Python

Implementace 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 with Gymnasium in Python

Trénování 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 with Gymnasium in Python

Trénování epsilon-greedy s útlumem

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 with Gymnasium in Python

Porovnání strategií

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

Sloupcový graf znázorňující, že průměrná odměna dosažená metodou epsilon-greedy je přibližně 0,02, zatímco u epsilon-greedy s útlumem je přibližně 0,55.

Reinforcement Learning with Gymnasium in Python

Pojďme si to procvičit!

Reinforcement Learning with Gymnasium in Python

Preparing Video For Download...