Распознавание физических сигналов - нейросеть Markata

Аватар пользователя DMatrix


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

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

Задача: научить нейросеть распознавать сигналы от двигателя: от исправного и от мотора с той или иной неисправностью.

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

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

Как же формировать образы этих кусков сигнала?

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

Я предлагаю другой подход, а именно – с помощью дифференциального уравнения.

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

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

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

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

Я выбрал для своего метода уравнение следующего вида:

X'' + f(t) * X = 0,   где:

X – сигнал,
X'' – его 2-я производная,
t – время,
f(t) – многочлен степени n.

Таким образом, первая стадия анализа сигнала заключается в подгонке коэффициентов многочлена f(t).

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

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

***

Для описанного метода создана демонстрационная программа с примерами и описанием.

Авторство: 
Авторская работа / переводика
Комментарий автора: 

Обсудить идею и опыт работы с программой можно в этой группе.

На днях я сделаю там сообщение о последних доработках.

Комментарии

Аватар пользователя iAndrey
iAndrey(9 лет 9 месяцев)

....свернул как нетематическое

А чё так?

А как же циклы , как его, который предсказал крах капсистемы в 80-е??

Кузнецов?

Завбыл..

Так-то можно и социо-экономические модели просчитывать...

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

Можно. Но нужны хорошие данные. Их негде взять.

Аватар пользователя Tr2xolod
Tr2xolod(4 года 3 недели)

У меня по датчикам вибрации было превышение порога :)

Заради безопастности. Для этого ИИ не был нужен :)

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

Превышение порога - это топорно. Часто двигатели с виброскоростью, близкой к порогу, работают годами.

Аватар пользователя Tr2xolod
Tr2xolod(4 года 3 недели)

Как есть - есть программа испытаний, есть ТЗ на стенд, есть АСУТП, конструктор тут царь и бог

Аватар пользователя otherone
otherone(3 года 9 месяцев)

Для куска сигнала длины N мы имеем N линейных уравнений,

 Если сигнал резать на части то потом с фазой запутаетесь. Нужна синхронизация.

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

Вот, хороший вопрос.

Действительно, куски с разной фазой дают разные коэффициенты диффура.

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

...

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

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

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

Диффур + нейросеть эти проблемы решают.

Аватар пользователя BQQ
BQQ(13 лет 2 недели)

тут (как обычно) всё зависит от предметной области.

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

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

Потому что описание процесса диффуром есть по сути представление процесса набором его характерных частот. Но вот беда - в так называемых "больших системах" просто нет небольшого набора характерных частот. Соответственно, и описание будет несколько дефективным.

===============

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

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

то такие системы уже есть, и работают примерно так, как вы описали.

Какие именно вы имеете в виду? Интересно просто.

.

Насчет экономического согласен.

.

Авторегрессионная модель - в планах, как и неклассический спектральный анализ, по которому у меня есть задел, уже давно в виде кода на C++.

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

Не совсем так, тут все сложнее и интереснее. Сигнал определенного типа ("двигатель исправен" или "присутствует такой-то дефект") приводит не к одному вектору-решению, а ко множеству векторов. К определенному аттрактору, если вам понятен этот термин. Да, каждый сигнал из этого множества можно трактовать как набор частот, но таких "наборов частот" получается несколько или много для каждого сигнала. То есть если, упрощенно, "есть частоты 100 Гц и 102 Гц", то это хор., а если "есть 101 и 103", то плохой. В общем, частоты в моем методе - лишняя сущность.

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

P.S. У меня на сайте есть интересный пример: работа с шумами. То есть в сигнале вообще нет частот, а метод работает, причем хорошо работает. 

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

Аватар пользователя BQQ
BQQ(13 лет 2 недели)

Характерные частоты - это не частоты в принятом сигнале, это - частоты собственных колебаний исследуемой системы.

=====================

Есть забавный пример именно про двигатель.

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

Ну там все оторвались в полный рост - деревья, нейросети, бустинг и т.д. "со всеми остановками".

Решение одного мастера заняло одну (в скобках прописью - ОДНУ) строку на МАТЛАБе.

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

=============

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

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

Это все так. Некоторые типы авиадвигателей вообще диагностируют путем положения ладони на обшивку во время рулежки. Ну, особо опытные механики.

Тут дело не в двигателях. Просто я придумал универсальный подход и его развиваю.

Был некий конкурс машинных обучателей.

Интересно бы в таком поучаствовать.

Аватар пользователя serg2013
serg2013(12 лет 10 месяцев)

В 70-х годах встречал статью, где шум от двигателя представлялся как белый шум прошедший через фильтр N-го порядка. По разбросу коэффициентов этого фильтра диагностировали его исправность. Т.е. у неисправного двигателя один (или некоторые) из коэффициентов превышали допустимую величину, что указывало на ту или иную неисправность.

Аватар пользователя DMatrix
DMatrix(10 лет 2 месяца)

Интересно.