Дэвид Рид "Нейросети. Основы"

Глубокое погружение в мир нейросетей начинается здесь. От основных концепций до практических проектов, эта книга исследует все аспекты создания и использования нейронных сетей. Вы узнаете, как работают различные типы сетей, научитесь применять их для решения реальных задач и овладеете методами оптимизации и тестирования моделей. Незаменимый ресурс для всех, кто стремится освоить и применить мощь искусственного интеллекта в своих проектах.

date_range Год издания :

foundation Издательство :Автор

person Автор :

workspaces ISBN :

child_care Возрастное ограничение : 12

update Дата обновления : 17.07.2024

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. Основной цикл обучения:

– В каждом эпизоде агент взаимодействует с окружением, выполняя действия и записывая последовательность состояний, действий и наград.

– После завершения эпизода вычисляется общий возврат `G` путем обратного прохода по эпизоду и обновляется Q-таблица для уникальных пар «состояние-действие».

5. Тестирование агента:

– После завершения обучения агент тестируется в окружении, используя политику, основанную на максимальных Q-значениях.

– Выводится статистика побед, ничьих и поражений.

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

Deep Q-Learning

Deep Q-Learning – это расширение Q-обучения, которое использует глубокие нейронные сети для представления и обновления Q-значений. Это позволяет агентам принимать более сложные и информированные решения в средах с высоким уровнем сложности и большим количеством состояний и действий. В традиционном Q-обучении Q-таблица используется для хранения значений всех возможных пар «состояние-действие», что становится неосуществимым в задачах с большой размерностью. Deep Q-Learning решает эту проблему, используя нейронные сети для аппроксимации функции Q. Агент обучается обновлять параметры нейронной сети, минимизируя разницу между предсказанными и реальными Q-значениями, что делает возможным обучение на больших наборах данных и в сложных средах. Один из ключевых компонентов Deep Q-Learning – это опытный буфер (experience replay), который позволяет агенту запоминать и повторно использовать предыдущие опыты для обучения, что повышает стабильность и эффективность процесса обучения.

Обучение с подкреплением применяется в робототехнике, играх, управлении ресурсами и других задачах, где требуется разработка стратегий и принятие решений в динамических и неопределённых средах.

Описание задачи

Рассмотрим задачу "CartPole" из OpenAI Gym. В этой задаче агент управляет тележкой, на которой закреплен вертикально стоящий столб. Цель агента – балансировать столб, не позволяя ему упасть, двигая тележку влево или вправо.

Описание среды "CartPole"

Состояния:

– Положение тележки (отрицательное значение – тележка слева от центра, положительное – справа).

– Скорость тележки.

– Угол отклонения столба от вертикального положения.

– Угловая скорость столба.

Действия:

– Двигать тележку влево.

– Двигать тележку вправо.

Награды:

– Агент получает награду +1 за каждый шаг, пока столб остается вертикально.

Конечное состояние:

– Эпизод заканчивается, если столб отклоняется слишком сильно от вертикального положения или тележка выходит за пределы поля.

Пример кода для Deep Q-Learning

Для реализации DQN мы будем использовать библиотеку PyTorch для создания и обучения нейронной сети.

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

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

```bash

pip install gym torch

```

Пример кода

```python

import gym

import torch

import torch.nn as nn

import torch.optim as optim

import numpy as np

from collections import deque, namedtuple

import random

# Определение архитектуры нейронной сети

class DQN(nn.Module):

def __init__(self, state_size, action_size):

super(DQN, self).__init__()

self.fc1 = nn.Linear(state_size, 24)

self.fc2 = nn.Linear(24, 24)

self.fc3 = nn.Linear(24, action_size)

def forward(self, x):

x = torch.relu(self.fc1(x))

x = torch.relu(self.fc2(x))

return self.fc3(x)

# Параметры обучения

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

state_size = env.observation_space.shape[0]

action_size = env.action_space.n

batch_size = 64

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

epsilon = 1.0 # Вероятность случайного действия

epsilon_min = 0.01

epsilon_decay = 0.995

learning_rate = 0.001

target_update = 10 # Как часто обновлять целевую сеть

memory_size = 10000

num_episodes = 1000

Все книги на сайте предоставены для ознакомления и защищены авторским правом