Q-обучение с нейронной сетью как функция приближения

11

Я пытаюсь использовать нейронную сеть, чтобы приблизить Q-значение в Q-Learning, как в вопросах о Q-Learning с использованием нейронных сетей . Как было предложено в первом ответе, я использую линейную функцию активации для выходного слоя, в то время как я все еще использую функцию активации сигмоида в скрытых слоях (2, хотя я могу изменить это позже). Я также использую один NN, который возвращает вывод для каждого действия как рекомендовано.Q(a)

Однако алгоритм все еще расходится для простой задачи балансировки полюсов тележки. Итак, я боюсь, что мое Q-обновление неверно. После инициализации на каждом шаге я делаю следующее:

  • Рассчитайте используя прямое распространение NN для всех действий.Qt(st)
  • Выберите новое действие, , приземлитесь в новом состоянии .с тatst
  • Рассчитайте используя прямое распространение NN для всех действий.Qt(st+1)
  • Установите целевое значение Q как: только для текущего действия, a_t , а настройка Q_ {t + 1} (s, a_t) = Q_ {t} (s, a_t) для других состояний. Обратите внимание, я думаю, что это проблема.Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Установите вектор ошибок e=QtargetQt=Qt+1Qt
  • Обратно распространяйте ошибку через NN, чтобы обновить матрицы весов.

Может ли кто-нибудь указать мне, где я ошибся?

Кроме того, считаете ли вы, что я должен включить термин смещения также во входном слое и первом скрытом слое (т.е. для сигмоидальных функций)? Будет ли это иметь значение?

Заранее большое спасибо за вашу помощь. Я могу помочь уточнить вопрос или поделиться кодом, если требуется.

Энрико Андерлини
источник

Ответы:

9

Ваша цель должна быть просто

rt+1+γmaxaQ(st+1,a) .

Обратите внимание, что ваш термин ошибки (который является правильным) может быть затем переписан как rt+1+γmaxaQ(st+1,a)Qt

который является термином в скобках в формуле обновления. Это умножится на вашу скорость обучения NN и другие условия обратного распространения во время обучения, а затем будет добавлено к предыдущим весам, как формула обновленияQ

rcpinto
источник
Спасибо за совет! Таким образом, я могу избежать числовых ошибок в целевом значении: как вы говорите, добавлять и затем вычитать . Qt
Энрико Андерлини
Тем не менее, мое NN + Q-обучение все еще не сходится. Так что, если метод правильный, я думаю, я просто попытаюсь поиграть с темпом обучения и количеством нейронов в скрытом слое (ях)
Энрико Андерлини
1
Да, вы должны это сделать (попробуйте использовать функцию передачи ReLU тоже). Но обратите внимание, что Q-Learning не имеет гарантий сходимости с приближением функции. Если ваша следующая попытка не сработает, вы можете попробовать Advantage Learning. И, наконец, проблема может заключаться в том, что ваши данные не являются iid. Таким образом, вам нужно реализовать Replay опыта.
rcpinto
У меня есть расширение на вопрос. Я понимаю алгоритм, упомянутый в вопросе, но меня смущают термины и . Если награда за игру известна только в конце игры (при условии выигрыша или проигрыша), как мы можем предоставить вознаграждение за промежуточный шаг? r t + 1Qt+1rt+1
Канишка Гангули
1
Вы не, это ноль. Но это будет медленно распространяться значениями Q в предыдущие состояния, потому что значение Q является оценкой кумулятивных будущих наград.
rcpinto