Нейронная сеть и обучение разнице во времени

У меня есть несколько статей и лекций по изучению временных разностей (некоторые из них относятся к нейронным сетям, таким как учебник Саттона по TD-Gammon), но мне трудно понять уравнения, что приводит меня к моим вопросам.

-Откуда берется прогнозное значение V_t? И впоследствии, как мы получаем V_ (t + 1)?

-Что именно распространяется обратно, когда TD используется с нейронной сетью? То есть откуда берется ошибка, которая распространяется обратно при использовании TD?

1 ответ

Решение

Взгляды назад и вперед могут сбивать с толку, но когда вы имеете дело с чем-то простым, например, игровой программой, на практике все довольно просто. Я не смотрю на ссылку, которую вы используете, поэтому позвольте мне дать общий обзор.

Предположим, у меня есть аппроксиматор функции, такой как нейронная сеть, и что он имеет две функции, train а также predict для обучения на конкретном выходе и прогнозирования результатов состояния. (Или результат действия в данном состоянии.)

Предположим, у меня есть след игры от игры, где я использовал predict метод, чтобы сказать мне, что делать в каждой точке и предположить, что я проигрываю в конце игры (V=0). Предположим, мои состояния: s_1, s_2, s_3...s_n.

Подход Монте-Карло говорит, что я тренирую свой аппроксиматор функций (например, мою нейронную сеть) в каждом из состояний в трассе, используя трассировку и итоговую оценку. Итак, учитывая этот след, вы бы сделали что-то вроде вызова:

train(s_n, 0)train(s_n-1, 0)...train(s_1, 0),

То есть я прошу каждое государство предсказать окончательный результат трассировки.

Подход динамического программирования говорит, что я тренируюсь на основе результатов следующего состояния. Так что моя тренировка будет что-то вроде

train(s_n, 0)train(s_n-1, test(s_n))...train(s_1, test(s_2)),

То есть я прошу аппроксиматор функции предсказать, что предсказывает следующее состояние, где последнее состояние предсказывает конечный результат трассировки.

TD обучение смешивается между двумя из них, где λ=1 соответствует первому случаю (Монте-Карло) и λ=0 соответствует второму случаю (динамическое программирование). Предположим, что мы используем λ=0.5, Тогда наше обучение будет:

train(s_n, 0)train(s_n-1, 0.5*0 + 0.5*test(s_n))train(s_n-2, 0.25*0 + 0.25*test(s_n) + 0.5*test(s_n-1)+)...

То, что я здесь написал, не совсем правильно, потому что вы на самом деле не проверяете аппроксиматор на каждом шаге. Вместо этого вы просто начинаете со значения прогноза (V = 0 в нашем примере), а затем вы обновите его для обучения следующего шага со следующим прогнозируемым значением. V = λ·V + (1-λ)·test(s_i),

Это учится намного быстрее, чем методы Монте-Карло и динамического программирования, потому что вы не просите алгоритм изучить такие экстремальные значения. (Игнорирование текущего прогноза или игнорирование окончательного результата.)