Локально-оптимальный блочно-предобусловленный сопряженный градиент ( LOBPCG ) — это безматричный метод нахождения наибольших (или наименьших) собственных значений и соответствующих собственных векторов симметричной обобщенной задачи на собственные значения.
для заданной пары комплексных эрмитовых или действительных симметричных матриц, где матрица также предполагается положительно-определенной .
Канторович в 1948 году предложил вычислять наименьшее собственное значение симметричной матрицы методом наискорейшего спуска , используя направление масштабированного градиента отношения Рэлея в скалярном произведении , с размером шага, вычисляемым путем минимизации отношения Рэлея в линейной оболочке векторов и , т.е. локально оптимальным образом. Самокиш [1] предложил применять предобуславливатель к вектору невязки для генерации предобуславливающего направления и вывел асимптотические, при приближении к собственному вектору , границы скорости сходимости. Дьяконов предложил [2] спектрально эквивалентное предобуславливание и вывел неасимптотические границы скорости сходимости. Блочный локально оптимальный многошаговый наискорейший спуск для задач на собственные значения был описан в . [3] Локальная минимизация отношения Рэлея на подпространстве, охватываемом текущим приближением, текущей невязкой и предыдущим приближением, а также его блочная версия, появились в . [4] Предобуславливающая версия была проанализирована в [5] и . [6]
Источник: [7]
Метод выполняет итеративную максимизацию (или минимизацию) обобщенного отношения Рэлея.
что приводит к нахождению наибольших (или наименьших) собственных пар
Направление самого крутого подъема, то есть градиент , обобщенного отношения Рэлея положительно пропорционально вектору
называется собственным вектором остатка . Если доступен предварительный обуславливатель , он применяется к остатку и дает вектор
называется предобусловленным остатком. Без предобусловливания мы устанавливаем и так . Итерационный метод
или, короче говоря,
известен как предобусловленный крутейший подъем (или спуск), где скаляр называется размером шага. Оптимальный размер шага может быть определен путем максимизации отношения Рэлея, т.е.
(или в случае минимизации), в этом случае метод называется локально оптимальным.
Чтобы значительно ускорить сходимость локально оптимального предобусловленного наискорейшего подъема (или спуска), можно добавить один дополнительный вектор к двухчленному рекуррентному соотношению , сделав его трехчленным:
(используйте в случае минимизации). Максимизация/минимизация отношения Рэлея в 3-мерном подпространстве может быть выполнена численно методом Рэлея–Ритца . Добавление большего количества векторов, см., например, экстраполяцию Ричардсона , не приводит к значительному ускорению [8] , но увеличивает затраты на вычисления, поэтому обычно не рекомендуется.
По мере того как итерации сходятся, векторы и становятся почти линейно зависимыми , что приводит к потере точности и делает метод Рэлея–Ритца численно неустойчивым при наличии ошибок округления. Потери точности можно избежать, заменив вектор вектором , который может быть дальше от , в базисе трехмерного подпространства , сохраняя при этом подпространство неизменным и избегая ортогонализации или любых других дополнительных операций. [8] Кроме того, ортогонализация базиса трехмерного подпространства может потребоваться для плохо обусловленных задач на собственные значения для повышения устойчивости и достижимой точности.
Это одновекторная версия метода LOBPCG — одно из возможных обобщений предобусловленных линейных решателей сопряженных градиентов на случай симметричных задач на собственные значения . [8] Даже в тривиальном случае и полученное приближение с будет отличаться от полученного алгоритмом Ланцоша , хотя оба приближения будут принадлежать одному и тому же подпространству Крылова .
Чрезвычайная простота и высокая эффективность одновекторной версии LOBPCG делают ее привлекательной для приложений, связанных с собственными значениями, в условиях жестких аппаратных ограничений: от обнаружения аномалий в реальном времени на основе спектральной кластеризации с помощью разбиения графа на встроенные микросхемы ASIC или FPGA до моделирования физических явлений рекордной вычислительной сложности на суперкомпьютерах класса exascale TOP500 .
Последующие собственные пары могут быть вычислены по одной с помощью одновекторного LOBPCG, дополненного ортогональной дефляцией, или одновременно в виде блока. В первом подходе неточности в уже вычисленных приближенных собственных векторах аддитивно влияют на точность впоследствии вычисленных собственных векторов, тем самым увеличивая ошибку с каждым новым вычислением. Итерация нескольких приближенных собственных векторов вместе в блоке локально оптимальным образом в блочной версии LOBPCG. [8] позволяет быстро, точно и надежно вычислять собственные векторы, включая те, которые соответствуют почти множественным собственным значениям, где одновекторный LOBPCG страдает от медленной сходимости. Размер блока можно настроить для баланса между численной устойчивостью, скоростью сходимости и затратами на компьютер ортогонализаций и метода Рэлея-Ритца на каждой итерации.
Блочный подход в LOBPCG заменяет одиночные векторы и на блочные векторы, т. е. матрицы и , где, например, каждый столбец аппроксимирует один из собственных векторов. Все столбцы итерируются одновременно, и следующая матрица аппроксимированных собственных векторов определяется методом Рэлея–Ритца на подпространстве, охватываемом всеми столбцами матриц и . Каждый столбец вычисляется просто как предобусловленный остаток для каждого столбца Матрица определяется таким образом, что подпространства, охватываемые столбцами и , являются одинаковыми.
Результат метода Рэлея–Ритца определяется подпространством, охватываемым всеми столбцами матриц и , где базис подпространства теоретически может быть произвольным. Однако в неточной компьютерной арифметике метод Рэлея–Ритца становится численно неустойчивым, если некоторые из базисных векторов приблизительно линейно зависимы. Числовые нестабильности обычно возникают, например, если некоторые из собственных векторов в итеративном блоке уже достигают достижимой точности для заданной компьютерной точности и особенно заметны при низкой точности, например, одинарной точности .
Искусство множественной реализации LOBPCG заключается в обеспечении численной устойчивости метода Рэлея–Ритца при минимальных вычислительных затратах путем выбора хорошего базиса подпространства. Возможно, наиболее стабильный подход, заключающийся в ортогональности базисных векторов, например, с помощью процесса Грама–Шмидта , также является наиболее вычислительно затратным. Например, реализации LOBPCG, [9] [10] используют нестабильное, но эффективное разложение Холецкого нормальной матрицы , которое выполняется только на отдельных матрицах и , а не на всем подпространстве. Постоянно растущий объем компьютерной памяти позволяет в настоящее время использовать типичные размеры блоков в диапазоне, где процент времени вычислений тратится на ортогонализацию, и метод Рэлея–Ритца начинает доминировать.
Блочные методы для задач на собственные значения, которые итерируют подпространства, обычно имеют некоторые итерационные собственные векторы, сходящиеся быстрее, чем другие, что мотивирует блокировку уже сходящихся собственных векторов, т. е. удаление их из итеративного цикла, чтобы исключить ненужные вычисления и улучшить численную устойчивость. Простое удаление собственного вектора может, вероятно, привести к формированию его дубликата в все еще итерирующих векторах. Тот факт, что собственные векторы симметричных задач на собственные значения попарно ортогональны, предполагает сохранение всех итерационных векторов ортогональны заблокированным векторам.
Блокировка может быть реализована по-разному, сохраняя численную точность и стабильность при минимизации затрат на вычисления. Например, реализации LOBPCG [9] [10] следуют [8] [11], разделяя жесткую блокировку, т. е. дефляцию ограничением, где заблокированные собственные векторы служат входными данными кода и не изменяются, от мягкой блокировки, где заблокированные векторы не участвуют в типично самом затратном итеративном шаге вычисления остатков, однако полностью участвуют в методе Рэлея—Ритца и, таким образом, могут быть изменены методом Рэлея—Ритца.
LOBPCG включает все столбцы матриц и в метод Рэлея–Ритца , что приводит к проблеме с точностью до собственного значения, которую необходимо решить, и к скалярным произведениям, которые необходимо вычислить на каждой итерации, где обозначает размер блока — количество столбцов. Для больших размеров блока это начинает доминировать над затратами на вычисления и ввод-вывод и ограничивать распараллеливание, когда несколько вычислительных устройств работают одновременно.
В оригинальной статье LOBPCG [8] описывается модификация, называемая LOBPCG II, для решения такой проблемы, запускающей одновекторную версию метода LOBPCG для каждой желаемой собственной пары с процедурой Рэлея-Ритца, решающей задачи на спроецированные собственные значения размером 3 на 3. Глобальная процедура Рэлея-Ритца для всех собственных пар выполняется на каждой итерации, но только на столбцах матрицы , тем самым уменьшая количество необходимых скалярных произведений до от и размер глобальной задачи на спроецированные собственные значения до -by- от -by- на каждой итерации. Ссылка [12] идет дальше, применяя алгоритм LOBPCG к каждому приближенному собственному вектору отдельно, т. е. запуская неблокированную версию метода LOBPCG для каждой желаемой собственной пары для фиксированного числа итераций. Процедуры Рэлея-Ритца в этих запусках должны решать только набор задач на спроецированные собственные значения размером 3 × 3. Глобальная процедура Рэлея-Ритца для всех желаемых собственных пар применяется только периодически в конце фиксированного числа незаблокированных итераций LOBPCG.
Такие модификации могут быть менее надежными по сравнению с исходным LOBPCG. Отдельно работающие ветви одновекторного LOBPCG могут не следовать непрерывным итеративным путям, переворачиваясь вместо этого и создавая дублированные приближения к одному и тому же собственному вектору. Одновекторный LOBPCG может быть непригоден для кластеризованных собственных значений, но отдельные запуски LOBPCG с малыми блоками требуют автоматического определения их размеров блоков в процессе итераций, поскольку количество кластеров собственных значений и их размеры могут быть неизвестны априори.
LOBPCG по построению гарантированно [8] минимизирует отношение Рэлея не медленнее, чем блочный наискорейший градиентный спуск , который имеет всеобъемлющую теорию сходимости. Каждый собственный вектор является стационарной точкой отношения Рэлея , где градиент обращается в нуль. Таким образом, градиентный спуск может замедляться вблизи любого собственного вектора , однако, он гарантированно либо сходится к собственному вектору с линейной скоростью сходимости, либо, если этот собственный вектор является седловой точкой , итеративное отношение Рэлея с большей вероятностью опустится ниже соответствующего собственного значения и начнет линейно сходиться к следующему собственному значению ниже. Наихудшее значение скорости линейной сходимости было определено [8] и зависит от относительного зазора между собственным значением и остальной частью спектра матрицы и качества предобуславливателя , если он присутствует.
Для общей матрицы, очевидно, нет способа предсказать собственные векторы и, таким образом, сгенерировать начальные приближения, которые всегда работают хорошо. Итеративное решение LOBPCG может быть чувствительным к начальным приближениям собственных векторов, например, требовать больше времени для сходимости, замедляясь при прохождении промежуточных собственных пар. Более того, в теории нельзя гарантировать сходимость обязательно к наименьшей собственной паре, хотя вероятность промаха равна нулю. Качественная случайная гауссовская функция с нулевым средним обычно используется по умолчанию в LOBPCG для генерации начальных приближений. Чтобы зафиксировать начальные приближения, можно выбрать фиксированное начальное число для генератора случайных чисел .
В отличие от метода Ланцоша , LOBPCG на практике редко демонстрирует асимптотическую сверхлинейную сходимость .
LOBPCG может быть тривиально адаптирован для вычисления нескольких наибольших сингулярных значений и соответствующих сингулярных векторов (частичный SVD), например, для итеративного вычисления PCA для матрицы данных D с нулевым средним значением, без явного вычисления ковариационной матрицы D T D , т.е. в безматричном режиме . Основное вычисление - это оценка функции произведения D T (DX) ковариационной матрицы D T D и блочного вектора X , который итеративно аппроксимирует желаемые сингулярные векторы. PCA требует наибольших собственных значений ковариационной матрицы, в то время как LOBPCG обычно реализуется для вычисления наименьших. Простой обходной путь - инвертировать функцию, заменив -D T (DX) на D T (DX) и, таким образом, поменять порядок собственных значений на обратный, поскольку LOBPCG не заботится о том, является ли матрица задачи собственных значений положительно определенной или нет. [9]
LOBPCG для PCA и SVD реализован в SciPy начиная с версии 1.4.0 [13]
Создатель LOBPCG, Эндрю Князев , опубликовал эталонную реализацию под названием Block Locally Optimal Preconditional Eigenvalue Xolvers (BLOPEX) [14] [15] с интерфейсами к PETSc , hypre и параллельному иерархическому адаптивному многоуровневому методу (PHAML). [16] Другие реализации доступны, например, в GNU Octave , [17] MATLAB (включая распределенные или мозаичные массивы), [9] Java , [18] Anasazi ( Trilinos ), [19] SLEPc , [20] [21] SciPy , [10] Julia , [22] MAGMA, [23] Pytorch , [24] Rust , [25] OpenMP и OpenACC , [26] CuPy ( библиотека массивов, совместимая с NumPy , ускоренная с помощью CUDA ), [27] Google JAX , [28] и NVIDIA AMGX. [29] LOBPCG реализован, [30] но не включен, в TensorFlow .
Пакеты программного обеспечения scikit-learn и Megaman [31] используют LOBPCG для масштабирования спектральной кластеризации [32] и обучения многообразий [33] с помощью собственных карт Лапласа для больших наборов данных. NVIDIA реализовала [34] LOBPCG в своей библиотеке nvGRAPH, представленной в CUDA 8. Sphynx [35] — гибридный параллельный разделитель графов с распределенной и общей памятью — первый инструмент для разделения графов, работающий на графических процессорах с распределенной памятью — использует спектральную кластеризацию для разделения графов , вычисляя собственные векторы на матрице Лапласа графа с помощью LOBPCG из пакета Anasazi .
LOBPCG реализован в ABINIT [36] (включая версию CUDA ) и Octopus . [37] Он использовался для матриц размером в несколько миллиардов долларов финалистами премии Гордона Белла на суперкомпьютере Earth Simulator в Японии. [38] [39] Модель Хаббарда для сильно коррелированных электронных систем, позволяющая понять механизм сверхпроводимости, использует LOBPCG для расчета основного состояния гамильтониана на компьютере K [ 40] и системах с несколькими графическими процессорами. [41]
Существуют версии LOBPCG для MATLAB [42] и Julia [43] [44] для уравнений Кона-Шэма и теории функционала плотности (DFT) с использованием базиса плоских волн. Последние реализации включают TTPY, [45] Platypus‐QM, [46] MFDn, [47] ACE-Molecule, [48] LACONIC. [49]
LOBPCG из BLOPEX используется для настройки прекондиционера в библиотеке решателя BDDCML для многоуровневой балансировки домена декомпозиции ограничений (BDDC), которая включена в OpenFTL (открытая библиотека шаблонов конечных элементов ) и симулятор потока подземных вод, растворенных веществ и переноса тепла в трещиноватых пористых средах Flow123d . LOBPCG был реализован [50] в LS-DYNA и косвенно в ANSYS . [51]
LOBPCG — один из основных решателей собственных значений в PYFEMax и высокопроизводительном мультифизическом программном обеспечении для конечных элементов Netgen/NGSolve. LOBPCG от hypre включен в легковесную масштабируемую библиотеку C++ с открытым исходным кодом для методов конечных элементов MFEM , которая используется во многих проектах, включая BLAST , XBraid, VisIt , xSDK, институт FASTMath в SciDAC и Центр совместного проектирования эффективных экзамасштабных дискретизаций (CEED) в проекте экзамасштабных вычислений .
Для шумоподавления можно использовать итеративный приближенный фильтр нижних частот на основе LOBPCG ; см., например, [52] , чтобы ускорить шумоподавление общей вариации .
Сегментация изображения с помощью спектральной кластеризации выполняет низкоразмерное вложение с использованием матрицы сродства между пикселями, за которым следует кластеризация компонентов собственных векторов в низкоразмерном пространстве, например, с использованием графового лапласиана для двустороннего фильтра . Сегментация изображения с помощью спектрального разбиения графа с помощью LOBPCG с многосеточной предварительной обработкой была впервые предложена в [53] и фактически протестирована в [54] и. [55] Последний подход был позже реализован в Python scikit-learn [56] , который использует LOBPCG из SciPy с алгебраической многосеточной предварительной обработкой для решения задачи собственных значений для графового лапласиана.