В этой статье мы обсудим, что такое градиенты политики и как реализовать градиенты политики с помощью tensorflow2.

В алгоритме градиента политики есть три основных момента.

  1. Градиенты политики — это метод градиента политики Монте-Карло, который выполняет обновление после каждого эпизода.
  2. Градиент политики принимает текущее состояние в качестве входных данных и выводит вероятности для всех действий.
  3. Градиент политики использует градиентное восхождение для корректировки весов. Это побудит сеть принять более эффективные меры.

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

Мы делим наш исходный код на две части.

  1. Градиентная сеть политик
  2. Агент градиента политики

Градиентная сеть политик

Градиент политики принимает текущее состояние в качестве входных данных и выводит вероятности для всех действий.

Как упоминалось во втором пункте, наша сеть принимает состояние в качестве входных данных и выводит вероятности действия.

Агент градиента политики

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

альфа — скорость обучения.

В функции Choose_action мы передаем состояние в сеть политик и получаем для него действие.

G = np.zeros_like(rewards)
for t in range(len(rewards)):
    G_sum = 0
    discount = 1
    for k in range(t, len(rewards)):
    G_sum += rewards[k] * discount
    discount *= self.gamma
    G[t] = G_sum

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

with tf.GradientTape() as tape:
     loss = 0
     for idx, (g, state) in enumerate(zip(G, self.state_m)):
          state = tf.convert_to_tensor([state], dtype=tf.float32)
          probs = self.policy(state)
          action_probs = tfp.distributions.Categorical(probs=probs)
          log_prob = action_probs.log_prob(actions[idx])
          loss += -g * tf.squeeze(log_prob)

в приведенном выше коде мы вычисляем вероятности действий, отправляя состояние в сеть.

loss += -g * tf.squeeze(log_prob)

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

Давайте объединим все усилия, чтобы обучить агента среде LunarLander.

Здесь мы используем библиотеку спортзала для создания среды LunarLander.

После импорта необходимых библиотек, сети градиента политики и агента градиента политики мы позволяем агентам изучать среду LunarLander, проходя 2000 эпизодов.

Таким образом, мы можем реализовать градиент политики с помощью Tensorflow2.

Вы можете найти исходный код по следующему URL-адресу Github.



Обратитесь к следующей статье, чтобы понять, как реализовать DQN.



Ссылка: