Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Основная идея обучения глубокой Q-сети
Мы будем обучать нашу DQN, заставляя ее соответствовать уравнению Беллмана.
В случае удачи DQN будет отражать как немедленные вознаграждения, так и опти
мальные дисконтированные будущие вознаграждения.
Как это реализовать? Нам понадобится множество примеров пар «входной — вы
ходной сигнал», где роль входного сигнала играет состояние и фактически выпол
ненное действие, а роль выходного сигнала — «правильное» (целевое) значение Q.
Для вычисления примеров входных сигналов необходимо текущее состояние
s
i
и предпринимаемое на этом состоянии действие,
a
j
, которые оба доступны в истории
игры. Для вычисления целевого значения Q необходима информация о немедленном
вознаграждении
r
i
и следующем состоянии
s
i
+1
, также доступная в истории игры.
Можно использовать для вычисления целевого Qзначения
r
i
и
s
i
+1
путем примене
ния уравнения Беллмана, подробности чего мы вскоре опишем. Далее можно вычис
лить разницу предсказанного DQN Qзначения и целевого Qзначения из уравнения
Беллмана и использовать это значение в качестве функции потерь. Мы будем
минимизировать потери (в смысле метода наименьших квадратов) с помощью
обычного обратного распространения ошибки и градиентного спуска. Внутренние
механизмы, благодаря которым это возможно и работает эффективно, довольно
сложны, но основная идея проста. Нам требуется оценка значения функции Q для
принятия хороших решений. Мы знаем, что наша оценка Q должна соответствовать
вознаграждениям среды и уравнению Беллмана, так что воспользуемся градиентным
спуском. Все просто!
Воспроизводимая память: скользящий набор данных
для обучения DQN
Наша DQN представляет собой привычную нам сверточную сеть, реализованную
в виде экземпляра
tf.LayersModel
в TensorFlow.js. Первое, что приходит на ум
в смысле того, как ее обучить: вызвать ее метод
fit()
или метод
fitDataset()
.
Однако тут использовать этот обычный подход мы не можем, поскольку у нас нет
маркированного набора данных с наблюдаемыми состояниями и соответствующими
Qзначениями. Пока DQN не обучена, никак нельзя узнать Qзначения. Если бы
у нас был метод, возвращающий истинные Qзначения, можно было бы восполь
зоваться им в марковском процессе принятия решений и все. Таким образом, если
ограничиться традиционным подходом обучения с учителем, мы столкнемся с про
блемой курицы/яйца: без обученной DQN нельзя оценить Qзначения; без хорошей
оценки Qзначений нельзя обучить DQN. Алгоритм RL, с которым мы собираемся
вас сейчас познакомить, как раз и поможет нам решить эту проблему.
Если конкретнее, при нашем методе агент будет играть в игру случайным обра
зом (по крайней мере сначала) и запоминать происходящее на каждом ходе игры.
Реализовать игру случайным образом легко с помощью генератора случайных чисел.
А запоминание — с помощью структуры данных под названием
«воспроизводимая
память»
(replay memory). На рис. 11.13 показано, как она работает. На каждом шаге
игры в ней сохраняется пять элементов.
Do'stlaringiz bilan baham: |