Итерация мощности

Алгоритм собственных значений

В математике степенная итерация (также известная как степенной метод ) — это алгоритм собственных значений : при наличии диагонализуемой матрицы алгоритм произведет число , которое является наибольшим (по абсолютной величине) собственным значением , и ненулевой вектор , который является соответствующим собственным вектором , то есть . Алгоритм также известен как итерация фон Мизеса . [1] А {\displaystyle А} λ {\displaystyle \лямбда} А {\displaystyle А} в {\displaystyle v} λ {\displaystyle \лямбда} А в = λ в {\displaystyle Av=\лямбда v}

Итерация мощности — очень простой алгоритм, но он может сходиться медленно. Наиболее трудоемкая операция алгоритма — умножение матрицы на вектор, поэтому он эффективен для очень большой разреженной матрицы при соответствующей реализации. Скорость сходимости примерно такая (см. следующий раздел). На словах сходимость экспоненциальная, а основанием является спектральный зазор . А {\displaystyle А} ( λ 1 / λ 2 ) к {\displaystyle (\lambda _{1}/\lambda _{2})^{k}}

Метод

Анимация, которая визуализирует алгоритм итерации мощности на матрице 2x2. Матрица изображена ее двумя собственными векторами. Ошибка вычисляется как | | приближение наибольший собственный вектор | | {\displaystyle ||{\text{аппроксимация}}-{\text{наибольший собственный вектор}}||}

Алгоритм итерации мощности начинается с вектора , который может быть приближением к доминирующему собственному вектору или случайным вектором. Метод описывается рекуррентным соотношением б 0 {\displaystyle b_{0}}

б к + 1 = А б к А б к {\displaystyle b_{k+1}={\frac {Ab_{k}}{\|Ab_{k}\|}}}

Таким образом, на каждой итерации вектор умножается на матрицу и нормализуется. b k {\displaystyle b_{k}} A {\displaystyle A}

Если мы предположим, что имеет собственное значение, которое строго больше по величине, чем его другие собственные значения, и начальный вектор имеет ненулевую компоненту в направлении собственного вектора, связанного с доминирующим собственным значением, то подпоследовательность сходится к собственному вектору, связанному с доминирующим собственным значением. A {\displaystyle A} b 0 {\displaystyle b_{0}} ( b k ) {\displaystyle \left(b_{k}\right)}

Без двух вышеприведенных предположений последовательность не обязательно сходится. В этой последовательности, ( b k ) {\displaystyle \left(b_{k}\right)}

b k = e i ϕ k v 1 + r k {\displaystyle b_{k}=e^{i\phi _{k}}v_{1}+r_{k}} ,

где — собственный вектор, связанный с доминирующим собственным значением, и . Наличие члена подразумевает, что не сходится, если . При двух предположениях, перечисленных выше, последовательность, определяемая v 1 {\displaystyle v_{1}} r k 0 {\displaystyle \|r_{k}\|\rightarrow 0} e i ϕ k {\displaystyle e^{i\phi _{k}}} ( b k ) {\displaystyle \left(b_{k}\right)} e i ϕ k = 1 {\displaystyle e^{i\phi _{k}}=1} ( μ k ) {\displaystyle \left(\mu _{k}\right)}

μ k = b k A b k b k b k {\displaystyle \mu _{k}={\frac {b_{k}^{*}Ab_{k}}{b_{k}^{*}b_{k}}}}

сходится к доминирующему собственному значению (с отношением Рэлея ). [ необходимо разъяснение ]

Это можно вычислить с помощью следующего алгоритма (показано на Python с NumPy):

#!/usr/bin/env питон3импортировать  numpy  как  npdef  power_iteration ( A ,  num_iterations :  int ):  # В идеале выбрать случайный вектор  # Чтобы уменьшить вероятность того, что наш вектор  # будет ортогонален собственному вектору  b_k  =  np . random . rand ( A . shape [ 1 ]) for  _  in  range ( num_iterations ):  # вычислить произведение матрицы на вектор Ab  b_k1  =  np . dot ( A ,  b_k )  # вычислить норму b_k1_norm  =  np.linalg.norm ( b_k1 ) # повторно нормализуем вектор  b_k  =  b_k1  /  b_k1_norm вернуться  б_кpower_iteration ( np . array ([[ 0.5 ,  0.5 ],  [ 0.2 ,  0.8 ]]),  10 )

Вектор сходится к ассоциированному собственному вектору. В идеале следует использовать отношение Рэлея , чтобы получить ассоциированное собственное значение. b k {\displaystyle b_{k}}

Этот алгоритм используется для расчета Google PageRank .

Этот метод также можно использовать для вычисления спектрального радиуса (собственного значения с наибольшей величиной для квадратной матрицы) путем вычисления отношения Рэлея

