Действительно крутая ветвь машинного обучения / обработки сигналов - это слияние датчиков, иногда также называемое слиянием данных, отслеживанием цели, фильтрацией и т. Д. Из личного опыта кажется, что не так много инженеров знакомы с этим. поле, или что они, по сути, придерживаются точки зрения, что «Sensor Fusion = Kalman Filter». Это прискорбно, потому что есть много интересных вещей, которые можно сделать с помощью слияния сенсоров. Итак, как вы могли догадаться, цель этой серии статей - объяснить, что такое слияние датчиков.

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

Хорошо, а что такое слияние датчиков?

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

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

Теперь, используя основы физики, мы знаем несколько вещей о поведении самолетов:

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

Термин «некоторое время» является относительным, но если мы предположим, что мы получаем радиолокационные измерения очень часто, скажем, на пару кГц, тогда предположения, приведенные выше, вполне верны. Другими словами, у нас есть некоторые знания о том, как самолет будет вести себя с течением времени, а точнее между измерениями радара. Эти знания о том, как ведет себя самолет, в литературе по слиянию датчиков называют моделью движения / процесса. Математически это можно выразить как

В дополнение к предыдущему состоянию x_ {k-1} в формулировке присутствует еще один термин q, который представляет неопределенность модели. Это важно, поскольку отражает то, что мы не можем построить идеальную модель, описывающую поведение самолета или что-то еще в этом отношении. В реальной жизни всегда есть некоторая неопределенность или случайность. В случае с самолетом это может быть потому, что мы не знаем точно, какие действия предпринимает пилот, поэтому мы не можем точно знать, что произойдет. С помощью q мы вводим в модель некоторую случайность, и мы можем выбрать q таким образом, чтобы он отражал, какой тип случайности возможен. В случае с самолетом q может указывать на то, что скорость может отличаться от того, что предсказывает модель движения, но это изменение не может быть слишком большим. Другими словами, q может означать, что скорость, скорее всего, будет отличаться на ± 2 м / с, чем на ± 10 м / с.

Таким образом, мы также можем выбрать представление модели движения как распределение вероятностей.

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

Если модель несовершенна, почему бы просто не положиться на радар?

Мы сталкиваемся с аналогичной проблемой, когда дело касается нашего радара, поскольку идеального датчика не существует. Таким образом, получаемые нами измерения страдают от шума. Однако мы знаем, что измерения являются функцией текущего состояния x_ {k} самолета. Другими словами, радар измеряет положение самолета, которое является частью текущего состояния x_ {k} самолета. Информация о том, как датчик работает в зависимости от состояния, в литературе по слиянию датчиков называется моделью измерения.

Математически мы можем выразить модель измерения как

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

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

Прежде чем мы продолжим, следует отметить, что модели движения и измерения сформулированы с использованием двух допущений:

  1. Состояние x - марковское. Это означает, что текущее состояние x_ {k} зависит только от предыдущего состояния x_ {k-1}.
  2. Измерение y_ {k} зависит только от состояния x_ {k}, а не от каких-либо предыдущих измерений.

Как совместить модели движения и измерения?

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

который, по сути, говорит: «Что мы можем сказать о текущем состоянии x_ {k}, если мы рассмотрим все измерения, которые мы получили до сих пор?». Это называется апостериорным распределением по x_ {k}. Вы также можете рассматривать это как оптимальное предположение о состоянии x_ {k} в момент времени k.

Применяя теорему Байеса и маргинализацию, мы получаем следующие два уравнения:

Это сложно понять, но пусть эти уравнения вас не пугают! Они могут выглядеть устрашающе, но я постараюсь разбить их на что-нибудь понятное. Начнем с первого уравнения.

Уравнение прогноза

В литературе по объединению датчиков это общее уравнение обычно называют уравнением прогнозирования. Если мы посмотрим на крайнюю правую плотность, мы увидим, что это апостериорная (или оптимальная догадка) для предыдущего состояния x_ {k-1}. Плотность в середине должна быть вам знакома, поскольку это модель движения. Итак, здесь происходит то, что мы используем предположение о предыдущем состоянии в момент времени k-1, x_ {k-1}, и комбинируем это с моделью движения, чтобы попытаться предсказать, каким будет текущее состояние x_ {k}. Путем маргинализации (то есть интеграции) состояния x_ {k-1} мы эффективно учитываем все потенциальные результаты состояния x_ {k}. Это позволяет нам получить крайнюю левую плотность, которая не зависит от предыдущего состояния. Следующая анимация может дать больше информации, она показывает, как это уравнение можно интерпретировать с помощью сумм Римана.

