Квантовые вычисления и язык Q# для начинающих |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-03-26 17:30 Возможно, вы узнали о выпуске пакета средств квантовой разработки Quantum Development Kit и подумали, что это звучит безумно круто… а потом вспомнили, что про квантовую механику почти ничего не знаете. Но ничего страшного. Через 30 минут вы будете знать о кубитах, суперпозиции и квантовой запутанности достаточно, чтобы написать свою первую программу и, что более важно, неплохо понимать, что она делает. Франчес — выпускница Имперского колледжа Лондона с научной степенью в области вычислительных технологий. Она написала свой дипломный проект, работая в подразделении Microsoft Research. Сейчас Франчес работает в Microsoft на должности инженера программных решений. Основные направления ее деятельности — машинное обучение, большие данные и квантовые вычисления. Содержание статьи
Повторим основы Если вы не программируете на самом низком уровне, то вполне можете забыть, что любые программы, по сути, лишь манипулируют нулями и единицами, которые хранятся в наших «классических» компьютерах. Этим нулям и единицам соответствуют дискретные бинарные состояния физических систем. Квантовые компьютеры работают с непрерывными диапазонами состояний. Отчасти их возможности обусловлены именно этим. Для записи двух состояний кубитов можно использовать обозначения бра и кет (обозначения Дирака), которые соответствуют следующим векторам: С помощью линейной комбинации этих двух состояний можно выразить любое возможное сочетание векторов |0? и |1?. В квантовой механике такое сочетание называется суперпозицией. Соответствующая запись в обозначениях Дирака будет выглядеть так: Измеряем кубит Квантовые состояния — странная штука. В результате измерения (или, как говорят, «в присутствии наблюдателя») кубит немедленно коллапсирует. Как это понимать? Предположим, кубит находится в состоянии суперпозиции. Если его измерить, то он примет одно конкретное значение — |0? или |1? (сразу оба результата одно измерение показать не может!). После измерения кубита коэффициенты ? и ?, которыми характеризовалось его предыдущее состояние, будут, по сути, утеряны. Если мы будем измерять его состояние, то в 50 % случаев будем получать значение 0, потому что: То есть после измерения он будет находиться в состоянии |0? (то есть ? = 1, ? = 0). По той же причине вероятность получить состояние 1 составляет 50 %. В этом случае после измерения кубит перейдет в состояние |1? (то есть ? = 0, ? = 1). В первый раз все это сильно сбивает с толку (на второй, третий и четвертый раз ничего не изменится). Основная идея здесь заключается в том, что вероятностные квантовые состояния можно использовать для вычислений, и в некоторых случаях эта их квантовая «странность» позволяет получить системы с эффективностью выше классических. Теперь посмотрим, как эти кубиты можно использовать для вычислений, подобно классическим битам. Квантовые вентили Вернемся пока к более привычным вещам. В классической теории вычислений для выполнения операций над битами используются логические вентили. Для манипуляций над кубитами применяются аналогичные конструкции — квантовые вентили. Например, вентиль NOT выполняет преобразования 0 ? 1 и 1 ? 0. Квантовый вентиль NOT похож на своего классического предка: он выполняет преобразования |0? ? |1? и |1? ? |0?. Это значит, что после прохождения такого вентиля кубит из состояния ? |0? + ? |1? перейдет в состояние ? |1? + ? |0?. Вентиль NOT можно записать в виде матрицы (X), которая меняет местами 0 и 1 в матрице состояния: Важные вентили: вентиль Z и вентиль Адамара Описанные ниже вентили будут использоваться в нашей первой квантовой программе, поэтому постарайтесь их запомнить. Вентиль Z работает очень просто: он сохраняет компонент |0? и меняет знак компонента |1?. Его можно записать в виде матрицы Несколько кубитов Рассмотрим нечто более привычное. Классические биты существуют не только поодиночке, но и в виде сочетаний: например, 00, 01, 10 и 11. В квантовых вычислениях используются аналогичные комбинации: |00?, |01?, |10? и |11?. Состояние двух кубитов можно описать с помощью следующего вектора: Как и раньше, вероятность получить в результате измерения величину 00 равна , Еще один важный вентиль Работу вентиля NOT мы уже разобрали. Следующий на очереди — вентиль CNOT (controlled-NOT, «управляемое НЕ»). На его вход подается два кубита. Первый называется управляющим, второй — управляемым. Если управляющий кубит равен |0?, то состояние управляемого кубита не меняется. Если управляющий кубит равен |1?, то к управляемому кубиту применяется операция NOT. Выглядит как экспонат выставки современного искусства. Состояния Белла Этой важной теме стоит посвятить целый раздел. Всего существует четыре состояния Белла. Одно из них (|?+?) будет использоваться в квантовой программе ниже. Давайте его рассмотрим. Теперь предположим, что мы измерили состояние второго кубита. Согласно тем же рассуждениям, после измерения пара будет находиться в состоянии |00? или |11?. Если после этого мы решим измерить состояние первого кубита, вероятности уже не будут равны 0,5. Мы получим |0? с вероятностью 1 или 0 — в зависимости от того, каким был результат измерения. Здесь важно понять, что эти результаты связаны между собой. Первыми это заметили Альберт Эйнштейн, Борис Подольский и Натан Розен (поэтому эти состояния иногда называют «парами ЭПР»). Впоследствии их теорию развил Джон Белл. Пишем квантовую программу Мы будем следовать инструкциям из документации. Этап 1. Создание проекта и решения Q# находится в нижней части этого списка. Этап 2 (необязательный). Обновление пакетов NuGet Мы последовали этому совету, но делать это необязательно, особенно если вы любите рисковать. Этап 3. Ввод кода Q# Эта операция переводит наш кубит в выбранное (нами) состояние — 0 или 1. Вначале мы измеряем кубит (эта операция обозначается буквой M), и он коллапсирует в состояние 0 или 1. Если измеренное состояние не соответствует желаемому, мы меняем его с помощью вентиля NOT, X. В противном случае ничего делать не надо. Этот небольшой фрагмент кода предназначен для тестирования операции, которую мы только что написали. Это очень простая программа: она проверяет, что кубит был переведен в нужное нам состояние. Этап 4. Ввод кода драйвера C#
Этап 5. Сборка и выполнение
Этап 6. Создание суперпозиции Попробуем нечто более интересное. Здесь мы меняем состояние кубита с помощью вентиля NOT. Затем запускаем программу заново и видим, что результаты стали обратными. Затем вентиль NOT заменяем на вентиль Адамара (H). В результате, как мы знаем, кубит перейдет в суперпозицию состояний, и результат его измерения может быть равен как |0?, так и |1?, с некоторой вероятностью. Если запустить программу снова, мы получим довольно интересный результат. Шаг 7. Подготовка запутанного состояния Сейчас мы создадим состояние Белла. Изучите приведенный ниже код. Вначале мы создаем массив из двух кубитов (Qubit[2]). Первый кубит (на предыдущей диаграмме цепи он обозначался символом x) мы переводим в некоторое начальное состояние, а второй (y на диаграмме) устанавливаем в состояние Zero. Это примерно то же самое, что ввод |00? либо |10? в зависимости от X: В соответствии с диаграммой первый кубит, qubits[0], нужно пропустить через вентиль Адамара. В результате он окажется в суперпозиции. Затем пропускаем кубиты через вентиль CNOT (qubits[0] — управляющий кубит, qubits[1] — управляемый) и измеряем результат. Перед тем как проверить результаты, нужно внести в файл Driver.cs еще одно изменение: добавить переменную agree. Теперь программу можно запускать. Что означают эти результаты? Если первый кубит изначально был помещен в состояние Zero (то есть на вход мы подали значение |00?), то вентиль Адамара переводит кубиты в состояние суперпозиции, и результат измерения равен |0? в 50 % случаев и |1? в 50 % случаев. Выполнение этого условия можно оценить по количеству нулей и единиц. Если бы измерение состояния первого бита не влияло на состояние второго, то оно оставалось бы равным |0?, и согласованность достигалась бы только в 499 случаях. На этом мы закончим. Вы написали свою первую квантовую программу и (раз уж вы добрались до конца), вероятно, поняли, что именно она делает. Это стоит отметить хорошей чашкой чая. Что дальше? В репозитории GitHub доступно множество примеров. Дополнительные материалы Если вы хотите углубиться в рассмотренные темы, ниже приводится список ресурсов, которые были для нас очень полезными. Первый из них — книга «Квантовые вычисления и квантовая информация» (М. Нильсен, И. Чанг). Второй — документация к пакету SDK от Microsoft. Приложение. Состояния Белла Генерировать состояния Белла можно с помощью вентиля Адамара и вентиля CNOT. Вентиль Адамара переводит первый кубит в состояние суперпозиции. Затем этот кубит подается на управляющий вход вентиля CNOT. На диаграмме цепи это выглядит так: Затем кубиты проходят через вентиль CNOT (который выполняет преобразования |00? ? |00? и |10? ? |11?). Теперь их состояние будет описываться формулой Теперь пропустим кубиты через вентиль CNOT, который выполняет преобразования |01? ? |01? и |11? ? |10?. Итоговое состояние пары кубитов будет выглядеть так: Третий случай: на вход подаются кубиты |10?. Вентиль Адамара переводит первый кубит |1? в состояние . Второй кубит не меняется. Результат: Затем кубиты проходят через вентиль CNOT (который выполняет преобразования |00? ? |00? и |10? ? |11?). Теперь их состояние будет описываться формулой Четвертый случай: на вход подаются кубиты |11?. Вентиль Адамара переводит первый кубит |1? в состояние . Второй кубит не меняется. Результат: Теперь пропустим кубиты через вентиль CNOT, который выполняет преобразования |01? ? |01? и |11? ? |10?. Итоговое состояние пары кубитов будет выглядеть так: Готово, мы разобрали все случаи. Источник: habrahabr.ru Комментарии: |
|