Введение в глубокое Q-обучение

Глубокое обучение с подкреплением на Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Что такое глубокое Q-обучение?

 

 

Изображение, представляющее Q(состояние, действие): состояние — Земля, действие — джойстик

Глубокое обучение с подкреплением на Python

Повторение: Q-обучение

 

Функция ценности действия Q_pi(s,a): сумма будущих вознаграждений при выборе действия a в состоянии s при условии следования политике pi. Q_pi(s,a) = математическое ожидание по будущим траекториям при политике pi от R_tau при s_t=s и a_t=a

 

 

  • Знание $Q$ позволяет построить оптимальную политику: $$ \pi(s_t) = {\arg\max}_a Q(s_t, a) $$

  • Цель Q-обучения: научиться вычислять $Q$

Глубокое обучение с подкреплением на Python

Повторение: Q-обучение

Уравнение Беллмана (в Q-обучении) в детерминированной среде: Q_pi(s_t, a_t) = вознаграждение r_t+1 + коэффициент дисконтирования gamma * максимум по a_t+1 от Q_pi(s_t+1, a_t+1))

Цель на основе временно́й разности (TD-target, Q-target): правая часть уравнения Беллмана, используемая как целевое значение в правиле обновления Q-обучения. r_t+1 + gamma * максимум по a_t+1 от Q_pi(s_t+1, a_t+1))

  • Уравнение Беллмана: рекурсивная формула для $Q$
  • Правая часть уравнения Беллмана: «TD-target»
  • TD-target из уравнения Беллмана используется для обновления $\hat{Q}$ на каждом шаге

Правило обновления Q-обучения: Q_new = (1-alpha) Q_old + alpha * TD-target

Глубокое обучение с подкреплением на Python

Q-сеть

Q-таблица с 4 состояниями и 4 действиями — 16 ячеек для заполнения

Глубокое обучение с подкреплением на Python

Q-сеть

Q-таблица с 9 состояниями и 4 действиями — 36 ячеек для заполнения

Глубокое обучение с подкреплением на Python

Q-сеть

Q-таблица с десятками состояний и 4 действиями — около 100 ячеек для заполнения

Глубокое обучение с подкреплением на Python

Q-сеть

  • В основе глубокого Q-обучения лежит нейронная сеть

Иллюстрация полносвязной нейронной сети с двумя скрытыми слоями

Глубокое обучение с подкреплением на Python

Q-сеть

  • В основе глубокого Q-обучения лежит нейронная сеть

Иллюстрация полносвязной нейронной сети с двумя скрытыми слоями; изображение Земли с предыдущего слайда подаётся на входной слой

Глубокое обучение с подкреплением на Python

Q-сеть

  • В основе глубокого Q-обучения лежит нейронная сеть, отображающая состояния в Q-значения

Иллюстрация с предыдущего слайда: каждый узел выходного слоя соответствует действию — направлению на джойстике. Вверх — действие 0, вправо — 1, вниз — 2, влево — 3.

  • Сеть, аппроксимирующая функцию ценности действия, называется «Q-сетью»
  • Q-сети широко применяются в алгоритмах глубокого Q-обучения, например в DQN.
Глубокое обучение с подкреплением на Python

Реализация Q-сети

class QNetwork(nn.Module):

def __init__(self, state_size, action_size): super(QNetwork, self).__init__()
self.fc1 = nn.Linear(state_size, 64) self.fc2 = nn.Linear(64, 64) self.fc3 = nn.Linear(64, action_size)
def forward(self, state): x = torch.relu(self.fc1(torch.tensor(state))) x = torch.relu(self.fc2(x)) return self.fc3(x)
q_network = QNetwork(8, 4)
optimizer = optim.Adam(q_network.parameters(), lr=0.0001)
  • Размерность входа определяется состоянием
  • Размерность выхода определяется числом возможных действий

  • В данном примере:

    • 2 скрытых слоя по 64 нейрона
    • Функция активации ReLU
Глубокое обучение с подкреплением на Python

Давайте потренируемся!

Глубокое обучение с подкреплением на Python

Preparing Video For Download...