Методы оптимизации в машинном обучении (курс лекций)/2012/Задание 1

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: __NOTOC__ {{stop|Формулировка задания находится в стадии формирования. Просьба не приступать к выполнению з...)
Текущая версия (16:38, 28 сентября 2012) (править) (отменить)
м
 
(14 промежуточных версий не показаны.)
Строка 1: Строка 1:
__NOTOC__
__NOTOC__
-
 
-
{{stop|Формулировка задания находится в стадии формирования. Просьба не приступать к выполнению задания до тех пор, пока это предупреждение не будет удалено.}}
 
{{Main|Методы оптимизации в машинном обучении (курс лекций)}}
{{Main|Методы оптимизации в машинном обучении (курс лекций)}}
Строка 7: Строка 5:
[[Image:MOMO12_Task1_intro.jpg|300px]]
[[Image:MOMO12_Task1_intro.jpg|300px]]
-
'''Начало выполнения задания''': 27 сентября 2012
+
'''Начало выполнения задания''': 28 сентября 2012
-
'''Срок сдачи''': {{ins|10 октября 2012, 23:59}}
+
'''Срок сдачи''': {{ins|11 октября 2012 (четверг), 23:59}}
-
Среда реализации задания – MATLAB. Неэффективная реализация кода может негативно отразиться на оценке.
+
Среда реализации задания – MATLAB.
=== Формулировка задания ===
=== Формулировка задания ===
-
Рассматривается линейная динамическая система (ЛДС), в которой полное правдоподобие задается как:
 
-
<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>
 
-
<tex>
 
-
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>
 
-
</center>
 
-
 
-
Здесь <tex>f</tex> и <tex>g</tex> — известные вектор-функции.
 
-
 
-
Для этой системы нужно реализовать расширенный фильтр Калмана и протестировать его работу на модельных данных.
 
-
 
Для выполнения задания необходимо:
Для выполнения задания необходимо:
-
* Реализовать алгоритм генерации выборки из вероятностной модели ЛДС и нелинейной ДС;
+
* Реализовать алгоритмы одномерной минимизации функции без производной: метод золотого сечения, метод парабол и комбинированный метод Брента;
-
* Реализовать алгоритм онлайн фильтрации сигнала с помощью фильтра Калмана и с помощью расширенного фильтра Калмана;
+
* Протестировать реализованные алгоритмы на следующем наборе задач оптимизации:
-
* Реализовать обучение параметров ЛДС с учителем. При этом часть параметров ЛДС может быть задана пользователем;
+
** <tex>f(x) = -5x^5+4x^4-12x^3+11x^2-2x+1</tex> на интервале [-0.5, 0.5];
-
* Протестировать реализованные алгоритмы на модельных данных;
+
** <tex>f(x) = \ln^2(x-2) + \ln^2(10-x) - x^{0.2}</tex> на интервале [6, 9.9];
-
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен, в частности, включать в себя графики фильтрации сгенерированных траекторий для линейного и нелинейного случая.
+
** <tex>f(x) = -3x\sin 0.75x + \exp(-2x)</tex> на интервале <tex>[0, 2\pi]</tex>;
 +
** <tex>f(x) = \exp(3x) + 5\exp(-2x)</tex> на интервале [0, 1];
 +
** <tex>f(x) = 0.2x\ln x + (x-2.3)^2</tex> на интервале [0.5, 2.5];
 +
* Протестировать реализованные алгоритмы для задач минимизации многомодальных функций, например, на различных полиномах;
 +
* Реализовать метод кубических аппроксимаций (по значениям функции и производной в двух точках) и комбинированный метод Брента c производной, сравнить их работу с методами оптимизации без производной;
 +
* Реализовать метод Флетчера для неточной одномерной оптимизации, протестировать метод для минимизации двухмерной функции <tex>f(x) = 0.7x_1^4-8x_1^2+6x_2^2+\cos(x_1x_2)-8x_1</tex> из точки <tex>x_0 = [-\pi, \pi]^T</tex> вдоль направлений <tex>d = [1, -1.3]^T</tex> и <tex>d = [1, -1.1]^T</tex>, сравнить работу метода Флетчера с точными методами одномерной минимизации;
 +
* Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен содержать, в частности, количество обращений к оракулу при всех запусках итерационных процессов оптимизации.
=== Спецификация реализуемых функций ===
=== Спецификация реализуемых функций ===
{|class="standard"
{|class="standard"
-
!''Генерация выборки для ЛДС''
+
!''Метод золотого сечения''
|-
|-
-
|[X, T] = LDS_generate(N, A, C, G, S, mu0, V0)
+
|[x_min, f_min, status] = min_golden(func, interval, param_name1, param_value1, ...)
|-
|-
|ВХОД
|ВХОД
Строка 59: Строка 36:
|
|
{|border="0"
{|border="0"
-
|N количество точек в генерируемой последовательности, uint32;
+
|func указатель на оптимизируемую функцию;
|-
|-
-
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
+
|interval границы интервала оптимизации, вектор типа double длины 2;
|-
|-
-
|C матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
+
|(param_name, param_value) необязательные параметры, следующие названия и значения возможны:
|-
|-
-
|G ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
+
|
 +
{|border="0"
 +
|'eps' точность оптимизации по аргументу, число, по умолчанию = 1e-5;
 +
|-
 +
|'max_iter' — максимальное число итераций, число, по умолчанию = 500;
 +
|-
 +
|'display' — режим отображения, true или false, если true, то отображаются номер итерации, текущее значение функции, аргумента, текущая точность и др. показатели, по умолчанию = false;
 +
|-
 +
|}
|-
|-
-
|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.
 
|}
|}
|-
|-
Строка 78: Строка 58:
|
|
{|
{|
-
|X сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
+
|x_min найденное значение минимума, число;
|-
|-
-
|T последовательность скрытых характеристик, матрица типа double размера N x D
+
|f_min значение функции в точке минимума, число;
-
|}
+
-
|}
+
-
 
+
-
Обратите внимание: в процедуре LDS_generate параметры D и d определяются неявно по размеру соответствующих элементов.
+
-
 
+
-
{|class="standard"
+
-
!''Фильтр Калмана для ЛДС''
+
-
|-
+
-
|[M, V] = LDS_filter(X, A, C, G, S, mu0, V0)
+
-
|-
+
-
|ВХОД
+
-
|-
+
-
|
+
-
{|
+
-
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, d – количество признаков;
+
|-
|-
-
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
+
|status результаты оптимизации, структура со следующими полями:
|-
|-
-
|C матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
+
|
 +
{|border="0"
 +
|'flag' общий результат, число, равно 1, если достигнут оптимум с точностью eps, равно -1, если произошел выход по максимальному числу итераций;
 +
|-
 +
|'num_oracle' — количество обращений к оракулу;
 +
|-
 +
|}
|-
|-
-
|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.
+
-
|-
+
-
|}
+
-
|-
+
-
|ВЫХОД
+
-
|-
+
-
|
+
-
{|
+
-
|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;
+
-
|-
+
-
|}
+
|}
|}
-
&nbsp;
+
Прототипы функций min_parabolic для метода парабол, min_qubic для кубических аппроксимаций и min_brent для метода Брента выглядят аналогично. В методе Брента добавляется параметр 'use_gradient' с возможными значениями true и false для учета случая оптимизации с производной и без. При отображении в методе Брента необходимо указывать способ выбора очередной точки на каждой итерации (golden/parabolic или bisection/parabolic).
{|class="standard"
{|class="standard"
-
!''Обучение с учителем для ЛДС''
+
!''Метод Флетчера''
|-
|-
-
|[A, C, G, S] = LDS_train(X, T, ParameterName1, ParameterValue1, ParameterName2, ParameterValue2, ...)
+
|[alpha_min, f_min, status] = min_fletcher(func, x, d, param_name1, param_value1, ...)
|-
|-
|ВХОД
|ВХОД
|-
|-
|
|
-
{|
+
{|border="0"
-
|X входная последовательность наблюдаемых переменных, матрица типа double размера N x d, где N – количество точек в последовательности, d – число признаков;
+
|func указатель на оптимизируемую функцию;
|-
|-
-
|T входная последовательность значений скрытых характеристик, матрица типа double размера N x D;
+
|x текущая точка, вектор типа double;
|-
|-
-
|(ParameterName, ParameterValue) (необязательные аргументы) набор дополнительных параметров, возможны следующие названия параметров:
+
|d направление минимизации, вектор типа double;
|-
|-
-
|&nbsp;&nbsp;'A' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(t_n|t_{n-1})</tex>(соответственно, ее не нужно вычислять внутри функции);
+
|(param_name, param_value) — необязательные параметры, следующие названия и значения возможны:
|-
|-
-
|&nbsp;&nbsp;'C' — задаваемая пользователем матрица преобразования среднего в распределении <tex>p(x_n|t_n)</tex>;
+
|
-
|-
+
{|border="0"
-
|&nbsp;&nbsp;'G' — задаваемая пользователем матрица ковариации <tex>p(t_n|t_{n-1})</tex>;
+
|'params' — параметры метода [rho sigma tau xi], по умолчанию = [0.1 0.7 0.1 9];
-
|-
+
|-
-
|&nbsp;&nbsp;'S' — задаваемая пользователем матрица ковариации в распределении <tex>p(x_n|t_n)</tex>;
+
|'max_iter' — максимальное число итераций, число, по умолчанию = 100;
 +
|-
 +
|'display' — режим отображения, true или false, по умолчанию = false;
 +
|-
 +
|}
|-
|-
|}
|}
Строка 153: Строка 110:
|
|
{|
{|
 +
|alpha_min — найденное значение минимума для alpha, число;
|-
|-
-
|A матрица преобразования среднего в последовательности <tex>t</tex>, матрица типа double размера D x D;
+
|f_min значение функции в точке минимума, число;
|-
|-
-
|C матрица преобразования среднего при переходе от <tex>t_n</tex> к <tex>x_n</tex>, матрица типа double размера d x D;
+
|status результаты оптимизации, структура со следующими полями:
|-
|-
-
|G — ковариационная матрица для распределения <tex>p(t_n|t_{n-1})</tex>, матрица типа double размера D x D;
+
|
 +
{|border="0"
 +
|'flag' — общий результат, число, равно 1, если достигнут неточный оптимум, равно -1, если произошел выход по максимальному числу итераций;
 +
|-
 +
|'num_oracle' — количество обращений к оракулу;
 +
|-
 +
|}
|-
|-
-
|S — ковариационная матрица для распределения <tex>p(x_n|t_n)</tex>, матрица типа double размера d x d;
 
-
|-
 
-
|}
 
-
|}
 
-
 
-
&nbsp;
 
-
 
-
{|class="standard"
 
-
!''Генерация выборки для нелинейной динамической системы''
 
-
|-
 
-
|[X, T] = EKF_generate(N, func_horiz, func_vert, G, S, mu0, V0)
 
-
|-
 
-
|ВХОД
 
-
|-
 
-
|
 
-
{|border="0"
 
-
|N — количество точек в генерируемой последовательности, uint32;
 
-
|-
 
-
|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;
 
-
|-
 
-
|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.
 
-
|}
 
-
|-
 
-
|ВЫХОД
 
-
|-
 
-
|
 
-
{|
 
-
|X — сгенерированная наблюдаемая последовательность, матрица типа double размера N x d
 
-
|-
 
-
|T — последовательность скрытых характеристик, матрица типа double размера N x D
 
|}
|}
|}
|}
-
 
-
Обратите внимание: в процедуре EKF_generate параметры D и d определяются неявно по размеру соответствующих элементов.
 
-
 
-
{|class="standard"
 
-
!''Расширенный фильтр Калмана для нелинейной динамической системы''
 
-
|-
 
-
|[M, V] = EKF_filter(X, func_horiz, func_vert, G, S, mu0, V0)
 
-
|-
 
-
|ВХОД
 
-
|-
 
-
|
 
-
{|
 
-
|X — входная последовательность, матрица типа double размера N x d, где N – количество точек в последовательности, 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;
 
-
|-
 
-
|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.
 
-
|-
 
-
|}
 
-
|-
 
-
|ВЫХОД
 
-
|-
 
-
|
 
-
{|
 
-
|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;
 
-
|-
 
-
|}
 
-
|}
 
-
 
-
=== Рекомендации по выполнению задания ===
 
-
 
-
* В качестве модельных данных для тестирования ЛДС рассмотреть задачу сопровождения объекта в двухмерном пространстве. Для генерации траектории движения объекта использовать функцию LDS_generate с параметрами, описанными в лекции. При этом рекомендуется взять небольшой квант времени <tex>\Delta t</tex>. Убедиться в том, что отфильтрованная по Калману траектория ближе к истинной, чем наблюдаемый сигнал.
 
-
* При тестировании обучения с учителем убедиться в том, что правдоподобие траектории объекта в двухмерном пространстве, сгенерированной с помощью LDS_generate, не превосходит правдоподобие этой траектории для параметров, полученных с помощью LDS_train.
 
=== Оформление задания ===
=== Оформление задания ===
Строка 249: Строка 132:
Письмо должно содержать:
Письмо должно содержать:
-
*PDF-файл с описанием проведенных исследований
+
*PDF-файл с описанием проведенных исследований;
-
*Набор вспомогательных файлов при необходимости
+
*Файлы min_golden.m, min_quadratic.m, min_cubic.m, min_brent.m, min_fletcher.m;
 +
*Набор вспомогательных файлов при необходимости.
[[Категория:Учебные курсы]]
[[Категория:Учебные курсы]]

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


Начало выполнения задания: 28 сентября 2012

Срок сдачи: 11 октября 2012 (четверг), 23:59

Среда реализации задания – MATLAB.

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

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

  • Реализовать алгоритмы одномерной минимизации функции без производной: метод золотого сечения, метод парабол и комбинированный метод Брента;
  • Протестировать реализованные алгоритмы на следующем наборе задач оптимизации:
    • f(x) = -5x^5+4x^4-12x^3+11x^2-2x+1 на интервале [-0.5, 0.5];
    • f(x) = \ln^2(x-2) + \ln^2(10-x) - x^{0.2} на интервале [6, 9.9];
    • f(x) = -3x\sin 0.75x + \exp(-2x) на интервале [0, 2\pi];
    • f(x) = \exp(3x) + 5\exp(-2x) на интервале [0, 1];
    • f(x) = 0.2x\ln x + (x-2.3)^2 на интервале [0.5, 2.5];
  • Протестировать реализованные алгоритмы для задач минимизации многомодальных функций, например, на различных полиномах;
  • Реализовать метод кубических аппроксимаций (по значениям функции и производной в двух точках) и комбинированный метод Брента c производной, сравнить их работу с методами оптимизации без производной;
  • Реализовать метод Флетчера для неточной одномерной оптимизации, протестировать метод для минимизации двухмерной функции f(x) = 0.7x_1^4-8x_1^2+6x_2^2+\cos(x_1x_2)-8x_1 из точки x_0 = [-\pi, \pi]^T вдоль направлений d = [1, -1.3]^T и d = [1, -1.1]^T, сравнить работу метода Флетчера с точными методами одномерной минимизации;
  • Написать отчет в формате PDF с описанием всех проведенных исследований. Данный отчет должен содержать, в частности, количество обращений к оракулу при всех запусках итерационных процессов оптимизации.

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

Метод золотого сечения
[x_min, f_min, status] = min_golden(func, interval, param_name1, param_value1, ...)
ВХОД
func — указатель на оптимизируемую функцию;
interval — границы интервала оптимизации, вектор типа double длины 2;
(param_name, param_value) — необязательные параметры, следующие названия и значения возможны:
'eps' — точность оптимизации по аргументу, число, по умолчанию = 1e-5;
'max_iter' — максимальное число итераций, число, по умолчанию = 500;
'display' — режим отображения, true или false, если true, то отображаются номер итерации, текущее значение функции, аргумента, текущая точность и др. показатели, по умолчанию = false;
ВЫХОД
x_min — найденное значение минимума, число;
f_min — значение функции в точке минимума, число;
status — результаты оптимизации, структура со следующими полями:
'flag' — общий результат, число, равно 1, если достигнут оптимум с точностью eps, равно -1, если произошел выход по максимальному числу итераций;
'num_oracle' — количество обращений к оракулу;

Прототипы функций min_parabolic для метода парабол, min_qubic для кубических аппроксимаций и min_brent для метода Брента выглядят аналогично. В методе Брента добавляется параметр 'use_gradient' с возможными значениями true и false для учета случая оптимизации с производной и без. При отображении в методе Брента необходимо указывать способ выбора очередной точки на каждой итерации (golden/parabolic или bisection/parabolic).

Метод Флетчера
[alpha_min, f_min, status] = min_fletcher(func, x, d, param_name1, param_value1, ...)
ВХОД
func — указатель на оптимизируемую функцию;
x — текущая точка, вектор типа double;
d — направление минимизации, вектор типа double;
(param_name, param_value) — необязательные параметры, следующие названия и значения возможны:
'params' — параметры метода [rho sigma tau xi], по умолчанию = [0.1 0.7 0.1 9];
'max_iter' — максимальное число итераций, число, по умолчанию = 100;
'display' — режим отображения, true или false, по умолчанию = false;
ВЫХОД
alpha_min — найденное значение минимума для alpha, число;
f_min — значение функции в точке минимума, число;
status — результаты оптимизации, структура со следующими полями:
'flag' — общий результат, число, равно 1, если достигнут неточный оптимум, равно -1, если произошел выход по максимальному числу итераций;
'num_oracle' — количество обращений к оракулу;

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

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

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

  • PDF-файл с описанием проведенных исследований;
  • Файлы min_golden.m, min_quadratic.m, min_cubic.m, min_brent.m, min_fletcher.m;
  • Набор вспомогательных файлов при необходимости.
Личные инструменты