Русский
Русский
English
Статистика
Реклама

Квантовые алгоритмы

Перевод Как разобраться с пауками в квантовой программе

26.10.2020 08:23:53 | Автор: admin

image


Продолжаем рубрику тем для первого свидания. На сегодняшней повестке дня упрощение схем для квантовых программ методами ZX-исчисления.


Далее от имени автора

Прежде всего, я хотел бы поблагодарить моих наставников Роджера Ло и Цзиньго Лю за то, что они курировали меня во время Google Summer of Code 2020. В этом проекте GSoC я разрабатываю новый пакет Julia ZXCalculus.jl, который реализует ZX-исчисление, и интегрирую его в качестве инструмента упрощения схем и квантовых программ в YaoLang.jl DSL (предметно-ориентированный язык) для Yao.jl. Yao.jl современный квантовый симулятор со множеством продвинутых функций, такими как автоматическое дифференцирование и символьные вычисления. Как пользователь "Yao.jl", я рад возможности внести свой вклад в его развитие. В этом блоге я подытожу результаты проделанной работы.


Квантовые схемы и ZX-исчисление


Квантовое программирование использует принципы квантовой механики для вычислений. Для описания квантовых алгоритмов мы часто используем модель квантовой схемы, которая является аналогом модели классической логической схемы. Квантовые схемы состоят из набора основных квантовых элементов, таких как вентили Паули, Адамара, T, CNOT.


В общем, будет много эквивалентных квантовых схем, представляющих одну и ту же операцию. С точки зрения квантового оборудования, нужно найти схему, которая минимизирует использование аппаратных ресурсов. К сожалению, поиск наиболее желаемой схемы является очень сложной задачей в плане вычислительной сложности, так как проверка эквивалентности между двумя квантовыми схемами является coQMA-трудной (квантовый аналог coNP) [1], [2]. Несмотря на это, у нас все еще есть некоторые эвристические эффективные алгоритмы для упрощения квантовых схем. В этом блоге я представлю мощный инструмент для этой проблемы ZX-исчисление.


Квантовая схема это граф, представляющий тензорные и матричные произведения. Например


$ \mathrm{CNOT}(2,3)\cdot\mathrm{CNOT}(1,2)\cdot(H\otimes I\otimes I). $



Кроме того, квантовые схемы можно рассматривать как особый тип тензорной сети. В ZX-исчислении мы вводим два вида тензоров: Z-пауков и X-пауков. Тензорные сети, состоящие из этих тензоров, называются ZX-диаграммами. Поскольку все основные квантовые элементы могут быть представлены ZX-диаграммами, мы можем преобразовать все квантовые схемы в ZX-диаграммы.



Более того, по определению Z-пауков и X-пауков, существуют основные эквивалентные правила, с помощью которых можно упростить ZX-диаграммы.



После упрощения ZX-диаграмм мы должны преобразовать их обратно в схемы. В работе [3] разработаны алгоритмы для приведенной выше схемы.


Во время GSoC 2020 я собираюсь добиться реализации на Джулии ZX-исчисления. В следующих разделах я кратко объясню причины и методы этого проекта.


Цель GSoC проекта


Основная цель этого проекта заключается в реализации ZX-исчисления и связанного с ним алгоритма на языке Julia. И мы выпустим пакет Julia ZXCalculus.jl. Существует Python-реализация ZX-исчисления, PyZX. Как и PyZX, ZXCalculus.jl должна предоставлять API для перевода на ZX-диаграммы, извлечения схем из ZX-диаграмм, упрощения и визуализации. Большинство функций PyZX будут реализованы в ZXCalculus.jl. Кроме того, мы интегрируем ZXCalculus.jl в квантовый компилятор YaoLang.jl и реализуем механизм упрощения схем на уровне компиляции.


В YaoLang.jl можно определить гибридные квантовые программы с классической информацией (например, классические параметры, классические потоки управления). Эти квантовые программы будут преобразованы в промежуточное представление (Yao IR), которое содержит квантовые схемы наряду с формой SSA (Статическая форма единого назначения) классической программы. Эти схемы будут упрощены с помощью ZXCalculus.jl. Затем YaoIR будет скомпилирован в бэкенд-инструкции, такие как QASM или инструкции симулятора Yao.


Для достижения наилучшей производительности при компиляции и обеспечения возможности дальнейшей настройки процедуры упрощения необходима чистая реализация ZX-исчисления на языке Julia.


Методы


Метод извлечения схем является каноническим методом алгоритмов упрощения схем на основе ZX-исчисления. Я тут буду в основном обсуждать его реализую.


Структуры данных


Для реализации этих алгоритмов нам необходимо реализовать структуры данных для хранения ZX-диаграмм и правила изменения ZX-диаграмм. ZX-диаграмму можно рассматривать как мультиграф с дополнительной информацией о его вершинах. Каждая вершина может быть представлена чем-то из Z-пауков, X-пауков или H-коробок. В исходных ZX-диаграммах допускаются открытые ребра. Для простоты мы добавили 2 специальных вида вершин, входную границу и выходную границу для записи этих ребер. Мы используем представление списка смежности для хранения мультиграфов. Список смежности хранится в виде "Dict", ключами которого являются идентификаторы вершин.


struct Multigraph{T<:Integer} <: AbstractMultigraph{T}    adjlist::Dict{T, Vector{T}}end

Поскольку нам нужно переписать мультиграфы с помощью правил ZX-исчисления, будет удобнее фиксировать идентификаторы вершин. Поэтому мы используем Dict вместо Array. Еще бывают фазы для Z- и X-пауков. Нам нужен еще один словарь для хранения этих фаз. Структура данных ZX-диаграммы аналогична следующей:


struct ZXDiagram{T<:Integer, P} <: AbstractZXDiagram{T, P}    mg::Multigraph{T}    st::Dict{T, SpiderType.SType}    ps::Dict{T, P}    ...end

В статье предложены графоподобные ZX-диаграммы. Они включают в себя только Z-пауков и имеют разные типы граней: адамаровские и неадамаровские. Мы также можем использовать мультиграфы для представления графоподобных ZX-диаграмм и различные кратности ребер для представления различных типов ребер. Мы определяем ZXGraph для графоподобных ZX-диаграмм так:


struct ZXGraph{T<:Integer, P} <: AbstractZXDiagram{T, P}    mg::Multigraph{T}    st::Dict{T, SpiderType.SType}    ps::Dict{T, P}    ...end

С этого момента мы создали структуры данных, которые нам нужны.


Правила преобразований


Чтобы упростить ZX-диаграммы, нам нужно реализовать правила перезаписи в ZX-исчислении. Существует два шага: сопоставление правил и переписывание ZX-диаграмм с соответствующими правилами. Мы использовали для этого благословенную джулианскую множественную диспетчеризацию. API-интерфейсы выглядят как-то так:


match(r::AbstractRule, zxd::AbstractZXDiagram)rewrite!(r::AbstractRule, zxd::AbstractZXDiagram{T, P}, matches::Vector{Match{T}}) where {T, P}

Здесь match вернет все совпадающие вершины, которые будут сохранены в структуре


struct Match{T<:Integer}    vertices::Vector{T}end

А rewrite! попытается использовать правило, чтобы переписать ZX-диаграмму на всех совпадающих вершинах. Так как некоторые совпадающие вершины могут стать неудовлетворяющими соответствующему правилу после переписывания некоторых вершин, нам нужно проверить, доступно ли еще правило для совпадающих вершин.


check_rule(r::AbstractRule, zxd::AbstractZXDiagram{T, P}, vs::Vector{T}) where {T, P}

Для упрощения ZX-диаграммы с помощью правила мы определили simplify! так:


function simplify!(r::AbstractRule, zxd::ZXDiagram)    matches = match(r, zxd)    while length(matches) > 0        rewrite!(r, zxd, matches)        matches = match(r, zxd)    end    return zxdend

На этапе упрощения [3], мы должны конвертировать ZX-диаграмму в графоподобный вариант с правилами i1, i2, h, и f. После, упрощаем графоподобную ZX-диаграмму локальным дополнительным правилом и правилом замещения. Мы можем выполнить эти шаги с помощью вышеуказанных функций. Упрощенные графоподобные ZX-диаграммы будут просто маленькими скелетами по сравнению с первоначально большой схемой. Единственное, что остается это извлечение схем из ZX-диаграмм.


Извлечение схем


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


Существует особенность для любой ZX-диаграммы квантовой схемы. Мы можем определить на ней g-поток. С помощью g-потока мы можем узнать порядок всех пауков. Правила, которые мы использовали для упрощения ZX-диаграммы, сохранят это хорошее свойство. Это дает нам возможность извлекать схемы из упрощенных ZX-диаграмм.


