Функции наград и потерь в задаче обучения нейросети без учителя

С одной моей предыдущей статьи пришел вопрос в WhatsApp:

У меня есть массив ( 4-мерный список) описания состояний среды, где каждое состояние описывается 3-мерным списком (вектором). Не могу никак понять как должна выглядеть функция потерь в соответствии с вознаграждением для обучения нейронной сети с подкреплением без учителя.

Анатолий

Для обучения нейронной сети с подкреплением без учителя (без использования меток) используется подход, называемый обучение с подкреплением (RL). В RL агент обучается на основе взаимодействия со средой, где он получает награды за свои действия. Ваша функция потерь будет зависеть от типа алгоритма обучения с подкреплением, который вы используете.

Наиболее распространенные методы RL включают в себя Q-learning и Actor-Critic. Для наглядности приведу пример функции потерь для метода Deep Q-Learning (DQN), который является популярным методом обучения с подкреплением.

Предположим, что ваш массив описания состояний среды имеет следующую структуру:

  • states: массив состояний, каждое из которых представляет собой 3-мерный список (вектор)
  • actions: массив действий, которые агент совершил
  • rewards: массив наград, которые агент получил за соответствующие действия
  • next_states: массив следующих состояний после совершения действий
  • dones: массив флагов завершения эпизодов (True, если эпизод завершен)
import tensorflow as tf import numpy as np # Параметры модели и обучения num_actions = 3 # Пример: 3 возможных действия gamma = 0.99 # Коэффициент дисконтирования # Определение модели Q-сети model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(3,)), # Ваше состояние описывается 3-мерным вектором tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(num_actions) # Выходной слой с количеством нейронов, равным количеству действий ]) # Оптимизатор optimizer = tf.keras.optimizers.Adam() # Функция потерь для DQN def dqn_loss(states, actions, rewards, next_states, dones): # Прогноз текущих Q-значений q_values = model(states) q_values = tf.reduce_sum(q_values * tf.one_hot(actions, num_actions), axis=1) # Прогноз Q-значений для следующего состояния next_q_values = model(next_states) max_next_q_values = tf.reduce_max(next_q_values, axis=1) # Вычисление целевых Q-значений target_q_values = rewards + (1 - dones) * gamma * max_next_q_values # Функция потерь: среднеквадратичная ошибка loss = tf.reduce_mean(tf.square(q_values - target_q_values)) return loss # Обучение модели def train_step(states, actions, rewards, next_states, dones): with tf.GradientTape() as tape: loss = dqn_loss(states, actions, rewards, next_states, dones) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) return loss # Пример данных (замените на ваши реальные данные) batch_size = 32 states = np.random.random((batch_size, 3)) # Пример 3-мерных состояний actions = np.random.randint(0, num_actions, size=(batch_size,)) rewards = np.random.random((batch_size,)) next_states = np.random.random((batch_size, 3)) dones = np.random.randint(0, 2, size=(batch_size,)).astype(np.float32) # Обучение модели на одном шаге loss = train_step(states, actions, rewards, next_states, dones) print(f"Loss: {loss.numpy()}")
  • Модель Q-сети: Используется простая нейронная сеть с двумя скрытыми слоями и выходным слоем, размер которого равен количеству возможных действий.
  • Функция потерь (dqn_loss): Вычисляется среднеквадратичная ошибка между текущими Q-значениями и целевыми Q-значениями.
  • Целевые Q-значения: Рассчитываются на основе текущих наград и максимальных Q-значений следующего состояния, дисконтированных с учетом коэффициента гамма.
  • Обучение модели (train_step): Производится обновление весов модели на основе вычисленных градиентов.

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

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

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

33
Начать дискуссию