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

Чтение книги онлайн.

Читать онлайн книгу Нейросети. Основы - Дэвид Рид страница 15

Автор:
Жанр:
Серия:
Издательство:
Нейросети. Основы - Дэвид Рид

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

= torch.tensor(tuple(map(lambda s: s is not None, batch.next_state)), dtype=torch.bool)

      non_final_next_states = torch.tensor([s for s in batch.next_state if s is not None], dtype=torch.float32)

      state_action_values = policy_net(state_batch).gather(1, action_batch)

      next_state_values = torch.zeros(batch_size)

      next_state_values[non_final_mask] = target_net(non_final_next_states).max(1)[0].detach()

      expected_state_action_values = reward_batch + (gamma * next_state_values)

      loss = nn.functional.mse_loss(state_action_values.squeeze(), expected_state_action_values)

      optimizer.zero_grad()

      loss.backward()

      optimizer.step()

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

      for episode in range(num_episodes):

      state = env.reset()

      total_reward = 0

      done = False

      while not done:

      action = select_action(state, epsilon)

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

      total_reward += reward

      if done:

      next_state = None

      store_transition(state, action, next_state, reward)

      state = next_state

      optimize_model()

      if epsilon > epsilon_min:

      epsilon *= epsilon_decay

      if episode % target_update == 0:

      target_net.load_state_dict(policy_net.state_dict())

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

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

      state = env.reset()

      done = False

      total_reward = 0

      while not done:

      action = select_action(state, epsilon=0.0) # Без ε-жадной стратегии

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

      total_reward += reward

      env.render()

      print(f"Total reward after training: {total_reward}")

      env.close()

      ```

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

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

      – Сеть состоит из трех полносвязных слоев. Входной слой принимает состояние среды, а выходной слой предсказывает Q-значения для каждого возможного действия.

      2. Параметры обучения:

      – Определены параметры обучения, такие как размер пакета, коэффициент дисконтирования, начальная вероятность случайного действия, скорость обучения и количество эпизодов.

      3. Память для опыта:

      – Используется `deque` для хранения недавних переходов, что позволяет повторно использовать их в процессе обучения.

      4. Инициализация сети и оптимизатора:

      – Инициализируются две сети: `policy_net` для предсказания Q-значений и `target_net` для стабильного обучения.

      – `target_net` копирует веса из `policy_net` каждые несколько эпизодов.

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

      – Выбирается действие на основе ε-жадной стратегии.

      6. Функция для обновления памяти:

      – Сохраняются переходы (состояние, действие, следующее состояние, вознаграждение) в памяти.

      7. Функция для обучения сети:

      – Проводится выборка случайного мини-пакета переходов из памяти.

      – Вычисляются текущие Q-значения и целевые Q-значения.

      – Обновляются параметры сети путем минимизации ошибки MSE.

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

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

      – Периодически обновляются веса целевой сети.

      – Постепенно уменьшается вероятность случайного действия.

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

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

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