Графические модели (курс лекций)/2012/Задание 2

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(релиз)
 
Строка 1: Строка 1:
-
{{stop|Внимание! Страница задания находится в стадии формирования. Убедительная просьба не приступать к выполнению задания до тех пор, пока это предупреждение не будет удалено.}}
+
{{TOCright|300px}}
{{Main|Графические модели (курс лекций)}}
{{Main|Графические модели (курс лекций)}}
-
__TOC__
+
[[Image:GM12_task2_intro.jpg|300px]]
-
'''Начало выполнения задания''': 9 марта 2012
+
'''Начало выполнения задания''': 10 марта 2012
'''Срок сдачи''': {{ins|21 марта 2012, 23:59}}
'''Срок сдачи''': {{ins|21 марта 2012, 23:59}}
Строка 43: Строка 43:
* Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана и с помощью расширенного фильтра Калмана;
* Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана и с помощью расширенного фильтра Калмана;
* Реализовать обучение параметров ЛДС с учителем. При этом часть параметров ЛДС может быть задана пользователем;
* Реализовать обучение параметров ЛДС с учителем. При этом часть параметров ЛДС может быть задана пользователем;
-
* Реализовать алгоритм генерации траектории движения абстрактного объекта в двухмерном пространстве. Способ генерации такой траектории отдается на выбор студента;
 
* Протестировать реализованные алгоритмы на модельных данных;
* Протестировать реализованные алгоритмы на модельных данных;
-
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий.
+
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий для линейного и нелинейного случая.
=== Спецификация реализуемых функций ===
=== Спецификация реализуемых функций ===
Строка 160: Строка 159:
|-
|-
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
-
|-
 
-
|}
 
-
|}
 
-
 
-
&nbsp;
 
-
 
-
{|class="standard"
 
-
!''Генерация траектории объекта в двухмерном пространстве''
 
-
|-
 
-
|X = trajectory_generate(N)
 
-
|-
 
-
|ВХОД
 
-
|-
 
-
|
 
-
{|
 
-
|-
 
-
|N — длина генерируемой траектории, uint32;
 
-
|-
 
-
|}
 
-
|-
 
-
|ВЫХОД
 
-
|-
 
-
|
 
-
{|
 
-
|-
 
-
|X — сгенерированная траектория движения объекта в двухмерном пространстве, матрица типа double размера N x 2;
 
|-
|-
|}
|}
Строка 203: Строка 176:
|N — количество точек в генерируемой последовательности, uint32;
|N — количество точек в генерируемой последовательности, uint32;
|-
|-
-
|func_horiz — указатель на функцию <tex>f</tex>, сама функция должна возвращать две величины: значение и градиент;
+
|func_horiz — указатель на функцию <tex>f</tex>, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
|-
|-
-
|func_vert — указатель на функция <tex>g</tex>, сама функция должна возвращать свое значение и градиент;
+
|func_vert — указатель на функцию <tex>g</tex>, сама функция должна возвращать свое значение (вектор длины d) и градиент (матрицу размера d x D);
|-
|-
|G — ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
|G — ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
Строка 239: Строка 212:
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|-
|-
-
|func_horiz — указатель на функцию <tex>f</tex>;
+
|func_horiz — указатель на функцию <tex>f</tex>, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
|-
|-
-
|func_vert — указатель на функцию <tex>g</tex>;
+
|func_vert — указатель на функцию <tex>g</tex>, сама функция должна возвращать свое значение (вектор длины d) и градиент (матрицу размера d x D);
|-
|-
|G — ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
|G — ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
Строка 266: Строка 239:
=== Рекомендации по выполнению задания ===
=== Рекомендации по выполнению задания ===
-
* Простейшим способом генерации траектории объекта является генерация по скорости и ускорению, где ускорение иногда меняет величину и направление;
+
* В качестве модельных данных для тестирования ЛДС рассмотреть задачу сопровождения объекта в двухмерном пространстве. Для генерации траектории движения объекта использовать функцию LDS_generate с параметрами, описанными в лекции. При этом рекомендуется взять небольшой квант времени <tex>\Delta t</tex>. Убедиться в том, что отфильтрованная по Калману траектория ближе к истинной, чем наблюдаемый сигнал.
-
* Один из вариантов тестирования реализованных алгоритмов на основе ЛДС следующий:
+
* При тестировании обучения с учителем убедиться в том, что правдоподобие траектории объекта в двухмерном пространстве, сгенерированной с помощью LDS_generate, не превосходит правдоподобие этой траектории для параметров, полученных с помощью LDS_train.
-
** Сгенерировать траекторию движения объекта;
+
-
** Добавить к траектории случайный нормальный шум;
+
-
** Отфильтровать зашумленную траекторию с помощью фильтра Калмана; убедиться, что отфильтрованный сигнал ближе к истинной траектории, чем входной зашумленный сигнал;
+
-
* При тестировании генерации из модели ЛДС рекомендуется эксперимент с двухмерным сигналом, чтобы убедиться в корректности задаваемых корреляций.
+
=== Оформление задания ===
=== Оформление задания ===
Строка 282: Строка 251:
*LDS_filter.m
*LDS_filter.m
*LDS_train.m
*LDS_train.m
-
*trajectory_generate.m
 
