Рекуррентная нейронная сеть для обнаружения аномалий - PullRequest
0 голосов
/ 06 мая 2018

Я внедряю систему обнаружения аномалий, которая будет использоваться в разные временные ряды (одно наблюдение каждые 15 минут в общей сложности 5 месяцев). Все эти временные ряды имеют общую закономерность: высокие уровни в рабочее время и низкие уровни в противном случае.

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

Что у меня до сих пор

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

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

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

Мое решение

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

Вопрос

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

Любые соображения приветствуются. Спасибо

1 Ответ

0 голосов
/ 06 мая 2018

Примечание о вашем текущем подходе

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

О том, что вы делаете

  1. Вы не даете LSTM шанс

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

    Таким образом, вам сначала нужно будет предоставить более длинные контексты во время обучения (я предполагаю, что вы включаете скрытое состояние во время теста).

  2. Даже если бы вы дали ему шанс, это не волновало бы

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

    Таким образом, даже если значение потерь в точках будет стремиться к обратному распространению через> 7 * 96 временных шагов, чтобы узнать о вашем недельном паттерне, есть 7 * 95 других термов, которые могут предотвратить отклонение LSTM от текущей локальной оптимальный.

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

  3. Ваши решения - это хорошо

    Сложно моделировать последовательности в разных масштабах в одной модели. Даже вам, как человеку, нужно «уменьшить масштаб», чтобы судить о более длинных тенденциях - вот почему все люди с Уолл-стрит имеют графики Месяц / Неделя / День / Час / ..., чтобы следить за ценами своих акций. Такое многомасштабное моделирование особенно сложно для RNN, поскольку ему необходимо обрабатывать всю информацию всегда с одинаковыми весами.

    Если вы действительно хотите, чтобы на модели все это выучили, вы можете добиться большего успеха с архитектурами с прямой связью, использующими некоторую сверточность по времени, например. TDNNs , Сети остаточной памяти (Отказ от ответственности: я один из авторов.), Или недавняя архитектура "один для всех их правил", WaveNet . Поскольку они пропускают соединения в более длинном временном контексте и применяют различные преобразования на разных уровнях, у них больше шансов обнаружить и использовать такую ​​неожиданную долгосрочную зависимость.

    В GERHUB есть реализации WaveNet в Keras, например, 1 или 2 . Я не играл с ними (я действительно отошел от Кераса некоторое время назад), но особенно. второй кажется действительно простым, с AtrousConvolution1D.

    Если вы хотите остаться с RNNs, Заводной RNN , вероятно, модель, которая соответствует вашим потребностям.

О вещах, которые вы можете рассмотреть для своей проблемы

  • Так есть ли два распределения данных?

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

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

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

  • Или есть два определения аномалии?

    Еще один философский момент. Возможно, вы лично рассматриваете два различных типа аномалий:

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

    И затем, существует другое понятие аномалии: значение определенной границы в определенные промежутки времени. Возможно, здесь подойдет простая линейная регрессия / малая MLP от времени к значению?

  • Пусть NN сделает всю работу

    В настоящее время вы эффективно моделируете распределение своего количества в два этапа: во-первых, LSTM предоставляет среднее значение. Во-вторых, вы предоставляете дисперсию.

    Вместо этого вы могли бы позволить вашему NN (вместе с дополнительными 2 аффинными преобразованиями) напрямую предоставить вам полный гауссов, создав его среднее значение и дисперсию; очень похоже на Variational AutoEncoders (https://arxiv.org/pdf/1312.6114.pdf, приложение C.2). Затем вам нужно непосредственно оптимизировать вероятность вашей следующей выборки при распределении NN, а не просто MSE между выборкой и выходом NN.

    Это позволит вашей модели сообщать вам, когда она очень строго относится к следующему значению и когда «любой» образец будет в порядке.

    Обратите внимание, что вы можете пойти дальше и сделать так, чтобы ваш NN производил "любой" подходящий дистрибутив. Например. если ваши данные находятся в / могут быть разумно преобразованы в ограниченную область, вы можете попытаться создать Категориальное распределение по пространству, имея Softmax на выходе, во многом как WaveNet (https://arxiv.org/pdf/1609.03499.pdf, Раздел 2.2) .

...