Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Извлечение предсказанных Q-значений
Хотя мы пытаемся решить задачу RL с помощью нового подхода, но все равно
хотели бы свести наш алгоритм к обучению с учителем, чтобы воспользоваться
привычным методом обратного распространения ошибки для обновления весовых
коэффициентов DQN. Для подобной постановки задачи нужны три вещи.
z
z
Предсказанные Qзначения.
z
z
«Истинные» Qзначения. Обратите внимание, что слово «истинные» взято
в кавычки, поскольку на самом деле не существует способа получить эталонные
Qзначения, так что эти значения — просто наилучшие из доступных нам на кон
кретном этапе алгоритма обучения оценок
Q
(
s,
a
). Поэтому мы будем называть
их вместо этого целевыми Qзначениями.
z
z
Функция потерь, возвращающая по предсказанному и целевому Qзначениям
число, количественно выражающее расхождение между ними.
В этом подразделе мы обсудим извлечение предсказанных Qзначений из воспро
изводимой памяти. В последующих двух подразделах мы поговорим, соответствен
но, о том, как получить целевые Qзначения и функцию потерь. А когда у нас будут
все три эти составляющие, задача RL змейки превратится, по существу, в простую
задачу обратного распространения ошибки.
На рис. 11.14 показано, как предсказанные Qзначения извлекаются из воспро
изводимой памяти на одном из шагов обучения DQN. Эту схему следует изучать
совместно с реализующим ее кодом в листинге 11.7, чтобы проще было в них разо
браться.
В частности, мы выбираем случайным образом
batchSize
(
N = 128
по умолча
нию) записей из воспроизводимой памяти. Как уже описывалось ранее, каждая
запись состоит из пяти элементов. Для получения предсказанных Qзначений нам
нужны только первые два. Эти первые элементы, состоящие из
N
наблюдений со
стояния, преобразуются вместе в тензор. Динамический DQN обрабатывает этот
тензор батча наблюдений и возвращает предсказанные Qзначения (
qs
на схеме
и в коде). Однако
qs
включает Qзначения не только фактически выбранных дей
ствий, но и невыбранных. В нашем обучении мы хотим игнорировать Qзначения
для невыбранных действий, поскольку не существует способа узнать их целевые
Qзначения. Именно здесь нам пригодится второй элемент воспроизводимой
памяти.
Этот второй элемент содержит фактически выбранные действия в тензорном
представлении (
actionTensor
на схеме и в коде). Далее
actionTensor
используется
для выбора нужных нам элементов
qs
. Этот шаг, показанный на рисунке в прямо
угольнике «Выбор фактических действий», реализуется с помощью трех функций
TensorFlow.js:
tf.oneHot()
,
mul()
и
sum()
(см. последнюю строку листинга 11.17).
Его нельзя свести к простым срезам тензора, поскольку различные действия могут
выбираться на различных ходах игры. Код в листинге 11.7 представляет собой фраг
мент метода
SnakeGameAgent.trainOnReplayBatch()
из файла
snake-dqn/agent.js
,
в котором опущено несколько мелких нюансов для простоты.
Do'stlaringiz bilan baham: |