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

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: {{stop|Внимание! Страница задания находится в стадии формирования. Убедительная просьба не приступать к...)
(релиз)
 
(3 промежуточные версии не показаны)
Строка 1: Строка 1:
-
{{stop|Внимание! Страница задания находится в стадии формирования. Убедительная просьба не приступать к выполнению задания до тех пор, пока это предупреждение не будет удалено.}}
+
{{TOCright|300px}}
{{Main|Графические модели (курс лекций)}}
{{Main|Графические модели (курс лекций)}}
-
'''Начало выполнения задания''': 9 марта 2012
+
[[Image:GM12_task2_intro.jpg|300px]]
 +
 
 +
'''Начало выполнения задания''': 10 марта 2012
'''Срок сдачи''': {{ins|21 марта 2012, 23:59}}
'''Срок сдачи''': {{ins|21 марта 2012, 23:59}}
-
Среда реализации для всех вариантов – MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
+
Среда реализации задания – MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
-
 
+
-
== Вариант 1 ==
+
=== Формулировка задания ===
=== Формулировка задания ===
-
Рассматривается классическая скрытая марковская модель (СММ) первого порядка, в которой полное правдоподобие задается как:
+
Рассматривается линейная динамическая система (ЛДС), в которой полное правдоподобие задается как:
 +
<center>
 +
<tex>
 +
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).
 +
</tex>
 +
</center>
 +
 
 +
Все переменные модели являются непрерывными, т.е. <tex>t_n\in\mathbb{R}^D,\ x_n\in\mathbb{R}^d</tex>. Параметры модели <tex>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</tex>.
 +
 
 +
Данную ЛДС нужно протестировать на модельной задаче сопровождения (трекинга) объекта в пространстве.
 +
 
 +
Рассматривается также нелинейная динамическая система с нормальным шумом, в которой вероятности переходов задаются как:
<center>
<center>
<tex>
<tex>
-
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|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).
</tex>
</tex>
</center>
</center>
-
 
-
Пусть скрытая компонента <tex>t_n</tex> в произвольный момент времени может принимать значения из множества <tex>\{1,\dots,K\}</tex>. Априорное распределение на значение скрытой компоненты в первый момент времени задается вектором <tex>w_1,\ldots,w_K</tex>, причем все <tex>w_i\ge 0</tex> и <tex>\sum_iw_i=1</tex>. Распределение <tex>p(t_n |t_{n-1})</tex> задается матрицей перехода <tex>A</tex> размера <tex>K\times K</tex>, где в <tex>ij</tex>-ой позиции стоит вероятность перехода из состояния <tex>i</tex> в состояние <tex>j</tex>. Все элементы этой матрицы неотрицательны и сумма элементов по каждой строке равна единице. Модель генерации данных задается нормальными распределениями со своими значениями вектора математического ожидания <tex>\mu_i</tex> и матрицы ковариации <tex>\Sigma_i</tex> для каждого состояния.
 
-
Таким образом, набор параметров модели определяется вектором <tex>\vec{w}</tex>, матрицей <tex>A</tex>, значениями векторов математических ожиданий и матриц ковариаций для каждого состояния <tex>\{\mu_i,\Sigma_i\}_{i=1}^K</tex>.
 
