Градиенты высших порядков#

Автор(ы):

План лекции#

В этой лекции мы посмотрим на ту математику, которая лежит “под капотом” у parameter-shift rule. Мы познакомимся с обобщением parameter shift, а также увидим, как можно оптимизировать этот метод. В конце мы узнаем, как можно посчитать производную второго порядка за минимальное количество обращений к квантовому компьютеру.

Для более детального погружения в вопрос можно сразу рекомендовать статью [MBK21].

Важность гейтов вращений#

Если задуматься, то одним из основных (если не единственных) способов сделать параметризованную квантовую схему является использование гейтов вращений, таких как RX^,RY^,RZ^. Более формально это можно выразить так, что нас больше всего интересуют операторы вида:

U(θ)=ei2Hθ

где H – оператор “вращения”, который удовлетворяет условию H2=1. Другой возможный вариант записи – представить матрицу H как линейную комбинацию операторов Паули σx,σy,σz.

Если представить схему, содержащую множество параметризованных операторов, то итоговая запись имеет вид:

Uj...k=Uj,...,Uk|Ψ

Производная от измерения#

Давайте вспомним, как выглядит квантово-классическая схема обучения с VQC.

../../../_images/example_vqc_diagram.svg

Fig. 70 Квантово-классическая схема#

Видно, что мы хотим считать производную не от самой параметризованной схемы Uj...k, а от наблюдаемой. Для тех, кто забыл, что такое наблюдаемая, рекомендуем вернуться к лекции про кубит. Если кратко, то это тот оператор, который мы “измеряем” на нашем квантовом компьютере. Математически производная, которая нам интересна, может быть записана для выбранного параметра i таким образом:

Gi=Uj...kΨ|M^|Uj...kΨθi

То есть нам важно посчитать производную от результата измерения, так как именно результат измерения у нас будет определять “предсказание” нашей квантовой нейронной сети. Причем нам нужно уметь считать производную от любого параметра θi в цепочке θj,...θi,...θk.

Parameter-shift для гейтов Паули#

Note

Тут мы для простоты предложим, что U1 это просто оператор вращения, иначе выкладки станут совсем сложными.

Тогда сам оператор Ui может быть также записан так:

Ui=ei2Piθi

Запишем результат математического ожидания через состояние Ψi, которое пришло на вход i-го гейта в нашей последовательности:

M(θ)=Tr(MUk,...,1ρiUk,...,1)

где ρ это матрица плотности (|ΨΨ|). Подробнее о матрицах плотности можно почитать в ранней продвинутой лекции про смешанные состояния.

Тогда частная производная от математического ожидания по i-му параметру θi записывается (подробнее в [MNKF18]) через коммутатор исходного состояния ρ, которое “пришло” на вход гейта Ui и того оператора Паули Pi, который мы используем в Ui:

Mθi=i2Tr(MUk,...,i[Pi,Ui1,...,1ρiUi1,...,1]Uk,...,i)

Этот коммутатор может быть переписан следующим образом:

[Pi,ρ]=i[Ui(π2)ρiUi(π2)Ui(π2)ρiUi(π2)]

Тогда соответствующий градиент θi можно записать через смещения на ±π2:

Mθi=Mi+Mi2Mi±=12Tr[MUk,...,i+1Ui(±π2)ρiUi(±π2)Uk,...,i+1]ρi=Uj,...,1ρiUj,...,1

По аналогии с классическими нейронными сетями и backpropagation (для тех, кто забыл это понятие, рекомендуем вернуться к вводным лекциями про классическое машинное обучение) тут явно можно выделить forward проход со смещением θi на значения π2 и backward со смещением на π2.

Обобщенный parameter-shift#

Предложенное в [MNKF18] выражение может быть на самом деле получено в более общем виде из других соображений. Так, выражение для нашей наблюдаемой M может всегда быть представлено [MBK21] как сумма вида:

Ui(θi)|M^|Ui(θi)=A^+B^cosθi+C^sinθi

где A^,B^,C^ – операторы, не зависящие от параметра θi.

Note

Действительно, явно выписав выражение для наблюдаемой и вспомнив формулы для косинуса и синуса двойного угла, а также воспользовавшись тем, что U(θ)=e12Hθ=cosθ21isinθ2H, получаем:

