Часть III • Продвинутые возможности глубокого обучения с TensorFlow.js
на абстрактном языке то, как мы получили числа 6 и –0,6 для действий
a
1
и
a
2
в пре
дыдущем простом примере. Попросту говоря, данное уравнение гласит:
z
z
Qзначение выполнения действия
a
в состоянии
s
i
равно сумме двух составля
ющих:
1) немедленного вознаграждения от выполнения действия
a
и…
2) наилучшего (в смысле оптимального выбора действия в следующем состоя
нии) возможного Qзначения этого следующего состояния, умноженного на
коэффициент дисконтирования.
Qобучение возможно именно благодаря уравнению Беллмана, так что важно
хорошо в нем разобраться. Ваш внутренний программист наверняка заметил его
рекурсивную природу: все Qзначения в правой половине уравнения можно раз
ложить далее на основе самого уравнения. Приведенный на рис. 11.10 пример за
вершился на втором шаге этой рекурсии, но в настоящих задачах MDP число шагов
и состояний обычно намного больше, и графы состояний — действий — переходов
могут даже содержать циклы. Но истинная красота и мощь уравнения Беллмана —
в том, что с его помощью можно превратить задачу Qобучения в задачу обучения
с учителем даже для очень больших пространств состояний. В следующем разделе
мы расскажем, почему это так.
11.3.3. Глубокая Q-сеть
Вручную описывать функцию
Q
(
s
,
a
) непросто, так что лучше воспользоваться для
нее глубокой нейронной сетью (упомянутой ранее в этом разделе DQN) и подобрать
ее параметры путем обучения. Эта DQN получает на входе тензор, отражающий пол
ное состояние среды, то есть положение на доске змейки, наблюдаемое агентом. Как
видно из рис. 11.11, форма этого тензора —
[9,
9,
2]
(не считая измерения батчей).
Первые два измерения соответствуют высоте и ширине игровой доски. Таким об
разом, этот тензор можно считать представлением всех клеток доски в виде битовой
карты. Последнее измерение (2) представляет собой два канала, соответствующих
змейке и фруктам соответственно. В частности, змейка кодируется в первом канале,
причем ее голова обозначается 2, а тело — 1. Фрукт кодируется во втором канале,
с помощью значения 1. В обоих каналах пустые клетки обозначаются 0. Учтите, что
эти значения и количество каналов взяты более или менее «с потолка». Можно ис
пользовать и другие значения (например, 100 для головы змейки и 50 для ее тела,
а можно и разбить голову и тело змейки на два канала), главное, сохранить три от
дельных типа сущностей (голову змейки, тело змейки и фрукт).
Учтите также, что память в этом тензорном представлении состояния игры
расходуется менее экономно, чем в описанном в предыдущем разделе JSON
представлении, состоящем из полей
s
и
f
, поскольку в него всегда включаются все
клетки доски, вне зависимости от длины змейки. Мы будем использовать это не
экономичное представление лишь при обновлении весовых коэффициентов DQN
с помощью обратного распространения ошибки. Кроме того, в каждый конкрет
ный момент времени подобным образом представляется лишь небольшое число
Do'stlaringiz bilan baham: |