Скобки#

Автор(ы):

Дисклеймер: нам нужен инструментарий для работы с более абстрактными пространствами!

Символ Кронекера и остальные специальные тензора – это удобные примитивы для низкоуровневой работы с матрицами и векторами. Физики смогли придумать поверх примитивов линейной алгебры отличный синтаксический сахар, т.н. нотацию Дирака. Но давайте начнем с определения гильбертова пространства.

Гильбертово пространство#

Гильбертово пространство – это полное линейное векторное пространство, определяемое:

  1. скалярным произведением (u,v), в простейшем частном случае - (u,v)=uv;

  2. зафиксированной нормой вида ||v||=(v,v);

  3. метрикой d(u,v)=||uv||=(uv,uv).

Полное пространство#

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

Нотация Дирака, или Bra-Ket нотация#

Напомним, что в гильбертовом пространстве для пространства H определено сопряженное пространство H. Тогда можно рассмотреть обозначение Ket для элемента v из H как вектор-столбец:

|v=[v1v2vN]

и обозначение Bra для элемента u из сопряженного пространства H как сопряженную вектор-строку

u|=[u1u2uN]

Bra-ket u и v просто задает скалярное произведение между этими элементами:

u||v=u1v1+u2v2++uNvN=[u1u2uN][v1v2vN]

Часто, например, требуется показать два граничных состояния кубита |0, |1, тогда мы можем записать их просто как вектор-столбцы: |0=[10] и |1=[01]. В следующей лекции этот вопрос будет рассмотрен детальнее.

Внешнее произведение (outer-product)#

Также имеет смысл и переставленная запись Ket-Bra, которая называется внешним произведением:

|uv|=[u1u2uN][v1v2vN]=[u1v1u1v2u1vNu2v1u2v2u2vNuNv1uNvN]

По сути это матрица N×N, то есть новый оператор в гильбертовом пространстве. Не все перестановки имеют смысл, например, нельзя записать v|v| или |u|v.

Мы вернемся к Ket-Bra чуть ниже, когда будем говорить про операторы проекции.

Эрмитов оператор#

Оператор U называется эрмитовым, если он удовлетворяет равенству (Uv,u)=(v,Uu) для всех u, v из H или в матричном виде:

U=U

Унитарный оператор#

Унитарный оператор U^:HH на гильбертовом пространстве H – это линейный оператор, который удовлетворяет следующему равенству (Uv,Uu)=(u,v) для любых vH, uH. Или в матричной форме:

U^U^=U^U^=I

Напомним, что операция U^ (другое частое обозначение в работах – звездочка или HU^=U^H) в матричных терминах является последовательным применением операции транспонирования и последующего комплексного сопряжения элементов этой матрицы U^=U^T (порядок этих операций, естественно, не влияет на результат).

import numpy as np
import scipy as sp
from scipy import linalg

U_hat = np.array([
    [1 + 0j, 0 + 0j],
    [0 + 0j, 1 + 0j]
    ])

U_hat_star_byhands = U_hat.conj().T
U_hat_star_long = np.conjugate(np.transpose(U_hat))

print(np.allclose(U_hat_star_long, U_hat_star_byhands))
True

Также в Python для многих операций есть соответствующие методы вместо функций и их сокращения, например U.transpose() – то же самое, что U.T, а U.conjugate()U.conj().

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

U^=eiU

Давайте докажем быстро этот факт: для эрмитовых квадратных матриц можно определить матричные функции через спектральное разложение матрицы, которое в силу свойств эрмитовых матриц имеет вид: U=SΛS, где S – унитарная матрица перехода к тому базису, где изначальный оператор выражается диагональной матрицей. Тогда матричная функция f(U)=Sf(Λ)S, т.е. мы диагонализируем матрицу и применяем функцию ко всем диагональным элементам, а потом возвращаемся в исходный базис унитарным преобразованием. Соответственно, для экспоненты:

eV=SeΛS.