ρ ( A ) = max { | λ 1 | , , | λ n | } = b k A b k b k b k . {\displaystyle \rho (A)=\max \left\{|\lambda _{1}|,\dotsc ,|\lambda _{n}|\right\}={\frac {b_{k}^{\top }Ab_{k}}{b_{k}^{\top }b_{k}}}.}

Анализ

Пусть будет разложена в ее жорданову каноническую форму : , где первый столбец является собственным вектором , соответствующим доминирующему собственному значению . Поскольку в общем случае доминирующее собственное значение уникально, первый жорданов блок является матрицей , где является наибольшим по величине собственным значением A. Начальный вектор можно записать в виде линейной комбинации столбцов V : A {\displaystyle A} A = V J V 1 {\displaystyle A=VJV^{-1}} V {\displaystyle V} A {\displaystyle A} λ 1 {\displaystyle \lambda _{1}} A {\displaystyle A} J {\displaystyle J} 1 × 1 {\displaystyle 1\times 1} [ λ 1 ] , {\displaystyle [\lambda _{1}],} λ 1 {\displaystyle \lambda _{1}} b 0 {\displaystyle b_{0}}

b 0 = c 1 v 1 + c 2 v 2 + + c n v n . {\displaystyle b_{0}=c_{1}v_{1}+c_{2}v_{2}+\cdots +c_{n}v_{n}.}

По предположению, имеет ненулевую составляющую в направлении доминирующего собственного значения, поэтому . b 0 {\displaystyle b_{0}} c 1 0 {\displaystyle c_{1}\neq 0}

Вычислительно полезное рекуррентное соотношение для можно переписать как: b k + 1 {\displaystyle b_{k+1}}

b k + 1 = A b k A b k = A k + 1 b 0 A k + 1 b 0 , {\displaystyle b_{k+1}={\frac {Ab_{k}}{\|Ab_{k}\|}}={\frac {A^{k+1}b_{0}}{\|A^{k+1}b_{0}\|}},}

где выражение: более поддается следующему анализу. A k + 1 b 0 A k + 1 b 0 {\displaystyle {\frac {A^{k+1}b_{0}}{\|A^{k+1}b_{0}\|}}}

b k = A k b 0 A k b 0 = ( V J V 1 ) k b 0 ( V J V 1 ) k b 0 = V J k V 1 b 0 V J k V 1 b 0 = V J k V 1 ( c 1 v 1 + c 2 v 2 + + c n v n ) V J k V 1 ( c 1 v 1 + c 2 v 2 + + c n v n ) = V J k ( c 1 e 1 + c 2 e 2 + + c n e n ) V J k ( c 1 e 1 + c 2 e 2 + + c n e n ) = ( λ 1 | λ 1 | ) k c 1 | c 1 | v 1 + 1 c 1 V ( 1 λ 1 J ) k ( c 2 e 2 + + c n e n ) v 1 + 1 c 1 V ( 1 λ 1 J ) k ( c 2 e 2 + + c n e n ) {\displaystyle {\begin{aligned}b_{k}&={\frac {A^{k}b_{0}}{\|A^{k}b_{0}\|}}\\&={\frac {\left(VJV^{-1}\right)^{k}b_{0}}{\|\left(VJV^{-1}\right)^{k}b_{0}\|}}\\&={\frac {VJ^{k}V^{-1}b_{0}}{\|VJ^{k}V^{-1}b_{0}\|}}\\&={\frac {VJ^{k}V^{-1}\left(c_{1}v_{1}+c_{2}v_{2}+\cdots +c_{n}v_{n}\right)}{\|VJ^{k}V^{-1}\left(c_{1}v_{1}+c_{2}v_{2}+\cdots +c_{n}v_{n}\right)\|}}\\&={\frac {VJ^{k}\left(c_{1}e_{1}+c_{2}e_{2}+\cdots +c_{n}e_{n}\right)}{\|VJ^{k}\left(c_{1}e_{1}+c_{2}e_{2}+\cdots +c_{n}e_{n}\right)\|}}\\&=\left({\frac {\lambda _{1}}{|\lambda _{1}|}}\right)^{k}{\frac {c_{1}}{|c_{1}|}}{\frac {v_{1}+{\frac {1}{c_{1}}}V\left({\frac {1}{\lambda _{1}}}J\right)^{k}\left(c_{2}e_{2}+\cdots +c_{n}e_{n}\right)}{\left\|v_{1}+{\frac {1}{c_{1}}}V\left({\frac {1}{\lambda _{1}}}J\right)^{k}\left(c_{2}e_{2}+\cdots +c_{n}e_{n}\right)\right\|}}\end{aligned}}}

Выражение выше упрощается как k {\displaystyle k\to \infty }

