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

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

Fouad Trad

Machine Learning Engineer

Повторение: обучение на основе модели

 

  • Опираются на знание динамики среды
  • Нет взаимодействия со средой

Изображение с диаграммами алгоритмов итерации политики и итерации ценности, рассмотренных в предыдущем видео.

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

Обучение без модели

 

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

Изображение робота, взаимодействующего с шахматной средой.

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

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

  • Техники без модели
  • Оценка Q-значений на основе эпизодов

Изображение структуры собранного эпизода, включающей состояния, действия, вознаграждения и отдачи.

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

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

  • Техники без модели
  • Оценка Q-значений на основе эпизодов

Изображение второго шага оценки Q-значений и вид Q-таблицы: строки соответствуют состояниям, столбцы — действиям.

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

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

  • Техники без модели
  • Оценка Q-значений на основе эпизодов

Изображение финального шага получения оптимальной политики, сопоставляющей каждое состояние с оптимальным действием.

  • Два метода: первое посещение, каждое посещение
Обучение с подкреплением с Gymnasium на Python

Пользовательский grid world

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

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

Сбор двух эпизодов

Изображение первого собранного эпизода: состояния, действия, вознаграждения и отдачи.

Изображение второго собранного эпизода: состояния, действия, вознаграждения и отдачи.

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

Оценка Q-значений

Изображение состояний, действий, вознаграждений и отдач, собранных в двух эпизодах.

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

Изображение пустой Q-таблицы, которую нужно заполнить.

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

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

Q(4, right)

Изображение состояний, действий, вознаграждений и отдач двух эпизодов с выделенной парой (4, right) в обоих эпизодах.

  • (s,a) встречается по одному разу в каждом эпизоде -> среднее

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

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

Q(3, right) — Монте-Карло с первым посещением

Изображение состояний, действий, вознаграждений и отдач двух эпизодов с выделенным только первым вхождением (3, right) в каждом эпизоде.

  • Среднее первого посещения (s,a) в каждом эпизоде

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

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

Q(3, right) — Монте-Карло с каждым посещением

Изображение состояний, действий, вознаграждений и отдач двух эпизодов с выделенным каждым вхождением (3, right).

  • Среднее каждого посещения (s,a) в эпизодах

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

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

Монте-Карло с первым посещением

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

Монте-Карло с каждым посещением

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

Получение оптимальной политики

def get_policy():
    policy = {state: np.argmax(Q[state]) for state in range(num_states)}    
    return policy
Обучение с подкреплением с 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}

Изображение оптимальной политики: стрелки показывают оптимальное действие в каждом состоянии.

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

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

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

Preparing Video For Download...