Искусственный интеллект. Машинное обучение. Джейд Картер

Читать онлайн.
Название Искусственный интеллект. Машинное обучение
Автор произведения Джейд Картер
Жанр
Серия
Издательство
Год выпуска 2024
isbn



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

состоящий из состояний, действий, наград и следующих состояний. Этот опыт используется для обновления параметров нейронной сети так, чтобы минимизировать ошибку между предсказанными и фактическими значениями функции 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, которая оценивает значение каждого действия в данном