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



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

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

В этой статье я объясню, что придумали я и мои сотрудники.

Визуализация пары битов

Давайте начнем с чего-нибудь приятного и простого: с бит. Каждый бит - это либо 0, либо 1. Представим это в виде картинки.

Здесь у нас есть голубая полоса, которая светло-голубая, или выключена, для представления 0, и темно-синяя, или вкл., для представления 1.

Иногда нам нужны случайные биты. Конечно, это все еще 0 или 1, но мы не знаем, какие именно. Представим наше невежество полосой, которая наполовину включена (или наполовину выключена).

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

Есть четыре возможных состояния двух битов. Показанный выше - 01, но есть также 00, 10 и 11. Они представлены различными комбинациями включения и выключения.

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

Здесь может происходить множество разных вещей. Во-первых, могло случиться так, что биты были сгенерированы одним и тем же случайным процессом и, следовательно, всегда имели одно и то же значение. Вот фрагмент кода Python, который сделает это (обратите внимание, что False и True - это Python для 0 и 1).

random_bit = random.choice([False, True])
bit[0] = random_bit
bit[1] = random_bit

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

rand_bit = random.choice([False, True])
bit[0] = random_bit
bit[1] = !random_bit # 0 whenever the above is 1, and vice-versa

Они также могут быть совершенно не связанными случайными битами.

bit[0] = random.choice([False, True])
bit[1] = random.choice([False, True])

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

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

И на, если они всегда не соглашаются.

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

Теперь у нас есть способ представить все, чем могут быть два бита.

Визуализация пары кубитов

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

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

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

Если мы возьмем синий вывод, мы увидим, что показанное здесь состояние определенно даст результат 1. Если мы возьмем красный вывод, результат будет случайным.

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

Второй кубит также представлен двумя полосами, но мы сложим их вертикально.

В этом примере это красный вывод, результат которого определен, а синий - случайный.

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

В частности, есть четыре способа извлечь два бита из двух кубитов:

  • Синий вывод обоих кубитов (назовем его BB);
  • Красный вывод обоих кубитов (RR);
  • Синий вывод от одного кубита и красный от другого (BR);
  • Красный вывод от одного кубита, а синий - от другого (RB).

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

Здесь у нас есть один кубит, представленный двумя полосами сверху (мы назовем его верхним кубитом), а другой - двумя столбцами слева (левый кубит). Остальные столбцы, выделенные серым фоном для ясности, описывают корреляции.

Корреляции между синими выходными сигналами показаны полосой BB, которая также является синей. Корреляции между красными выходными сигналами показаны красной полосой RR .

Для двух случаев с одним красным выходом и одним синим у нас есть RB и RR. В качестве компромисса между синим и красным, эти полоски фиолетовые (и диагональные).

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

Теперь мы разработали, как визуализировать кубиты, давайте начнем ими манипулировать.

Управление кубитами

Компьютер не просто смотрит на биты, он их обрабатывает. Биты постоянно меняются с 0 на 1 и обратно, пока компьютер прокладывает курс от входа к выходу. Квантовый компьютер будет делать то же самое, но с кубитами.

Самое простое, что можно сделать с битом, - это операция NOT. Это переворачивает 0 на 1 и 1 на 0. С нашей визуализацией эффект

NOT не мешает случайному биту быть случайным, поэтому он не влияет на полосу, которая половина на.

Кубиты имеют схожие эффекты. Один называется x, который влияет на синий вывод кубита. И есть один под названием z, который влияет на красный вывод.

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

В результате x и z на верхнем кубите влияют на целые столбцы сетки. В качестве примера рассмотрим эффект z.

Обратите внимание, что в целом на фиолетовую полосу в этом столбце также влияет z. Просто в этом конкретном примере это не так много, потому что эта полоса половина включена.

Вместо этого операции x и z будут влиять на строки при применении к кубиту слева. Вот пример с x.

Эти операции x и z являются примерами операций Клиффорда. Это причудливое название просто говорит нам, что это операции с относительно простым воздействием на столбцы. Фактически, эта визуализация на основе столбцов исходит из того, что мы любим думать об операциях Клиффорда и их эффектах.

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

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

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

В этой статье мы рассмотрим только два. Один обычно называется u3(pi/4,0,0). Но так как это не очень цепляет, мы назовем его q. Другой - столь же громоздкий u3(-pi/4,0,0), который мы называем qdg.

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

А теперь давайте поразим его q.

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

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

Эффект q состоит в том, чтобы просто повернуть точку, перетаскивая вместе с ней уровни полос.

Операция q выполняет вращение по часовой стрелке на 1/8 пути по окружности, а qdg делает то же самое, но против часовой стрелки.

Теперь пора посмотреть, как q влияет на всю нашу двухкубитную сетку. Начнем с q на верхнем кубите. Для этого нам нужно нарисовать два столбца друг над другом.

Это создает три круга. Верхняя - это просто красная и синяя полоски для верхнего кубита, как мы видели ранее.

Средняя пара состоит из полосы BB и полосы RB. Полоса BB всегда синяя и вертикальная, поэтому играет роль вертикальной оси. Теперь нам нужна горизонтальная ось, чтобы завершить круг. Это делается с помощью полосы RB. Хотя обычно фиолетовый и диагональный, он становится красным и горизонтальным, чтобы образовать круг.

Для нижнего круга поле RR - очевидный выбор для горизонтальной оси. Это означает, что в данном случае полоса BR становится синей и вертикальной.

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

Чтобы увидеть, как q влияет на левый кубит, вместо этого нам нужно нарисовать две строки друг над другом.

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

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

Сфера Блоха

Сколько существует способов извлечь результат из кубита? Верно сказать, что их бесконечно много. Также верно сказать, что есть только один. Но самый верный ответ - их три. Два из них - красный и синий, с которыми мы уже встречались. Итак, назовем последний зеленым.

Когда мы объединяем красные и синие полосы, мы получаем круг. Когда мы добавляем зеленую, мы получаем сферу. Это сфера Блоха.

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

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

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

Выводы

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

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

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