Скачать книгу

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

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

      Рассмотрим пример кода для обучения агента на основе алгоритма Deep Q-Networks (DQN) для игры в "Pong" с использованием библиотеки PyTorch и среды Atari:

      ```python

      import gym

      import torch

      import torch.nn as nn

      import torch.optim as optim

      import random

      import numpy as np

      # Определение модели нейронной сети

      class DQN(nn.Module):

      def __init__(self, input_dim, output_dim):

      super(DQN, self).__init__()

      self.fc1 = nn.Linear(input_dim, 128)

      self.fc2 = nn.Linear(128, 64)

      self.fc3 = nn.Linear(64, output_dim)

      def forward(self, x):

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

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

      x = self.fc3(x)

      return x

      # Функция для выбора действия с использованием эпсилон-жадной стратегии

      def select_action(state, epsilon):

      if random.random() < epsilon:

      return env.action_space.sample()

      else:

      with torch.no_grad():

      return np.argmax(model(state).numpy())

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

      epsilon = 1.0

      epsilon_min = 0.01

      epsilon_decay = 0.995

      gamma = 0.99

      lr = 0.001

      batch_size = 64

      memory = []

      memory_capacity = 10000

      target_update = 10

      num_episodes = 1000

      # Инициализация среды и модели

      env = gym.make('Pong-v0')

      input_dim = env.observation_space.shape[0]

      output_dim = env.action_space.n

      model = DQN(input_dim, output_dim)

      target_model = DQN(input_dim, output_dim)

      target_model.load_state_dict(model.state_dict())

      target_model.eval()

      optimizer = optim.Adam(model.parameters(), lr=lr)

      criterion = nn.MSELoss()

      # Обучение

      for episode in range(num_episodes):

      state = env.reset()

      total_reward = 0

      done = False

      while not done:

      action = select_action(torch.tensor(state).float(), epsilon)

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

      memory.append((state, action, reward, next_state, done))

      state = next_state

      total_reward += reward

      if len(memory) >= batch_size:

      batch = random.sample(memory, batch_size)

      states, actions, rewards, next_states, dones = zip(*batch)

      states = torch.tensor(states).float()

      actions = torch.tensor(actions)

      rewards = torch.tensor(rewards).float()

      next_states = torch.tensor(next_states).float()

      dones = torch.tensor(dones)

      Q_targets = rewards + gamma * torch.max(target_model(next_states), dim=1)[0] * (1 – dones)

      Q_preds = model(states).gather(1, actions.unsqueeze(1))

      loss = criterion(Q_preds, Q_targets.unsqueeze(1))

      optimizer.zero_grad()

      loss.backward()

      optimizer.step()

      if epsilon > epsilon_min:

      epsilon *= epsilon_decay

      if episode % target_update == 0:

      target_model.load_state_dict(model.state_dict())

      print(f"Episode {episode}, Total Reward: {total_reward}")

      # Сохранение обученной модели

      torch.save(model.state_dict(), 'pong_dqn_model.pth')

      ```

      Представленный код решает задачу обучения агента в среде Atari "Pong" с использованием алгоритма Deep Q-Networks (DQN) и библиотеки PyTorch. В этой задаче агент должен научиться играть в пинг-понг с оптимальной стратегией, минимизируя количество пропущенных мячей и максимизируя количество выигранных очков. Для этого агенту необходимо выбирать оптимальные действия в зависимости от текущего состояния среды.

      Основная идея алгоритма DQN заключается в использовании глубокой нейронной сети для аппроксимации функции Q, которая оценивает значение каждого действия в данном

Скачать книгу