-
Данную СММ нужно использовать для сегментации поведения мыши в клетке на набор т.н. поведенческих актов. Поведенческие акты это элементарные единицы в описании поведения. Примерами поведенческих актов для мыши в клетке являются «бежит», «роется», «сидит на месте», «встает на задние лапы», «крутится на месте» и т.д. В качестве входных данных для этой задачи выступают видео с записью поведения мыши в клетке (см. фрагмент ниже) и набор параметров мыши для каждого кадра видео: координаты центра масс, точки носа и хвоста, координаты пикселей контура мыши. Необходимо на основе этих данных рассчитать набор признаков (например, скорости, ускорения, различные углы) и с помощью ЕМ-алгоритма обучения СММ выделить 3 поведенческих акта. Например, при использовании только скорости можно выделить поведенческие акты вида «бежит», «идет», «стоит на месте». Набор используемых признаков и интерпретация полученных поведенческих актов отдаются на выбор студента. Полученные поведенческие акты необходимо наложить на видео с поведением.
+
Здесь <tex>f</tex> и <tex>g</tex> известные вектор-функции.
-
<videoflash>2AzoUaH8oAs|500|500</videoflash>
+
Для этой системы нужно реализовать расширенный фильтр Калмана и протестировать его работу на модельных данных.
Для выполнения задания необходимо:
Для выполнения задания необходимо:
-
* Реализовать алгоритм генерации выборки из вероятностной модели СММ
+
* Реализовать алгоритм генерации выборки из вероятностной модели ЛДС и нелинейной ДС;
-
* Реализовать EM-алгоритм обучения СММ при заданном числе состояний K.
+
* Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана и с помощью расширенного фильтра Калмана;
-
* Реализовать алгоритм Витерби для сегментации сигнала при известных значениях параметров СММ
+
* Реализовать обучение параметров ЛДС с учителем. При этом часть параметров ЛДС может быть задана пользователем;
-
* Протестировать реализованные алгоритмы на модельных сигналах
+
* Протестировать реализованные алгоритмы на модельных данных;
-
* Рассчитать набор признаков для описания поведения мыши и на их основе найти 3 '''осмысленных''' поведенческих акта с помощью ЕМ-алгоритма обучения СММ, проинтерпретировать полученные поведенческие акты
+
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий для линейного и нелинейного случая.
-
* Наложить полученные поведенческие акты на видео с поведением
+
-
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики сегментации модельных сигналов.
+
=== Спецификация реализуемых функций ===
=== Спецификация реализуемых функций ===
{|class="standard"
{|class="standard"
-
!''Генерация выборки''
+
!''Генерация выборки для ЛДС''
|-
|-
-
|[X, T] = HMM_GENERATE(N, w, A, Mu, Sigmas)
+
|[X, T] = LDS_generate(N, A, C, G, S, mu0, V0)
|-
|-
|ВХОД
|ВХОД
Строка 48: Строка 59:
|N — количество точек в генерируемой последовательности, uint32;
|N — количество точек в генерируемой последовательности, uint32;
|-
|-
-
|w априорные вероятности для скрытых состояний, матрица типа double размера 1 x K;
+
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
|-
|-
-
|A — матрица перехода, матрица типа double размера K x K;
+
|C — матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
|-
|-
-
|Mu центры гауссиан для каждого состояния, матрица типа double размера K x d, в которой в каждой строке стоит вектор мат.ожидания для соответствующего состояния;
+
|G ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
 +
|-
 +
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
 +
|-
 +
|mu0 — мат.ожидание априорного распределения <tex>p(t_1)</tex>, матрица типа double размера 1 x D;
|-
|-
-
|Sigmas матрицы ковариации гауссиан, массив типа double размера d x d x K, Sigmas(:,:,i) – матрица ковариации для i-ого состояния;
+
|V0 ковариационная матрица априорного распределения <tex>p(t_1)</tex>, матрица типа double размера D x D.
|}
|}
|-
|-
Строка 61: Строка 76:
|
|
{|
{|
-
|X — сгенерированная последовательность, матрица типа double размера N x d
+
|X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
|-
|-
-
|T — последовательность скрытых состояний, матрица типа double размера 1 x N
+
|T — последовательность скрытых характеристик, матрица типа double размера N x D
|}
|}
|}
|}
-
Обратите внимание: в процедуре HMM_GENERATE количество признаков и количество скрытых состояний определяются неявно по размеру соответствующих элементов.
+
Обратите внимание: в процедуре LDS_generate параметры D и d определяются неявно по размеру соответствующих элементов.
{|class="standard"
{|class="standard"
-
!''Сегментация''
+
!''Фильтр Калмана для ЛДС''
|-
|-
-
|T = HMM_TEST(X, w, A, Mu, Sigmas)
+
|[M, V] = LDS_filter(X, A, C, G, S, mu0, V0)
|-
|-
|ВХОД
|ВХОД
Строка 80: Строка 95:
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|-
|-
-
|w — априорные вероятности, матрица типа double размера 1 x K, где K – количество скрытых состояний;
+
|A — матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
-
|-
+
-
|A — матрица перехода, матрица типа double размера K x K;
+
|-
|-
-
|Mu центры гауссиан для каждого состояния, матрица типа double размера K x d, в которой в каждой строке стоит вектор мат.ожидания для соответствующего состояния;
+
|C матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
|-
|-
-
|Sigmas матрицы ковариации гауссиан, массив типа double размера d x d x K, Sigmas(:,:,i) матрица ковариации для i-ого состояния;
+
|G ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
 +
|-
 +
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
 +
|-
 +
|mu0 — мат.ожидание априорного распределения <tex>p(t_1)</tex>, матрица типа double размера 1 x D;
 +
|-
 +
|V0 — ковариационная матрица априорного распределения <tex>p(t_1)</tex>, матрица типа double размера D x D.
|-
|-
|}
|}
Строка 94: Строка 113:
|
|
{|
{|
-
|T полученная последовательность скрытых состояний, матрица типа double размера 1 x N
+
|M мат. ожидания распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, матрица типа double размера N x D;
 +
|-
 +
|V — ковариационные матрицы распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, массив типа double размера D x D x N;
 +
|-
|}
|}
|}
|}
Строка 101: Строка 123:
{|class="standard"
{|class="standard"
-
!''Обучение''
+
!''Обучение с учителем для ЛДС''
|-
|-
-
|[w, A, Mu, Sigmas, core] = HMM_EM_TRAIN(X, K)
+
|[A, C, G, S] = LDS_train(X, T, ParameterName1, ParameterValue1, ParameterName2, ParameterValue2, ...)
-
|-
+
-
|[w, A, Mu, Sigmas, core] = HMM_EM_TRAIN(X, K, InputParameters)
+
|-
|-
|ВХОД
|ВХОД
Строка 111: Строка 131:
|
|
{|
{|
-
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – число признаков;
+
|X — входная последовательность наблюдаемых переменных, матрица типа double размера N x d, где N – количество точек в последовательности, d – число признаков;
|-
|-
-
|K количество скрытых состояний, число типа uint16;
+
|T входная последовательность значений скрытых характеристик, матрица типа double размера N x D;
|-
|-
-
|InputParameters — (необязательный аргумент) набор дополнительных параметров, массив типа cell вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
+
|(ParameterName, ParameterValue) — (необязательные аргументы) набор дополнительных параметров, возможны следующие названия параметров:
|-
|-
-
|&nbsp;&nbsp;'w' — задаваемый пользователем вектор априорных вероятностей (соответственно, его не нужно определять в процессе EM-итераций);
+
|&nbsp;&nbsp;'A' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(t_n|t_{n-1})</tex>(соответственно, ее не нужно вычислять внутри функции);
|-
|-
-
|&nbsp;&nbsp;'A' — задаваемая пользователем матрица перехода;
+
|&nbsp;&nbsp;'C' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(x_n|t_n)</tex>;
|-
|-
-
|&nbsp;&nbsp;'Mu' — задаваемые пользователем центры гауссиан для каждого состояния;
+
|&nbsp;&nbsp;'G' — задаваемая пользователем матрица ковариации <tex>p(t_n|t_{n-1})</tex>;
|-
|-
-
|&nbsp;&nbsp;'Sigmas' — задаваемые пользователем матрицы ковариации гауссиан;
+
|&nbsp;&nbsp;'S' — задаваемая пользователем матрица ковариации в распределении <tex>p(x_n|t_n)</tex>;
-
|-
+
-
|&nbsp;&nbsp;'num_iter' — максимально допустимое число итераций EM-алгоритма (по умолчанию = 100);
+
|-
|-
-
|&nbsp;&nbsp;'tol_LH' — минимально допустимая величина отклонения по значению логарифма правдоподобия на одной итерации (по умолчанию = <tex>10^{-2}</tex>);
 
|}
|}
|-
|-
Строка 134: Строка 151:
|
|
{|
{|
-
|w — априорные вероятности для скрытых состояний, матрица типа double размера 1 x K;
 
|-
|-
-
|A — матрица перехода, матрица типа double размера K x K;
+
|A — матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
|-
|-
-
|Mu центры гауссиан для каждого состояния, матрица типа double размера K x d, в которой в каждой строке стоит вектор мат.ожидания для соответствующего состояния;
+
|C матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
|-
|-
-
|Sigmas матрицы ковариации гауссиан, массив типа double размера d x d x K, Sigmas(:,:,i) матрица ковариации для i-ого состояния;
+
|G ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
 +
|-
 +
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
|-
|-
-
|Core — все параметры для всех итераций EM-алгоритма, массив структур длины num_iter с полями 'w', 'A', 'Mu', 'Sigmas', 'gamma', 'LH', где gamma – матрица значений gamma для всех точек и всех состояний, LH – логарифм правдоподобия
 
|}
|}
|}
|}
-
=== Рекомендации по выполнению задания ===
+
&nbsp;
-
 