( 1 λ 1 J ) k = [ [ 1 ] ( 1 λ 1 J 2 ) k ( 1 λ 1 J m ) k ] [ 1 0 0 ] as k . {\displaystyle \left({\frac {1}{\lambda _{1}}}J\right)^{k}={\begin{bmatrix}[1]&&&&\\&\left({\frac {1}{\lambda _{1}}}J_{2}\right)^{k}&&&\\&&\ddots &\\&&&\left({\frac {1}{\lambda _{1}}}J_{m}\right)^{k}\\\end{bmatrix}}\rightarrow {\begin{bmatrix}1&&&&\\&0&&&\\&&\ddots &\\&&&0\\\end{bmatrix}}\quad {\text{as}}\quad k\to \infty .}

Предел следует из того факта, что собственное значение по величине меньше 1, поэтому 1 λ 1 J i {\displaystyle {\frac {1}{\lambda _{1}}}J_{i}}

( 1 λ 1 J i ) k 0 as k . {\displaystyle \left({\frac {1}{\lambda _{1}}}J_{i}\right)^{k}\to 0\quad {\text{as}}\quad k\to \infty .}

Из этого следует, что:

1 c 1 V ( 1 λ 1 J ) k ( c 2 e 2 + + c n e n ) 0 as k {\displaystyle {\frac {1}{c_{1}}}V\left({\frac {1}{\lambda _{1}}}J\right)^{k}\left(c_{2}e_{2}+\cdots +c_{n}e_{n}\right)\to 0\quad {\text{as}}\quad k\to \infty }

Используя этот факт, можно записать в форме, подчеркивающей его связь с большим значением k : b k {\displaystyle b_{k}} v 1 {\displaystyle v_{1}}

b k = ( λ 1 | λ 1 | ) k c 1 | c 1 | v 1 + 1 c 1 V ( 1 λ 1 J ) k ( c 2 e 2 + + c n e n ) v 1 + 1 c 1 V ( 1 λ 1 J ) k ( c 2 e 2 + + c n e n ) = e i ϕ k c 1 | c 1 | v 1 v 1 + r k {\displaystyle {\begin{aligned}b_{k}&=\left({\frac {\lambda _{1}}{|\lambda _{1}|}}\right)^{k}{\frac {c_{1}}{|c_{1}|}}{\frac {v_{1}+{\frac {1}{c_{1}}}V\left({\frac {1}{\lambda _{1}}}J\right)^{k}\left(c_{2}e_{2}+\cdots +c_{n}e_{n}\right)}{\left\|v_{1}+{\frac {1}{c_{1}}}V\left({\frac {1}{\lambda _{1}}}J\right)^{k}\left(c_{2}e_{2}+\cdots +c_{n}e_{n}\right)\right\|}}\\[6pt]&=e^{i\phi _{k}}{\frac {c_{1}}{|c_{1}|}}{\frac {v_{1}}{\|v_{1}\|}}+r_{k}\end{aligned}}}

где и как e i ϕ k = ( λ 1 / | λ 1 | ) k {\displaystyle e^{i\phi _{k}}=\left(\lambda _{1}/|\lambda _{1}|\right)^{k}} r k 0 {\displaystyle \|r_{k}\|\to 0} k {\displaystyle k\to \infty }

Последовательность ограничена, поэтому она содержит сходящуюся подпоследовательность. Обратите внимание, что собственный вектор, соответствующий доминирующему собственному значению, уникален только с точностью до скаляра, поэтому, хотя последовательность может не сходиться, она почти является собственным вектором A для больших k . ( b k ) {\displaystyle \left(b_{k}\right)} ( b k ) {\displaystyle \left(b_{k}\right)} b k {\displaystyle b_{k}}

В качестве альтернативы, если A диагонализируемо , то следующее доказательство дает тот же результат

Пусть λ 1 , λ 2 , ..., λ m будут m собственными значениями (подсчитанными с кратностью) A и пусть v 1 , v 2 , ..., v m будут соответствующими собственными векторами. Предположим, что является доминирующим собственным значением, так что для . λ 1 {\displaystyle \lambda _{1}} | λ 1 | > | λ j | {\displaystyle |\lambda _{1}|>|\lambda _{j}|} j > 1 {\displaystyle j>1}

Начальный вектор можно записать: b 0 {\displaystyle b_{0}}

b 0 = c 1 v 1 + c 2 v 2 + + c m v m . {\displaystyle b_{0}=c_{1}v_{1}+c_{2}v_{2}+\cdots +c_{m}v_{m}.}

Если выбирается случайно (с равномерной вероятностью), то c 1 ≠ 0 с вероятностью 1. Теперь, b 0 {\displaystyle b_{0}}