Кроме того, любая графоподобная ZX-диаграмма локально представима по CNOT + H. Мы можем извлечь эти схемы CNOT с гауссовским устранением над $F_2$. Вместе с остальными H-, CZ-гейтами и Z-вращениями мы получаем схему, эквивалентную исходной.


Demo


Демонстрационная схема взята из приложения к статье [3]. Все коды можно найти в разделе examples\ex1.jl у ZXCalculus.jl.


# this is the original circuit.zxd = generate_example()ZXplot(zxd)


# convert a ZX-diagram to a graph-like ZXdiagramzxg = ZXGraph(zxd)ZXplot(zxg, linetype = "curve")


# simplify with local complementary rule simplify!(Rule{:lc}(), zxg)ZXplot(zxg, linetype = "curve")


# simplify with pivoting rulesimplify!(Rule{:p1}(), zxg)ZXplot(zxg, linetype = "curve")


# removing all Paulis adjancent to boundariesreplace!(Rule{:pab}(), zxg)ZXplot(zxg, linetype = "curve")


# extract circuitcir = circuit_extraction(zxg)ZXplot(cir)


Наконец, мы получили упрощенную схему.





Метапрограммирование, квантовая компиляция и оптимизация схем при квантовой компиляции


В прошлом месяце я в основном работал над интеграцией с YaoLang.jl для ZXCalculus.jl. Это был мой первый опыт работы с метапрограммированием Джулии на практике. Я хочу поблагодарить своего наставника Роджера Ло за то, что он научил меня основным понятиям и полезным методам метапрограммирования.


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


Как Julia работает


Все коды Джулии по сути строки (Strings), которые хранятся на диске. Когда мы запускаем коды Julia, Джулия сначала разбирает этот код на AST (абстрактные синтаксические деревья). AST будет храниться в виде выражений в структуре данных Expr в Julia. На этом уровне синтаксического анализа мы называем эти выражения IR (промежуточные представления) поверхностного уровня.


julia> s = "1 + 1 * 2""1 + 1 * 2"julia> ex = Meta.parse(s):(1 + 1 * 2)julia> dump(ex)Expr  head: Symbol call  args: Array{Any}((3,))    1: Symbol +    2: Int64 1    3: Expr      head: Symbol call      args: Array{Any}((3,))        1: Symbol *        2: Int64 1        3: Int64 2

В этом примере ex это AST. Его head это :call, что означает, что это вызов функции. Он вызывает функцию + с аргументами 1 и еще одним Expr.


Затем опускаемся на уровень. На этом уровне макросы будут расширены, а "синтаксический сахар" Джулии будет преобразован в вызовы функций. Например, a[i] будет заменено на getindex(a, i). После серии преобразований, IR поверхностного уровня будет преобразован в SSA (Статическая форма единого назначения). IR также называется "пониженным" IR. В SSA IR каждая переменная может быть назначена только один раз. В Julia мы можем использовать макрос @code_lowed, чтобы увидеть SSA IR объекта Expr:


julia> @code_lowered 2 + 3CodeInfo(1  %1 = Base.add_int(x, y)      return %1)

Джулия сделает вывод типа на SSA IR и оптимизирует его. А затем преобразует его в LLVM коды. Мы можем использовать макросы @code_typed и @code_llvm, чтобы увидеть эти IRs.


julia> @code_typed 2 + 3CodeInfo(1  %1 = Base.add_int(x, y)::Int64      return %1) => Int64julia> @code_llvm 2 + 3;  @ int.jl:53 within '+'; Function Attrs: uwtabledefine i64 @"julia_+_15307"(i64, i64) #0 {top:  %2 = add i64 %1, %0  ret i64 %2}

Наконец, LLVM преобразует эти коды в собственные машинные коды.


julia> @code_native 2 + 3        .text;  @ int.jl:53 within '+'        pushq   %rbp        movq    %rsp, %rbp        leaq    (%rcx,%rdx), %rax        popq    %rbp        retq        nopw    (%rax,%rax); 

Вот пикча из JuliaCon 2018, которая демонстрирует, как работает компилятор Julia.



Как работает YaoLang.jl


Цель YaoLang.jl построить удобный квантовый компилятор для гибридных квантово-классических программ в Julia. То есть, используя только несколько макросов и добавляя их к собственным функциям Julia, можно определить квантовые программы. В YaoLang.jl функция, украшенная макросом device, будет рассматриваться как функция с квантовыми операциями. В этих функциях макросы @ctrl, @measure, @expect и "синтаксический сахар" locs => gate доступны для определения квантовых операций. Например, представим схему для квантового преобразования Фурье n кубитов:


@device function qft(n::Int)    1 => H    for k in 2:n        @ctrl k 1 => shift(2 / 2^k)    end    if n > 1        2:n => qft(n - 1)    endend

Подобно процедурам компиляции Julia, макрос device будет анализировать функцию в IR поверхностного уровня в YaoLang.jl. Затем все макросы и синтаксический сахар для квантовых операторов будут заменены вызовами функций. Эти вызовы функций будут помечены меткой :quantum. Теперь IR поверхностного уровня будет преобразован в пониженный SSA IR. В YaoLang.jl SSA IR будет храниться в структуре данных YaoIR.


Остальные части это оптимизация YaoIR и преобразование из него в коды аппаратного уровня. ZXCalculus.jl предназначен для оптимизации квантовых схем и должен быть интегрирован на уровне оптимизации.



Интеграция ZXCalculus.jl


Теперь мы рассматриваем только чисто квантовые программы. Как только мы получим YaoIR, чтобы оптимизировать квантовую схему, все, что нам нужно сделать, это следующие шаги


  1. преобразовать его в ZX-диаграмму
  2. Упростить ZX-диаграмму
  3. Перевести упрощенную ZX-диаграмму обратно в YaoIR

Второй шаг уже реализован в ZXCalculus.jl. Нам нужно только реализовать преобразование между ZXDiagram и YaoIR.


YaoIR в ZXDiagram


Поскольку каждый YaoIR является SSA, мы можем просмотреть все утверждения, чтобы получить информацию о вентилях и их местоположениях. Для этого окинем взором самую обширную локацию по числу кубитов. Чтобы построить соответствующую ZX-диаграмму, построим пустую схему и последовательно протолкнем в нее гейты при обходе YaoIR. А код такой:


function ZXDiagram(ir::YaoIR)    if ir.pure_quantum        n = count_nqubits(ir)        circ = ZXDiagram(n)        stmts = ir.body.blocks[].stmts        for stmt in stmts            # push gates        end        return circ    endend

Поскольку параметризация ZX-диаграмм и квантовых схем может быть различной вплоть до глобальной фазы, то и ZX-диаграмма, которую мы получаем, может отличаться вплоть до глобальной фазы. Информация о глобальной фазе должна быть записана.


ZXDiagram в YaoIR


Мы предполагаем, что получаем ZXDiagram, представляющую квантовую схему. Чтобы преобразовать ее в YaoIR, нам нужно извлечь последовательность квантовых вентилей в ZXDiagram.


Их можно выудить из информации о расположении ZXDiagram. Так мы узнаем, как пауки сортируются от входа к выходу и высмотрим расположение кубитов для каждого паука. Если паук имеет степень 2, он представляет собой однокубитовый гейт. В противном случае он представляет собой вентиль с несколькими кубитами. Пройдя всех пауков от входа к выходу, мы можем получить последовательность квантовых вентилей. И тогда мы сможем построить новый YaoIR с этой последовательностью.


Параметры оптимизации


В "ZXCalculus.jl" существует несколько методов упрощения схем. И мы предлагаем реализовать другие методы упрощения, которые не основаны на ZX-исчислении. Необходимо предоставить пользователю возможность выбирать, какие методы оптимизации будут применяться.


Мы добавили эти параметры в макрос @device. Параметры оптимизации можно задать следующим образом


@device optimizer = [opt...] function my_circuit(args...)    ...end

Так optimizer вполне представим как подмножество [:zx_clifford, zx_teleport]. И мы добавим больше методов в будущем.


Примеры


К настоящему времени, ZXCalculus.jl была интегрирована с YaoLang.jl. Мы можем использовать YaoLang.jl для проверки правильности алгоритмов в ZXCalculus.jl. Данный пример представляет собой арифметическую схему.


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