Чтобы дать немного больше интуиции об уравнении прогнозирования, мы можем рассмотреть случай, когда состояние является двоичным, то есть x может быть либо 1, либо 0. . Предыдущее апостериорное предположение указывает на то, что

другими словами, существует 70% -ная вероятность того, что состояние было равно 0, и 30% -ная вероятность, что оно было равно 1. Теперь, если у нас есть модель движения, мы можем использовать ее, чтобы предсказать, какое текущее состояние x_ {k} есть. Модель движения может быть примерно такой:

в котором говорится, что если x_ {k-1} было равно 1, то с вероятностью 80% оно останется равным 1 и на текущем временном шаге. Однако, если он был равен 0, то есть только 10% шанс, что он останется 0 на текущем временном шаге.

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

Итак, рассматривая все возможные результаты x_ {k-1} с помощью предыдущего апостериорного анализа и комбинируя их с моделью движения, мы получаем прогноз о x_ {k}: с вероятностью 13% он равен 0 и с вероятностью 87%, что он равен 1. Помните, этот прогноз больше не зависит от предыдущего предположения. , поскольку мы учли все результаты!

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

Уравнение обновления

Это уравнение обычно называется уравнением обновления в литературе по объединению датчиков. Причина этого названия в том, что мы обновляем наш прогноз (тот, который мы получили с помощью уравнения прогнозирования) новой информацией, которую мы получаем, наблюдая за измерением y_ {k}. Уравнение обновления может показаться вам знакомым, потому что на самом деле это теорема Байеса!

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

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

Другими словами, мы никогда не найдем ни одного конкретного значения состояния x_ {k} в момент времени k. Если мы хотим представить состояние как конкретное значение, мы можем выбрать, например, вычисление MMSE или MAP апостериорного. Но, в конце концов, мы никогда не узнаем точно, что это такое, мы просто сможем выразить область правдоподобных значений с помощью апостериорного.

Однако мы наблюдаем конкретные значения измерения - мы знаем, что такое y_ {k} на каждом временном шаге, поскольку получаем это число с помощью датчика. Это означает, что член делителя в правиле обновления,

это просто скалярное число. Помните, что плотность присваивает значение каждой отдельной точке, которую мы помещаем в нее, и это число представляет вероятность этой точки. Поскольку мы наблюдаем значение y_ {k}, мы можем подключить его к распределению, и оно даст нам число. Затем мы используем это число для деления числителя.

Чтобы (возможно) прояснить ситуацию, мы можем переписать выражение

Это подчеркивает, что мы, по сути, вычисляем средневзвешенное значение по всем возможным значениям правдоподобия. В интеграле мы оцениваем все возможные состояния x_ {k}. Плотность измерения даст число, представляющее вероятность, а плотность прогноза даст нам число, которое представляет вес, связанный с этим числом правдоподобия. .

Такое разбиение также может дать вам более полное представление о том, что происходит в числителе уравнения обновления. В числителе у нас есть плотность измерения, которая является нашей вероятностью. Мы знаем, что такое y_ {k}, но не знаем, что такое x_ {k}. Априор, который мы получили из уравнения предсказания, представляет собой плотность, которая отражает, насколько вероятны различные состояния. Как априорность, так и вероятность являются функциями состояния, то есть вы подключаете состояние x_ {k} и получаете число. Правило Байеса гласит, что если мы возьмем произведение этих двух функций вместе и разделим их на один и тот же продукт, но где мы исключили состояние x_ {k}, то в конечном итоге мы получим апостериорная - единственная функция состояния x_ {k}. Эта функция, в свою очередь, представляет собой плотность, апостериорную, которая описывает, насколько вероятны разные состояния x _ {k}.

Хорошо, как нам начать использовать эти два уравнения?

Хорошо, теперь, когда мы познакомились с этими двумя уравнениями, мы можем записать формулу их использования:

Когда мы выполняем уравнение прогнозирования в момент времени k = 1, у нас все еще не было никаких измерений. Вот почему мы используем предыдущий p (x_ {0}), он описывает область вероятных начальных состояний. Как только мы получили первое измерение, мы можем приступить к вычислению уравнения обновления, которое дает нам апостериорное распределение. Для всех измерений после k = 1 мы можем просто прокручивать прогноз и обновлять уравнение. В коде это может выглядеть примерно так:

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

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

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