Пробуем квантовые вычисления

Пробуем квантовые вычисления

@m0n0x41d

Привет Друзья!

Решил я посмотреть чуть ближе на квантовое программирование.

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

Зачем? Ну как минимум потому что – интересно, для общего развития! А это уже достаточная причина чтобы разобраться в теме хотя бы поверхностно.

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

За прошлую осень, когда я плотно сидел в Threads мне попадалось очень много будущих Microsoft Corporate Gurl которые много писали про квантовые вычисления, про то что "это круто! это будущее! Смотрите я учусь!" 

Ну давайте разберемся что-ли что за кубиты, запутанность и суперпозиция!

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

Алиса в стране кубитов

Вместо 1/0 битов в квантовом программировании мы имеем дело с кубитами (квантовые биты, ок?), которые находятся в суперпозиции и несут все значения от нуля до единицы. В какой то момент времени они могут принимать любое значение между ними, ну точнее мы их измеряем в момент времени.

Сейчас разберемся!

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

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

Состояния кубитов в основном обозначаются в двух векторах:

  • Кет-вектор как |0⟩ или |1⟩
  • Бра-вектор как ⟨0| или ⟨1|

Но вы этим голову сильно не забивайте. Идем дальше.


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

Итак, все крутится вокруг кубитов, которые изначально (до любого нашего "вмешательства") находятся в суперпозиции. Не понимаю насколько корректно тут использовать термины не-квантового программирования, вроде инициализация, поэтому остановимся на "изначально" :)

Суперпозиция, формально, это комбинация |0> и |1> состояний, к которым мы добавляем два комплексных числа (это те у которых действительные и мнимые части), А и B и получаем такую формулу:

Суммы квадратов А и B должны равняться единицы, это условие нормализации кубита. (к нему мы чуть позже еще вернемся)

Квадрат А обозначает вероятность перехода кубита после нашего вмешательства в состояние |0>, а квадрат B – в состояние |1> соответственно.

Разумеется, значения A и B для каждого перехода состояния кубита уникальные (в смысле значения предыдущего перехода стираются), они должны следовать некой "актуальной реальности", иначе было бы невозможно построить никакие вычисления.

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

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


Наши не-квантовые вычисления можно представить как бросок монеты, в том виде в котором мы его обычно воспринимаем – бросил, получил либо орел либо решку.


Если представить кубит как монету, то это будет такая монета которая после подбрасывания зависает в пространстве и постоянно крутится как очумелая. Мы считаем что она одновременно и орел и решка – так мы условились, она же все еще нами принимается как "монета с двумя сторонами". 

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

Таким образом, в системе в которой есть две обычные монеты мы можем закодировать четыре значения-комбинации:

  • Орёл-Орёл
  • Орёл-Решка
  • Решка-Орёл
  • Решка-Решка

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

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

Фишка квантовых компьютеров в том что они все эти варианты "перебирают" не просто быстро, а практически единомоментно


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

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

Группа запутанных кубитов называется квантовый регистр.

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

Помните про нормализацию (сумма квадратов вероятностей перехода должна быть равна единице)? 

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

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

Есть "однокубитные" вентили, например отрицание NOT, которое работает как бинарный переключатель и переворачивает |0> в |1> или наоборот; Есть вентили более хитрые, которые крутят "фазу" кубита на какие то отношения, или вентили которые меняют только "знак", но не вероятности изменений.

И конечно есть многокубиные вентили, которые "принимают на вход" несколько кубитов и задают разные интересные правила, вроде вентилей CNOT – "Если первый кубит = |1⟩, то переверни второй кубит" и SWAP (понятно что делает, правда?) для двух кубитов; Или вентиля CCNOT для трех кубитов"Если оба первых кубита = |1⟩, тогда переверни третий".


А еще измерения состояния, как в примере с монеткой, на самом деле тоже вентиль, которым мы заставляем кубит "выбрать" конкретное состояние.

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

Помогите, я запутался

Зачем вообще нужны эти квантовые вычисления к компьютеры? 

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

Количество информации, скорость ее обработки, чрезвычайно устойчивые крипто-системы.

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

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


Ладно, давайте отложим футуристку и вернемся к топику.

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

Наверное самые зрелые и популярные песочницы это две python библиотеки – Qiskit от IBM и Гугловый Cirq. И еще есть отдельный квантовый язык программирования и целый QDK (quantum development kit) под него – Q# от Microsoft. 

Я попробовал порешать депрекейтнутые каты на Q# локально... в целом не рекомендую такой опыт. Лучше воспользоваться вот этим бесплатным курсом от Microsoft, где код на Q# можно сразу запускать в браузере -> тык

Мой вывод

Квантовые вычисления это одновременно:

  1. Круто!
  2. Сложновато, не понятно (много математики и формальных штук если погружаться глубже)
  3. Концептуально-поверхностно – все понятно, и при этом не очень интересно – применяй вентиля да старайся правильно переходы предсказать
  4. Все еще очень перспективно, в плане если/когда/скорее-бы стабильные компы с кучей кубитов заведут то сразу экспоненциально быстро приближать новую теч. революцию.

Я вам желаю измерять себя в правильных и перспективных суперпозициях!

Report Page