Вопрос или проблема
Я сталкиваюсь с проблемой, и, похоже, я не могу найти рабочее решение уже несколько лет.
Кратко : Существует ли известный алгоритм или нейронная модель, которая может автоматически обнаруживать и подсчитывать паттерны в временном сигнале, не зная ничего заранее о самом паттерне?
Моя проблема заключается в том, как подсчитать в реальном времени количество паттернов в временном сигнале, не зная ничего заранее о самом паттерне.
Что мы не знаем о паттерне:
- Его длительность
- Его минимум и максимум
- Его частоты
- Где он “появится” (кроме начала, см. ниже)
- “Фоновый” шум
Что я знаю о паттерне:
- В начале процесса я могу полагаться на тот факт, что в сигнале будет N непрерывных периодических паттернов. N – это свободный параметр, который мы можем задать. На практике это не всегда возможно для больших значений N
- Паттерн может немного варьироваться со временем вокруг “нормального состояния” случайным образом, скажем, с вариацией около 20% в терминах его периодичности, амплитуд и частот
- Через какое-то время сигнал может содержать или не содержать непрерывные паттерны
- Не может быть двух или более разных паттернов. Только один
Я приведу 3 простых примера для иллюстрации:
- Человек, который храпит периодически в течение 2 минут, а затем может снова храпеть случайным образом в течение ночи
- Количество звуков “би” от машины
- Количество тепловых циклов машины, наблюдая за ее температурой
Что касается самого системы, то сказать здесь нечего, так как ее определение может меняться в зависимости от потребностей в вычислительной мощности (ЦП/ГП + ОЗУ). Единственное, что следует учитывать, это то, что я пытаюсь построить автоматическую систему, которая сама обучается всему необходимому, чтобы подсчитывать эти паттерны, не зная заранее ничего о сигнале/паттерне. Так что система эксперта здесь невозможна, как в области ЭКГ, например, где паттерн хорошо описан.
Я пробовал несколько методов, заставляя свою систему работать при нескольких гипотезах. Некоторые методы хорошо работают на очень коротких интервалах: около 100 мс до нескольких секунд, а другие – на интервалах более нескольких секунд. Некоторые используют частотную область, другие – временную область, но ничего достаточно универсального (похожего на М-теорию? :D)
Каждый метод можно разделить на две части. Обучающую часть, которая использует пакет данных, и часть для подсчета в реальном времени. Обучающая часть будет “слушать” сигнал в течение определенного времени и вычислять некоторые характеристики. Часть подсчета будет использовать эти изученные характеристики как справочные и пересчитывать их в реальном времени, чтобы увидеть, есть ли совпадение. Если да, то паттерн найден, и счётчик увеличивается на один.
Поскольку проблема казалась трудной для решения, первой идеей было взять на вход оценку длительности паттерна. Я не большой поклонник этого и стараюсь избавиться от этой гипотезы.
Просто чтобы дать вам некоторые подсказки о том, что я пробовал до сих пор:
- Несколько идей, основанных на 1D и 2D (на спектрограмме) корреляциях. Не устойчивы к изменениям во времени
- Используя оценку периода, получаемую как вход, я классифицировал изученный паттерн, разделённый на куски на основе частот и амплитуд, и проводил вычисления расстояний на строках, используя расстояние Хэмминга/Левенштейна для сопоставления паттернов
- Вывод статистики для построения характеристик
На протяжении нескольких недель я пытаюсь изучить глубокое обучение: RNN и CNN, но построить нейронную сеть, которая соответствует моим ограничениям, кажется невозможным, так как сам набор данных не будет иметь одинаковый размер входа, например, учитывая то, что размеры паттернов не идентичны среди обучающих паттернов.
Новая идея заключается в том, чтобы рассмотреть переобучение как решение моей проблемы (это немного противоинтуитивно, я знаю). Это означает обучение CNN для выполнения сопоставления паттернов на конкретном наборе данных, полученных в реальном времени на конкретном входном сигнале, но это означает три вещи:
- Сгенерировать крошечный набор данных/истинные значения по нескольким паттернам: N паттернов
- Найти способ автоматически определить длительность паттерна, используя растущие окна автокорреляции, например, но требуется большая вычислительная мощность для длительности паттернов более нескольких минут
- Надеяться, что CNN быстро сойдётся, используя этот крошечный обучающий набор данных. Потому что, по моему пониманию, обучение нейронной сети требует много данных
Что вы думаете? Есть ли у вас на уме известные методы или модели, которые соответствуют моим потребностям? Я не нашёл релевантных научных статей на эту тему, так как это кажется неизвестной проблемой или проблемой, известной как не имеющей решения.
Спасибо, что хотя бы прочитали это до конца 😉
Я сталкиваюсь с подобной проблемой, как и вы. Я нашёл что-то, что может быть полезно для вас. Вы можете находить последующие сигналы в сигнале, используя линейные свёртки (посмотрите здесь). Однако вы должны знать паттерн.
И я был бы признателен, если бы вы нашли способ и поделились им здесь!
Ответ или решение
Автоматическое обнаружение и подсчет паттернов в временном сигнале без предварительных знаний
Ваш вопрос о том, как автоматически обнаруживать и подсчитывать паттерны в временном сигнале без предварительных знаний, является сложной, но актуальной задачей в области обработки сигналов и машинного обучения. В этой статье мы рассмотрим подходы, которые могут помочь решить вашу задачу.
I. Определение проблемы
Вы сталкиваетесь с задачей обнаружения и подсчета периодических паттернов в временных сигналах, имея при этом ряд ограничений:
- Неизвестность паттернов: Длительность, амплитуда и частота паттернов неизвестны заранее.
- Наличие шума: Сигнал содержит шум, который может влиять на точность обнаружения.
- Процесс в реальном времени: Необходимо осуществлять подсчет в реальном времени.
II. Возможные подходы
-
Алгоритмы кластеризации:
Кластеризация может быть полезна для разбивки временного сигнала на сегменты, которые могут представлять интересующие паттерны. Использование алгоритмов, таких как K-means или DBSCAN, может помочь выявить участки сигнала, которые имеют схожие характеристики. -
Автокорреляция:
Применение автокорреляции для оценки периодичности сигналов может стать исходной точкой. Вы можете варьировать окно автокорреляции для нахождения вариаций в паттерне, а затем использовать результаты для тонкой подстройки. -
Глубокое обучение:
В этом контексте, работа с рекуррентными нейронными сетями (RNN) выглядит многообещающе:- LSTM (Long Short-Term Memory): Эта архитектура может быть использована для улавливания долгосрочных зависимостей в данных и может хорошо работать с временными рядами.
- CNN (Сверточные нейронные сети): Вы можете попробовать конвертировать сигнал в спектрограмму, а затем использовать CNN для автоматического извлечения признаков.
Комбинирование RNN и CNN может также применяться, чтобы использовать преимущества обеих архитектур.
-
Методы улучшения данных:
Поскольку неконтролируемый режим обучения затруднен, рекомендуется использовать методы увеличения данных для создания виртуальных паттернов на основе существующих данных. Это может помочь в образовании более разнообразного набора данных для обучения. -
Методы самообучения с использованием аномалий:
Алгоритмы, такие как Isolation Forest или One-Class SVM, могут быть использованы для изучения «нормальных» паттернов и выявления аномалий. При их использовании алгоритмы могут учиться без наличия явно маркированных данных. -
Обработка на основе смещения и весов в паттернах:
Рассмотрите возможность использования методов обработки сигналов, которые учитывают возможные вариации в паттерне. Разработка методологии с использованием динамических весов для учета изменений может оказаться успешной тактикой.
III. Реализация подходов
Ниже приведены шаги, которые могут быть выполнены для реализации предложенных подходов:
-
Сбор данных: Заранее соберите набор данных, представляющий различные состояния временных сигналов. Обязательно учитывайте аномальные случаи.
-
Предобработка сигналов: Устраните шумы и выровняйте сигналы для анализа.
-
Реализация моделей:
- Определите архитектуру нейронной сети, экспериментируйте с гиперпараметрами.
- Используйте кросс-валидацию для оценки модели на разных временных диапазонах.
-
Мониторинг и корректировка: После первоначального обучения, непрерывно мониторьте производительность модели с новыми данными и соответственно корректируйте модель.
IV. Заключение
Ваша задача является сложной и требует комбинированного подхода, включающего методы сигналов, машинного обучения и глубокого обучения. Не существую универсального решения, однако рассматриваемые подходы могут предоставить вам значительное преимущество в этой области. При условии должной настройки и экспериментов можно добиться значительных результатов в автоматическом детекции и подсчете паттернов в реальных временных сигналах.
Если будет возможно, продолжайте проводить тесты с различными методами и архитектурами, чтобы найти наиболее подходящее решение. Удачи в ваших исследованиях!