Кооод
using YaoLang@device function test_cir()    5 => H    5 => shift(0.0)    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    5 => shift($(1/4*))    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    4 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 1 4 => X    4 => shift($(7/4*))    1 => shift($(1/4*))    @ctrl 1 4 => X    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 3 5 => X    5 => shift($(1/4*))    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 3 5 => X    4 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 3 4 => X    4 => shift($(7/4*))    5 => H    3 => shift($(1/4*))    @ctrl 3 4 => X    5 => shift(0.0)    @ctrl 4 5 => X    5 => H    5 => shift(0.0)    @ctrl 3 5 => X    5 => shift($(7/4*))    @ctrl 2 5 => X    5 => shift($(1/4*))    @ctrl 3 5 => X    5 => shift($(7/4*))    @ctrl 2 5 => X    3 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 2 3 => X    3 => shift($(7/4*))    5 => H    2 => shift($(1/4*))    @ctrl 2 3 => X    5 => shift(0.0)    @ctrl 3 5 => X    5 => H    5 => shift(0.0)    @ctrl 2 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    5 => shift($(1/4*))    @ctrl 2 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    2 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 1 2 => X    2 => shift($(7/4*))    5 => H    1 => shift($(1/4*))    @ctrl 1 2 => X    5 => shift(0.0)    @ctrl 2 5 => X    @ctrl 1 5 => Xendcir = test_cir()@device optimizer = [:zx_teleport] function teleport_cir()    5 => H    5 => shift(0.0)    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    5 => shift($(1/4*))    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    4 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 1 4 => X    4 => shift($(7/4*))    1 => shift($(1/4*))    @ctrl 1 4 => X    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 3 5 => X    5 => shift($(1/4*))    @ctrl 4 5 => X    5 => shift($(7/4*))    @ctrl 3 5 => X    4 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 3 4 => X    4 => shift($(7/4*))    5 => H    3 => shift($(1/4*))    @ctrl 3 4 => X    5 => shift(0.0)    @ctrl 4 5 => X    5 => H    5 => shift(0.0)    @ctrl 3 5 => X    5 => shift($(7/4*))    @ctrl 2 5 => X    5 => shift($(1/4*))    @ctrl 3 5 => X    5 => shift($(7/4*))    @ctrl 2 5 => X    3 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 2 3 => X    3 => shift($(7/4*))    5 => H    2 => shift($(1/4*))    @ctrl 2 3 => X    5 => shift(0.0)    @ctrl 3 5 => X    5 => H    5 => shift(0.0)    @ctrl 2 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    5 => shift($(1/4*))    @ctrl 2 5 => X    5 => shift($(7/4*))    @ctrl 1 5 => X    2 => shift($(1/4*))    5 => shift($(1/4*))    @ctrl 1 2 => X    2 => shift($(7/4*))    5 => H    1 => shift($(1/4*))    @ctrl 1 2 => X    5 => shift(0.0)    @ctrl 2 5 => X    @ctrl 1 5 => Xendtp_cir = teleport_cir()

С помощью пакета YaoArrayRegister.jl, мы можем вычислить матрицу для каждой схемы.


Код
using YaoArrayRegistermat = zeros(ComplexF64, 32, 32)for i = 1:32    st = zeros(ComplexF64, 32)    st[i] = 1    r0 = ArrayReg(st)    r0 |> cir    mat[:,i] = r0.stateendtp_mat = zeros(ComplexF64, 32, 32)for i = 1:32    st = zeros(ComplexF64, 32)    st[i] = 1    r1 = ArrayReg(st)    r1 |> tp_cir    tp_mat[:,i] = r1.stateend

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


sum(abs.(mat - tp_mat) .> 1e-14) == 0

Итого


Во время второго этапа кодирования я реализовал преобразование между "ZXDiagram" и "YaoIR", что обеспечивает интеграцию ZXCalculus".jl с YaoLang.jl. Кроме того, документация теперь доступна здесь. И во время испытания ZXCalculus".jl с помощью YaoLang.jl и YaoArrayRegister.jl я нашел несколько ошибок в реализации извлечения контуров и фазовой телепортации. Эти ошибки уже исправлены.


На следующем этапе я буду работать над компиляцией кодов OpenQASM в коды YaoIR. Это позволит нам читать схемы из кода OpenQASM. А также протестирую результативность ZXCalculus.jl на некоторых эталонных схемах и сравню его с PyZX.




Упрощение квантовой схемы



Предположим, что у нас есть квантовая схема с 24 гейтами, как описано выше. Мы можем определить эту схему с помощью YaoLang.jl используя макрос @device. YaoLang.jl это компилятор для гибридных квантово-классических программ, которые очень практичны в нынешнюю эпоху NISQ (noisy intermediate-scale quantum). Кроме того, YaoLang.jl интегрирован с ZXCalculus.jl.


Код
julia> using YaoLang;julia> @device optimizer = [:zx_teleport] function demo_circ_simp()           1 => shift($(7/4))           1 => H           1 => Rx($(/4))           4 => H           @ctrl 1 4 => Z           @ctrl 4 1 => X           1 => H           4 => H           1 => T           4 => shift($(3/2))           4 => X           1 => H           4 => S           4 => X           2 => S           @ctrl 2 3 => X           2 => H           @ctrl 2 3 => X           2 => T           3 => S           2 => H           3 => H           3 => S           @ctrl 2 3 => X       enddemo_circ_simp (generic circuit with 1 methods)

Можно добавить аргумент optimizer = [opts...] в макрос @device, чтобы упростить эту схему во время компиляции. В настоящее время существует только два этапа оптимизации: :zx_clifford для упрощения Клиффорда [1] и :zx_teleport для фазовой телепортации [2]. Например, с помощью optimizer = [:zx_teleport] компилятор вызовет алгоритм фазовой телепортации в ZXCalculus.jl для упрощения схемы.


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


julia> using YaoLang.Compilerjulia> gate_count(demo_circ_simp)Dict{Any,Any} with 8 entries:  "YaoLang.Rx(3.141592653589793)"     => 2  "YaoLang.H"                         => 6  "YaoLang.Rx(0.7853981633974483)"    => 1  "YaoLang.shift(4.71238898038469)"   => 1  "YaoLang.shift(1.5707963267948966)" => 4  "YaoLang.shift(0.7853981633974483)" => 1  "@ctrl YaoLang.Z"                   => 1  "@ctrl YaoLang.X"                   => 4

Мы можем использовать YaoArrayRegister.jl чтобы применить эту упрощенную схему к квантовому состоянию:


julia> using YaoArrayRegister;julia> circ_teleport = demo_circ_simp()demo_circ_simp (quantum circuit)julia> r = rand_state(4);julia> r |> circ_teleportArrayReg{1, Complex{Float64}, Array...}    active qubits: 4/4

Можно также загрузить схемы из OpenQASM. OpenQASM это квантовая инструкция. Коды OpenQASM можно запускать на квантовых устройствах IBM. А квантовые схемы могут храниться в виде кодов OpenQASM. Я использовал пакет Джулии RBNF.jl (парсит код в ограниченную форму Бэкуса-Наура) для перевода OpenQASM кодов в AST, с последующим преобразованием его в YaoIR, промежуточное представление для смешанной квантово-классической программы YaoLang.jl. Это делает возможным чтение схем из OpenQASM в ZXCalculus.jl через YaoLang.jl.


using YaoLang: YaoIR, is_pure_quantumusing ZXCalculuslines = readlines("gf2^8_mult.qasm")src = prod([lines[1]; lines[3:end]])ir = YaoIR(@__MODULE__, src, :qasm_circ)ir.pure_quantum = is_pure_quantum(ir)circ = ZXDiagram(ir)pt_circ = phase_teleportation(circ)

Здесь мы загрузили схему в виде ZXDiagram из файла .qasm, который можно найти тут. И мы использовали алгоритм фазовой телепортации, чтобы упростить его. Мы видим, что Т-число в цепи уменьшилось с 448 до 264.


julia> tcount(circ)448julia> tcount(pt_circ)264

Приведенные выше примеры показали, как ZXCalculus.jl работает в качестве механизма упрощения схем в YaoLang.jl. А теперь давайте посмотрим, что скрывается за сценой.


Низкоуровневые интерфейсы ZXCalculus


В ZX-исчислении мы будем иметь дело с ZX-диаграммами и мультиграфами с некоторой дополнительной информацией. Каждая вершина ZX-диаграммы называется пауком. Есть два типа пауков, Z-паук и X-паук. Каждый паук связан с числом, называемым фазой. По нотации Дирака Z-паук и X-паук представляют собой следующие матрицы ранга 2.



ZX-диаграммы можно рассматривать как особый тип тензорной сети. Как и квантовые схемы. А квантовые схемы могут быть преобразованы в ZX-диаграммы по следующим правилам.



Желтая коробка, H-box, это простая нотация следующих пауков в ZX-исчислении



Для представления общих ZX-диаграмм мы определили структуру ZXDiagram в ZXCalculus.jl. Мы можем построить ZX-диаграмму, которая представляет собой пустую квантовую схему с n кубитами с помощью ZXDiagram(n). Например, если мы хотим упростить приведенную выше схему с помощью ZXCalculus.jl вручную, то сначала мы построим ZX-диаграмму схемы из 4 кубитов.


using ZXCalculuszxd = ZXDiagram(4)

Затем мы добавляем некоторые элементы к ZX-диаграмме, которую мы только что построили. Просто используем push_gate! и push_ctrl_gate!


