Новая модель глубокого обучения (похожая на GoogleNet) для классификации временных рядов.

Показатель

  1. Мотивация
  2. Машинное обучение для классификации временных рядов
  3. Лучшие практики глубокого обучения для классификации временных рядов: InceptionTime
  4. Понимание времени начала
  5. Заключение

1. Мотивация

Данные временных рядов всегда представляли большой интерес для финансовых служб, и теперь, с появлением приложений реального времени, другие области, такие как розничная торговля и программная реклама, обращают свое внимание на приложения, управляемые данными временных рядов. За последние пару лет несколько ключевых игроков в облачных сервисах, такие как Apache Kafka и Apache Spark, выпустили новые продукты для обработки данных временных рядов. Поэтому очень интересно понять роль и возможности машинного обучения (ML) в этой развивающейся области.

В этой статье я обсуждаю (совсем) недавние открытия по классификации временных рядов (TSC) с глубоким обучением, следуя серии публикаций авторов [2].

2. Машинное обучение для классификации временных рядов

Определение проблемы:

TSC - это область машинного обучения, заинтересованная в том, чтобы научиться присваивать метки временным рядам. Чтобы быть более конкретным, мы заинтересованы в обучении модели машинного обучения, которая при загрузке ряда точек данных, индексированных во временном порядке (например, исторические данные финансового актива), выводит метки (например, отраслевой сектор актива).

Более формально, пусть (X, y) будет обучающим экземпляром с наблюдениями T (X¹,…, Xᵀ) ≡ X (временной ряд) и переменную дискретного класса y, которая принимает k возможных значений (метки). Набор данных S - это набор из n таких обучающих экземпляров: S = {(X₍₁₎, y₍₁₎) ,…, (X₍ n₎, y₍ n₎))}. Задача классификации данных временных рядов состоит в изучении классификатора на S, чтобы отобразить из пространства возможных входных данных {X} распределение вероятностей по меткам {y¹,…, yᵏ}.

Нам действительно нужен DL?

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

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

Предположим, что мы хотим изучить классификатор одного ближайшего соседа для нашей задачи TSC (что довольно часто встречается в литературе). Теперь, имея набор данных из n временных рядов длиной T, мы должны вычислить некую меру расстояния для ⁿC₂ = n (n-1) / 2 уникальные пары. Более того, чтобы найти оптимальное расстояние между двумя временными рядами X₍₁₎ и X₍₂₎, мы должны вычислить T × T матрица точечных расстояний Mʲᵏ = (X₍₁₎ ʲ -X₍₂₎ᵏ) ² для каждой уникальной пары обучающих экземпляров, а затем выполните поиск путь, который оптимизирует нашу целевую функцию. Как объясняется в [3], в литературе есть несколько алгоритмов оптимизации для этой настройки, и все они имеют сложность O (n²⋅ Tᶜ) с c = 3 или 4 . Очевидно, длина временного ряда может действительно повлиять на скорость вычислений. Однако для некоторых типов данных эту проблему можно решить, не углубляясь в сложные модели машинного обучения, такие как глубокие нейронные сети.

При обработке сигналов сложный сигнал анализируется путем разложения сигнала на серию «элементарных» сигналов, называемых режимами Фурье. Например, прямоугольная волна ниже может быть аппроксимирована тремя синусоидальными сигналами различных частот (f₁, f₂, f₃) = (ω, 3ω, 5ω) для некоторой постоянной угловой частоты ω .

Взяв линейную сумму этих сигналов, мы можем восстановить наш исходный сигнал:

Прямоугольная волна (t) = W¹ ⋅ sin (f₁ t) + W² ⋅ sin (f₂ t) + W³ ⋅ sin (f₃ t) +…

где коэффициенты (W¹, W², W³) = (1, 1/3, 1/5) определяют вес, который каждая мода вносит в прямоугольную волну.

Теперь рассмотрим набор данных, в котором любой временной ряд, первоначально представленный серией T упорядоченных по времени точек данных, также может быть представлен вектором весов в пространстве, охватываемом тремя элементарными частотными режимами:

X=(X¹, … , Xᵀ )W=(W¹, W², W³, …) .

Переход от «временного» к «частотному» представлению наших данных временных рядов называется преобразованием Фурье, и хотя пространство Фурье, теоретически, является бесконечномерным (а не 3-мерным) , мы можем применить различные методы аппроксимации, чтобы сократить ряд Фурье до конечных размеров. Самое главное, мы можем сократить T -мерное представление данных наших временных рядов до ряда измерений (в пространстве Фурье), что делает нашу задачу классификации отслеживаемой с помощью вычислений. В целом, мы можем применить преобразование Фурье на этапе предварительной обработки данных, чтобы преобразовать входные временные ряды в весовые векторы, а затем продолжить построение нашей модели классификации (например, классификатора 1-ближайших соседей). Работая с такими «хорошими» временными рядами, мы можем добиться высокой производительности без использования DL.

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

3. Лучшие практики DL для TSC: InceptionTime

На сегодняшний день существует две современные модели DL для TSC. Самая старая модель, названная HIVE-COTE [4], основана на алгоритме ближайшего соседа в сочетании с мерой подобия Dynamic Time Warping. Хотя этот алгоритм показал выдающуюся производительность на тестовых наборах данных [5], он страдает от временной сложности O (n ²⋅ T ⁴). Недавно авторы [6] представили глубокую сверточную нейронную сеть (CNN) под названием InceptionTime, которая не только превосходит по точности HIVE-COTE, но и значительно быстрее. Высокая точность InceptionTime в сочетании с масштабируемостью делает его идеальным кандидатом для разработки продукта!