*EKF_generate.m
*EKF_generate.m
*EKF_filter.m
*EKF_filter.m

Текущая версия

Содержание

Начало выполнения задания: 10 марта 2012

Срок сдачи: 21 марта 2012, 23:59

Среда реализации задания – MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.

Формулировка задания

Рассматривается линейная динамическая система (ЛДС), в которой полное правдоподобие задается как:


p(X,T|\theta)=p(t_1)\prod_{n=2}^Np(t_n |t_{n-1})\prod_{n=1}^Np(x_n |t_n ),\\
p(t_n|t_{n-1})=\mathcal{N}(t_n|At_{n-1},\Gamma),\\
p(x_n|t_n)=\mathcal{N}(x_n|Ct_n,\Sigma),\\
p(t_1)=\mathcal{N}(t_1|\mu_0,V_0).

Все переменные модели являются непрерывными, т.е. t_n\in\mathbb{R}^D,\ x_n\in\mathbb{R}^d. Параметры модели A,\Gamma,V_0\in\mathbb{R}^{D\times D},\ C\in\mathbb{R}^{d\times D},\ \Sigma\in\mathbb{R}^{d\times d},\ \mu_0\in\mathbb{R}^D.

Данную ЛДС нужно протестировать на модельной задаче сопровождения (трекинга) объекта в пространстве.

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


p(t_n|t_{n-1}) = \mathcal{N}(t_n|f(t_{n-1}),\Gamma),\\
p(x_n|t_n) = \mathcal{N}(x_n|g(t_n),\Sigma),\\
p(t_1) = \mathcal{N}(t_1|\mu_0,V_0).

Здесь f и g — известные вектор-функции.

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

Для выполнения задания необходимо:

  • Реализовать алгоритм генерации выборки из вероятностной модели ЛДС и нелинейной ДС;
  • Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана и с помощью расширенного фильтра Калмана;
  • Реализовать обучение параметров ЛДС с учителем. При этом часть параметров ЛДС может быть задана пользователем;
  • Протестировать реализованные алгоритмы на модельных данных;
  • Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий для линейного и нелинейного случая.

Спецификация реализуемых функций

Генерация выборки для ЛДС
[X, T] = LDS_generate(N, A, C, G, S, mu0, V0)
ВХОД
N — количество точек в генерируемой последовательности, uint32;
A — матрица преобразования среднего в последовательности t, матрица типа double размера D x D;
C — матрица преобразования среднего при переходе от t_n к x_n, матрица типа double размера d x D;
G — ковариационная матрица для распределения p(t_n|t_{n-1}), матрица типа double размера D x D;
S — ковариационная матрица для распределения p(x_n|t_n), матрица типа double размера d x d;
mu0 — мат.ожидание априорного распределения p(t_1), матрица типа double размера 1 x D;
V0 — ковариационная матрица априорного распределения p(t_1), матрица типа double размера D x D.
ВЫХОД
X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
T — последовательность скрытых характеристик, матрица типа double размера N x D

Обратите внимание: в процедуре LDS_generate параметры D и d определяются неявно по размеру соответствующих элементов.

Фильтр Калмана для ЛДС
[M, V] = LDS_filter(X, A, C, G, S, mu0, V0)
ВХОД
X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
A — матрица преобразования среднего в последовательности t, матрица типа double размера D x D;
C — матрица преобразования среднего при переходе от t_n к x_n, матрица типа double размера d x D;
G — ковариационная матрица для распределения p(t_n|t_{n-1}), матрица типа double размера D x D;
S — ковариационная матрица для распределения p(x_n|t_n), матрица типа double размера d x d;
mu0 — мат.ожидание априорного распределения p(t_1), матрица типа double размера 1 x D;
V0 — ковариационная матрица априорного распределения p(t_1), матрица типа double размера D x D.
ВЫХОД
M — мат. ожидания распределений p(t_n|x_1,\dots,x_n), матрица типа double размера N x D;
V — ковариационные матрицы распределений p(t_n|x_1,\dots,x_n), массив типа double размера D x D x N;

 

