Обзор архитектуры и деталей реализации наиболее важных алгоритмов глубокого обучения для классификации временных рядов

Зачем нужна классификация временных рядов?

Прежде всего, важно подчеркнуть, почему эта проблема так важна сегодня и почему очень интересно понять роль и потенциал глубокого обучения в этом секторе.

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

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

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

Приложения

Давайте посмотрим на некоторые важные приложения классификации временных рядов.

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

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

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

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

Теперь мы дадим формальное определение проблемы классификации временных рядов. Предположим, у вас есть набор объектов с одинаковой структурой (например, реальные значения, векторы или матрицы с одинаковым размером и т. Д.) И фиксированный набор различных классов. Мы определяем набор данных как набор пар (объект, класс), что означает, что с каждым объектом связан определенный класс. Для данного набора данных проблема классификации состоит в построении модели, которая связывает новый объект с такой же структурой, что и другие, вероятность принадлежности к возможным классам в соответствии с характеристиками объектов, связанных с каждым классом.

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

Персептрон (нейрон)

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

На этом рисунке показана архитектура персептрона. Персептрон имеет одно или несколько входных значений, и каждое входное значение связано с весом.

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

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

Многослойный персептрон

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

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

Классификация с многослойным персептроном

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

  • Каждый объект должен быть сплющен, а затем представлен вектором, который будет входным вектором для обучения.
  • Каждый класс в наборе данных должен быть представлен своим вектором с горячей меткой. Вектор с одной горячей меткой - это вектор, размер которого равен количеству различных классов в наборе данных. Каждый элемент массива соответствует возможному классу, и каждое значение равно 0, кроме значения, связанного с представленным классом, то есть 1. Вектор с горячей меткой будет целью для обучения. Мы можем видеть простой пример одного вектора горячей метки на этом рисунке: в исходном наборе данных столбец Class имеет три разных значения, а набор данных с одним вектором горячей метки имеет три столбца, по одному для каждого класса.

Таким образом, мы получаем новый набор пар (входной вектор, цель), и мы готовы к обучению. Для этого процесса MLP использует метод контролируемого обучения, называемый Backpropagation, который работает с итерацией по входным векторам набора данных:

  • На каждой итерации выходной сигнал Mlp вычисляется с использованием текущего входного вектора.
  • На выходе получается вектор, компоненты которого представляют собой предполагаемые вероятности принадлежности к каждому классу.
  • Ошибка прогноза модели вычисляется с использованием функции стоимости.
  • Затем, используя градиентный спуск, веса обновляются при обратном проходе для распространения ошибки.

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

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

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

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

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

Поведение этих нелинейных преобразований контролируется набором параметров для каждого слоя. Эти параметры связывают входные данные слоя с его выходными данными и могут быть обучены (как веса многослойного персептрона). Часто последний слой представляет собой многослойный персептрон или гребневой регрессор.

В этом упражнении представлены 3 различных архитектуры глубокого обучения для классификаций временных рядов:

  • Сверточные нейронные сети, которые являются наиболее классической и используемой архитектурой для задач классификации временных рядов.
  • Inception Time, это новая архитектура, основанная на сверточных нейронных сетях.
  • Echo State Networks, еще одна недавняя архитектура, основанная на рекуррентных нейронных сетях.

Сверточные нейронные сети

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

Как мы видим на этом рисунке, сверточная нейронная сеть состоит из трех разных слоев:

  • Сверточный слой
  • Уровень объединения
  • Полностью связанный слой

Обычно несколько сверточных слоев и слоев пула чередуются перед полностью подключенным уровнем.

Сверточный слой

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

Свертка определяется набором фильтров, которые представляют собой матрицы фиксированного размера. Когда фильтр применяется к подматрице входной карты признаков с таким же размером, результат дается как сумма произведения каждого элемента фильтра на элемент в той же позиции подматрицы (мы можем видеть это в эта фигура).

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

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

Для сверточного слоя необходимо выбрать два важных параметра: stride и padding.

Шаг

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

Отступ

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

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

Когда размер карты функций, полученной после применения фильтра свертки, меньше размера входной карты функций, мы называем эту операцию Valid Padding. Когда размер вывода равен или больше размера ввода, мы называем эту операцию Same Padding.

Уровень объединения

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

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

Max Pooling работает также как подавитель шума, полностью отбрасывая шумные активации. Следовательно, он обычно работает лучше, чем средний пул. Также для слоя объединения должны быть указаны шаг и отступы.

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

Слой с полным подключением

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

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

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

Гиперпараметры

Для нейронной сети сверточных нейронных сетей необходимо указать множество гиперпараметров. Наиболее важные из них:

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

Реализация

С помощью Keras построить сверточную нейронную сеть очень просто. Keras - это простая в использовании, но мощная библиотека глубокого обучения для Python. Чтобы построить сверточную нейронную сеть в Керасе, достаточно нескольких шагов:

  • Прежде всего, объявите класс Sequential; каждая модель Keras строится либо с использованием класса Sequential, который представляет линейный стек слоев, либо с использованием класса Model, который является более гибким. Поскольку CNN представляет собой линейный стек слоев, мы можем использовать более простой класс Sequential;
  • Добавьте желаемые слои Convolutional, MaxPooling и Dense Keras в класс Sequential;
  • Укажите количество фильтров и размер фильтра для сверточного слоя;
  • Укажите размер пула для уровня объединения.

Чтобы скомпилировать модель, Керасу нужна дополнительная информация, а именно:

  • форма ввода (как только форма ввода указана, Keras автоматически определяет формы ввода для последующих слоев);
  • оптимизатор (например, стохастический градиентный спуск или Adagrad);
  • функция потерь (например, среднеквадратическая ошибка или средняя абсолютная ошибка в процентах);
  • список показателей (например, точность).

