Используется ли уравнение Q-Learning ( Q(s, a) = r + y * max(Q(s', a')) )
в DQN только для вычисления функции потерь?
Да, обычно это уравнение используется только для определения наших потерь.Точнее, он немного переставлен;это уравнение - это то, что мы ожидаем сохранить, но в целом оно еще точно не выполняется во время тренировкиМы вычитаем правую часть из левой части, чтобы вычислить ошибку (временную разницу), и эта ошибка используется в функции потерь.
Является ли уравнение рекуррентным?Предположим, что я использую DQN для, скажем, игры в Atari Breakout, число возможных состояний очень велико (при условии, что это кадр одной игры), поэтому неэффективно создавать матрицу всех Q-значений.Уравнение должно обновить Q-значение заданной пары [состояние, действие], так что оно будет делать в случае DQN?Будет ли он называть себя рекурсивно?Если это так, то вычисление не может быть рассчитано, потому что повторение никогда не остановится.
Действительно, пространство пар состояние-действие слишком велико, чтобы перечислить их все в матрице /Таблица.Другими словами, мы не можем использовать Tabular RL.Именно поэтому мы используем нейронную сеть в DQN.Вы можете просмотреть Q(s, a)
как функцию.В табличном случае Q(s, a)
- это просто функция, которая использует s
и a
для индексации в таблице / матрице значений.
В случае DQN и других подходов Deep RL мы используем нейронную сеть, чтобы приблизить к такой "функции".Мы используем s
(и, возможно, a
, хотя на самом деле это не относится к DQN), чтобы создавать функции, основанные на этом состоянии (и действии).В случае игр DQN и Atari, мы просто берем стек необработанных изображений / пикселей в качестве функций.Затем они используются в качестве входных данных для нейронной сети.На другом конце NN DQN предоставляет Q
-значения в качестве выходных данных.В случае DQN предусмотрено несколько выходов;по одному на каждое действие a
.Итак, в заключение, когда вы читаете Q(s, a)
, вы должны думать, что «вывод соответствует a
, когда мы подключаем функции / изображения / пиксели s
в качестве входных данных к нашей сети».
Еще один вопрос из комментариев:
Я думаю, что я все еще не понимаю ... Допустим, мы сделали одну итерацию по сети с состоянием S, и мы получили следующий вывод [A = 0.8, B = 0.1, C = 0.1]
(гдеA
, B
и C
- возможные действия).Мы также получили вознаграждение R = 1
и установили у (ака гамма) на 0,95.Теперь, как мы можем поместить эти переменные в формулу функции потерь https://imgur.com/a/2wTj7Yn? Я не понимаю, каков прогноз, если DQN выводит, какое действие предпринять?Кроме того, какова цель Q?Не могли бы вы опубликовать формулу с размещенными переменными, пожалуйста?
Сначала небольшая поправка: DQN не выводит, какое действие предпринять.Для заданных входных данных (состояние s
) он предоставляет одно выходное значение на действие a
, которое можно интерпретировать как оценку значения Q(s, a)
для входного состояния s
и соответствующего действия a
.конкретный вывод.Эти значения обычно используются впоследствии, чтобы определить, какое действие предпринять (например, выбрав действие, соответствующее максимальному значению Q
), поэтому в некотором смысле действие может быть выведено из выходных данных DQN,но DQN напрямую не предоставляет действия для вывода.
В любом случае, давайте рассмотрим примерную ситуацию.Функция потерь на изображении выглядит следующим образом:
loss = (r + gamma max_a' Q-hat(s', a') - Q(s, a))^2
Обратите внимание, что на изображении есть небольшая ошибка: в новом Q-hat
вместо старого указано старое состояние s
состояние s'
.s'
там правильно.
В этой формуле:
r
- наблюдаемое вознаграждение gamma
- (обычно) постоянное значение Q(s, a)
- это одно из выходных значений нашей нейронной сети, которое мы получаем, когда мы предоставляем ему s
в качестве ввода.В частности, это выходное значение, соответствующее выполненному нами действию a
.Итак, в вашем примере, если мы решили выполнить действие A
в состоянии s
, у нас будет Q(s, A) = 0.8
. s'
- это состояние, в которое мы попадаем после выполнения действия a
в состоянии s
. Q-hat(s', a')
(которое мы вычисляем один раз для каждого возможного последующего действия a'
), опять же, одно из выходных значений из нашей нейронной сети.На этот раз это значение, которое мы получаем, когда мы предоставляем s'
в качестве входных данных (вместо s
), и снова это будет выходное значение, соответствующее действию a'
.
The Q-hat
вместо Q
есть потому, что в DQN мы обычно используем две разные нейронные сети.Q
-значения вычисляются с использованием той же нейронной сети, которую мы также модифицируем при обучении.Q-hat
-значения рассчитываются с использованием другой "целевой сети".Эта целевая сеть обычно является «медленной» версией первой сети.Он создается путем периодического (например, один раз каждые 10 тыс. Шагов) копирования другой Сети и оставления ее весовых значений между этими операциями копирования.