Note

В качестве упражнения для самопроверки можете показать, что такое определение эквивалентно определению через степенной ряд: eU=k=01k!Uk

Доказательство: Проверим определение унитарной матрицы: U^U^=(Sexp(iΛ)S)Sexp(iΛ)S. Пользуясь тем, что эрмитово сопряжение произведения это произведение эрмитовых сопряжений в обратном порядке ((AB)=BA) и что эрмитово сопряжение является обратной операцией к себе ((A)=A), а также тем, что S – унитарная матрица (то есть SS=I), получаем:

(Sexp(iΛ)S)Sexp(iΛ)S=Sexp(iΛ)SSexp(iΛ)S=Sexp(iΛ)exp(iΛ)S

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

Sexp(iΛ+iΛ)S=Sexp(O)S=SIS=I

В конце мы еще раз воспользовались тем, что S – унитарная. Абсолютно так же доказывается, что U^U^=I.

Note

Кстати, любая матрица вида HH является эрмитовой.

Давайте продемонстрируем доказанный факт на примере матрицы дискретного преобразования Фурье без нормировочного коэффициента 1N, N=3, преобразованной к DD:

N = 3
w = np.sqrt(np.exp(-1j * 2 * np.pi / N))

D = np.array([
    [1, 1, 1],
    [1, w, w ** 2],
    [1, w ** 2, w ** 4]
    ])

U = D @ D.conj().T
print(f"{U = }")

print(f"{D = }")
print(f"{np.allclose(U @ U.T.conj(), np.eye(N)) = }") # no

U_hat = linalg.expm(1j * U)
print(f"\n{np.allclose(U_hat @ U_hat.conj().T, np.eye(N)) = }")
print(f"\n{np.allclose(U_hat.conj().T @ U_hat, np.eye(N)) = }")
U = array([[ 3.00000000e+00+0.00000000e+00j,  1.00000000e+00+1.73205081e+00j,
        -1.11022302e-16+7.77156117e-16j],
       [ 1.00000000e+00-1.73205081e+00j,  3.00000000e+00+0.00000000e+00j,
         1.00000000e+00+1.73205081e+00j],
       [-1.11022302e-16-7.77156117e-16j,  1.00000000e+00-1.73205081e+00j,
         3.00000000e+00+0.00000000e+00j]])
D = array([[ 1. +0.j       ,  1. +0.j       ,  1. +0.j       ],
       [ 1. +0.j       ,  0.5-0.8660254j, -0.5-0.8660254j],
       [ 1. +0.j       , -0.5-0.8660254j, -0.5+0.8660254j]])
np.allclose(U @ U.T.conj(), np.eye(N)) = False

np.allclose(U_hat @ U_hat.conj().T, np.eye(N)) = True

np.allclose(U_hat.conj().T @ U_hat, np.eye(N)) = True

Пример: оператор-проектор#

Оператором проекции является оператор P со свойством P2=P.

Покажем, что Ket-Bra вида |ΨΨ| обладает этим свойством.

(|ΨΨ|)2=|ΨΨ||ΨΨ|=|Ψ(Ψ||Ψ)Ψ|=|ΨΨ|,

поскольку вектор состояния – нормированный: Ψ||Ψ=1.

Оператор Ket-Bra с вектором состояния |Ψ, то есть |ΨΨ|рассматривается во вводной лекции про кубиты, а также пригодится позже, когда речь зайдет о смешанных состояниях.

Пример: оператор поворота#

Оператором поворота по оси вращения v=(x,y,z) на угол θ является

M(v,θ)=[cosθ+(1cosθ)x2(1cosθ)xy(sinθ)z(1cosθ)xz+(sinθ)y(1cosθ)yx+(sinθ)zcosθ+(1cosθ)y2(1cosθ)yz(sinθ)x(1cosθ)zx(sinθ)y(1cosθ)zy+(sinθ)xcosθ+(1cosθ)z2]

