banner banner banner
Нейросети. Основы
Нейросети. Основы
Оценить:
Рейтинг: 0

Полная версия:

Нейросети. Основы

скачать книгу бесплатно


– Выводится общее вознаграждение, полученное агентом.

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

Случайные блуждания (Методы Монте-Карло)

Методы Монте-Карло (Monte Carlo methods) представляют собой класс алгоритмов, которые используют случайные блуждания для оценки стратегий на основе долгосрочных наград. В отличие от Q-обучения, методы Монте-Карло не требуют знания модели среды. Вместо этого, они основываются на многократных симуляциях взаимодействия агента со средой, в ходе которых вычисляются средние значения наград. Каждая симуляция представляет собой эпизод, включающий последовательность состояний, действий и полученных вознаграждений до достижения конечного состояния. После завершения эпизода метод Монте-Карло обновляет оценки значений состояний или действий, используя накопленные награды. Это позволяет агенту улучшать свою политику, опираясь на накопленный опыт.

Рассмотрим пример использования методов Монте-Карло для обучения агента в задаче "Blackjack" из OpenAI Gym. В этой задаче агент учится играть в блэкджек, используя эпизодическую оценку долгосрочных наград.

Описание задачи и игры "Blackjack"

"Blackjack" (или "21") – это популярная карточная игра, в которой игрок соревнуется против дилера. Цель игры – набрать количество очков, как можно ближе к 21, но не больше этого числа. В OpenAI Gym среда "Blackjack-v1" симулирует эту игру и предоставляет интерфейс для обучения агентов.

Правила игры

1. Карты и их значения:

– Номера карт от 2 до 10 имеют номинальную стоимость.

– Валет, Дама и Король (карты с картинками) имеют стоимость 10 очков.

– Туз может считаться как 1 очко или как 11 очков, в зависимости от того, что лучше для руки.

2. Начало игры:

– И игрок, и дилер получают по две карты.

– Одна из карт дилера открыта, а другая скрыта.

3. Действия игрока:

– Hit: Игрок берет еще одну карту.

– Stand: Игрок прекращает набор карт и передает ход дилеру.

4. Ход дилера:

– Дилер открывает свою скрытую карту.

– Дилер должен продолжать брать карты (hit), пока сумма его очков не станет 17 или больше.

5. Определение победителя:

– Если сумма очков игрока превышает 21, он проигрывает (bust).

– Если игрок и дилер остаются в игре (не превышают 21), выигрывает тот, у кого сумма очков ближе к 21.

– Если у дилера сумма очков превышает 21, дилер проигрывает (bust).

– Если сумма очков у игрока и дилера одинакова, игра заканчивается вничью (push).

Задача агента – научиться принимать оптимальные решения (hit или stand) в различных состояниях игры, чтобы максимизировать свое общее вознаграждение (выигрыши).

Установка необходимых библиотек

Для начала нужно установить OpenAI Gym, если он еще не установлен:

```bash

pip install gym

```

Пример кода

```python

import numpy as np

import gym

from collections import defaultdict

# Создаем окружение "Blackjack-v1"

env = gym.make('Blackjack-v1')

# Параметры Монте-Карло

num_episodes = 500000

gamma = 1.0 # Коэффициент дисконтирования

# Функция для выбора действия на основе ?-жадной стратегии

def epsilon_greedy_policy(state, Q, epsilon=0.1):

if np.random.rand() < epsilon:

return env.action_space.sample()

else:

return np.argmax(Q[state])

# Инициализация Q-таблицы и возвратов

Q = defaultdict(lambda: np.zeros(env.action_space.n))

returns_sum = defaultdict(float)

returns_count = defaultdict(float)

# Основной цикл обучения

for episode in range(num_episodes):

state = env.reset()

episode = []

done = False

while not done:

action = epsilon_greedy_policy(state, Q)

next_state, reward, done, _ = env.step(action)

episode.append((state, action, reward))

state = next_state

# Обновление Q-таблицы на основе эпизодических возвратов

G = 0

for state, action, reward in reversed(episode):

G = gamma * G + reward

if not any((s == state and a == action) for s, a, _ in episode[:-1]):

returns_sum[(state, action)] += G

returns_count[(state, action)] += 1

Q[state][action] = returns_sum[(state, action)] / returns_count[(state, action)]

# Тестирование агента после обучения

def test_policy(Q, num_episodes=10000):

wins = 0

draws = 0

losses = 0

for _ in range(num_episodes):

state = env.reset()

done = False

while not done:

action = np.argmax(Q[state])

state, reward, done, _ = env.step(action)

if reward > 0:

wins += 1

elif reward == 0:

draws += 1

else:

losses += 1

print(f"Wins: {wins / num_episodes:.2f}, Draws: {draws / num_episodes:.2f}, Losses: {losses / num_episodes:.2f}")

test_policy(Q)

```

Объяснение кода

1. Инициализация окружения и параметров:

– Создаем окружение `Blackjack-v1` из OpenAI Gym.

– Устанавливаем количество эпизодов для обучения и коэффициент дисконтирования `gamma`.

2. Функция для выбора действия:

– Используем ?-жадную стратегию для выбора действия. С вероятностью `epsilon` выбирается случайное действие, иначе выбирается действие с максимальным Q-значением для текущего состояния.

3. Инициализация Q-таблицы и возвратов:

– Q-таблица инициализируется нулями с использованием `defaultdict`.

– `returns_sum` и `returns_count` используются для хранения сумм и счетчиков возвратов для каждой пары «состояние-действие».

4. Основной цикл обучения: