Алгоритм HHL#

Автор(ы):

Сегодня пришла пора поговорить о знаменитом алгоритме Харроу, Хассидима и Ллойда, более известном как HHL-алгоритме, способном решать системы линейных уравнений.

Очень надеюсь, что к данному занятию у вас уже есть представление об алгоритме фазовой оценки (QPE), использующем обратное квантовое преобразование Фурье, на котором и базируется HHL. Глубокое понимание всех тонкостей этого алгоритма потребует от вас уверенного владения математическим аппаратом. За детальным описанием вы всегда можете обратиться к статьям [DHM+18], [HHL09], и [HZL+17]. Приготовьтесь потратить время и умственные ресурсы, если алгоритм вас зацепит и вы решите в нем как следует покопаться. Мы же поможем вам заинтересоваться, рассмотрим основные принципы и небольшой пример.

Note

Именно HHL-алгоритм произвел настоящую революцию в области квантового машинного обучения. Ведь решение систем линейных уравнений так или иначе находится “под капотом” почти любого известного алгоритма машинного обучения. И действительно:

  • классические линейная и логистическая регрессия сводятся именно к этой задаче;

  • задача SVM может быть переформулирована в терминах решений систем линейных уравнений;

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

И это только малая часть примеров!

Так что знакомство с QML не будет полным без ознакомления с этим прекрасным, но очень сложным алгоритмом!

../../../_images/614px-Seth_Lloyd.jpg

Fig. 64 Сет Ллойд, профессор MIT и один из создателей HHL-алгоритма#

Задача#

Представим обычную систему линейных уравнений:

