Глава 11. Основы глубокого обучения с подкреплением
459
1.
s
i
— наблюдение текущего состояния на шаге
i
(позиция на доске).
2.
a
i
— выполняемое на текущем шаге действие (выбираемое либо DQN, как по
казано на рис. 11.12, или путем случайной выборки).
3.
r
i
— получаемое на этом шаге немедленное вознаграждение.
4.
d
i
— булев флаг, указывающий, завершается ли игра сразу после текущего шага.
Из него видно, что воспроизводимая память служит не только для отдельного
эпизода игры, а объединяет результаты множества игровых эпизодов. По завер
шении предыдущей игры алгоритм обучения просто начинает новую и продол
жает добавлять новые записи в воспроизводимую память.
5.
s
i
+1
— наблюдение со следующего шага, если
d
i
равен
false
(если
d
i
равен
true
,
в качестве «заполнителя» сохраняется пустое значение).
Рис. 11.13.
Использование воспроизводимой памяти во время обучения DQN. На каждом шаге
в конец воспроизводимой памяти добавляется пять элементов данных, выбираемых во время
обучения DQN
460
Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
Эти элементы данных служат входными для обучения DQN на основе обратно
го распространения ошибки. Воспроизводимую память можно считать набором
данных для обучения DQN. Однако она отличается от наборов данных в обуче
нии с учителем тем, что обновляется по ходу обучения. Длина воспроизводимой
памяти — фиксированная,
M
(по умолчанию в нашем примере кода
M
= 10 000).
При вставке в ее конец записи (
s
i
,
a
i
,
r
i
,
d
i
,
s
i
+1
) после следующего хода игры из ее на
чала удаляется старая запись, в результате чего сохраняется фиксированная длина
воспроизводимой памяти. Таким образом, воспроизводимая память гарантированно
содержит информацию о произошедшем на последних
M
шагах обучения, помимо
того, что помогает решить проблемы нехватки памяти. Полезно всегда обучать DQN
на последних записях игры. Почему? А потому, что, когда DQN уже немного обу
чилась и начала «понимать, что к чему» в игре, обучать ее на старых записях игры,
например, с начала обучения нежелательно, ведь они могут включать «наивные»
ходы, более не уместные или не благоприятствующие дальнейшему обучению сети.
Реализующий воспроизводимую память код очень прост, его можно найти
в файле
snake-dqn/replay_memory.js
. Мы не станем описывать его подробно, за ис
ключением двух общедоступных методов,
append()
и
sample()
.
z
z
С помощью метода
append()
можно вставить новую запись в конец воспроизво
димой памяти.
z
z
Вызов
sample(batchSize)
выбирает случайным образом
batchSize
записей из вос
производимой памяти. Выборка этих записей производится совершенно равно
мерно и включает в общем случае записи из нескольких различных эпизодов.
Мы будем использовать метод
sample()
для извлечения обучающих батчей во
время вычисления функции потерь и последующего обратного распространения
ошибки, как мы вскоре увидим.
Эпсилон-жадный алгоритм: компромисс между исследованием
и использованием
Агенту, пробующему различные случайные ходы, рано или поздно повезет, и он
наткнется на удачные (съест фруктдругой в игре «Змейка»), что может принести
пользу в качестве начального толчка в процессе обучения. На самом деле этот спо
соб — единственный, ведь агенту неизвестны правила игры. Но если агент и дальше
будет вести себя случайным образом, то долго такой процесс обучения не продлится,
ведь выбираемые случайно варианты приводят к игровой гибели, а также потому,
что достичь определенных продвинутых состояний можно только посредством целой
череды удачных ходов.
Это само воплощение дилеммы «исследовать или использовать» применитель
но к игре «Змейка». Мы уже сталкивались с этой дилеммой в примере с тележкой
и шестом, где она решалась с помощью метода градиентного спуска по стратегиям,
благодаря постепенному росту детерминизма полиномиальной выборки в ходе об
учения. В игре «Змейка» такой возможности у нас нет, поскольку действия выби
раются на основе не
tf.multinomial()
, а исходя из максимального Qзначения для
всех возможных действий. Поэтому мы решим эту проблему путем параметризации
степени случайности процесса выбора действий и постепенного уменьшения этого
Do'stlaringiz bilan baham: |