Обучение модели в Keras буквально состоит только из вызова функции fit () с указанием необходимых параметров, а именно:

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

Использовать обученную модель для прогнозирования несложно: мы передаем массив входных данных функции pred (), и она возвращает массив выходных данных.

Время начала

Недавно была представлена ​​глубокая сверточная нейронная сеть под названием Inception Time. Такой вид сети показывает высокую точность и очень хорошую масштабируемость.

Начальная сетевая архитектура

Архитектура начальной сети аналогична архитектуре сверточной нейронной сети с той разницей, что сверточные слои и уровни объединения заменены начальными модулями.

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

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

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

Он состоит из 4-х слоев:

  • Первый слой - это слой узкого места, который уменьшает размерность входных данных. Это также снижает вычислительные затраты и количество параметров, ускоряя обучение и улучшая обобщение.
  • Второй основной компонент начального модуля - это набор параллельных сверточных слоев разного размера, действующих на одной и той же входной карте функций. Например, на рисунке показаны три разных свертки с размером фильтра 10, 20 и 40.
  • Третий уровень - это MaxPooling, который дает возможность иметь модель, инвариантную к небольшим возмущениям.
  • Четвертый и последний уровень - это уровень конкатенации глубины, где выходные данные каждой независимой параллельной свертки и MaxPooling объединяются для формирования выходных многомерных временных рядов текущего начального модуля.

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

Восприимчивое поле

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

Для данных временных рядов общее поле Receptive начальной сети определяется по этой формуле, которая зависит только от длины фильтров k_i и глубины сети d (это количество начальных модулей):

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

В большинстве случаев для получения более точных результатов требуется более длинный фильтр. Это объясняется тем, что более длинные фильтры способны улавливать более длинные шаблоны с большей вероятностью, чем более короткие. Напротив, увеличение воспринимающего поля за счет добавления большего количества слоев не обязательно дает улучшение производительности сети, особенно для наборов данных с небольшим обучающим набором. Следовательно, для повышения точности обычно лучше увеличить длину фильтра, а не добавлять больше слоев.

Архитектура времени начала

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

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

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

Реализация

Полную реализацию Inception Time можно найти на GitHub (https://github.com/hfawaz/InceptionTime). Реализация написана на Python и использует Keras. Эта реализация основана на 3 основных файлах:

  • файл main.py содержит код, необходимый для запуска эксперимента;
  • файл inception.py содержит реализацию Inception Network;
  • Файл nne.py содержит код, объединяющий набор начальных сетей.

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

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

Рекуррентные нейронные сети

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

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

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

Рекуррентные нейронные сети редко применяются для классификации временных рядов в основном из-за трех факторов:

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

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

Сети состояния эха

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

  • Резервуар является основным строительным блоком сети состояний эха и организован как редко связанная случайная рекуррентная нейронная сеть.
  • Алгоритм уменьшения размерности обычно реализуется с помощью анализа главных компонентов.
  • Считывание обычно реализуется как многослойный персептрон или гребенчатый регрессор.

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

Резервуар

Как уже упоминалось, резервуар организован как редко связанная случайная рекуррентная нейронная сеть. Резервуар связан с входным слоем и состоит из набора внутренних слабо связанных нейронов и собственных выходных нейронов. В резервуаре есть 4 вида гирь:

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

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

Большим преимуществом ESN является то, что Резервуар создает повторяющееся нелинейное встраивание ввода в представление более высокого измерения, но поскольку только веса в Readout являются обучаемыми, время обучающих вычислений остается низким.

Уменьшение размеров

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

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

Реализация

Полная реализация сетей эхо-состояний на Python доступна на GitHub (https://github.com/FilippoMB/Reservoir-Computing-framework-for-multivariate-time-series-classification). В коде используются библиотеки Scikit-learn и SciPy. Основной класс RC_classifier содержится в файловых модулях. py позволяет создавать, обучать и тестировать классификатор резервуарных вычислений, то есть семейство алгоритмов, к которым принадлежат сети состояний эха.

Гиперпараметры, запрошенные для резервуара, должны быть оптимизированы, чтобы получить желаемую точность и желаемую производительность за время выполнения; самые важные из них:

  • количество нейронов в резервуаре;
  • процент ненулевых весов соединений (обычно менее 10%);
  • наибольшее собственное значение матрицы весов связей резервуара.

Наиболее важные гиперпараметры на других уровнях:

  • алгоритм для уровня уменьшения размерности (который может быть None или тензорным PCA для многомерных данных временных рядов);
  • измерение подпространства после слоя уменьшения размерности;
  • тип считывания, используемого для классификации (многослойный персептрон, гребенчатая регрессия или SVM);
  • количество эпох, то есть количество итераций во время оптимизации.

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

Выводы

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

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

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

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

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

Автор

Мои статьи на тему Наука о данных: https://medium.com/@marcodelpra

Мой профиль в LinkedIn: https://www.linkedin.com/in/marco-del-pra-7179516/

Группа LinkedIn Обучение искусственному интеллекту: https://www.linkedin.com/groups/8974511/

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

  1. Хасан Исмаил Фаваз, Бенджамин Лукас, Жермен Форестье, Шарлотта Пеллетье, Даниэль Ф. Шмидт, Джонатан Вебер, Джеффри И. Уэбб, Лхассан Идумгар, Пьер-Ален Мюллер, Франсуа Петижан. InceptionTime: поиск AlexNet для классификации временных рядов.
  2. Филиппо Мария Бьянки, Симоне Скардапане, Сигурд Лёксе, Роберт Йенссен. Подходы к пластовым вычислениям для представления и классификации многомерных временных рядов.