#python #deep-learning #reinforcement-learning #q-learning
#python #глубокое обучение #подкрепление-обучение #q-обучение
Вопрос:
Я понимаю всю суть Q-обучения и его уравнения обновления:
Q(s, a) = r gamma * max_a' (Q(s', a'))
где %s% — текущее состояние, a
выполненное действие, r
награда, s'
следующее состояние в результате действия, и мы максимизируем все действия в этом состоянии. Это все хорошо, и я смог реализовать Q-learning с использованием таблицы.
Мои трудности возникают, когда я перехожу к обучению глубокой Q-сети. Пока я понимаю, что нам нужны две сети (выводящие все Q-значения для конкретного состояния), одна, которая фактически обучается, другая для прогнозирования Q-значений следующего состояния. Веса сети прогнозирования периодически обновляются с весами основной сети. Мой вопрос касается того, какими должны быть целевые результаты во время обучения.
Например, при традиционной классификации цифр модель обучается с использованием одноразового кодированного набора из 10 выходных данных. Но, скажем, в игре snake с 3 действиями (вперед, влево, вправо) результат, который мы получаем для каждого действия, — это только одно число в повторе опыта. Мы не знаем, каковы значения для двух других действий. Какими должны быть значения для двух других действий?
Я думал о том, чтобы сделать их 0
, но это не имеет смысла, так как на самом деле это не так 0
. Я также думал о том, чтобы сделать их Q-значениями, которые выводятся из сети прогнозирования. Но опять же, это все равно не имеет смысла, поскольку это не фактические Q-значения. Должен ли я вручную повторно распространять соединения только из этого вывода для каждого образца (это вызывает еще один вопрос, поскольку я понятия не имею, как это сделать)?
РЕДАКТИРОВАТЬ: только что возникла мысль. Может быть, мы можем использовать Q-значения, которые выводятся из целевой сети, в качестве самих выходных данных для отсутствующих Q-значений? В этом случае градиенты, соответствующие этим выходам, будут равны нулю, поскольку изменений нет, и поэтому соответствующие веса не будут обновляться. Является ли это правильным решением этой проблемы или это приведет к непреднамеренным искажениям в том, как тренируется целевая модель?