A k b 0 = c 1 A k v 1 + c 2 A k v 2 + + c m A k v m = c 1 λ 1 k v 1 + c 2 λ 2 k v 2 + + c m λ m k v m = c 1 λ 1 k ( v 1 + c 2 c 1 ( λ 2 λ 1 ) k v 2 + + c m c 1 ( λ m λ 1 ) k v m ) c 1 λ 1 k v 1 | λ j λ 1 | < 1  for  j > 1 {\displaystyle {\begin{aligned}A^{k}b_{0}&=c_{1}A^{k}v_{1}+c_{2}A^{k}v_{2}+\cdots +c_{m}A^{k}v_{m}\\&=c_{1}\lambda _{1}^{k}v_{1}+c_{2}\lambda _{2}^{k}v_{2}+\cdots +c_{m}\lambda _{m}^{k}v_{m}\\&=c_{1}\lambda _{1}^{k}\left(v_{1}+{\frac {c_{2}}{c_{1}}}\left({\frac {\lambda _{2}}{\lambda _{1}}}\right)^{k}v_{2}+\cdots +{\frac {c_{m}}{c_{1}}}\left({\frac {\lambda _{m}}{\lambda _{1}}}\right)^{k}v_{m}\right)\\&\to c_{1}\lambda _{1}^{k}v_{1}&&\left|{\frac {\lambda _{j}}{\lambda _{1}}}\right|<1{\text{ for }}j>1\end{aligned}}}

С другой стороны:

b k = A k b 0 A k b 0 . {\displaystyle b_{k}={\frac {A^{k}b_{0}}{\|A^{k}b_{0}\|}}.}

Следовательно, сходится к (кратному) собственному вектору . Сходимость геометрическая , с отношением b k {\displaystyle b_{k}} v 1 {\displaystyle v_{1}}

| λ 2 λ 1 | , {\displaystyle \left|{\frac {\lambda _{2}}{\lambda _{1}}}\right|,}

где обозначает второе доминирующее собственное значение. Таким образом, метод сходится медленно, если есть собственное значение, близкое по величине к доминирующему собственному значению. λ 2 {\displaystyle \lambda _{2}}

Приложения

Хотя метод степенной итерации аппроксимирует только одно собственное значение матрицы, он остается полезным для определенных вычислительных задач . Например, Google использует его для вычисления PageRank документов в своей поисковой системе, [2] а Twitter использует его, чтобы показывать пользователям рекомендации о том, кому следовать. [3] Метод степенной итерации особенно подходит для разреженных матриц , таких как веб-матрица, или как метод без матриц , который не требует явного хранения матрицы коэффициентов, но вместо этого может получить доступ к функции, оценивающей произведения матрицы и вектора . Для несимметричных матриц, которые хорошо обусловлены, метод степенной итерации может превзойти более сложную итерацию Арнольди . Для симметричных матриц метод степенной итерации используется редко, поскольку его скорость сходимости можно легко увеличить, не жертвуя малыми затратами на итерацию; см., например, итерацию Ланцоша и LOBPCG . A {\displaystyle A} A x {\displaystyle Ax}

Некоторые из более продвинутых алгоритмов собственных значений можно рассматривать как вариации степенной итерации. Например, метод обратной итерации применяет степенную итерацию к матрице . Другие алгоритмы рассматривают все подпространство, сгенерированное векторами . Это подпространство известно как подпространство Крылова . Его можно вычислить с помощью итерации Арнольди или итерации Ланцоша . Итерация Грама [4] является суперлинейным и детерминированным методом вычисления наибольшей собственной пары. A 1 {\displaystyle A^{-1}} b k {\displaystyle b_{k}}

Смотрите также

Ссылки

  1. ^ Рихард фон Мизес и Х. Поллачек-Гейрингер, Praktische Verfahren der Gleichungsauflösung , ZAMM - Zeitschrift für Angewandte Mathematik und Mechanik 9, 152-164 (1929).
  2. ^ Ипсен, Илзе и Ребекка М. Уиллс (5–8 мая 2005 г.). «7-й Международный симпозиум IMACS по итеративным методам в научных вычислениях» (PDF) . Институт Филдса, Торонто, Канада.{{cite news}}: CS1 maint: multiple names: authors list (link)
  3. ^ Панкадж Гупта, Ашиш Гоэль, Джимми Лин, Аниш Шарма, Донг Ван и Реза Босаг Заде WTF: Система «на кого подписаться» в Twitter, Труды 22-й международной конференции по Всемирной паутине
  4. ^ Делатр, Б.; Бартелеми, К.; Араужо, А.; Аллаузен, А. (2023), «Эффективная граница константы Липшица для сверточных слоев с помощью итераций Грама», Труды 40-й Международной конференции по машинному обучению
Retrieved from "https://en.wikipedia.org/w/index.php?title=Power_iteration&oldid=1240636529"