С этой целью давайте представим наиболее важные компоненты InceptionTime и то, как они реализованы в Keras.

3.1 Слой ввода

В общем, каждое наблюдение данных Xʲ (j = 1,…, T) временного ряда X может быть списком одного или нескольких измерений данных, т. Е. Xʲ = (X₁ʲ,…, X_m ʲ) для измерений данных m, все они были сделаны в j -й момент времени. Например, скорость частицы, движущейся в трехмерном пространстве, состоит из трех пространственных компонентов: V = (V₁, V₂, V₃). Отслеживание скорости частицы в течение T секунд с одним наблюдением в секунду равносильно сбору ряда данных: (V ¹,…, V ᵀ).

Определение 1: m -мерный многомерный временной ряд (MTS) X = (X ¹, …, X ᵀ) состоит из T упорядоченных элементов X ʲ ∈ ℝᵐ.

Определение 2: Одномерный временной ряд X длины T - это просто MTS с m = 1 , т.е. X ʲ ∈ ℝ и X = (X¹,…, Xᵀ).

Как и в задачах классификации изображений, мы можем рассматривать входную MTS как массив формы (1, T, m), где m обозначает количество каналов (глубина ). Фактически, удобно подавлять ширину полей ввода и работать напрямую с input_shape = (T, m).

3.2 Начальный модуль

Основным строительным блоком InceptionTime является начальный модуль, показанный на рисунке ниже:

Он состоит из следующих слоев:

  • слой узкого места для уменьшения размерности (т. Е. Глубины) входных данных. Это сокращает вычислительные затраты и количество параметров, ускоряет обучение и улучшает обобщение.
  • Выход узкого места подается на три одномерных сверточных слоя с размером ядра 10, 20 и 40.
  • Входные данные начального модуля также проходят через слой максимального объединения размера 3 и, в свою очередь, через слой узких мест.
  • Последний слой - это слой конкатенации глубины, где выходные данные четырех сверточных слоев на шаге 2 конкатенируются по измерению глубины.

Все слои (за исключением слоя конкатенации) имеют stride 1 и «одинаковые» padding. Кроме того, все сверточные слои содержат 32 фильтра.

Реализация Keras

3.3 Начальная сеть

Сетевая архитектура InceptionTime очень напоминает архитектуру GoogleNet [7]. В частности, сеть состоит из серии модулей Inception, за которыми следуют уровень Global Average Pooling и уровень Dense с функцией активации softmax.

Однако InceptionTime вводит дополнительный элемент в свои сетевые уровни: остаточные соединения в каждом третьем начальном модуле.

Реализация Keras

3.4 InceptionTime: ансамбль нейронных сетей для TSC

Как поясняется в [6], оказывается, что одна начальная сеть демонстрирует большой разброс в точности. Вероятно, это связано с изменчивостью, связанной с инициализацией случайного веса вместе с самим процессом стохастической оптимизации. Чтобы преодолеть эту нестабильность, предлагаемая современная модель InceptionTime фактически представляет собой ансамбль из 5 начальных сетей, причем каждому прогнозу присвоен равный вес (см. [8] для получения дополнительной информации по ансамблям глубоких нейронных сетей для TSC). Полную реализацию модели можно найти на Github.

4. Понимание InceptionTime

Как упоминалось ранее, InceptionTime в первую очередь был вдохновлен CNN для решения проблем компьютерного зрения, и поэтому мы ожидаем, что наша модель будет изучать функции аналогичным образом. Например, при классификации изображений нейроны в нижних слоях учатся определять низкоуровневые (локальные) функции, такие как линии, в то время как нейроны в более высоких слоях учатся обнаруживать высокоуровневые (глобальные) особенности, такие как формы (например, глаза). . Точно так же мы ожидаем, что нейроны нижнего слоя InceptionTime будут захватывать локальную структуру временного ряда, такую ​​как линии и кривые, а нейроны верхнего слоя - идентифицировать различные паттерны формы, такие как «долины» и «холмы».

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

5. Вывод

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

InceptionTime - это ансамбль CNN, который учится определять локальные и глобальные паттерны формы в наборе данных временных рядов (т. Е. Низко- и высокоуровневые функции). Различные эксперименты [6] показали, что временная сложность InceptionTime линейно растет как с размером обучающего набора, так и с длиной временного ряда, то есть O (n ⋅ T)! В целом, InceptionTime поставил проблемы TSC на один уровень с проблемами классификации изображений, и поэтому интересно исследовать его различные приложения в промышленном секторе.

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

использованная литература

[1] Изучение внутренних представлений путем распространения ошибок

[2] Глубокое обучение для классификации временных рядов: обзор

[3] Превосходная классификация временных рядов: экспериментальная оценка недавно предложенных алгоритмов. Расширенная версия

[4] HIVE-COTE: Иерархический коллектив голосования ансамблей на основе преобразований для классификации временных рядов

[5] Архив классификации временных рядов UCR

[6] InceptionTime: поиск AlexNet для классификации временных рядов

[7] Углубляясь в свертки (GoogleNet)

[8] Ансамбли глубоких нейронных сетей для классификации временных рядов