Код
push_gate!(zxd, Val(:Z), 1, 7//4)push_gate!(zxd, Val(:H), 1)push_gate!(zxd, Val(:X), 1, 1//4)push_gate!(zxd, Val(:H), 4)push_ctrl_gate!(zxd, Val(:CZ), 4, 1)push_ctrl_gate!(zxd, Val(:CNOT), 1, 4)push_gate!(zxd, Val(:H), 1)push_gate!(zxd, Val(:H), 4)push_gate!(zxd, Val(:Z), 1, 1//4)push_gate!(zxd, Val(:Z), 4, 3//2)push_gate!(zxd, Val(:X), 4, 1//1)push_gate!(zxd, Val(:H), 1)push_gate!(zxd, Val(:Z), 4, 1//2)push_gate!(zxd, Val(:X), 4, 1//1)push_gate!(zxd, Val(:Z), 2, 1//2)push_ctrl_gate!(zxd, Val(:CNOT), 3, 2)push_gate!(zxd, Val(:H), 2)push_ctrl_gate!(zxd, Val(:CNOT), 3, 2)push_gate!(zxd, Val(:Z), 2, 1//4)push_gate!(zxd, Val(:Z), 3, 1//2)push_gate!(zxd, Val(:H), 2)push_gate!(zxd, Val(:H), 3)push_gate!(zxd, Val(:Z), 3, 1//2)push_ctrl_gate!(zxd, Val(:CNOT), 3, 2)

Теперь давайте нарисуем ZX-диаграмму, которую мы построили. Инструмент визуализации ZXCalculus.jl в настоящее время предоставляется в YaoPlots.jl.


using YaoPlotsplot(zxd)


Заодно поднимем алгоритмы упрощения clifford_simplification [1] и phase_teleportation [2]


ex_zxd = clifford_simplification(zxd);pt_zxd = phase_teleportation(zxd);plot(ex_zxd)plot(pt_zxd)


Схема после упрощения Клиффорда

Схема после фазовой телепортации


Алгоритм фазовой телепортации может уменьшить число Т-вентилей квантовой схемы. Воспользуемся tcount чтобы показать количество Т-вентилей. В этом примере число Т уменьшилось с 4 до 2.


julia> tcount(zxd)4julia> tcount(pt_zxd)2

Эти алгоритмы используют правила ZX-исчисления для упрощения ZX-диаграмм. Эти правила определяют, как ZX-диаграммы могут быть преобразованы. Вот некоторые основные правила для ZXDiagram.



В работе [1] определен особый тип ZX-диаграммы графоподобная ZX-диаграмма. Мы используем ZXGraph, чтобы представить ее в ZXCalculus.jl. И вот некоторые правила для ZXGraph



Можно применить правила на ZX-диаграмме вручную. Для этого мы предоставляем различные API.


Функция match найдет все вершины соответствующие заданному правилу. Применение rewrite! переписывает ZX-диаграмму на некоторых совпадающих вершинах. replace! функция просто сопоставляет и переписывает все совпадающие вершины один раз. simplify! функция будет сопоставлять и переписывать ZX-диаграмму с правилом до тех пор, пока не останется сопоставимых вершин.


В clifford_simplification, мы сначала преобразуем заданную ZX-диаграмму в графоподобную ZX-диаграмму


zxg = ZXGraph(zxd)plot(zxg)


Затем, мы упрощаем ее с помощью правил :lc, :p1, и :pab


simplify!(Rule{:lc}(), zxg)simplify!(Rule{:p1}(), zxg)replace!(Rule{:pab}(), zxg)plot(zxg)


Наконец, мы извлекаем новую схему из упрощенной графоподобной ZX-диаграммы


ex_circ = circuit_extraction(zxg)plot(ex_circ)


Почему именно ZXCalculus.jl?


Вышеприведенные алгоритмы уже реализованы в пакете Python PyZX. PyZX это полнофункциональная библиотека для манипулирования крупномасштабными квантовыми схемами и ZX-диаграммами. Он предоставляет множество удивительных возможностей визуализации и поддерживает различные формы квантовых схем, включая QASM, Quipper и Quantomatic.


Так почему же мы разработали ZXCalculus.jl? Это связано с тем, что ZXCalculus.jl является не только полнофункциональной библиотекой для ZX-исчисления, но и одним из механизмов упрощения схем для YaoLang.jl. Легкая нативная реализация ZX-исчисления необходима, так как зависимость от пакета Python сделает работу компилятора медленнее и сложнее.


Benchmarks


Мы провели сравнительный анализ алгоритма фазовой телепортации на 40 схемах с различным числом вентилей (от 57 до 91642). ZXCalculus.jl имеет ускорение от 6 до 50 раз в этих примерах (время выполнения ZXCalculus.jl масштабируется до 1 для каждой схемы на этом рисунке). Эти тесты выполняются на ноутбуке с процессором Intel i7-10710U и 16 ГБ оперативной памяти. Код для бенчмарков можно найти здесь.



В большинстве примеров T-число оптимизированных схем, производимых ZXCalculus.jl, совпадает с PyZX. Однако в 2 примерах ZXCalculus.jl имеет больше T-count, чем PyZX. Это может быть вызвано различными стратегиями упрощения между ZXCalculus.jl и PyZX. Мы продолжим исследовать это в будущем.



Кроме того, YaoLang.jl поддерживает гибридные квантово-классические программы. Можно оптимизировать гибридные квантово-классические программы с помощью ZXCalculus.jl.


Резюме и дальнейшей работы


В течение GSoC 2020 я в основном выполнил следующие работы.


  • Представление и манипулирование ZX-диаграммами с высокой производительностью.
  • Реализация двух алгоритмов упрощения на основе ZX-исчисления.
  • Добавление визуализации в ZX-схемы в YaoPlots.jl.
  • Интеграция ZXCalculus.jl с YaoLang.jl.
  • Добавление поддержки OpenQASM в YaoLang.jl.

Есть еще кое-что, что нужно отполировать.


  • Поиск лучшей стратегии упрощения, чтобы получить более низкие значения T.
  • Полная поддержка визуализации "ZXGraph" (сценарий построения графика может потерпеть неудачу на некоторых "ZXGraph" с фазовыми гаджетами).
  • Преобразование на ZX-схемы для тензорных сетей без YaoLang.jl.
  • Преобразование между "YaoIR" и "ZXDiagram" может привести к тому, что схема отличается от глобальной фазы. Мы должны записать эту глобальную фазу в более поздней версии.

Кроме того, я буду продолжать работать над YaoLang.jl с Роджером Ло, Чтобы поддерживать больше методов упрощения схем (методы сопоставления шаблонов, методы на основе Quon и т.д.).


Благодарности


Я хочу поблагодарить своих наставников, Роджера Ло и Цзиньго Лю. Без их помощи я не смог бы осуществить этот проект. ZXCalculus.jl очень вдохновлен PyZX. Спасибо Алекс Киссинджер и Джон ван де Ветеринг, авторам PyZX. Они дали мне полезные советы по алгоритму фазовой телепортации и рассмотрели бенчмарки между PyZX и ZXCalculus.jl. Благодарю Google за проведение Google Summer of Code, которое способствует развитию сообщества с открытым исходным кодом.


[1]: Graph-theoretic Simplification of Quantum Circuits with the ZX-calculus
[2]: Reducing T-count with the ZX-calculus

Подробнее..

Квантовая теория. Вселенная из волн вероятностей

18.10.2020 04:15:28 | Автор: admin
Квантовая теория является одной из самых точных моделей, описывающих окружающий нас мир, а технические решения, разработанные благодаря применению аппарата квантовой механики, прочно вошли в повседневную жизнь современного общества. И тем удивительнее, что понимание даже базовых концепций этой сферы знаний вступает в серьезные противоречия с интуицией, не только людей далеких от науки, но и самих исследователей, подтверждением чему является большое количество различных интерпретаций. В этой статье, предлагаю рассмотреть основные понятия квантовой теории с показавшейся автору наиболее интуитивно-понятной точки зрения, несколько модифицированной теории вероятностей.

imageЧто будет, если по аналогии с двущелевым опытом, все пространство на пути частицы до экрана будет заполнено щелями?



Теория вероятности единственный доступный математический инструмент, помогающий составить карту неизвестного и неконтролируемого.

Фрактальная геометрия природы Бенуа Мандельброт


Cодержание:

  1. Введение: Демон Лапласа и Бог Эйнштейна
  2. Принцип неопределенности, татуировка и каллиграфия
  3. Волны материи и их амплитуды
  4. Комплексные числа и фаза вероятности
  5. Реальный мир и мнимые единицы
  6. Волновая функция и плотность вероятности
  7. Квантовый шлагбаум декогеренции
  8. Немного квантовой криптографии
  9. Заключение


Введение: Демон Лапласа или Бог Эйнштейна


В начале 19-го века, в научной картине мира доминировал детерминизм учение о том, что начальные параметры системы полностью определяют её дальнейшее развитие. Ньютоновская механика, позволяла очень точно предсказывать поведение не слишком больших тел, двигающихся со скоростями намного меньшими скорости света, а появившиеся затем специальная и общая теория относительности сделали возможным подобные расчёты и для очень массивных объектов, двигающихся со скоростями близкими к скоростям света.

И только вопросом времени казалось создание демона Лапласа гипотетического вычислительного устройства, которое будет способно получить на вход изначальные параметры любой системы и вычислить её стояние в любой момент. Ученые уже начали предвкушать практически полную победу над неопределенностью и торжество человеческого разума, хотя парадоксы, связанные с самой возможностью существования демона Лапласа, уже тогда вызывали большие сомнения.

image

Но примерно в тоже время попытки исследователей проникнуть в устройство природы на крайне малых пространственных и временных масштабах принесли плохие новости для детерминизма. Так, одно из основных утверждений новой квантовой теории принцип неопределенности, гласил, что если у системы существуют связанные (коммутирующие) параметры, то, чем точнее мы измеряем один из них, то тем с меньшей определенностью мы можем определить другой.

Исходя из этих представлений, ни одно событие нельзя было предсказать с абсолютной точностью, поскольку в любых измерениях оставалась некоторая неточность и этот факт пришелся не по душе многим участникам научного сообщества того времени. Лагерь критиков возглавлял, уже имевший в то время мировой авторитет, Альберт Эйнштейн, который в переписке со своим оппонентом и коллегой Гейзенберга Максом Борном, так отозвался о возможности существования принципа неопределенности: " Во всяком случае, я убеждён, что [Бог] не играет в кости."

image

Принцип неопределенности, татуировка и каллиграфия


Действие принципа неопределенности часто списывают на свойства самого процесса измерения, но есть и более фундаментальные причины и проще всего их продемонстрировать на примере двух параметров: импульса и координаты частицы. Подобно тому, как один и тот же рисунок можно выполнить двумя принципиально разными способами: векторным и растровым, то есть либо в виде линий, как, например, в каллиграфии, либо в виде набора точек, как в случае с татуировкой. Также и движение частицы можно описать двумя альтернативными способами: с помощью импульса вектора массы-скорости $\vec p=m\vec v$ или с помощью набора пространственно-временных координат ${(x_1,t_1);(x_2,t_2);...;(x_n,t_n)}$.

image
Слева: мастер каллиграфии рисует символ Энсо (яп. ,), источник. Справа: процесс нанесения татуировки на кожу человека, источник.


И согласно принципу неопределенности, чем точнее мы будем фиксировать координату объекта в пространстве-времени $x$, тем меньше информации мы сможем получить о его импульсе. Представьте, что подброшенный вверх мячик, фотографируют несколько фотографов, у каждого на фотоаппарате стоит разная выдержка. Если выдержка большая, то на фотографии положение мяча получится смазанным, но зато будет хорошо виден вектор его движения. А чем меньше будет выдержка, тем чётче будет локализация объекта съемки и в пределе мы получим четкий подвешенный в воздухе мяч и совершенно ничего не сможем сказать о том, по какой траектории он двигался.

image
Три альтернативных снимка движущегося объекта, слева на право, показано как с увеличением пространственно-временного интервала (выдержки фотоаппарата), уменьшается количество информации об импульсе (траектории частицы).


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

image
Вверху, слева на право: интерференционные картины получаемые при последовательном уменьшении щели, источник. Внизу: схема экспериментальной установки, источник.


Волны материи и их амплитуды


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

image
Дифракция прямого волнового фронта, проходящего через отверстие, источник.


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

Впервые идею о том, что не только фотоны, а вообще любая материя обладает волновыми свойствами высказал в 1923 году, французский физик Луи де Бройль в своей работе "Волны и кванты". Эта гипотеза была частично подтверждена уже в 1927 году, в результате опыта Дэвиссона-Гермера, который показал волновую дифракцию электронов, что принесло Луи де Бройлю заслуженную нобелевскую премию по физике в 1929 году.

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

image
Слева: интерференция волн на воде, источник. Справа: интерференционная картина, полученная в результате регистрации одиночных электронов, проходящих через двойную щель источник.


Но если волны на воде это колебательные движения частиц воды вверх и вниз, звуковые волны это аналогичные движения молекул воздуха, то колебанием чего является волна материи, которая может быть фотоном, атомом, молекулой, человеком? Формально, ученые так и не пришли к единому мнению на этот счет, тем не менее научились вычислять функцию, которая эту волну описывает в зависимости от координаты или любого другого параметра, который можно измерить и обнаружили, что квадрат модуля этой функции являет собой точную оценку вероятности результатов измерения. Поэтому многие учёные, в числе которых был и выдающийся физик Ричард Фейнман, так и называли волновые функции амплитудами вероятности. И это может показаться довольно странным, что вся материя и излучение являются волнами каких-то абстрактных математических понятий, но как мы постараемся показать далее, приняв это утверждение можно получить довольно понятное объяснение многих квантовых эффектов.

Комплексные числа и фаза вероятности


Из экспериментов с одной и двумя щелями мы уже знаем, что во многом амплитуды вероятностей ведут себя как самые обычные волны и даже могут, проходя через двойную щель накладываться друг на друга, усиливая или наоборот уменьшая вероятность появления частицы в точке, что создает интерференционную картину.
image
Демонстрация принципа интерференции волн. Слева: конструктивная интерференция встреча пиков волн совпадающей фазе даёт более высокую результирующую амплитуду. Справа: деструктивная интерференция при встрече пиков волн в противоположной фазе. Источник.


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

А что, если мы добавим волнам вероятности такое свойство, благодаря которому они смогут интерферировать? Представим прямую и каждая точка на ней будет соответствовать координате частицы, тогда от каждой точки перпендикулярно будем откладывать вероятность соответствующую нахождению частицы в этой точке. Соединив точку $x$ и соответствующую ей вероятность мы получим вектор чем больше длина вектора, тем больше вероятность, нахождения частицы в этой точке, а чтобы эти векторы могли взаимодействовать, к длине еще добавим угол поворота и будем учитывать его при сложении.

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

image
Анимация последовательных преобразований, которые позволяют получить волновую функцию как сумму амплитуд вероятности в точках на пути частицы (зеленая линия), сначала задается вещественная часть амплитуды, а затем фаза (угол поворота) в комплексной плоскости. Источник.


Комплексные числа имеют вид $z=x+y*i$, где первая часть $x$ называется вещественной, а вторая $y*i$ мнимой. Эти две компоненты никогда не смешиваются, а в остальном подчиняются тем же правилам, что и обычные вещественные числа, с тем учётом, что $i$ это мнимая единица и равна $\sqrt{-1}$.

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

Кратко освежим в памяти, модуль комплексного числа это расстояние от начала координат $(0, 0i)$ до точки с координатами $(x;yi)$, то есть: $\sqrt{x^2+(y\sqrt{-1})^2}$, видно, что $(\sqrt{-1})^2=1$, но не будем пока списывать мнимую единицу, а найдем квадрат модуля:
$\left(\sqrt{x^2+(y\sqrt{-1})^2}\right)^2=x^2+(y\sqrt{-1})^2=(x+y\sqrt{-1})(x-y\sqrt{-1})$

Получаем, что квадрат модуля комплексного числа это его произведение на такое же комплексное число, которое отличается только знаком перед коэффициентом мнимой части $z=x-y*i$. Такие пары чисел называются комплексно сопряженными и представляют собой зеркальные отражения друг друга, соответствующие повороту векторов в комплексной плоскости на равные углы, но в противоположные стороны.
image
Где: $\overline z$ комплексно сопряженное число


Реальный мир из мнимых единиц


Вот что мы уже поняли: волновая функция ставит в соответствие каждой координате некоторое комплексное число. Собственно, это и есть то чем занимаются волновые функции ставят в соответствие какому-то измеряемому параметру комплексное число, угол поворота которого называется фазой. Фазы комлексных чисел отвечают за эффекты интерференции усиления и ослабления вероятностей, которые получаются путем умножения волновой функции на её же зеркальное отражение комплексное сопряжение.

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

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

Чтобы узнать какая функция соответствует нашим точкам, пойдем самым простым путём и начнем подгонять ответ под данные, то есть подбирать полиномы, которые будут проходить через максимальное количество имеющихся точек. Начнем с двух точек и подберём для них коэффициенты полинома первой степени, то есть линейной функции $y = ax + b$ ведь линия точно пройдет через наши две точки. Если остаются точки которые не лежат на этой прямой, то мы возьмем полином второго порядка $y = ax^2 + bx + c$ графиком которого являются различные параболы, подобрав коэффициенты мы гарантировано попадём, как минимум в три точки, одна из которых будет вершиной, а две других будут лежать на сторонах. Затем снова проверим остались ли еще точки лежащие вне графика если да повторим увеличив степень полинома еще на единицу и так далее, логика понятна, полином степени $n$ гарантировано проходит через $n+1$ точек и в результате мы можем подобрать полином, который покроет все наши точки. Есть даже специальная теорема апроксимационная теорема Вейерштрасса, которая подтверждает, что это возможно.

image
Пример подгонки точек, взятых из функции плотности вероятности нормального распределения, полиномами различной степени, от линейного, до полинома 18-й степени, с использованием функции numpy.polyfit. Можно убедится, что степень полинома соответствует количеству точек, через которые проходит его график.
Код Python:
from numpy import *from matplotlib.pyplot import *from mpl_toolkits.axes_grid.axislines import SubplotZeromu, sigma = 0, 0.1x = np.arange(-1,1,0.02)y = 1/(sigma * np.sqrt(2 * np.pi))*np.exp( - (x - mu)**2 / (2 * sigma**2) )y1 = poly1d(polyfit(x,y,1))# lineary2 = poly1d(polyfit(x,y,2))# quadraticy3 = poly1d(polyfit(x,y,3))# cubicy4 = poly1d(polyfit(x,y,4))# 4th degreey5 = poly1d(polyfit(x,y,10))# 10th degreey6 = poly1d(polyfit(x,y,18))# 18th degreefig = figure(figsize=(20,8), facecolor='#f4efcb', edgecolor='#f4efcb')ax = SubplotZero(fig,111)fig.add_subplot(ax)ax.plot(x,y1(x),'r',label=u'линейный')ax.plot(x,y2(x),'g',label=u'квадратичный')ax.plot(x,y3(x),'orange',label=u'кубический')ax.plot(x,y4(x),'b',label=u'$4$ степени')ax.plot(x,y5(x),'c',label=u'$10$ степени')ax.plot(x,y6(x),'m',label=u'$18$ степени')ax.plot(x,y,'k.',label=u'данные')ax.set_xlabel(u'x')ax.set_ylabel(u'y')ax.set_facecolor('#f4efcb')ax.minorticks_on()ax.legend(frameon=False,loc=8,labelspacing=.2)ax.annotate('коэффициенты полинома 18 степени:'+'\n'+str(y6.coeffs), xy = (-1,1.2))setp(ax.get_legend().get_texts(), fontsize='large')fig.savefig("Curve fitting.svg",bbox_inches="tight",pad_inches=.15)



А раз плотность вероятности можно приблизить многочленом, то наверняка у этого многочлена есть и корни и еще одна замечательная теорема основная теорема алгебры говорит, что таки да любой полином обязательно имеет решения в комплексных числах, а если корни вещественные, то это значит просто, что мнимая часть равна нулю (вектора будут иметь нулевой угол поворота), поскольку множество вещественных чисел полностью содержится во множестве комплексных $\mathbb{R} \subset \mathbb{C}$.

И если любое комплексное число $z=x+y*i$ является корнем какого-либо полинома, то автоматически корнем этого же уравнения является и сопряженное ему число $\overline z=x-y*i$, об этом нам говорит еще одна теорема теорема о комплексно-сопряженных корнях.

Для примера представим, что плотность вероятности описывается полином второй степени $x^2+5*x+6,5$ и найдем его корни. По формуле корней квадратного уравнения $x_{1,2} = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$, подставив коэффициенты $a=1, b=5, c=6,5$ и получим в виде решения два сопряженных комплексных числа $x_1=-5/2 + i/2$, $x_2=-5/2 - i/2$, как нам и утверждала теорема о сопряженных корнях.

С другой стороны, зная корни и воспользовавшись формулами Виета мы можем разложить тот же квадратный трехчлен следующим образом: $x^2+bx+c=(x-x_1)(x-x_2)$ легко проверить, что это верно, подставив полученные значения и раскрыв скобки мы получим исходный полином. Но в тоже время в правой части формулы Виета мы получили произведение двух сопряженных комплексных чисел, что есть квадрат модуля. В принципе эту же логику можно расширить и на остальные степени полиномов, главное, что всегда корни будут идти в паре, а для получения исходного полинома будет использоваться их перемножение.

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

image
Комикс с шуткой на тему действительных чисел (англ. real numbers) и умножения волновой функции на собственное комплексное сопряжение. Источник


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

Волновая функция и плотность вероятности


Получая плотность вероятности нахождения частицы в определенной координате, мы предсказываем то, с какой частотой мы будем наблюдать частицу в разных точках. Например, если плотность вероятности будет описываться гауссовой кривой, как на левой части рисунка ниже, то в $68\%$ случаев мы увидим, что частица появится на отрезке от $-1\sigma$ до $+1\sigma$, а в $95\%$ случаев на отрезке от $-2\sigma$ до $+2\sigma$ и так далее. Что в случае двумерного симметричного распределения, показанного справа, даст большую плотность обнаружения частицы в некотором круглом участке в центре и низкую плотность по мере удаления от центра:

image

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

image
Слева: кривые плотности вероятности нахождения электрона вокруг единичного протона, для трёх энергетических уровней $1s, 2s, 3s$. Справа: показан пример как выглядели бы распределения точек при проведении измерения координаты электрона. Источник.

На рисунке выше можно заметить, как меняются формы орбиталей в зависимости от энергетического уровня электрона чем выше энергия электрона, тем, во первых, больше радиус оболочки, что вполне понятно, ведь чем больше энергия, тем сильнее электрон может сопротивляться притяжению ядра и тем дальше от ядра он может взаимодействовать, но вместе с этим, к каждому новому уровню энергии добавляется участок с нулевой вероятностью, называемый узлом (node), так, например, орбиталь электрона на 3 энергетическом уровне имеет форму слоеной сферы, содержащей внутри себя две зоны, вероятность обнаружения электрона в которых равна нулю.

image
Контур вероятности нахождения электрона в окрестности ядра атома водорода для трех энергетических уровней слева на право: 1s, 2,s 3s. Источник.

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

Но если думать об электроне, как об амплитуде вероятности, то все объясняется вполне естественно, на картинке ниже волновая функция от радиуса электрона вокруг ядра водорода, рассчитанная в одном измерении, для трех энергетических уровней.

image

Глядя на графики волновой функции легче понять, что электрон удерживаемый ядром атома представляет собой стоячую волну и как у любой стоячей волны, у неё будут появляться, так называемые, узлы (node) зоны где амплитуда в результате интерференции с отраженной волной будет нулевой.

imageПример образования узлов интерференции (красные точки) в одномерной стоячей волне, источник.

И если одномерная волна, как на анимации выше, всё еще не напоминает форму слоёной трёхмерной электронной оболочки атома водорода, то предлагаю представить волну на двумерной плоскости, распространяющуюся от точечного источника. Так, чтобы увидеть полную форму такой двумерной волны потребуется смотреть на неё в трех измерениях. А для жителя двумерного мира такая волна будет просто набором расходящихся от центра кругов. Аналогично и с трехмерными волнами живут они в четырех измерениях, но для нас они будут выглядеть расходящимися трехмерными сферами.

image
Справа: анимация волны, распространяющейся по двумерной поверхности. Слева: пример того, как будет выглядеть проекция этой волны на плоскость.

Квантовый шлагбаум декогеренции


Авраам Паис (Abraham Pais) выдающийся физик и историк науки, совместно работавший с целой плеядой из легенд науки 20 века, в числе которых: Джон фон Нейман, Альберт Эйнштейн, Нильс Бор, Макс Борн, Пол Дирак, Вольфганг Паули и многие другие, описывая один из диалогов, касающихся проблемы наблюдателя в квантовой физике, приводил вопрос, заданный ему Эйнштейном:
Вы правда считаете, что Луна существует только тогда, когда вы на неё смотрите? (Rev. Mod. Phys. 51, 863914 (1979), p. 907).

И действительно древняя философская дилемма о существовании объективной реальности, с открытием квантовых свойств нашего мира стала еще актуальнее. Волновая функция даёт возможность с необходимой точностью предсказать результат измерения, но существует ли она в отрыве от контекста измерения и наблюдателя и как это проверить?

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

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

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

Тогда какова размерность клубка ниток? С большого расстояния клубок представляет собой не более чем точку с нулевыми размерами. Приближаясь, можно увидеть, что это шар, который заполняет пространство в трех измерениях. Еще ближе можно увидеть саму нить, и объект становится фактически одномерным Мандельброт без математики апеллировал к теории относительности: Представление о том, что числовой результат должен зависеть от отношения объекта к наблюдателю, в духе физики нашего столетия и даже является образцовой её иллюстрацией.

Хаос. Создание новой науки Джеймс Глейк

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

Теперь возникает резонный вопрос: если мы примем утверждение о том, что все состоит из волн амплитуд вероятности, то почему мы так скучно живем не наблюдаем волновых свойств таких, как суперпозиция и интерференции у макроскопических объектов, окружающих нас?

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

image
Слева: анимация интерференционной картины от прохождения волны через двойную щель, источник. Справа: результаты эксперимента по регистрации одиночных электронов после прохождения двойной щели. Источник: New Journal of Physics, Volume 15, March 2013.

Но если мы захотим узнать, через какую из щелей проходит электрон и поставим на против одной из них измерительный прибор, то интерференционная картина на экране пропадет, и мы увидим на экране только два пика. Все это вызывает недоумение, и может сложится впечатление, что существует какое-то особое правило, которое говорит электрону, что если никто не смотрит, то он распространяется в виде волны, а когда его пытаются измерить превращается в локализованную частицу. Звучит очень странно, ведь держать столько сложных правил, для одного простого электрона это совсем не в духе природы.
image
Карикатура, высмеивающая разделение явлений на квантовые и классические. Источник (http://personeltest.ru/away/www.bourbaphy.fr/zurek.pdf)

А что если мы применим только принцип суперпозиции, сможем ли мы получить те же наблюдаемые эффекты? Так если сначала мы имеем волновую функцию, которая описывает координату взаимодействия одиночного электрона с экраном $|\psi \rangle$, то после прохождения через двойную щель, она будет представлять собой сумму двух волновых функций прошедшей через щель $1$ и через щель $2$, тогда общее состояние можно записать как суперпозицию этих двух состояний $|\psi \rangle =|\psi_1 \rangle +|\psi_2 \rangle $.

В случае с одной волновой функцией, чтобы найти вероятность взаимодействия частицы в точке x_j мы находим произведение j-тых компонент бра и кет вектора, мнимые единицы при этом сокращаются, и мы получаем классическую вероятность:
$p(x_j)=|\psi(x_j)|^2= z _j^* z_j= |z_j|^2 $


В случае с суперпозицией двух возможных маршрутов мы перемножаем уже сумму волновых функций:

$p(x_j)=|\psi_1(x_j)+\psi_2(x_j)|^2=$
$= (z1 _j^*+ z2 _j^*)(z1 _j+ z2 _j)=$
$ = |z1 _j|^2+z1 _j^*z2 _j+z2 _j^*z1 _j+|z2 _j|^2$

В выражении выше кроме модулей комплексных чисел мы получили еще слагаемые вида: $ z1 _j^*z2 _j$ и $z2 _j^*z1 _j $ произведения разных комплексных чисел, результат которого будет зависеть от угла фазы $$ этих комлексных чисел:
$inline$z1z2=|z1||z2|[cos(1+2)+isin(1+2)]$inline$

Чтобы понять, как будут взаимодействовать фазы двух альтернативных маршрутов, представим фазу как стрелку, которая будет вращаться с заданной скоростью, мере распространения волны, один полный оборот стрелки будет соответствовать длине волны, а скорость вращения частоте.
image
Черной стрелкой показано сравнение скорости вращения фаз двух волновых пакетов с разной частотой источник.

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

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

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


Куда исчезает интерференция, когда мы проводим измерение, того через какую щель проходит электрон? После прохождения детектора появляется уже не две, а намного больше различных альтернативных вариантов волновой функции, поскольку даже если детектор микроскопический, он все равно будет состоять из огромного количества атомов, например даже в одной сотой грамма железа содержится порядка $10^{20}$ атомов, но конкретное число нам сейчас не важно, главное, что появляется огромное разнообразие разных вариантов взаимодействия, которые зависят от конкретного состояния частиц детектора, и каждое альтернативное состояние будет давать свою альтернативную версию волновой функции.

Также возьмем $p(x_j)=|\psi(x_j)|^2$ вероятность попадания электрона в координату $x_j$ на экране, после прохождения детектора и снова распишем эту вероятность через суперпозицию всех возможных альтернативных траекторий:

$\psi(x) = \psi_1(x)+\psi_2(x)+...+\psi_n(x)$, где $n$ очень большое количество различных вариантов состояния детектора.
$p(x_j)=|\psi_1(x_j)+\psi_2(x_j)+...+\psi_n(x_j)|^2=$
$= (z1 _j^*+ z2 _j^*+...zn _j^*)(z1 _j+ z2 _j+...+zn _j)=$
$ = (\sum_{j=1}^n z_j^*)(\sum_{j=1}^n z_j)$

Для наглядности запишем результат перемножения этих сумм в виде матрицы из $n^2$ элементов:
$\begin{bmatrix} (z1^*)(z1) & (z1^*)(z2) & \cdots & (z1^*)(zn) \\ z2^*)(z1) & (z2^*)(z2) & \cdots & (z2^*)(zn) \\ \vdots & \vdots & \ddots & \vdots \\ (zn^*)(z1) & (zn^*)(z2) & \cdots & (zn^*)(zn) \end{bmatrix}$

Итого мы получили $n$ классических вероятностей по диагонали и $(n^2-n)$ итерференционных членов, и все это в сумме даёт вероятность попадания электрона для одной точки. Но в этом случае интерференционные члены уже не будут иметь одинаковую фазу, как в предыдущем случае, когда волна либо проходила через щель без взаимодействия, либо полностью отражалась. Сейчас, проходя через детектор, состоящий из различных не синхронизированных друг с другом частиц, получившиеся в результате волновые функции, будут иметь также случайные некогерентные фазы.

Такие рассинхронизированные состояния называют смешанным (mixed states). И хотя волновые функции смешанных состояний тоже будут интерферировать, но результат интерференции уже не будет зависеть от пройденного волной расстояния и в каждой точке экрана можно ожидать одинаковое и очень большое количество как конструктивно, так и деструктивно интерферирующих слагаемых, что в среднем будет давать их нулевой вклад. Подобно тому, как удары молекул газа не сдвигают предмет с места, поскольку в каждый момент времени на предмет приходится примерно равное количество ударов со всех сторон.

image
Потеря когерентности волновой функции $1$ после прохождения детектора $d$ приводит к обнулению вклада интерференционных членов в точках на экране и появлению картины соответствующей наложению двух гауссовых пиков.

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

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

Немного квантовой криптографии


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

image Схема конструкции квантового компьютера D-Wave 2000Q, источник.


Но если при создании квантовых компьютеров декогеренция является большой проблемой, то в криптографии неизбежное изменение волновой функции при измерении пришлось очень кстати. Например, если мы возьмем в качестве квантового бита фотон, то в зависимости от угла его поляризации можем выбрать два различных варианта кодировки нуля и единицы:
  • $0$ вертикальная поляризация, $1$ горизонтальная;
  • $0$ диагональная поляризация, $1$ антидиагональная.

Обозначим два этих способа кодировки как два базиса: $VH$ и $DA$, соответственно. Тогда если отправитель Алиса кодирует бит в базисе $VH$, то есть отправляет либо горизонтально поляризованный фотон или вертикальный, то получателю Бобу нужно будет пропустить полученный фотон через линейный поляризационный фильтр, который полностью блокирует вертикальную поляризацию.

Тогда если фотон пролетит поляризатор и попадет детектор значит мы точно знаем что это был горизонтально поляризованный $0$, а если не пролетит вертикальный $1$. Аналогично если развернуть поляризационный фильтр в вертикальное положение, то он будет блокировать $100\%$ горизонтально поляризованных фотонов.
image
Слева: вертикально ориентированный фотон блокируется линейным поляризационным фильтром. Справа: при повороте поляризационного фильтра на $90 $ вертикально поляризационный фотон проходит свободно. Источник.

Пока все полностью соответствует классической системе кодировки картине. Но в силу принципа суперпозиции мы можем представить диагональный фотон как композицию горизонтальной и вертикальной поляризации, и если затем его пропустить через поляризатор, ориентированный на фильтрацию вертикальных фотонов, то на выходе будет оставаться только горизонтальная компонента с амплитудой $1/2$ от исходной, что в случае одиночного фотона будет соответствовать $50\%$ вероятности прохождения через фильтр.
image
В левой части: диагональный фотон (красная стрелка) представленный в виде композиции горизонтальной и вертикальной компоненты (розовая и фиолетовая стрелка) электромагнитного поля. В правой части: линейный поляризационный фильтр блокирует вертикальную компоненту диагонального фотона и на выходе получается горизонтально поляризованный фотон. Источник

А значит, если мы кодируем каждый следующий бит в случайно выбранном базисе, то получателю также необходимо будет менять поворот поляризационного фильтра, ведь если он будет измерять фотон, закодированный в горизонтально вертикальном базисе $VH$ с помощью фильтра, повернутого под $45$, то он будет получать $0$ и $1$ случайным образом с вероятностью $50\%$, что аналогично полной потере информации.
image
Проходя через вертикальный линейный поляризатор, диагональный и антидиагональный фотоны теряют горизонтальную компоненту и на выходе получается горизонтальный фотон с амплитудой $1/2$ от исходной. Источник.

На этом принципе основан первый протокол квантовой криптографии $BB84$, позволяющий передавать ключ шифрования по открытому каналу. Так если Алисе нужно передать Бобу сообщение состоящее из n символов, то самым надежным способом будет перевести каждый из символов двоичный код, а затем взять такую же по длине последовательность случайных нулей и единиц и выполнить операцию побитового сложения XOR, то есть если символы с одинаковыми индексами совпадают то в результате получаем 0, а если различаются то $1$.

Так, Алиса получает зашифрованное сообщение и ключ, если у получателя Боба также есть ключ, то он может сделать снова операцию XOR и получить исходное сообщение. Квантовая криптография физика как раз позволяет обменяться ключом, так в алгоритме $BB84$ генерируется не одна а сразу две последовательности случайных битов с некоторым запасом относительно сообщения. Первая последовательность указывает на то, в каком базисе будет кодироваться фотон, являющийся квантовым битом ключа, отправляемого Алисой-Бобу. Затем Боб, получая фотоны, также с помощью случайной последовательности выбирает в каком базисе измерять каждый фотон, при этом он будет получать неверный результат с вероятностью $25\%$.

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

Квантовый фокус состоит в том, что если к каналу подключился подслушиватель, скажем Ева, которая будет перехватывать фотон измерять его направлять дальше Бобу, то измеряя перехваченные фотоны при неправильно выбранном базисе она также неизбежно будет разрушать суперпозицию. Таким образом, даже после просеивания, в ключе Боба все еще останутся ошибки, которые можно будет выявить в процессе сверки, когда Алиса отправляет Бобу по классическому каналу фрагмента своего ключа, если в результате сверки ошибок не будет выявлено, то можно будет с уверенностью пользоваться ключом для обмена сообщениями.

image
Логическая схема алгоритма шифрования $BB84$. Источник.


Заключение



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

  • Физика и философия Вернер Гейзенберг, осмысление квантовой теории, как её видел один из наиболее видных её основоположников.
  • КЭД странная теория света и вещества классическая книга гениального Ричарда Фейнмана, которая написана по мотивам научно-популярных лекций, прочитанных им в 60-е годы в калифорнийском технологическом институте (Caltech).
  • Как понимать квантовую механику более современная и содержащая чуть больше формул, но также изложенная понятным, человеческим языком книга, за авторством доцента кафедры теоретической физики МФТИ Иванова Михаил Геннадьевича.
  • Квантовые вычисления со времен Демокрита книга написанная профессором компьютерных наук Скоттом Ааронсоном и которая является чем-то средним между учебником и популярной книгой, для получения наибольшей пользы от чтения которой, рекомендуется выполнять самостоятельные упражнения.
  • Physics Videos by Eugene Khutoryansky YouTube канал инженера микроэлектроники, живущего в США, в своих роликах Евгений наглядно демонстрирует сложные физические концепции, благодаря чему многие из его видео набирают больше миллиона просмотров.
  • Minute phisics еще один отличный канал по физике, на котором отдельный плэйлист посвящен квантовой механике, не смотря на название, видео достаточно подробно и с нуля разбирают такие сложные темы как: теорему о запрете клонирования, парадокс Харди и даже квантовый алгоритм Шора, позволящий находить простые множители числа за полиномиальное время.
  • 3Blue1Brown канал выпускника Оксфорда Гранта Сандерсона, отлично сочетания понятного изложения и уникальной визуализации концепций из: квантовой физики, линейной алгебры, нейронных сетей. Также Грант является автором курса по многопараметрическому исчислению, доступному на площадке некоммерческого проекта Khan Academy.
Подробнее..

Перевод Новые квантовые алгоритмы, совершившие прорыв в нелинейных уравнениях

08.02.2021 20:16:10 | Автор: admin

Привет, Хабр. Для будущих студентов курса Математика для Data Science подготовили перевод интересного материала.

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


Две команды нашли сразу два разных способа для квантовых компьютеров обрабатывать нелинейные системы, представив их в виде линейных.

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

Это одна из причин, почему нам до сих пор трудно предсказывать погоду или понимать сложный поток жидкости, говорит Эндрю Чайлдс, исследователь квантовой информатики из Университета Мэриленда. Существуют сложные вычислительные задачи, которые можно было бы решить, если бы разгадать эту нелинейную динамику.

Но скоро это может скоро стать возможным. В независимых исследованиях, опубликованных в ноябре, две группы одна во главе с Чайлдсом, а другая из Массачусетского Технологического Института (MIT) описали мощные инструменты, которые позволят квантовым компьютерам лучше моделировать нелинейную динамику.

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

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

Что особенно интересно в этих двух работах, так это то, что они нашли режим, при котором, с некоторыми допущениями, у них есть эффективный алгоритм, говорит Мария Киферова, исследователь квантовых вычислений из Технологического Университета Сиднея, которая не связана ни с одним из этих исследований. Это действительно впечатляет, и это значит, что оба эти исследования используют очень хорошие методы.

Цена хаоса

Более десяти лет исследователи квантовой информатики пытались использовать линейные уравнения в качестве ключа к нелинейным дифференциальным уравнениям. Важный прорыв произошел в 2010 году, когда Доминик Берри, ныне работающий в Университете Маккуори в Сиднее, создал первый алгоритм для решения линейных дифференциальных уравнений, который на квантовых компьютерах работает экспоненциально быстрее, чем на классических. Вскоре внимание Берри переключилось на нелинейные дифференциальные уравнения.

Мы уже пытались работать над этим раньше, говорит Берри. Но это было весьма малоэффективно.

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

Джон Т. Консоли / Мэрилендский университет

Проблема в том, что физика, лежащая в основе квантовых компьютеров, сама по себе в основе своей линейна. Это как учить машину летать, говорит Бобак Киани, соавтор исследования Массачусетского Технологического Института.

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

Команда Чайлдса использовала линеаризацию Карлемана, старомодную математическую технику 1930-х годов, с помощью которой можно преобразовать нелинейные задачи в массив линейных уравнений.

К сожалению, результирующий список уравнений бесконечен. Исследователи должны принимать решение, где его можно обрубить, чтобы получить достаточно хорошую аппроксимацию. Следует ли мне остановиться на уравнении номер 10? Номер 20? говорит Нуно Лурейро, физик плазмы из Массачусетского Технологического Института и соавтор исследования в Мэриленде. Команда доказала, что для определенного диапазона нелинейностей их метод может усечь этот бесконечный список и решить уравнения.

Работа, проведенная под эгидой Массачусетского Технологического Института, выбрала другой подход. Она моделировала любую нелинейную задачу как конденсат Бозе-Эйнштейна. Это состояние вещества, при котором взаимодействия внутри ультрахолодной группы частиц заставляют каждую отдельную частицу вести себя одинаково. Поскольку все частицы взаимосвязаны, поведение каждой частицы влияет на остальные, возвращаясь обратно к этой же частице на манер замкнутого цикла, характерного для нелинейности.

Алгоритм Массачусетского Технологического Института имитирует это нелинейное явление на квантовом компьютере, используя математику Бозе-Эйнштейна для соединения нелинейности и линейности. Таким образом, работая с симуляцией псевдо-конденсата Бозе-Эйнштейна, создаваемой под нелинейную задачу, этот алгоритм выводит полезную линейную аппроксимацию. Дайте мне ваше любимое нелинейное дифференциальное уравнение, и я построю вам конденсат Бозе-Эйнштейна, который будет его моделировать, говорит Тобиас Осборн, специалист по квантовой информатике из Ганноверского Университета имени Лейбница, не связанный ни с одним изисследований. Это идея, которая мне очень понравилась.

Алгоритм команды под руководством Массачусетского Технологического Института моделирует любую нелинейную проблему как конденсат Бозе-Эйнштейна, экзотическое состояние материи, в котором все взаимосвязанные частицы ведут себя одинаково.

NIST

Берри считает, что обе работы важны по-разному (он не участвовал ни в одной из них). Но в конечном итоге их важность заключается в демонстрации того, что существуют методы, приближающие нас к пониманию нелинейного поведения, говорит он.

Осознание своих пределов

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

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

Исследование Чайлдса математически строго. Он дает очень четкое представление о том, когда оно сработает, а когда не сработает, говорит Осборн. Я думаю, это действительно очень интересно. Это фундаментальный вклад.

По словам Киани, исследование под руководством Массачусетского Технологического Института не доказывает строго какие-либо теоремы, ограничивающие его алгоритм. Но команда планирует узнать больше об ограничениях алгоритма, запустив мелкомасштабные тесты на квантовом компьютере, прежде чем переходить к более сложным задачам.

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

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


Узнать подробнее о курсе Математика для Data Science.

Записаться на открытый вебинар на тему Статистическая зависимость.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru