Глава 11. Основы глубокого обучения с подкреплением
465
Рис.
11.15.
Получение целевых Q-значений (tar
getQs) из воспроизводимой памяти и
целевой DQN. Относящиеся к
воспроизводимой памяти
и
выборке батча части на этом рисунке совпадают с
рис. 11.14
. Его следует изучать вместе с
кодом в
листинге 11.8. Это второй компонент
обучения с
учителем в
алгоритме обучения DQN. tar
getQs играют роль, аналогичную истинным меткам в
задачах обучения с
учителем
в
предыдущих главах (например, известные истинные метки в
примерах MNIST или известные истинные значения температуры в
примере
Jena-
weather). Ключевую роль в
вычислении tar
getQs играет уравнение Беллмана. Вместе с
целевым DQN это уравнение связывает
Q-значения текущего хода и
Q-значения следующего хода, благодаря чему дает возможность вычислить значения tar
getQs
466
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Учтите, что Qзначения следующего шага существуют только в том случае, если
текущий ход не является последним ходом эпизода игры (то есть змейка на нем
не погибает). В противном случае правая сторона уравнения Беллмана включает
только компонент для немедленного вознаграждения, как показано на рис. 11.15, что
соответствует тензору
doneMask
в листинге 11.8. Код в листинге 11.8 представляет
собой фрагмент метода
SnakeGameAgent.trainOnReplayBatch()
из файла
snake-dqn/
agent.js
, в котором опущено несколько мелких нюансов для простоты.
Листинг 11.8.
Извлечение батча целевых («истинных») Q-значений
из воспроизводимой памяти
Как вы могли заметить, хитрость этого алгоритма глубокого Qобучения заклю
чается в использовании двух экземпляров DQN —
динамической
DQN и
целевой
DQN соответственно. Динамическая DQN отвечает за вычисление предсказанных
Qзначений (см. рис. 11.14 в предыдущем подразделе). Также именно с ее помощью
выбирается действие змейки, когда эпсилонжадный алгоритм выбирает жадный
(никакого исследования) подход. Именно отсюда и название «динамическая».
Напротив, целевая DQN используется только для вычисления целевых Qзначений,
как мы только что видели, потому и называется целевой. Вы спросите, зачем две
DQN вместо одной? Чтобы разорвать нежелательные петли обратной связи, могу
щие привести к неустойчивости процесса обучения.
Создает динамическую DQN и целевую DQN одна и та же функция —
crea-
teDeepQNetwork()
(см. листинг 11.5). Они представляют собой две глубокие свер
точные сети с одинаковой топологией. Следовательно, их наборы слоев и весовых
коэффициентов также совпадают. Периодически (каждые 1000 ходов при настрой
ках по умолчанию snakedqn) значения весов копируются из динамической DQN
в целевую. Благодаря этому целевая DQN соответствует текущему состоянию
динамической DQN. Без такой синхронизации целевая DQN быстро устареет по
сравнению с динамической и будет мешать процессу обучения, выдавая плохие
оценки наилучших Qзначений для следующего хода в уравнении Беллмана.
Do'stlaringiz bilan baham: |