+
-
[[Изображение:SMAIS11_hmm_segmentation.jpg|300px|thumb|Пример модельного сигнала для тестирования СММ]]
+
-
* При тестировании ЕМ-алгоритма обучения СММ рекомендуется убедиться в том, что значение неполного правдоподобия <tex>\log p(X|w,A,\mu,\Sigma)</tex> монотонно увеличивается в итерациях.
+
-
* В качестве простейшего модельного сигнала для тестирования генерации, обучения и сегментации с помощью СММ можно взять одномерный сигнал с тремя состояниями, в котором два состояния хорошо отличимы друг от друга, а третье состояние является промежуточным. Например, в первом состоянии мат.ожидание = 0 и дисперсия маленькая (скажем, 0.1). Во втором состоянии мат.ожидание = 1 и такая же дисперсия, как и в первом состоянии. В третьем состоянии мат.ожидание = 0, а дисперсия в несколько раз больше (скажем, 0.5).
+
-
* При тестировании генерации из модели СММ рекомендуется эксперимент с двухмерным сигналом, чтобы убедиться в корректности задаваемых корреляций
+
-
* Для наложения поведенческих актов на видео рекомендуется следующая процедура:
+
-
** Загрузить в MATLAB изображения с названиями поведенческих актов с помощью ''imread''
+
-
** Небольшими блоками загружать в MATLAB кадры видео с помощью ''aviread'', накладывать на них картинки с названиями поведенческих актов и сохранять полученные кадры в виде отдельных JPG картинок на диск с помощью ''imwrite''. Сохраненные картинки должны иметь название XXXXX.jpg, где XXXXX — номер кадра.
+
-
** Собрать полученные картинки в видео-файл с помощью бесплатной программы [http://www.virtualdub.org/ VirtualDub]. Для этого достаточно открыть первую картинку в программе (остальные загрузятся автоматически), установить частоту кадров 25fps, установить кодек (рекомендуется DivX) и сгенерировать AVI-файл.
+
-
 
+
-
=== Данные для выполнения задания ===
+
-
 
+
-
[http://narod.ru/disk/8645012001/CG1OFD1_input.avi.html Видео-файл]
+
-
 
+
-
[http://narod.ru/disk/8645639001/frames_data.mat.html MAT-файл], содержащий данные для каждого кадра видео. В нем находится массив структур, где каждая структура соответствует одному кадру, а поля структуры имеют следующее значение:
+
-
* frame_number — номер кадра видео
+
-
* centre — координаты центра масс мыши
+
-
* nose — координаты предполагаемой точки носа мыши
+
-
* tail — координаты предполагаемой точки основания хвоста мыши
+
-
* contour — координаты точек контура мыши
+
-
* dist_centre — расстояние от центра масс мыши до центра арены
+
-
* dist_border — расстояние от центра масс мыши до ближайшей границы арены
+
-
* eigen_features — проекции контура мыши на собственные контура, полученные с помощью метода главных компонент
+
-
 
+
-
=== Оформление задания ===
+
-
 
+
-
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 1. ФИО, номер группы». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
+
-
 
+
-
Письмо должно содержать:
+
-
*PDF-файл с описанием проведенных исследований
+
-
*HMM_GENERATE.m
+
-
*HMM_TEST.m
+
-
*HMM_EM_TRAIN.m
+
-
*Ссылка на видео-файл, размещенный на файлообменнике или на видео-хостинге, с наложенными поведенческими актами. Лучше вставить видео-файл непосредственно внутрь PDF-файла с отчетом (это можно сделать, например, в программе Adobe Acrobat 9 и выше). Тогда нужно прислать ссылку на этот PDF-файл.
+
-
*Набор вспомогательных файлов при необходимости
+
-
 
+
-
== Вариант 2 ==
+
-
 
+
-
=== Формулировка задания ===
+
-
Рассматривается линейная динамическая система (ЛДС), в которой полное правдоподобие задается как:
+
-
<center>
+
-
<tex>
+
-
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).
+
-
</tex>
+
-
</center>
+
-
 
+
-
Все переменные модели являются непрерывными, т.е. <tex>t_n\in\mathbb{R}^D,\ x_n\in\mathbb{R}^d</tex>. Параметры модели <tex>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</tex>.
+
-
 
+
-
Данную ЛДС нужно использовать для решения задачи сопровождения (трекинга) объекта в пространстве. В частности, необходимо отфильтровать центр масс мыши на каждом кадре в видео-записи ее поведения в клетке.
+
-
 
+
-
Для выполнения задания необходимо:
+
-
* Реализовать алгоритм генерации выборки из вероятностной модели ЛДС;
+
-
* Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана;
+
-
* Реализовать алгоритм уточнения фильтрации сигнала с помощью РТС уравнений;
+
-
* Реализовать ЕМ-алгоритм обучения СММ при заданной размерности <tex>D</tex>. При этом часть параметров ЛДС также может быть задана пользователем;
+
-
* Реализовать алгоритм генерации траектории движения абстрактного объекта в двухмерном пространстве. Способ генерации такой траектории отдается на выбор студента;
+
-
* Протестировать реализованные алгоритмы на модельных данных;
+
-
* Отфильтровать центр масс мыши в видео-сигнале с помощью реализованных алгоритмов. Выбор параметров фильтрации отдается на выбор студента. Способ выбора этих параметров необходимо отразить в отчете;
+
-
* Наложить исходную траекторию центра масс мыши и отфильтрованную траекторию на видео с поведением;
+
-
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий, а также графики фильтрации центра масс мыши в увеличенном разрешении.
+
-
 
+
-
=== Спецификация реализуемых функций ===
+
{|class="standard"
{|class="standard"
-
!''Генерация выборки''
+
!''Генерация выборки для нелинейной динамической системы''
|-
|-
-
|[X, T] = LDS_GENERATE(N, A, G, C, S, mu0, V0)
+
|[X, T] = EKF_generate(N, func_horiz, func_vert, G, S, mu0, V0)
|-
|-
|ВХОД
|ВХОД
Строка 224: Строка 176:
|N — количество точек в генерируемой последовательности, uint32;
|N — количество точек в генерируемой последовательности, uint32;
|-
|-
-
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
+
|func_horiz указатель на функцию <tex>f</tex>, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
 +
|-
 +
|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;
-
|-
 
-
|C — матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
 
|-
|-
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
Строка 243: Строка 195:
|X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
|X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
|-
|-
-
|T — последовательность скрытых состояний, матрица типа double размера N x D
+
|T — последовательность скрытых характеристик, матрица типа double размера N x D
|}
|}
|}
|}
-
Обратите внимание: в процедуре LDS_GENERATE параметры D и d определяются неявно по размеру соответствующих элементов.
+
Обратите внимание: в процедуре EKF_generate параметры D и d определяются неявно по размеру соответствующих элементов.
{|class="standard"
{|class="standard"
-
!''Фильтр Калмана и РТС уравнения''
+
!''Расширенный фильтр Калмана для нелинейной динамической системы''
|-
|-
-
|[Mus_back, Sigmas_back, Mus_fwd, Sigmas_fwd, LH, J] = LDS_forwardbackward(X, A, G, C, S, mu0, V0)
+
|[M, V] = EKF_filter(X, func_horiz, func_vert, G, S, mu0, V0)
|-
|-
|ВХОД
|ВХОД
Строка 260: Строка 212:
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
|-
|-
-
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
+
|func_horiz указатель на функцию <tex>f</tex>, сама функция должна возвращать две величины: значение (вектор длины D) и градиент (матрицу размера D x D);
|-
|-
-
|G ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
+
|func_vert указатель на функцию <tex>g</tex>, сама функция должна возвращать свое значение (вектор длины d) и градиент (матрицу размера d x D);
-
|-
+
-
|C — матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
+
-
|-
+
-
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
+
-
|-
+
-
|mu0 — мат.ожидание априорного распределения <tex>p(t_1)</tex>, матрица типа double размера 1 x D;
+
-
|-
+
-
|V0 — ковариационная матрица априорного распределения <tex>p(t_1)</tex>, матрица типа double размера D x D.
+
-
|-
+
-
|}
+
-
|-
+
-
|ВЫХОД
+
-
|-
+
-
|
+
-
{|
+
-
|Mus_back — мат. ожидания распределений <tex>p(t_n|X)</tex>, матрица типа double размера N x D;
+
-
|-
+
-
|Sigmas_back — ковариационные матрицы распределений <tex>p(t_n|X)</tex>, массив типа double размера D x D x N, где Sigmas(:,:,n) является матрицей ковариации для момента времени n;
+
-
|-
+
-
|Mus_fwd — мат. ожидания распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, матрица типа double размера N x D;
+
-
|-
+
-
|Sigmas_fwd — ковариационные матрицы распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, массив типа double размера D x D x N;
+
-
|-
+
-
|LH — логарифм неполного правдоподобия <tex>\log p(X|A,\Gamma,C,\Sigma,\mu_0,V_0)</tex>, double;
+
-
|-
+
-
|J — матрицы J, массив типа double размера D x D x N-1;
+
-
|-
+
-
|}
+
-
|}
+
-
 
