2017-01-16 28 views
0

Я прочитал на википедии https://en.wikipedia.org/wiki/Q-learningSpeedy Q-Learning

Q-обучения могут страдать от медленной скорости сходимости, особенно когда коэффициент дисконтирования {\ displaystyle \ Gamma} \ гамма близка к единице. [16] Speedy Q-обучение, новый вариант алгоритма Q-обучение, имеет дело с этой проблемой и достигает чуть более скорость сходимости, чем модели на основе методов, такие как значение итерации

Так что я хотел попробовать скорейший ватную обучение , и посмотреть, как это лучше.

Единственный источник об этом я мог бы найти в интернете это: https://papers.nips.cc/paper/4251-speedy-q-learning.pdf

Это алгоритм они предлагают.

enter image description here

Теперь, я не понимаю. что действительно является TkQk, должен ли я иметь еще один список значений q? Есть ли более ясное объяснение, чем это?

Q[previousState][action] = ((Q[previousState][action]+(learningRate * (reward + discountFactor * maxNextExpectedReward - Q[previousState][action])))); 

Это мой текущий алгоритм QLearning, я хочу заменить его на быстрое Q-обучение.

+0

* или еще один простой источник информации о скорейшем Q-обучении. * - Запросы на внешние ресурсы отключены от темы, вы должны отредактировать эту часть. – BSMP

+0

ok ... сделано. исправлено –

ответ

1

Первое соображение: если вы пытаетесь ускорить Q-обучение для практической проблемы, я бы выбрал другие варианты до Speedy Q-learning, такие как хорошо известная Q (лямбда), то есть Q-learning в сочетании с следами электичности. Зачем? Безусловно, есть тонны информации и экспериментальные (хорошие) результаты с отслеживанием соответствия. На самом деле, как Speedy авторы Q-обучения предполагают, принцип работы обоих методов сходны:

Идея использования предыдущих оценок действий стоимостей уже были использованы для повышения производительности Q- обучение. Популярным алгоритмом является Q(lambda) [14, 20], который включает в себя концепцию трассировки приемлемости в Q-обучении и эмпирически показал, что имеет лучшую производительность, чем Q-обучение, то есть Q (0) , для подходящих значений lambda.

Вы можете найти хорошее введение в Sutton and Barto RL book. Если вам просто интересно изучить различия между Speedy Q-learning и стандартной версией, продолжайте.

A теперь ваш вопрос. Да, вы должны поддерживать два отдельных списка значений Q, один для текущего времени k и другой для предыдущих k-1, а именно: Q_{k} и Q_{k-1} соответственно.

В общем случае (в том числе и ваш случая), TQ_{k} = r(x,a) + discountFactor * max_{b in A} Q_{k}(y,b), где y является следующим состоянием и b действия, которое максимизирует Q_{k} для данного состояния.Обратите внимание на то, что вы используете этот оператор в стандартном Q-обучения, который имеет следующее правило обновления:

enter image description here

В случае Speedy Q-обучения (SQL), а peviously говорилось, вы поддерживаете два Q -функции и примените операцию TQ к обоим: TQ_{k} и TQ_{k-1}. Тогда результаты предыдущих операций используются в правиле обновления SQL:

enter image description here

Еще один момент, чтобы выделить в псевдо-код, который вы размещаете в своем вопросе, это, что она соответствует синхронной версии SQL. Это означает, что на каждом шаге k вам необходимо сгенерировать следующее состояние y и обновить Q_{k+1}(x,a) для всех существующих пар действий состояния (x,a).

+0

Спасибо pablo! Ты лучший. Да, я пытаюсь ускорить Q-обучение для практической проблемы. Я пытаюсь сделать бота для своей игры, с глубоким q-обучением, вдохновленным ботом Ataris. Моя нейронная сеть не делала так хорошо, поэтому я сделал шаг назад, чтобы проверить свое q-обучение и увидел, что значения q не имеют большого смысла. Я узнал, что это было вызвано главным образом из-за некоторых небольших ошибок, которые у меня были. , но по дороге искал решение, которое я натолкнулся на скорость, и хотел попробовать. Думаю, я попробую Q (лямбда) вместо –

+0

Спасибо, приятно быть полезным :). Удачи вам в вашем бот-проекте, это звучит очень интересно. –