Обучение с учителем для ЛДС
[A, C, G, S] = LDS_train(X, T, ParameterName1, ParameterValue1, ParameterName2, ParameterValue2, ...)
ВХОД
X — входная последовательность наблюдаемых переменных, матрица типа double размера N x d, где N – количество точек в последовательности, d – число признаков;
T — входная последовательность значений скрытых характеристик, матрица типа double размера N x D;
(ParameterName, ParameterValue) — (необязательные аргументы) набор дополнительных параметров, возможны следующие названия параметров:
  'A' — задаваемая пользователем матрица преобразования среднего в распределении p(t_n|t_{n-1})(соответственно, ее не нужно вычислять внутри функции);
  'C' — задаваемая пользователем матрица преобразования среднего в распределении p(x_n|t_n);
  'G' — задаваемая пользователем матрица ковариации p(t_n|t_{n-1});
  'S' — задаваемая пользователем матрица ковариации в распределении p(x_n|t_n);
ВЫХОД
A — матрица преобразования среднего в последовательности t, матрица типа double размера D x D;
C — матрица преобразования среднего при переходе от t_n к x_n, матрица типа double размера d x D;
G — ковариационная матрица для распределения p(t_n|t_{n-1}), матрица типа double размера D x D;
S — ковариационная матрица для распределения p(x_n|t_n), матрица типа double размера d x d;

 

Генерация выборки для нелинейной динамической системы
[X, T] = EKF_generate(N, func_horiz, func_vert, G, S, mu0, V0)
ВХОД
N — количество точек в генерируемой последовательности, uint32;
func_horiz — указатель на функцию f, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
func_vert — указатель на функцию g, сама функция должна возвращать свое значение (вектор длины d) и градиент (матрицу размера d x D);
G — ковариационная матрица для распределения p(t_n|t_{n-1}), матрица типа double размера D x D;
S — ковариационная матрица для распределения p(x_n|t_n), матрица типа double размера d x d;
mu0 — мат.ожидание априорного распределения p(t_1), матрица типа double размера 1 x D;
V0 — ковариационная матрица априорного распределения p(t_1), матрица типа double размера D x D.
ВЫХОД
X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
T — последовательность скрытых характеристик, матрица типа double размера N x D

Обратите внимание: в процедуре EKF_generate параметры D и d определяются неявно по размеру соответствующих элементов.

Расширенный фильтр Калмана для нелинейной динамической системы
[M, V] = EKF_filter(X, func_horiz, func_vert, G, S, mu0, V0)
ВХОД
X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
func_horiz — указатель на функцию f, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
func_vert — указатель на функцию g, сама функция должна возвращать свое значение (вектор длины d) и градиент (матрицу размера d x D);
G — ковариационная матрица для распределения p(t_n|t_{n-1}), матрица типа double размера D x D;
S — ковариационная матрица для распределения p(x_n|t_n), матрица типа double размера d x d;
mu0 — мат.ожидание априорного распределения p(t_1), матрица типа double размера 1 x D;
V0 — ковариационная матрица априорного распределения p(t_1), матрица типа double размера D x D.
ВЫХОД
M — мат. ожидания распределений p(t_n|x_1,\dots,x_n), матрица типа double размера N x D;
V — ковариационные матрицы распределений p(t_n|x_1,\dots,x_n), массив типа double размера D x D x N;

Рекомендации по выполнению задания

  • В качестве модельных данных для тестирования ЛДС рассмотреть задачу сопровождения объекта в двухмерном пространстве. Для генерации траектории движения объекта использовать функцию LDS_generate с параметрами, описанными в лекции. При этом рекомендуется взять небольшой квант времени \Delta t. Убедиться в том, что отфильтрованная по Калману траектория ближе к истинной, чем наблюдаемый сигнал.
  • При тестировании обучения с учителем убедиться в том, что правдоподобие траектории объекта в двухмерном пространстве, сгенерированной с помощью LDS_generate, не превосходит правдоподобие этой траектории для параметров, полученных с помощью LDS_train.

Оформление задания

Выполненный вариант задания необходимо прислать письмом по адресу bayesml@gmail.com с темой «Задание 2. ФИО». Убедительная просьба присылать выполненное задание только один раз с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.

Письмо должно содержать:

  • PDF-файл с описанием проведенных исследований
  • LDS_generate.m
  • LDS_filter.m
  • LDS_train.m
  • EKF_generate.m
  • EKF_filter.m
  • Набор вспомогательных файлов при необходимости
Личные инструменты