{a11x1+a12x2=b1a21x1+a22x2=b2

Что в операторной форме можно переписать как:

Ax=b,

где A – эрмитова матрица.

Мы будем решать задачу на квантовом компьютере, то нам нужно перейти к квантовым состояниям:

A|x=|b

Чтобы найти искомый вектор |x, все что нам по сути нужно сделать – это найти обратный к A оператор (обозначаемый A1), который находится из равенства:

AA1=A1A=I

Распишем применительно к нашей задаче поиска вектора |b:

A|x=|bA1A|x=A1|b|x=A1|b

Оказывается, что и это все можно провернуть с помощью известных квантовых преобразований. Принципиальный вид нашей схемы представлен следующим образом:

../../../_images/hhl_circuit.png

Fig. 65 Квантовая схема, реализующая алгоритм HHL#

В нижний регистр загружается вектор |b, средний и нижний регистры участвуют в фазовой оценке, а верхний дополнительный кубит нужен для так называемого вращения, обусловленного собственными значениями. Давайте разбираться.

Реализация HHL#

Для начала мы должны подготовить наши регистры по всем квантовым законам: |b и |x должны быть пронормированы, а оператор A должен быть эрмитовым. Надеемся, что Вы помните про ортонормированный базис, сферу Блоха, комплексное представление векторов |0 и |1… Если нет, то обратитесь к предыдущим разделам курса.

Мы будем использовать оператор U=eiAt, и нужно, чтобы он был обратим –- для этого А должна быть эрмитовой.

Note

В случае, когда A не является эрмитовой, нужно перейти к эрмитовой матрице C:

C=(0AA0)

И рассматривается задача Cy=(b0) для того, чтобы найти решение y=(0x)

Вспомним, что эрмитову матрицу A можно представить в виде суммы собственных векторов, умноженных на собственные значения, т.е. в виде спектрального разложения:

A=j=0N1λj|ujuj|A1=j=0N1λj1|ujuj|

Тогда вектор|b можно представить через собственные векторы A:

|b=j=0N1bj|uj

Чтобы понять, почему это тоже ключевой момент, давайте вспомним, что значит собственный вектор и собственное значение матрицы.

Note

Собственным вектором |u оператора A называется такой ненулевой вектор, для которого выполняется:

A|u=λ|u

λ – собственное значение оператора A.

Таким образом, искомый вектор |x – не что иное, как:

|x=A1|b=j=0N1λj1bj|uj

Итак, фазовая оценка. Мы применяем к кубитам второго регистра матрицы Адамара, тем самым приводим их в суперпозицию. Следом запускаем оператор U:

U=eiAt=j=0N1eiλjt|ujuj|

Для того, чтобы узнать собственное значение оператора U, получения фазы (Quantum Phase Estimation – QPE), результатом которого получится следующее состояние:

QPE(U,|0|u)=
12m/2(|0+e2πi2m1ψ|1)(|0+e2πi2m2ψ|1)(|0+e2πi20ψ|1)|u=
12m/2j=02m1e2πiψj|j|u=|ψu|u

Параметр t это нормировочная константа в случае U=eiAt:

e2πiψ=eiλjt
ψ=λjt2π

Параметр t подбирается с учетом того, что на выходе алгоритма QPE собственные значения λj нормализуются к виду 0λj1 и обычно мы располагаем ограниченным числом кубитов, которое можно использовать для аппроксимации.

Алгоритм обратного квантового Фурье переводит фазу в конкретный вектор.

Принципиальная схема QPE выглядит следующим образом:

../../../_images/hhl_circuit2.png

Fig. 66 Схема алгоритма QPE#

Итак, мы подготовились, вспомнили много хорошего, теперь пошагово распишем наш алгоритм.

Стартуем мы со следующим состоянием:

|0a|0r|bm

Т.е. наше состояние будет храниться в трех регистрах, в каждом из которых содержится столько кубитов, сколько нужно для решения задачи.

  1. Применение QPE с использованием преобразования eiAt, после чего мы получим собственное значение оператора A во втором регистре:

    |0a|0r|bmj=0N1bj|0a|λjr|ujm
  2. Поворачиваем первый кубит (с индексом a), используя специальный оператор вращения R:

    R|0a=j=0N1(1C2λj2|0a+Cλj|1a),

    где C – константа, которая должна быть меньше минимального из лямбда: |C|<λmin [Почему?].

    Переводим первый кубит |0a:

    j=0N1bj|0a|λjr|ujm
    j=0N1(1C2λj2|0+Cλj|1)bj|λjn|ujm
  3. Применяем QPE (т.е. обратное получение фазы) и получаем следующее состояние:

    j=0N1(1C2λj2|0+Cλj|1)bj|0n|ujm

    В конце мы измеряем верхний кубит и если получаем единицу, то знаем, что в нижнем регистре хранится искомый |x с учетом нормировки:

    |xj=0N1C(bjλj)|uj

Пример#

Рассмотрим небольшой, но удобный пример. Удобный в том отношении, что, вообще говоря, алгоритм HHL имеет определенное приближение. Если собственные значения не представимы в бинарной форме, то о 100% точности говорить не приходится. Мы также опустим ряд вопросов, связанных с подбором параметров и количества кубитов второго регистра. Главное сейчас – понять, что происходит, и для этого наша матрица А эрмитова, все условия подобраны, а преобразования точны. Стоит помнить, что знать заранее значение собственных векторов и собственных значений нам совершенно не обязательно – это нужно лишь для наглядности.

Итак, пусть задача выглядит так :

A=(135351)|b=|1=[01]
{x1+35x2=035x1+x2=1

Собственные значения и соответствующие собственные векторы:

λ0=25,|u0=[11]λ1=85,|u1=[11]

Зададим параметр t и проанализируем фазу:

 t=2π516
e2πiψ=eiλjt
ψ=λjt2π
λ0t2π=18,λ1t2π=12

Как мы видим, для перевода угла ψ в векторную форму, нам понадобятся три кубита. После преобразования QPE мы имеем следующее состояние:

QPE(|0a|0r|bm)=j=0112|0a|λjr|uj=12(|0a|001r|u0+|0a|100r|u1)

Подберем константу C (как мы помним, она должна быть меньше наименьшего из собственных чисел) и произведем вращение:

12(1(1/16)2(1/8)2|0+1/161/8|1)|001r|u0m++12(1(1/16)2(1/2)2|0a+1/161/2|1a)|100r|u1m

В конце мы производим измерение верхнего кубита (с индексом a) и при получении единицы можем быть уверены, что нижний регистр содержит искомое решение с учетом нормировки:

122|1a|000r|u0m+182|1a|000r|u1m
|x122/(17128)|u0+182/(17128)|u1