+
-
&nbsp;
+
-
 
+
-
{|class="standard"
+
-
!''Обучение''
+
-
|-
+
-
|[A, G, C, S, mu0, V0] = LDS_EM_TRAIN(X, D, InputParameters)
+
-
|-
+
-
|ВХОД
+
-
|-
+
-
|
+
-
{|
+
-
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – число признаков;
+
-
|-
+
-
|D — размерность пространства скрытых состояний, число типа uint16;
+
-
|-
+
-
|InputParameters — (необязательный аргумент) набор дополнительных параметров, массив типа cell вида ParameterName1, ParameterValue1, ParameterName2, ParameterValue2 и т.д. Возможны следующие параметры:
+
-
|-
+
-
|&nbsp;&nbsp;'A' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(t_n|t_{n-1})</tex>(соответственно, ее не нужно определять в процессе EM-итераций);
+
-
|-
+
-
|&nbsp;&nbsp;'G' — задаваемая пользователем матрица ковариации <tex>p(t_n|t_{n-1})</tex>;
+
-
|-
+
-
|&nbsp;&nbsp;'C' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(x_n|t_n)</tex>;
+
-
|-
+
-
|&nbsp;&nbsp;'S' — задаваемая пользователем матрица ковариации в распределении <tex>p(x_n|t_n)</tex>;
+
-
|-
+
-
|&nbsp;&nbsp;'num_iter' — максимально допустимое число итераций EM-алгоритма (по умолчанию = 100);
+
-
|-
+
-
|&nbsp;&nbsp;'tol_LH' — минимально допустимая величина отклонения по значению логарифма правдоподобия на одной итерации (по умолчанию = <tex>10^{-2}</tex>);
+
-
|}
+
-
|-
+
-
|ВЫХОД
+
-
|-
+
-
|
+
-
{|
+
-
|-
+
-
|A — матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера 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;
-
|-
 
-
|C — матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
 
|-
|-
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
Строка 339: Строка 223:
|-
|-
|V0 — ковариационная матрица априорного распределения <tex>p(t_1)</tex>, матрица типа double размера D x D.
|V0 — ковариационная матрица априорного распределения <tex>p(t_1)</tex>, матрица типа double размера D x D.
-
|-
 
-
|}
 
-
|}
 
