Уровень алгоритма

Алгоритм дополнения матриц: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
{{algorithm
{{algorithm
| name              = Восстановление матриц
| name              = Восстановление матриц с использованием оптимизации на римановых многообразиях
| serial_complexity = <math>O(|\Omega|r^2)</math>
| serial_complexity = <math>O(|\Omega|r^2)</math>
| pf_height        = <math>const</math>
| pf_height        = <math>const</math>
Строка 23: Строка 23:


=== Математическое описание алгоритма ===
=== Математическое описание алгоритма ===
<math>M</math> - матрица, известная нам только на заданном множестве индексов (по-сути мы знаем только <math> P_{\Omega}(M) </math>).
Введем оператор <math>P_{\Omega}(X)_{i, j} = X_{i, j}</math> если <math>{i, j} \in \Omega</math>, иначе 0.
Множество матриц с рангом r будем обозначать <math>M_r</math>, касательное пространство к матрице <math>X \in M_r</math> - <math>T_x M_r</math>.
Введем так же проектор на касательное пространство.Пусть <math>X_i = U \Sigma V_T</math>. Тогда <math> P_{T_x M_r}(Z) = P_{U}ZP_{V} +  P_{U^\perp}ZP_{V} +  P_{U}ZP_{V^\perp}</math>.
Запишем алгоритм:
WHILE(<math> ||P_{\Omega}(X_{t} - M)|| \geq \varepsilon </math>) do
<math>X_{t+1} = SVD(X_{t} - \alpha_t P_{T_x M_r} P_{\Omega}(X_{t} - M)) </math>
end


=== Макроструктура алгоритма ===
=== Макроструктура алгоритма ===

Текущая версия от 18:55, 26 октября 2021


Восстановление матриц с использованием оптимизации на римановых многообразиях
Последовательный алгоритм
Последовательная сложность [math]\displaystyle{ O(|\Omega|r^2) }[/math]
Объём входных данных [math]\displaystyle{ |\Omega| }[/math]
Объём выходных данных [math]\displaystyle{ 2nr }[/math]
Параллельный алгоритм
Высота ярусно-параллельной формы [math]\displaystyle{ const }[/math]
Ширина ярусно-параллельной формы [math]\displaystyle{ const }[/math]


Свойства и структура алгоритма

Общее описание алгоритма

Определим задачу заполнения неизвестных значений матрицы.

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

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

Однако такой алгоритм обладает рядом недостатков, самый существенный из которых - высокая сложность работы. Для SVD разложения необходимо совершить [math]\displaystyle{ O(n^3) }[/math] действий.

Исправить эту ошибку призван следующий подход. Будем рассматривать матрицы фиксированного ранга как гладкое риманово многообразие. К каждому элементу этого многообразия зададим касательное пространство. Перед тем, как вычесть градиент из текущего приближения, сначала спроектируем его на касательное пространство к текущему приближению. Благодаря этому матрица, полученная после совершения градиентного шага будет иметь ранг не выше [math]\displaystyle{ 2r }[/math] (если считать, что исходный ранг был [math]\displaystyle{ r }[/math]). Теперь от этой матрицы не сложно сделать SVD разложение, потому что она имеет небольшие размеры.

Математическое описание алгоритма

[math]\displaystyle{ M }[/math] - матрица, известная нам только на заданном множестве индексов (по-сути мы знаем только [math]\displaystyle{ P_{\Omega}(M) }[/math]).

Введем оператор [math]\displaystyle{ P_{\Omega}(X)_{i, j} = X_{i, j} }[/math] если [math]\displaystyle{ {i, j} \in \Omega }[/math], иначе 0.

Множество матриц с рангом r будем обозначать [math]\displaystyle{ M_r }[/math], касательное пространство к матрице [math]\displaystyle{ X \in M_r }[/math] - [math]\displaystyle{ T_x M_r }[/math]. Введем так же проектор на касательное пространство.Пусть [math]\displaystyle{ X_i = U \Sigma V_T }[/math]. Тогда [math]\displaystyle{ P_{T_x M_r}(Z) = P_{U}ZP_{V} + P_{U^\perp}ZP_{V} + P_{U}ZP_{V^\perp} }[/math].

Запишем алгоритм:

WHILE([math]\displaystyle{ ||P_{\Omega}(X_{t} - M)|| \geq \varepsilon }[/math]) do

[math]\displaystyle{ X_{t+1} = SVD(X_{t} - \alpha_t P_{T_x M_r} P_{\Omega}(X_{t} - M)) }[/math]

end

Макроструктура алгоритма

Схема реализации последовательного алгоритма

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Свойства алгоритма

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Локальность реализации алгоритма

Структура обращений в память и качественная оценка локальности
Количественная оценка локальности

Возможные способы и особенности параллельной реализации алгоритма

Масштабируемость алгоритма и его реализации

Масштабируемость алгоритма

Масштабируемость реализации алгоритма

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

Существующие реализации алгоритма

Литература

[1] Guaranteed Rank Minimization via Singular Value Projection.Raghu Meka, Prateek Jain, Inderjit S. Dhillon // arXiv:0909.5457

[2] Low-rank matrix completion by Riemannian optimization. Bart Vandereycken // arXiv:0909.5457