Методи Монте-Карло

Reinforcement Learning з Gymnasium у Python

Fouad Trad

Machine Learning Engineer

Підсумок: навчання з моделлю

 

  • Спираються на знання динаміки середовища
  • Без взаємодії із середовищем

Зображення зі схемами алгоритмів policy iteration і value iteration з попереднього відео.

Reinforcement Learning з Gymnasium у Python

Навчання без моделі

 

  • Не спирається на знання динаміки середовища
  • Аґент взаємодіє із середовищем
  • Навчається політики методом спроб і помилок
  • Краще підходить для реальних застосунків

Зображення робота, що взаємодіє з шаховим середовищем.

Reinforcement Learning з Gymnasium у Python

Методи Монте-Карло

  • Техніки без моделі
  • Оцінюють Q-значення на основі епізодів

Зображення каркаса зібраного епізоду: стани, дії, винагороди та повернення.

Reinforcement Learning з Gymnasium у Python

Методи Монте-Карло

  • Техніки без моделі
  • Оцінюють Q-значення на основі епізодів

Зображення другого кроку оцінювання Q-значень і вигляду Q-таблиці: кількість рядків дорівнює кількості станів, стовпців — кількості дій.

Reinforcement Learning з Gymnasium у Python

Методи Монте-Карло

  • Техніки без моделі
  • Оцінюють Q-значення на основі епізодів

Зображення фінального кроку виведення оптимальної політики, що відображає кожен стан на оптимальну дію.

  • Два підходи: first-visit, every-visit
Reinforcement Learning з Gymnasium у Python

Користувацький grid world

Зображення користувацького grid world з 6 станами: 2 рядки й 3 стовпці, нумерація з верхнього лівого (0) до нижнього правого (5). Аґент у стані 3, гора у стані 4, ціль у стані 5.png

Reinforcement Learning з Gymnasium у Python

Збирання двох епізодів

Зображення першого зібраного епізоду у термінах станів, дій, винагород і повернень.

Зображення другого зібраного епізоду у термінах станів, дій, винагород і повернень.

Reinforcement Learning з Gymnasium у Python

Оцінювання Q-значень

Зображення станів, дій, винагород і повернень, зібраних для двох епізодів.

  • Q-таблиця: таблиця Q-значень

Зображення порожньої Q-таблиці, яку потрібно заповнити.

Reinforcement Learning з Gymnasium у Python

Q(4, left), Q(4, up) і Q(1, down)

Зображення станів, дій, винагород і повернень для двох епізодів; підсвічено (4, left), (4, up) і (1, down).

  • (s,a) трапляється раз → заповнюємо поверненням

Q-таблиця зі значеннями для (4, left), (4, up) і (1, down).

Reinforcement Learning з Gymnasium у Python

Q(4, right)

Зображення станів, дій, винагород і повернень для двох епізодів; (4, right) підсвічено в обох епізодах

  • (s,a) раз на епізод → беремо середнє

Q-таблиця зі значенням (4, right), заповненим середнім повернень з обох епізодів.

Reinforcement Learning з Gymnasium у Python

Q(3, right) — first-visit Monte Carlo

Зображення станів, дій, винагород і повернень для двох епізодів; (3, right) підсвічено лише для першої появи в обох епізодах

  • Усереднюємо перші відвідування (s,a) в епізодах

Q-таблиця зі значенням (3, right), заповненим середнім повернень з підсвічених рядків (перші появи (3, right)).

Reinforcement Learning з Gymnasium у Python

Q(3, right) — every-visit Monte Carlo

Зображення станів, дій, винагород і повернень для двох епізодів; (3, right) підсвічено для кожної появи в обох епізодах

  • Усереднюємо кожне відвідування (s,a) в епізодах

Q-таблиця зі значенням (3, right), заповненим середнім повернень з підсвічених рядків (усі появи (3, right)).

Reinforcement Learning з Gymnasium у Python

Генерування епізоду

def generate_episode():
    episode = []
    state, info = env.reset()

terminated = False while not terminated: action = env.action_space.sample()
next_state, reward, terminated, truncated, info = env.step(action)
episode.append((state, action, reward)) state = next_state
return episode
Reinforcement Learning з Gymnasium у Python

First-visit Monte Carlo

def first_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))

for i in range(num_episodes): episode = generate_episode() visited_states_actions = set()
for j, (state, action, reward) in enumerate(episode):
if (state, action) not in visited_states:
returns_sum[state, action] += sum([x[2] for x in episode[j:]])
returns_count[state, action] += 1 visited_states_actions.add((state, action))
nonzero_counts = returns_count != 0
Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts] return Q
Reinforcement Learning з Gymnasium у Python

Every-visit Monte Carlo

def every_visit_mc(num_episodes):
    Q = np.zeros((num_states, num_actions))
    returns_sum = np.zeros((num_states, num_actions))
    returns_count = np.zeros((num_states, num_actions))    

    for i in range(num_episodes):
        episode = generate_episode()  

        for j, (state, action, reward) in enumerate(episode):

            returns_sum[state, action] += sum([x[2] for x in episode[j:]])
            returns_count[state, action] += 1


    nonzero_counts = returns_count != 0
    Q[nonzero_counts] = returns_sum[nonzero_counts] / returns_count[nonzero_counts]
    return Q
Reinforcement Learning з Gymnasium у Python

Отримання оптимальної політики

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Reinforcement Learning з Gymnasium у Python

Об'єднуємо все разом

Q = first_visit_mc(1000)

policy_first_visit = get_policy()
print("First-visit policy: \n", policy_first_visit)
Q = every_visit_mc(1000)
policy_every_visit = get_policy()
print("Every-visit policy: \n", policy_every_visit)
First-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Every-visit policy:
{0: 2, 1: 2, 2: 1, 
 3: 2, 4: 2, 5: 0}

Зображення оптимальної політики зі стрілками оптимальних дій у кожному стані.

Reinforcement Learning з Gymnasium у Python

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

Reinforcement Learning з Gymnasium у Python

Preparing Video For Download...