-
 
-
&nbsp;
 
-
 
-
{|class="standard"
 
-
!''Генерация траектории''
 
-
|-
 
-
|X = TRAJECTORY_GENERATE(N)
 
-
|-
 
-
|ВХОД
 
-
|-
 
-
|
 
-
{|
 
-
|-
 
-
|N — длина генерируемой траектории, uint32;
 
|-
|-
|}
|}
Строка 363: Строка 230:
|
|
{|
{|
 +
|M — мат. ожидания распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, матрица типа double размера N x D;
|-
|-
-
|X сгенерированная траектория движения объекта в двухмерном пространстве, матрица типа double размера N x 2;
+
|V ковариационные матрицы распределений <tex>p(t_n|x_1,\dots,x_n)</tex>, массив типа double размера D x D x N;
|-
|-
|}
|}
Строка 371: Строка 239:
=== Рекомендации по выполнению задания ===
=== Рекомендации по выполнению задания ===
-
* При тестировании ЕМ-алгоритма обучения ЛДС рекомендуется убедиться в том, что значение неполного правдоподобия <tex>\log p(X|A,\Gamma,C,\Sigma,\mu_0,V_0)</tex> монотонно увеличивается в итерациях.
+
* В качестве модельных данных для тестирования ЛДС рассмотреть задачу сопровождения объекта в двухмерном пространстве. Для генерации траектории движения объекта использовать функцию LDS_generate с параметрами, описанными в лекции. При этом рекомендуется взять небольшой квант времени <tex>\Delta t</tex>. Убедиться в том, что отфильтрованная по Калману траектория ближе к истинной, чем наблюдаемый сигнал.
-
* Простейшим способом генерации траектории объекта является генерация по скорости и ускорению, где ускорение иногда меняет величину и направление.
+
* При тестировании обучения с учителем убедиться в том, что правдоподобие траектории объекта в двухмерном пространстве, сгенерированной с помощью LDS_generate, не превосходит правдоподобие этой траектории для параметров, полученных с помощью LDS_train.
-
* Один из вариантов тестирования реализованных алгоритмов на основе ЛДС следующий:
+
-
** Сгенерировать траекторию движения объекта
+
-
** Добавить к траектории случайный нормальный шум
+
-
** Отфильтровать зашумленную траекторию с помощью фильтра Калмана; убедиться, что отфильтрованный сигнал ближе к истинной траектории, чем входной зашумленный сигнал.
+
-
** Отфильтровать зашумленную траекторию с помощью РТС уравнений; убедиться, что результат является более точным по сравнению с фильтром Калмана.
+
-
* При тестировании генерации из модели ЛДС рекомендуется эксперимент с двухмерным сигналом, чтобы убедиться в корректности задаваемых корреляций
+
-
* Для наложения траектории движения на видео рекомендуется следующая процедура:
+
-
** Загрузить в MATLAB изображения с названиями поведенческих актов с помощью ''imread''
+
-
** Небольшими блоками загружать в MATLAB кадры видео с помощью ''aviread'', накладывать на них траекторию движения за последние 300 кадров и сохранять полученные кадры в виде отдельных JPG картинок на диск с помощью ''imwrite''. Сохраненные картинки должны иметь название XXXXX.jpg, где XXXXX — номер кадра.
+
-
** Собрать полученные картинки в видео-файл с помощью бесплатной программы [http://www.virtualdub.org/ VirtualDub]. Для этого достаточно открыть первую картинку в программе (остальные загрузятся автоматически), установить частоту кадров 25fps, установить кодек (рекомендуется DivX) и сгенерировать AVI-файл.
+
-
 
+
-
=== Данные для выполнения задания ===
+
-
 
+
-
[http://narod.ru/disk/8645012001/CG1OFD1_input.avi.html Видео-файл]
+
-
 
+
-
[http://narod.ru/disk/8645639001/frames_data.mat.html MAT-файл], содержащий данные для каждого кадра видео. В нем находится массив структур, где каждая структура соответствует одному кадру, а поля структуры имеют следующее значение:
+
-
* frame_number — номер кадра видео
+
-
* centre — координаты центра масс мыши
+
-
* nose — координаты предполагаемой точки носа мыши
+
-
* tail — координаты предполагаемой точки основания хвоста мыши
+
-
* contour — координаты точек контура мыши
+
-
* dist_centre — расстояние от центра масс мыши до центра арены
+
-
* dist_border — расстояние от центра масс мыши до ближайшей границы арены
+
-
* eigen_features — проекции контура мыши на собственные контура, полученные с помощью метода главных компонент
+
-
Для фильтрации траектории движения мыши понадобятся только значения координат центра масс мыши.
+
-
 
+
-
[[Media:SMAIS11_calc_line.rar|RAR архив]] с процедурой для MatLab, которая строит пиксельное представление линии по координатам начала и конца линии.
+
=== Оформление задания ===
=== Оформление задания ===
-
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 1. ФИО, номер группы». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
+
Выполненный вариант задания необходимо прислать письмом по адресу ''bayesml@gmail.com'' с темой «Задание 2. ФИО». Убедительная просьба присылать выполненное задание '''только один раз''' с окончательным вариантом. Новые версии будут рассматриваться только в самом крайнем случае. Также убедительная просьба строго придерживаться заданной выше спецификации реализуемых функций. Очень трудно проверять большое количество заданий, если у каждого будет свой формат реализации.
Письмо должно содержать:
Письмо должно содержать:
*PDF-файл с описанием проведенных исследований
*PDF-файл с описанием проведенных исследований
-
*LDS_GENERATE.m
+
*LDS_generate.m
-
*LDS_forwardbackward.m
+
*LDS_filter.m
-
*LDS_EM_TRAIN.m
+
*LDS_train.m
-
*TRAJECTORY_GENERATE.m
+
*EKF_generate.m
-
*Ссылка на видео-файл, размещенный на файлообменнике или на видео-хостинге, с наложенными исходной и фильтрованной траекториями движения центра масс мыши. Лучше вставить видео-файл непосредственно внутрь PDF-файла с отчетом (это можно сделать, например, в программе Adobe Acrobat 9 и выше). Тогда нужно прислать ссылку на этот PDF-файл.
+
*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
  • Набор вспомогательных файлов при необходимости
Личные инструменты