Введение
Вы когда-нибудь слышали историю об искусственном интеллекте, который сам научился играть в видеоигры? Нет, это не какая-то надуманная сказка, мой друг. Это история о глубоком обучении с подкреплением (DRL).
Что такое ДРЛ?
DRL — это захватывающая область ИИ, которая произвела фурор в игровом мире, позволяя искусственным агентам научиться играть в игры самостоятельно. Но потенциальное применение DRL выходит далеко за рамки игр. Его можно использовать в различных областях, таких как робототехника, автономное вождение и финансовый трейдинг.
Чем ДХО отличается от традиционного RL?
Основное отличие заключается в использовании глубоких нейронных сетей. В традиционном RL агент должен полагаться на созданные вручную функции для представления состояния среды. Но с DRL агент может изучить эти представления самостоятельно, используя глубокие нейронные сети.
Нейронные сети — это модели машинного обучения, вдохновленные структурой и функциями человеческого мозга. Они состоят из нескольких взаимосвязанных узлов или «нейронов», которые выполняют вычисления над входными данными для получения прогноза или вывода. В обучении с подкреплением нейронная сеть может использоваться для моделирования политики или сопоставления состояний с действиями.
Вот пример использования нейронной сети для обучения политике в задаче обучения с подкреплением:
import numpy as np import tensorflow as tf from tensorflow.keras.layers import Dense # Define the state and action spaces state_space = 4 action_space = 2 # Define the policy network model = tf.keras.Sequential([ Dense(16, input_dim=state_space, activation="relu"), Dense(16, activation="relu"), Dense(action_space, activation="softmax") ]) # Compile the model with a cross-entropy loss function model.compile(loss="categorical_crossentropy", optimizer="adam")
В этом примере сеть политик принимает в качестве входных данных состояние, представленное 4 значениями, и выводит распределение вероятностей по 2 действиям. Сеть состоит из двух скрытых слоев по 16 нейронов в каждом, использующих функцию активации ReLU, и конечного выходного слоя с функцией активации softmax для получения распределения вероятностей. Модель компилируется с использованием категориальной функции кросс-энтропийных потерь, которая измеряет разницу между прогнозируемым распределением вероятностей и фактическим распределением, и оптимизатора Адама, который корректирует веса сети во время обучения, чтобы минимизировать потери.
Пример кода
Вот простой пример кода, иллюстрирующий разницу между традиционным RL и DRL.
# Let's start with the traditional RL approach. We will use # the CartPole environment from the OpenAI gym library. # This environment is a classic control task in which an agent # must balance a pole on a moving cart. The state of the environment # is defined by the cart's position and velocity, and the angle and # velocity of the pole. The agent must choose between two actions: # pushing the cart to the left or to the right. # Traditional RL import gym import numpy as np # Load the CartPole environment env = gym.make("CartPole-v1") # Reset the environment to its initial state state = env.reset() # Define the number of actions and states num_actions = env.action_space.n num_states = env.observation_space.shape[0] # Define the policy def policy(state, num_actions): # Choose an action randomly action = np.random.choice(num_actions) return action # Play one episode done = False while not done: # Use the policy to choose an action action = policy(state, num_actions) # Take a step in the environment state, reward, done, _ = env.step(action)
В этом примере определяется простая политика, которая выбирает действие случайным образом. Агент делает шаг в среде, вызывая функцию «шаг» с выбранным действием. Функция возвращает новое состояние, сигнал вознаграждения и флаг, указывающий, закончился ли эпизод.
# Deep Reinforcement Learning import tensorflow as tf import numpy as np # Load the CartPole environment env = gym.make("CartPole-v1") # Reset the environment to its initial state state = env.reset() # Define the number of actions and states num_actions = env.action_space.n num_states = env.observation_space.shape[0] # Define the policy network model = tf.keras.models.Sequential([ # First dense layer with 32 units and ReLU activation tf.keras.layers.Dense(32, input_shape=(num_states,), activation="relu"), # Output layer with softmax activation tf.keras.layers.Dense(num_actions, activation="softmax")]) #Compile the model with a cross-entropy loss function model.compile(loss="categorical_crossentropy", optimizer="adam") # Play an Episode done = False while not done: # Use the policy network to choose an action probs = model.predict(np.expand_dims(state, axis=0))[0] action = np.random.choice(num_actions, p=probs) # Take a step in the environment next_state, reward, done, _ = env.step(action) # Store the transition in memory memory.append((state, action, reward, next_state, done)) # Update the state state = next_state
Обучите модель DRL
Обучение модели DRL включает в себя обновление сети политик на основе наблюдаемых переходов. Этот процесс известен как алгоритм «действующий-критик», где политическая сеть называется действующим лицом, а отдельная сеть создания ценности именуется критиком.
# Train the DRL model for i in range(num_episodes): # Reset the environment to its initial state state = env.reset() # Play one episode done = False while not done: # Use the policy network to choose an action probs = model.predict(np.expand_dims(state, axis=0))[0] action = np.random.choice(num_actions, p=probs) # Take a step in the environment next_state, reward, done, _ = env.step(action) # Store the transition in memory memory.append((state, action, reward, next_state, done)) # Update the state state = next_state # Update the policy network # ...
Заключение
И вот оно, народ! Основы глубокого обучения с подкреплением. Я надеюсь, что это путешествие по глубоким водам DRL было и познавательным, и интересным. Помните, что с большой силой приходит большая ответственность, поэтому используйте свои новые знания с умом! Удачного кодирования!