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

Мы знаем, что нейронные сети могут страдать от явления, называемого ковариатным сдвигом. Для тех, кто не в курсе, очень коротко, это изменение распределения выходных активаций при изменении параметров сети. То, что мы хотели бы видеть на выходе каждого слоя в сети, — это стабильные распределения на выходе каждого слоя нашей сети. В противном случае параметры в текущем слое становятся слишком сильными функциями изменений параметров в предыдущих слоях, что, мягко говоря, нехорошо, так как часто приводит к насыщению активационных единиц и, как следствие, к исчезновению градиентов, которые в основном делают модель застрять и помешать ему учиться. Тогда ваша сеть будет вести себя как собака, гоняющаяся за собственным хвостом ;)

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

При применении пакетной нормализации к временным рядам все становится немного, или, я должен сказать, весить сложнее, чем с обычными данными изображения (или подобными). В этой статье я в основном имею дело с огромной проблемой, называемой дальновидной предвзятостью. Короче говоря, это нежелательное использование будущих знаний о прогнозе алгоритмом, что приводит к слишком хорошим результатам прогнозирования, которые невозможно воспроизвести за пределами выборки. Во временных рядах, особенно в финансовых временных рядах и разработке стратегии, я бы рассматривал предвзятость, как, возможно, САМУЮ ловушку номер один из всех. Я предполагаю, что FWLB вносит существенный вклад в известное утверждение:

«Если что-то выглядит слишком хорошо, чтобы быть правдой, это слишком хорошо, чтобы быть правдой».

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

x_i[t] i=1,...,N

параллельно во времени, где N — общее количество временных рядов, наблюдаемых параллельно, а x[t] — вектор значений всех временных рядов в момент времени t. В качестве обучающей входной матрицы, скажем, для нейронной сети MLP, мы можем использовать матрицы вида:

X[t] = x[t-L:t]

таким образом, что матрица X имеет размерность (N,L) и использует данные только до t с окном ретроспективного анализа L.

В основном существует два разных подхода к созданию пакетов на основе матрицы X:

  1. Создание пакетов X с перекрывающимися окнами ретроспективного анализа
  2. Построить партии из X с неперекрывающимися/непересекающимися окнами

Скажем, пакет содержит M примеров.

Тогда для случая 1 пакет B представляет собой тензор матриц X:

B[t] = Tensor(X[t-i:t-i] | i=M-1,M-2,...,0)

с размерами (B,N,L). Пакет упорядочен по времени таким образом, что его последний образец пакета является самым последним, соответствующим времени t. Точно так же выбираются непересекающиеся окна для случая 2).

Как указывалось выше, возвращая вас в нужное русло, основной вопрос, который я хотел бы здесь обсудить, — это утечка/упреждающая предвзятость при применении норм партии к партиям. Для временных рядов это отличие, например, от применения пакетной нормы к данным изображения. В данных изображения мы наслаждаемся тем, что последние измерения X (N и L) соответствуют высоте и ширине изображения, и все они доступны одновременно, когда изображение представляется модели. Таким образом, пакетная норма может быть прямо применена. Однако в данных временных рядов у нас есть измерение L, соответствующее измерению времени. Таким образом, при наложении на матрицу X пакетной нормы имеем два источника утечки:

а) Точки данных ранее в окне ретроспективного анализа нормализуются по отношению к среднему и стандартному значению, рассчитанному по всему измерению L.

b) Если выборки партий имеют перекрывающиеся окна, партии, соответствующие более раннему времени окончания, нормализуются относительно статистики, рассчитанной на основе всех партий (включая партии с более поздним временем).

Ясно, что эти два механизма немедленно вносят утечку в набор данных, обработанный в пакетном режиме, который будет легко использовать для модели при попытке предсказать будущие значения и т. д. Модель будет работать лучше всего на ранних пакетных выборках (поскольку она видит, что происходит на образцы более поздних партий) и худшие образцы последних партий (которые часто являются наиболее важными). Эта дилемма в основном запрещает нам выполнять пакетную норму таким образом.

При использовании метода 2) непересекающихся окон выборки пакетов у нас есть другие недостатки. Во-первых, если L велико, а набор данных ограничен, это может привести к недостаточному количеству пакетов. Однако часто может быть крайне важно иметь долгосрочный обзор L, чтобы уловить долгосрочные модели или что-то в этом роде. Во-вторых, если у нас есть, например, нестационарные данные, то есть данные, которые при изменении статистики, такой как среднее значение и дисперсия, при нормализации по непересекающимся окнам, мы можем получить неточную статистику, потому что мы вычисляем статистику партии частично на основе очень «старых» / устаревшие образцы партии.

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

Мой текущий способ справиться с этим состоит в том, чтобы использовать перекрывающиеся окна (с интервалом между последующими окнами пакетной выборки, возможно, чуть более одного временного шага) и брать только прогнозы, сгенерированные моделью для ПОСЛЕДНЕЙ пакетной выборки, и оценивать их в функции потерь. Исходя из этого, я обновляю потери каждые несколько шагов.

Используемый метод позволяет мне вычислять пакетную статистику на основе последних окон, избегая предвзятости. Огромным недостатком моего метода является то, что он генерирует только один прогноз на партию для обновления функции потерь и, следовательно, приводит к очень медленной сходимости при обучении.

Еще один недостаток, вычисление градиента на основе одного прогноза может привести к очень зашумленным градиентам, т.е. к дезориентированным скачкам оптимизатора в пространстве параметров, что дополнительно замедляет, если не тормозит сходимость, когда скорость обучения слишком высока. Вот почему, как описано выше, я накапливаю потери, вычисленные по нескольким одиночным прогнозам (каждый прогноз получается из пакета), а затем обновляю оптимизатор каждые несколько пакетов. Это похоже на изготовление пакетов из пакетов. Тем не менее, стоимость вычислений, конечно, высока и очень неэффективна, так как модель должна всегда оценивать каждую выборку в пакете, чтобы получить один прогноз вместо одного прогноза на выборку.

Альтернативная схема нормализации, которую я недавно начал использовать, нормализует не по пакетам, а только по отдельным временным рядам. В заданной выборочной матрице X для каждого временного ряда n из N я вычисляю среднее mu_n (скалярное) по ретроспективному измерению L. Это все еще страдает от механизма утечки, описанного в а), но это все еще должно быть в порядке; мы можем представить, что алгоритм просто получает прошлый временной ряд и нормализует его по временному измерению, делая при этом только один прогноз в самом конце временного ряда, что должно быть допустимым.

Тем не менее, мне интересно, есть ли лучшие подходы? Или я пропустил некоторые стандартные подходы, которые в этом случае выполняются во временных рядах? Литературы здесь, кажется, совсем немного.

Ждем отзывов!

Лучший, Джей Зи