(cosθ21+isinθ2H)M^(cosθ21isinθ2H)=cos2θ2M^+isinθ2cosθ2HM^isinθ2cosθ2M^H+sin2θ2HM^H=12cosθM^+12M^+i2sinθHM^i2sinθM^H+12HM^H12cosθHM^H=12(M^+HM^H)+12(M^HM^H)cosθ+i2(HM^M^H)sinθ

Тогда можно воспользоваться правилами тригонометрии, а именно, тем что для любого skπ, k1,2,..., справедливо:

dcosθdθ=cos(θ+s)cos(θs)2sinsdsinθdθ=sin(θ+s)sin(θs)2sins

И подставим это в выражение для Mθi:

M(θi)θi=M(θi+s)M(θis)2sins

Легко заметить, что подстановка сюда s=π2 дает нам классический parameter shift, описанный в [MNKF18].

Наконец, запишем полученное выражение в более удобном виде, который позволит нам более эффективно выписывать производные высших порядков. Для этого введем вектор ei – единичный вектор для i-го параметра, то есть вектор, где все компоненты кроме i-й равны нулю, а i-я равна 1. Тогда наше финальное выражение для обобщенного parameter shift примет следующий вид:

f(θ)θi=f(θ+sei)f(θsei)2sins

Вторая производная и гессиан#

В классической теории оптимизации, также как и в машинном обучении, очень часто на первый план выходят так называемые методы 2-го порядка. Эти методы похожи на обычный градиентный спуск, но для ускорения сходимости они также используют информацию из матрицы вторых производных, которая называется гессианом. Более подробно про методы 2-го порядка и гессиан можно посмотреть в вводных лекциях курса.

Методы второго порядка требуют больше вызовов, чтобы вычислить гессиан, но взамен они обеспечивают гораздо лучшую сходимость, а также менее склонны “застревать” в локальных минимумах. Это обеспечивает, в итоге, более быстрое обучение. В классических нейронных сетях вычисление гессиана это часто проблема, так как это матрица размерности O(N2), где N – число весов нейронной сети, и эта матрица получается слишком большой. Но, как мы помним, основная “фича” VQC это их экспоненциальная экспрессивность – возможность линейным числом параметров (и гейтов) обеспечить преобразование, эквивалентное экспоненциальному числу весов классической нейронной сети. А значит, для них проблема размерности гессиана не стоит так остро. При этом использование гессиана теоретически позволит в итоге обучить VQC за меньшее число вызовов. Именно поэтому методы второго порядка потенциально очень интересны в квантово-классическом обучении. Но для начала нам необходимо разобраться, как именно можно посчитать матрицу вторых производных.

Пользуясь обобщенным правилом parameter shift, можно выписать выражение для второй производной [MBK21]:

2fθiθj=f(θ+s1ei+s2ej)+f(θs1eis2ej)f(θ+s1eis2ej)f(θs1ei+s2ej)4sins1sins2

Взяв s1=s2, можно упростить это выражение к следующему виду:

f(θ+sa)+f(θ+sb)f(θ+sc)f(θ+sd)(2sins)2a=ei+ejb=eiejc=eiejd=ei+ej

Но чаще всего нам необходимо не просто посчитать гессиан, а еще и посчитать градиент, так как в большинстве методов 2-го порядка требуются оба эти значения. В этом случае хочется попробовать подобрать такое значение для sg при вычислении вектора градиента, а также такое значение sh при вычислении гессиана, чтобы максимально переиспользовать результаты квантовых вызовов и уменьшить их общее количество.

Внимательно взглянув на выражение для 2-х производных, можно заметить, что оптимизация там возможна при расчете диагональных элементов гессиана. Давайте выпишем выражение для диагонального элемента явно:

f(θ+2sei)+f(θ2sei)2f(θ)(2sins)2

Можно заметить, что, например, использование s=π4 для гессиана, а также “стандартного” s=π2 для градиента позволит полностью переиспользовать в диагональных элементах гессиана значения, которые мы получили при расчете градиента. А значение f(θ) вообще считается один раз для всех диагональных вызовов.

Note

На самом деле, диагональные элементы гессиана можно использовать и сами по себе, например для квазиньютоновских методов оптимизации, где матрица Гессе аппроксимируется какой-то другой матрицей, чтобы не считать все вторые производные. Например, она может быть аппроксимирована диагональной матрицой, как в работе [And19].

Заключение#

В этой лекции мы познакомились с классическим parameter shift rule, а также его обобщением. Также мы узнали, как можно посчитать гессиан VQC, и даже узнали маленькие хитрости, которые можно применять для уменьшения общего количества вызовов квантовой схемы.