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

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

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

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




Ответы (1)


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

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

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

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

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).

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

person Nathan S.    schedule 23.04.2014
comment
На самом деле, я бы хотел, чтобы вход был текущим состоянием И возможным управляющим сигналом, а вывод был чем-то вроде ожидаемого прогресса на уровне. Таким образом, вы будете тестировать все возможные управляющие сигналы на каждом шаге и выбирать тот, который дает наилучший результат. Вашей последней наградой будет прогресс в уровне (возможно, со специальным бонусом за прохождение уровня). - person Nathan S.; 23.04.2014
comment
В этой схеме вы, вероятно, захотите прервать уровень, если по прошествии определенного времени прогресса не будет. Но вам не нужны никакие обучающие данные, кроме опыта, который можно получить, используя NN для игры на уровне. Я ожидаю увидеть сначала, что он научится двигаться правильно. Потом учится прыгать. Затем на основе этих особенностей нужно было бы научиться более совершенному поведению. Обратите внимание, что вы можете захотеть извлечь функции (например, где враги или ямы), чтобы упростить обучение. - person Nathan S.; 23.04.2014