Алгоритм HHL
Contents
Алгоритм HHL#
Автор(ы):
Сегодня пришла пора поговорить о знаменитом алгоритме Харроу, Хассидима и Ллойда, более известном как HHL-алгоритме, способном решать системы линейных уравнений.
Очень надеюсь, что к данному занятию у вас уже есть представление об алгоритме фазовой оценки (QPE), использующем обратное квантовое преобразование Фурье, на котором и базируется HHL. Глубокое понимание всех тонкостей этого алгоритма потребует от вас уверенного владения математическим аппаратом. За детальным описанием вы всегда можете обратиться к статьям [DHM+18], [HHL09], и [HZL+17]. Приготовьтесь потратить время и умственные ресурсы, если алгоритм вас зацепит и вы решите в нем как следует покопаться. Мы же поможем вам заинтересоваться, рассмотрим основные принципы и небольшой пример.
Note
Именно HHL-алгоритм произвел настоящую революцию в области квантового машинного обучения. Ведь решение систем линейных уравнений так или иначе находится “под капотом” почти любого известного алгоритма машинного обучения. И действительно:
классические линейная и логистическая регрессия сводятся именно к этой задаче;
задача SVM может быть переформулирована в терминах решений систем линейных уравнений;
задача нахождения обартной матрицы (часто используется в глубоком обучении) внутри обычно решается через решение линейной системы;
И это только малая часть примеров!
Так что знакомство с QML не будет полным без ознакомления с этим прекрасным, но очень сложным алгоритмом!
Задача#
Представим обычную систему линейных уравнений:
Что в операторной форме можно переписать как:
где \(A\) – эрмитова матрица.
Мы будем решать задачу на квантовом компьютере, то нам нужно перейти к квантовым состояниям:
Чтобы найти искомый вектор \(|x\rangle\), все что нам по сути нужно сделать – это найти обратный к \(A\) оператор (обозначаемый \(A^{-1}\)), который находится из равенства:
Распишем применительно к нашей задаче поиска вектора \(|b\rangle\):
Оказывается, что и это все можно провернуть с помощью известных квантовых преобразований. Принципиальный вид нашей схемы представлен следующим образом:
В нижний регистр загружается вектор \(|b\rangle\), средний и нижний регистры участвуют в фазовой оценке, а верхний дополнительный кубит нужен для так называемого вращения, обусловленного собственными значениями. Давайте разбираться.
Реализация HHL#
Для начала мы должны подготовить наши регистры по всем квантовым законам: \(|b\rangle\) и \(|x\rangle\) должны быть пронормированы, а оператор \(A\) должен быть эрмитовым. Надеемся, что Вы помните про ортонормированный базис, сферу Блоха, комплексное представление векторов \(|0\rangle\) и \(|1\rangle\)… Если нет, то обратитесь к предыдущим разделам курса.
Мы будем использовать оператор \(U = e^{iAt}\), и нужно, чтобы он был обратим –- для этого \(А\) должна быть эрмитовой.
Note
В случае, когда \(A\) не является эрмитовой, нужно перейти к эрмитовой матрице \(C\):
И рассматривается задача \(C \vec{y} = \left(\begin{array}{l} \;\vec{b}\; \\ \;0\; \end{array}\right)\) для того, чтобы найти решение \(y = \left(\begin{array}{l} \;0\; \\ \;\vec{x}\; \end{array}\right)\)
Вспомним, что эрмитову матрицу \(A\) можно представить в виде суммы собственных векторов, умноженных на собственные значения, т.е. в виде спектрального разложения:
Тогда вектор\(|b\rangle\) можно представить через собственные векторы \(A\):
Чтобы понять, почему это тоже ключевой момент, давайте вспомним, что значит собственный вектор и собственное значение матрицы.
Note
Собственным вектором \(|u\rangle\) оператора \(A\) называется такой ненулевой вектор, для которого выполняется:
\(\lambda\) – собственное значение оператора \(A\).
Таким образом, искомый вектор \(|x\rangle\) – не что иное, как:
Итак, фазовая оценка. Мы применяем к кубитам второго регистра матрицы Адамара, тем самым приводим их в суперпозицию. Следом запускаем оператор \(U\):
Для того, чтобы узнать собственное значение оператора \(U\), получения фазы (Quantum Phase Estimation – QPE), результатом которого получится следующее состояние:
Параметр \(t\) это нормировочная константа в случае \(U = e^{iAt}\):
Параметр \(t\) подбирается с учетом того, что на выходе алгоритма QPE собственные значения \(\lambda_j\) нормализуются к виду \(0 \leq \lambda_j \leq 1\) и обычно мы располагаем ограниченным числом кубитов, которое можно использовать для аппроксимации.
Алгоритм обратного квантового Фурье переводит фазу в конкретный вектор.
Принципиальная схема QPE выглядит следующим образом:
Итак, мы подготовились, вспомнили много хорошего, теперь пошагово распишем наш алгоритм.
Стартуем мы со следующим состоянием:
Т.е. наше состояние будет храниться в трех регистрах, в каждом из которых содержится столько кубитов, сколько нужно для решения задачи.
Применение QPE с использованием преобразования \(e^{iAt}\), после чего мы получим собственное значение оператора \(A\) во втором регистре:
\[ |0\rangle_{a}|0\rangle_{r}|b\rangle_{m} \rightarrow \sum_{j=0}^{N-1}b_j|0\rangle_{a}|\lambda_j\rangle_r|u_j\rangle_m \]Поворачиваем первый кубит (с индексом \(a\)), используя специальный оператор вращения \(R\):
\[ R|0\rangle_{a} = \sum_{j=0}^{N-1}\left(\sqrt{1-\frac{C^{2}}{\lambda_{j}^{2}}}|0\rangle_{a} + \frac{C}{\lambda_{j}}|1\rangle_{a}\right), \]где \(C\) – константа, которая должна быть меньше минимального из лямбда: \(|C| < \lambda_{min}\) [Почему?].
Переводим первый кубит \(|0\rangle_a\):
\[ \sum_{j=0}^{N-1}b_j|0\rangle_{a}|\lambda_j\rangle_r|u_j\rangle_m \rightarrow \]\[ \sum_{j=0}^{N-1}\left(\sqrt{1-\frac{C^{2}}{\lambda_{j}^{2}}}|0\rangle+\frac{C}{\lambda_j}|1\rangle\right)b_j\left|\lambda_{j}\right\rangle_{n}\left|u_{j}\right\rangle_{m} \]Применяем \(QPE^{\dagger}\) (т.е. обратное получение фазы) и получаем следующее состояние:
\[ \sum_{j=0}^{N-1}\left(\sqrt{1-\frac{C^{2}}{\lambda_{j}^{2}}}|0\rangle+\frac{C}{\lambda_j}|1\rangle\right)b_{j}|0\rangle_{n}\left|u_{j}\right\rangle_{m} \]В конце мы измеряем верхний кубит и если получаем единицу, то знаем, что в нижнем регистре хранится искомый \(|x\rangle\) с учетом нормировки:
\[ |x\rangle \approx \sum_{j=0}^{N-1}C(\frac{b_j}{\lambda_j})|u_j\rangle \]
Пример#
Рассмотрим небольшой, но удобный пример. Удобный в том отношении, что, вообще говоря, алгоритм HHL имеет определенное приближение. Если собственные значения не представимы в бинарной форме, то о 100% точности говорить не приходится. Мы также опустим ряд вопросов, связанных с подбором параметров и количества кубитов второго регистра. Главное сейчас – понять, что происходит, и для этого наша матрица \(А\) эрмитова, все условия подобраны, а преобразования точны. Стоит помнить, что знать заранее значение собственных векторов и собственных значений нам совершенно не обязательно – это нужно лишь для наглядности.
Итак, пусть задача выглядит так :
Собственные значения и соответствующие собственные векторы:
Зададим параметр \(t\) и проанализируем фазу:
Как мы видим, для перевода угла \(\psi\) в векторную форму, нам понадобятся три кубита. После преобразования QPE мы имеем следующее состояние:
Подберем константу \(C\) (как мы помним, она должна быть меньше наименьшего из собственных чисел) и произведем вращение:
В конце мы производим измерение верхнего кубита (с индексом \(a\)) и при получении единицы можем быть уверены, что нижний регистр содержит искомое решение с учетом нормировки: