Введение

Вы когда-нибудь слышали историю об искусственном интеллекте, который сам научился играть в видеоигры? Нет, это не какая-то надуманная сказка, мой друг. Это история о глубоком обучении с подкреплением (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 было и познавательным, и интересным. Помните, что с большой силой приходит большая ответственность, поэтому используйте свои новые знания с умом! Удачного кодирования!