Попробуем решить задачу поиска аномалий в звуке.
Примеры аномалий звука:
- Неисправности в работе двигателя.
- Изменения в погоде: дождь, град, ветер.
- Аномалии работа сердца, желудка, суставов.
- Необычный трафик на дороге.
- Неисправности колесных пар у поезда.
- Неисправности при посадке и взлете самолета.
- Аномалии движения жидкости в трубе, в канале.
- Аномалии движения воздуха в системах кондиционирования, на крыле самолета.
- Неисправности автомобиля, велосипеда.
- Неисправности станка, оборудования.
- Расстроенный музыкальный инструмент.
- Неправильно взятые ноты песни.
- Эхолокация кораблей и подводных лодок.
Рассмотрение задачи
Входные данные
Звук представляет из себя временную последовательность.
В простейшем виде это — амплитуда сигнала по временной оси.
Сигнал можно конвертировать в спектральную область. Тогда сигнал будет представлять из себя спектр частот, изменяемый по времени.
Звук представляет из себя непрерывный поток данных. Это очень важно, так как мы не можем просматривать данные [далеко] вперед по времени и после этого строить или корректировать наш алгоритм.
Кроме того сигнал с течением времени может меняться, и эти изменения уже не будут аномалиями. Желательно чтобы система сама подстраивалась к изменениям сигнала, чтобы она не считала повторяющиеся изменения сигнала аномалиями.
В общем случае наша задача распространяется на любые временные последовательности, не только на звук.
Supervised or unsupervised?
В одном случае мы обрабатываем сигнал без всякого априори знания о том, какие аномалии возможны. Отклонение поведения от обычного считается аномалией. Это — unsupervised модели.
В другом случае мы знаем как могут выглядеть аномалии. У нас есть образцы звука аномалий. Мы используем эти образцы в алгоритмах поиска аномалий. Это — supervised модели.
Выходные данные и принятие решений
В простейшем случае мы будем детектировать только сам факт аномалии с привязкой ко времени. В более сложном случае мы еще будем классифицировать аномалии. К примеру, аномалия может быть слабая, сильная или катастрофическая.
Мы можем определять только время начала аномалии, либо определять временное окно от начала до завершения аномалии.
Методы решения
Обзор методов
Методы обнаружения аномалий в звуке относятся к подклассу методов обнаружения аномалий. Отличие в том, что входные данные, звук, подаются непрерывным потоком.
Самые простые методы это — детекторы изменения сигнала. Пороговый детектор реагирует на изменения амплитуды сигнала или на изменения спектра. Подобные методы очень простые и во многих случаях самые надежные. Они работают в условиях, когда входной сигнал стабилен и его поведение никак не меняется по времени. Любое изменение считается аномалией.
Следующая группа методов относится к методам обработки сигналов. Эти методы глубоко изучены в обработке радиосигналов. Для примера приведем радиолокаторы и мобильную связь. Методы отлично работают, когда мы знаем, что именно мы ищем. Мы заранее должны знать звук или спектр аномалии. Методы обработки сигналов обладают мощнейшим аппаратом фильтрации нужных сигналов. Не совсем понятно, как нам использовать эти методы для поиска аномалий.
И последняя группа методов это — методы Machine Learning. Она включает в себя как классические методы, например методы линейной регрессии или классификации, так и новейшие нейронные сети. Методы Machine Learning хороши там, где система должна подстраиваться под разное поведение входных сигналов. Входной сигнал может меняться по довольно сложным зависимостям, а методы обучаются по ходу дела и подстраиваются под эти зависимости. Любые закономерности сигнала не считаются аномалиями. Запрограммировать нечто подобное обычными методами сложно, а иногда и невозможно, потому что нам придется вручную подстраивать нашу систему под изменение сигнала. Методы же Machine Learning не требуют ручной подстройки, они сами обучаются на имеющихся данных. Основная проблема с методами Machine Learning в том, что входные данные, временные последовательности, подаются непрерывным потоком. Для подобных данных разработаны специализированные модели. В качестве примера можно указать рекуррентные нейронные сети (RNN). Одно из его удачных описаний можно прочитать здесь.
Примеры реализации
Я сначала проведу краткое исследование имеющихся примеров, чтобы потом выбрать наиболее подходящие для моей задачи.
По подготовке данных: на сайте KDNuggets есть хороший пример использования спектральной последовательности.
Теперь попробую поискать примеры кода.
Microsoft Anomaly Detection Service — один из самых простых сервисов. К сожалению на него нельзя подавать непрерывный поток данных. В его документации довольно просто и подробно описаны типовые аномалии во временных последовательностях.
Компания Numenta создала тестовую площадку для опробования систем и алгоритмов для обнаружения аномалий во временных последовательностях. Numenta — очень интересная компания, занимающаяся алгоритмами Machine Learning и пытающаяся приблизиться к пониманию работы
На GitHub можно обнаружить много Open Source систем, в частности систему от Twitter.
Если обратиться к теории обнаружения аномалий с использованием классического Machine Learning, то один из самых популярных и полных источников информации по этой теме, это scikit-learn проект.
Azure Machine Learning располагает многими примерами реализации. Естественно, нам придется использовать Microsoft Azure ML. Поэкспериментировать и построить модели можно будет бесплатно, но потом надо будет платить за
Microsoft разработала один из лучших пакетов по нейронным сетям, CNTK, и выложила его в открытом виде. Есть несколько примеров по использованию пакета для обработки временных последовательностей.
Один из самых популярных пакетов по нейронным сетям, это Google Tensorflow.
Keras — довольно популярный пакет, работающий поверх TensofFlow или Theano и сильно упрощающий создание моделей. Здесь один из примеров его использования для RNN.
Начнем выбор дизайна?
Интерфейс
Для начала определюсь с интерфейсом. Вне зависимости от дизайна внутренностей самого сервиса, интерфейс к нему не будет сильно отличаться, так как он зависит прежде всего от задачи, а не от ее реализации.
Итак, на входе либо большой файл со звуком, либо порт для потока (stream), по которому данные подаются непрерывно.
На выходе тоже либо файл, либо поток. Формат выхода: время появления аномалии. Дополнительно еще могут выдаваться: время завершения аномалии; класс аномалии.
Дополнительные настройки, — это параметры, разные для разных дизайнов сервиса. Например:
- параметры для установки режима “ложные срабатывания лучше/хуже ложных обнаружений”;
- “скорость подстройки под новые закономерности”;
- порог аномалии.
Custom дизайн
Раз уж я начал с трех подходов, то логично проработать именно три дизайна.
Первый, на основе детектирования изменения сигнала без использования методов Machine Learning. В простейшем варианте входной сигнал усредняется, чтобы случайные шумы не создавали слишком много ложных срабатываний. Потом проверяется на функции “если амплитуда больше порога, то это аномалия”.
Чуть сложнее, но намного более практично, если мы добавим логику по обнаружению закономерностей сигнала. Например, аномалии будут сохраняться в кэше, и новые аномалии будут проверяться на повторения. Если в кэше найдена похожая аномалия, и она отмечена “не аномалия”, то это — “не аномалия”. Придется добавить и метод определения “аномалия/не аномалия”. Это будет либо дополнительный интерфейс пользователя, либо какой-то алгоритм.
Использование:
- подходит для простых сигналов, не изменяющихся с течением времени.
- лучше подходит для сигналов, о которых много известно. То есть мы имеем образцы сигнала без аномалий и образцы самих аномалий.
- быстрое создание прототипа.
Преимущества:
- самая простая реализация.
- самые легкие требования к оборудованию.
Недостатки:
- недостаточно умный, чтобы проводить точное детектирование и классификацию аномалий.
Дизайн классического Machine Learning
Простейший вариант — использование Azure ML. В качестве примера могу взять вот этот простой эксперимент, или более сложный.
В другом варианте, если я хочу иметь полный контроль над приложением, могу взять за образец этот проект и этот. Оба сделаны на Python.
Использование:
- подходит для сигналов, изменяющихся с течением времени.
Преимущества:
- легкие требования к оборудованию.
- точное детектирование аномалий.
Недостатки:
- необходимы усилия для подготовки входных параметров.
Дизайн, базирующийся на нейронных сетях
Скорее всего подойдет готовый образец на базе Keras, либо можно использовать CNTK. Но к нему я не нашел готового примера, поэтому придется дописывать код.
Использование:
- дизайн подходит для сложный сигналов, изменяющихся с течением времени.
Преимущества:
- не требуется подготовка входных параметров.
- самое качественно определение аномалий.
Недостатки:
- самые большие требования к оборудованию
Автор: Leo_Gan