Глубокое Q-обучение, LSTM и конвергенция Q-значений - PullRequest
0 голосов
/ 05 марта 2019

Я внедряю агента по усиленному обучению, который предпринимает действия с учетом временных цен.Действия, как правило, купить продать или подождать.Нейронная сеть получает в качестве входных данных один пакет за раз, размер окна составляет 96 шагов, и у меня есть около 80 функций.Таким образом, ввод выглядит примерно так: 1x96x80.Алгоритм работает в режиме онлайн и берет случайную выборку, каждые 96 новых наблюдений, из памяти воспроизведения, которая сохраняет последние 480 наблюдений (s, a, r, s ').Я даю сигнал вознаграждения за каждое действие для каждого временного шага, и там, где награда за покупку равна +1, а за продажу - -1 и так далее.Таким образом, я не должен беспокоиться об исследовании.Я использую стандартный способ вычисления потерь (как в оригинальной статье DQN Deep Mind) с двумя сетями, одна для оценки значений Q, а другая, которая действует как цель и получает мягкое обновление на каждом шаге.

Агент выбирает на каждом шаге действие с наивысшими оценочными значениями Q - как показано на графиках ниже.Моя проблема заключается в том, как ведут себя значения Q в зависимости от архитектуры модели.В стандартном случае у меня есть два плотных слоя «elu», два слоя LSTM и последний плотный «линейный» слой с 3 единицами.В этой конфигурации значения Q слишком сильно колеблются, я получаю новый максимальный максимум почти каждый шаг, а жадная политика слишком часто выбирает различные действия, приводящие к высоким операционным издержкам, которые снижают производительность (рис. 1).В другом случае (рис. 2) я просто добавляю еще один плотный линейный слой из 3 единиц перед последним, и в этом случае значения Q развиваются гораздо медленнее, увеличивая производительность, поскольку это не приводит к высоким затратам, но компромисс здесьв том, что у меня гораздо менее эффективный ученик, который медленно приспосабливается к новым условиям и продолжает выбирать неоптимальные действия в течение более длительного времени, тем самым снижая производительность (но все же, намного лучше, чем раньше).Для полноты я попытался с помощью LSTM вернуть всю последовательность и обновить градиент на ней, и только с последним шагом.Нет реальной разницы между ними.

Без второго линейного слоя С двойным линейным слоем Синяя линия - продажа (и сохранение короткой позиции), оранжевый - ожидание или закрытие позиции, изеленый цвет - это покупка (или сохранение длинной позиции).Поэтому позиция сохраняется в течение более длительных периодов, если кривая постоянно выше, чем у других.

В идеале я хотел бы найти способ точной настройки между этими двумя крайностями, однако, второе поведение появляется только тогда, когда я добавляю второй плотный слой из 3 единиц перед последним (он может быть линейным сноваили tanh), поэтому я не могу получить все возможности между ними.Настройка других параметров, таких как коэффициент дисконтирования, скорость обучения или смещение для LSTM, не очень помогает (увеличение смещения для LSTM до 5 действительно помогает, но только на первых итерациях оно возвращается к тому же самому поведению).Кроме того, использование GRU вместо LSTM существенно не меняет динамику значений Q.

Я зашел в тупик, есть предложения?Я также не понимаю, почему добавление простого линейного конечного слоя сильно замедляет оценку значений Q.

РЕДАКТИРОВАТЬ: После достаточного количества итераций, даже второй случай (2 линейных слоя) медленно сходятся к случаю, когда значения Q слишком изменчивы.Таким образом, желаемое поведение продлится всего несколько десятков тысяч шагов.

...