Вопрос

У меня есть искусственная нейронная сеть, которая играет в крестики-нолики, но она еще не завершена.


Что у меня еще есть:

  • массив вознаграждений «R [t]» с целыми числами для каждого временного шага или хода «t» (1= игрок A выигрывает, 0= ничья, -1= выигрывает игрок B)
  • Входные значения правильно передаются по сети.
  • формула регулировки весов:

введите описание изображения здесь


Чего не хватает:

  • обучение TD: мне все еще нужна процедура, которая "распространяет" ошибки сети в обратном направлении с помощью алгоритма TD (λ).

Но я не совсем понимаю этот алгоритм.


На данный момент мой подход ...

Параметр затухания следа λ должен быть "0,1", так как дистальные состояния не должны получать такое вознаграждение.

Скорость обучения составляет «0,5» в обоих слоях (входном и скрытом).

Это случай отложенного вознаграждения: вознаграждение остается равным «0» до конца игры. Тогда награда становится «1» за победу первого игрока, «-1» за победу второго игрока или «0» в случае ничьей.


Мои вопросы:

  • Как и когда вычисляется ошибка сети (ошибка TD)?
  • Как можно реализовать "обратное распространение" ошибки?
  • Как веса корректируются с помощью TD (λ)?

Заранее большое спасибо :)

Это было полезно?

Решение

Если вы серьезно относитесь к этой работе, то понимание TD-лямбда будет очень полезным.Книга Саттона и Барто «Обучение с подкреплением» доступна бесплатно наHTML и подробно описывает этот алгоритм.По сути, TD-лямбда создает отображение между состоянием игры и ожидаемой наградой в конце игры.По мере прохождения игр состояния, которые с большей вероятностью приведут к выигрышным состояниям, обычно получают более высокие ожидаемые значения вознаграждения.

Для простой игры, такой как крестики-нолики, лучше начать с табличного отображения (просто отслеживайте ожидаемую величину вознаграждения для каждого возможного состояния игры).Затем, когда у вас все получится, вы можете вместо этого попробовать использовать NN для сопоставления.Но я бы предложил сначала попробовать отдельный, более простой проект NN ...

Другие советы

Меня это тоже смутило, но я считаю, что это работает следующим образом:

Начиная с конечного узла, вы проверяете R (результат получен) и E (ожидаемый результат).Если E= R, ничего страшного, и вам не нужно вносить никаких изменений.

Если E!= R, вы видите, насколько далеко оно было, исходя из пороговых значений и прочего, а затем немного сдвигайте веса или пороговые значения вверх или вниз.Затем, основываясь на новых весах, вы возвращаетесь и угадываете, было ли оно слишком большим или слишком низким, и повторяете, но с более слабым эффектом.

Я никогда толком не пробовал этот алгоритм, но в основном это версия идеи, насколько я понимаю.

Насколько я помню, вы проводите обучение с известным набором результатов - вы вычисляете выход для известного входа и вычитаете из него известное выходное значение - это ошибка.

Затем вы используете ошибку для исправления сети - для однослойной NN, скорректированной с помощью правила дельты, я знаю, что эпсилон 0,5 слишком высок - что-то вроде 0,1 лучше - медленнее, но лучше.С обратным распространением это немного более продвинуто - но, насколько я помню, описание математического уравнения NN сложное и трудное для понимания - это не так уж сложно.

взгляните на http://www.codeproject.com/KB/recipes/BP.aspx

или google для "backpropagation c" - это, вероятно, легче понять в коде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top