Практическое руководство по квантовому машинному обучению

Хотите начать работу с квантовым машинным обучением? Взгляните на статью Практическое квантовое машинное обучение с помощью Python.

Сегодня мы собираемся пролить свет на важный макроэкономический вопрос. «Приводит ли подготовка к экзаменам к увеличению занятости?»

Когда я учился в школе, я всегда предпочитал играть в Civilization, а не готовиться к экзаменам. Итак, я бы сказал нет. Но почему бы нам не взглянуть на мои убеждения более строго? Давайте моделируем мои убеждения. Идеальный инструмент для этой работы - байесовская сеть.

Но почему бы нам не добавить к задаче немного больше удовольствия? Почему бы нам не построить квантовую байесовскую сеть (QBN)?

"Только не снова!" ты кричишь? Хорошо, достаточно честно. Я вижу, вы читали мои предыдущие посты и уже знакомы с QBN. Итак, давайте добавим вызов. В посте на прошлой неделе мы познакомились с квантовыми распределениями мультинулли. Итак, было бы здорово, если бы мы использовали его как часть нашего QBN?

Итак, приступим.

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

Что мы здесь видим? Я считаю, что к экзамену готовятся 80% студентов. Итак, я был одним из оставшихся 20%, кто не подготовился. Это распределение вероятностей составляет переменную, которую мы называем «подготовка». Это переменная с двумя возможными исходами. Следовательно, CPT состоит из двух строк. Более того, поскольку у подготовки нет родительских переменных, у нас есть только один столбец значений.

В этом нет ничего страшного. Мы уже работали с такими распределениями Бернулли. Итак, перейдем к следующей переменной - «оценка». Это переменная с четырьмя возможными исходами. Следовательно, у него четыре строки в CPT. Поскольку у нас есть два возможных входа, есть два столбца. Это оценки от «А» (лучший) до «D» (худший).

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

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

Наконец, я считаю, что оценки влияют на то, получит ли кто-то работу. Но про зарплату я здесь ничего не говорю. Но предположим, что 90% отличников получают работу, 80% студентов-бакалавров и только 30% студентов-двойников.

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

Теперь возникает простой вопрос: «Каков уровень занятости среди этого населения?»

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

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

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

При создании QBN всегда рекомендуется начинать с родительских переменных. В нашем случае это подготовка. Мы используем функцию prob_to_angle, чтобы указать угол поворота, который представляет предельную вероятность подготовки. Вентиль R_Y вращает кубит соответственно, чтобы измерить этот кубит как 1 с вероятностью 0,8.

Затем, как мы узнали в предыдущем посте о распределениях Мультинулли, мы вычисляем вероятность быть подготовленными и получить оценку C или D.

Применяем соответствующее вращение к кубиту в позиции 2 (третий кубит). Итак, мы говорим, что этот кубит равен 1, если ученик имеет оценку C или D. Когда вы снова посмотрите определение вероятностей, вы увидите, что эти оценки имеют значение 1 на первой позиции (1 0 или 1 1). В нашем QuantumRegister мы резервируем позиции 1 и 2 (от 0 до 3!) Для переменной Multinoulli. Итак, только если кубит в позиции 0, представляющий подготовку, равен 1, мы поворачиваем кубит в позиции 2 на угол, который определяет вероятность степени C или D.

Затем мы должны разделить эту вероятность на два значения C и D. Для этого мы поворачиваем кубит в позиции 1 на угол, представляющий вероятность степени C при вероятности C или D. Но мы вращаем кубит только в том случае, если кубиты в позициях 0 (подготовка) и 2 (C или D) равны 1.

mcry (мультиуправляемый вентиль $ R_Y $) выполняет это за нас. Мы используем кубиты в позициях 0 и 2 в качестве управляющих кубитов (которые должны быть равны 1) для применения гейта. И мы используем кубит в позиции 1 в качестве целевого кубита.

Мы делаем нечто подобное для классов A и B, если ученик подготовлен. Основное отличие состоит в том, что мы инкапсулируем эту часть в вентили $ NOT $ (qc.x), которые мы применяем к кубиту в позиции 2. Это по существу «выбирает» случаи, когда оценка ученика не является C или D. Следовательно, она должна быть A или B. И поскольку мы уже отделили оценки C и D от A и B, нам не нужно делать это здесь снова.

Это все, что мы делаем для тех студентов, которые подготовились к экзамену. А теперь обратимся к тем, кто этого не сделал. На этот раз мы используем ворота НЕ для «отбора» неподготовленных студентов. Остальной код аналогичен тому, что мы сделали для подготовленных студентов. Сначала мы отделяем оценки C и D от A и B. Затем мы отделяем C от D и A от B. В конце мы снова отменяем выбор неподготовленных учеников.

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

Мы выбираем каждую ступень отдельно и вращаем кубит, представляющий занятие (кубит в позиции 3). Поскольку оба контрольных кубита (в позициях 1 и 2) равны 1, если ученик имеет оценку D, это состояние выбрано по умолчанию, и мы можем напрямую применить мультиуправляемый вентиль $ R_Y $.

Чтобы выбрать оценку C, мы должны применить вентиль $ NOT $ к кубиту 1, потому что значение этого кубита определяет, получил ли ученик C или D.

Соответственно, мы применяем вентиль $ NOT $ к кубиту 2, чтобы выбрать степень B. И, наконец, мы применяем вентили $ NOT $ к кубитам 1 и 2, чтобы выбрать оценку A.

На этом наш QBN завершен. Мы готовы запустить его. Во-первых, мы используем бэкэнд statevector_simulator, который вычисляет вероятности всех состояний.

Мы видим вероятность каждого состояния. Например, состояние 1011 имеет самый высокий шанс 0,256. В этом состоянии ученик был подготовлен, потому что кубит в позиции 0 равен 1 (101 1). И ученик получил оценку B, как показывают кубиты в позициях 1 и 2 (1 01 1). Эти студенты также получили работу, как показывает кубит в позиции 4 (1 011).

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

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

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

Около 70% всех студентов устраиваются на работу, если 80% из них готовятся к экзаменам. Что, если готовятся только 20% студентов?

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

Результат показывает, что 58% студентов по-прежнему получают работу, хотя только 20% готовы к экзаменам.

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

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

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

Хотите начать работу с квантовым машинным обучением? Взгляните на статью Практическое квантовое машинное обучение с помощью Python.

Первые три главы получите бесплатно здесь.