Я рад сообщить, что мой квантовый симулятор Qubiter (доступен на GitHub, лицензия BSD) теперь имеет собственный бэкэнд-симулятор TensorFlow (см. его класс `SEO_simulator_tf`, `tf` означает TensorFlow). Это дополняет оригинальный симулятор Qubiter numpy (содержащийся в его классе `SEO_simulator`). Маленький шаг для Человечества, гигантский скачок для меня! Хип Хип Ура!

Это означает, что Qubiter теперь может вычислять эволюцию вектора состояния, используя CPU, GPU или TPU. Кроме того, он может выполнять обратное распространение в квантовой цепи. Вот блокнот Jupyter, который я написал, который использует бэкенд Qubiter TF для выполнения VQE (вариационного квантового решения). (Мне нравится называть VQE, имея в виду гамильтонову минимизацию)

https://github.com/artiste-qb-net/qubiter/blob/master/jupyter-notebooks/MeanHamilMinimizer_native_with_tf.ipynb

Numpy — это тензорная библиотека на Python, а TensorFlow (разработанная Google) — еще одна тензорная библиотека на Python. TensorFlow соответствует по имени и функции, почти 1 к 1, каждой функции в numpy. Но одноименные функции TF намного мощнее, чем их пустые аналоги. Помимо доступа к обычному процессору, они могут получить доступ к распределенным вычислительным ресурсам, таким как GPU и TPU. Кроме того, их можно попросить «записать» историю их использования, а затем воспроизвести эту историю в режиме обратного распространения, чтобы вычислить производные списка определяемых пользователем переменных. Затем эти производные можно использовать для минимизации функции затрат (также известных как потери или цели). Такая минимизация — хлеб с маслом классических и квантовых нейронных сетей.

Это захватывающие времена для TF:

  • Буквально в марте прошлого года Google официально выпустила версию TF 2.0.
  • В TF 2.0 режим Eager (это режим, который использует бэкэнд Qubiter TF) был повышен до значения по умолчанию. TF Eager использует динамические графики, как и конкурент TF, PyTorch, созданный Facebook.
  • TF 2.0 также включает в себя «Эдвард», программную библиотеку Дастина Трана для выполнения вычислений с помощью байесовских сетей. Эдвард в его воплощении TF называется TF Probability. Кроме того, TF 2.0 также включает Keras (библиотеку для создания многоуровневых нейронных сетей) и PyMC (библиотеку для выполнения расчетов цепей Маркова методом Монте-Карло).
  • Любой может запустить TF 2.0 в облаке через Google Colab. Именно так я разработал и протестировал бэкэнд Qubiter TF.

Теоретически все, что вам нужно сделать, чтобы преобразовать симулятор numpy в симулятор tensorflow, — это заменить все функции, начинающиеся с префикса `np.`, их тезками, которые начинаются с префикса `tf.`. Однако дьявол кроется в деталях. Я, как и большинство хороших программистов, ненавижу повторяющийся код. Я стараюсь избегать этого любой ценой, потому что не хочу исправлять одну и ту же ошибку в нескольких местах. Поэтому я создал класс `SEO_simulator_tf`, создав подкласс исходного класса симулятора numpy `SEO_simulator`. Это одна из прелестей «подклассов» в ООП (объектно-ориентированном программировании), большим поклонником которого я являюсь: подклассы помогают избежать повторения большого количества кода. Таким образом, `SEO_simulator_tf` оказался обманчиво коротким и простым классом: все, что он делает, это в основном включает набор флагов, которые он передает своему родительскому классу `SEO_simulator`. Большая часть нового кода находится в родительском классе `SEO_simulator` и других классах, таких как `OneBitGates`, которые были изменены, чтобы реагировать на все те флаги, которые устанавливает `SEO_simulator_tf`.

Первоначально опубликовано на http://qbnets.wordpress.com 14 мая 2019 г.