Например, матрица поворота относительно оси x на 90°: x=1, y=0, z=0, θ=π2, будет иметь вид:

M=[1000cosπ2sinπ20sinπ21]

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

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

Пример: оператор дифференцирования#

В пространстве многочленов P с базисом {1,t,t2,...,tn} можно задать оператор дифференцирования D:PnPn1 в виде матрицы:

D=[0100000200000300000n]

Тогда производная многочлена p=a0+a1t++antn=[a0a1an][1ttn]

D(p)=[a0a1an]D[1ttn1]=a1+2a2t++nantn1.

Про разницу между оператором и матрицей преобразования

Мы с вами рассматривали операторы через конечные матрицы, но на самом деле гильбертово пространство было придумано как раз, чтобы можно было работать с бесконечномерными векторами и применять непрерывные операторы. Можно считать, что есть некоторый дуализм между непрерывным оператором и пределом бесконечной матрицы. Иногда удобнее работать с матрицей, а иногда – с абстрактным оператором.

Произведение Кронекера#

Давайте рассмотрим еще одну интересную операцию, которая называется матричным тензорным произведением (является тензорным произведением для линейных операторов) или произведением Кронекера.

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

coin=[1323] для нашей монетки и dice=[141517111113479120020] для нашей игральной кости. Тогда если мы захотим сыграть в игру, когда сначала подкидывается монетка, а потом - игральный кубик, нам будет удобно записать это в виде либо очень длинного вектора:

gamevec=[13×1413×1513×1713×11113×11313×47912002023×1423×1523×1723×11123×11323×479120020]

Либо в виде матрицы, где по строкам будут события монетки, а по столбцам – кубика:

gamematrix=[13×1413×1513×1713×11113×11313×47912002023×1423×1523×1723×11123×11323×479120020]

С помощью произведения Кронекера (или, повторимся, – матричного тензорного произведения) похожие огромные вектора и матрицы можно очень компактно записать:

gamevec=coindicegamematrix=coinTdice

В общем случае,

AB=[a11Ba1nBam1BamnB]=[a11b11a11b12a11b1qa1nb11a1nb12a1nb1qa11b21a11b22a11b2qa1nb21a1nb22a1nb2qa11bp1a11bp2a11bpqa1nbp1a1nbp2a1nbpqam1b11am1b12am1b1qamnb11amnb12amnb1qam1b21am1b22am1b2qamnb21amnb22amnb2qam1bp1am1bp2am1bpqamnbp1amnbp2amnbpq]

Основные его свойства вы можете прочитать в статье: Произведение Кронекера

Есть и другие нужные тензорные операции, например, чуть больший список вы можете найти в этой статье или в рекомендованной литературе по квантовой механике.

Рекомендованная литература#

  • Quantum Mechanics: The Theoretical Minimum Illustrated Edition by Leonard Susskind, Art Friedman [SF14] или его русский перевод [15b]. Книга сочетает в себе довольно строгий формализм вместе с интуицией квантовой механики. Главы построены в виде конкретных примеров или задач, которые понимают, зачем та или иная теория необходима.

  • Mathematics for machine learning by Marc Peter Deisenroth, A. Aldo Faisal, and Cheng Soon Ong [DFO20] - отличная книжка чтобы освежить воспоминания о базовых алгоритмах в машинном обучении и о математике, которая применяется в них. Доступна бесплатная электронная версия.

  • Deep Learning by Ian Goodfellow, Yoshua Bengio, Aaron Courville [GBC16] - отличная книжка, чтобы разобраться в основах глубокого обучения, чем-то может заменить предыдущую книгу, отличный старт, если вы хотите разобраться в автоэнкодерах или в других нейросетевых моделях. Доступна бесплатная электронная версия.

Что мы узнали#

  • произвол со скобками

  • Гильбертовы пространства

  • Эрмитовый оператор

  • Унитарный оператор

  • Примеры различных операторов