From 5331fd005e25dc1b15bb74f6e0a3766f1ca0edcc Mon Sep 17 00:00:00 2001 From: David Wierichs Date: Tue, 10 Sep 2024 13:28:14 +0200 Subject: [PATCH] [Rapid demo] Classical estimation of expectation values from parametrized quantum circuits (#1209) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Title:** Classical estimation of expectation values from parametrized quantum circuits **Summary:** Rapid demo on simulation result [here](https://arxiv.org/abs/2409.01706). **Relevant references:** https://arxiv.org/abs/2409.01706 **Possible Drawbacks:** **Related GitHub Issues:** * Which of the following types of documentation is most similar to your file? (more details [here](https://www.notion.so/xanaduai/Different-kinds-of-documentation-69200645fe59442991c71f9e7d8a77f8)) - [ ] Tutorial - [x] Demo - [ ] How-to --------- Co-authored-by: Ivana Kurečić --- ...nail_large_classical_expval_estimation.png | Bin 0 -> 38835 bytes ...Gthumbnail_classical_expval_estimation.png | Bin 0 -> 36336 bytes .../thumbnail_classical_expval_estimation.png | Bin 0 -> 25382 bytes ..._classical_expval_estimation.metadata.json | 88 +++ .../tutorial_classical_expval_estimation.py | 570 ++++++++++++++++++ 5 files changed, 658 insertions(+) create mode 100644 _static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_classical_expval_estimation.png create mode 100644 _static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_classical_expval_estimation.png create mode 100644 _static/demo_thumbnails/regular_demo_thumbnails/thumbnail_classical_expval_estimation.png create mode 100644 demonstrations/tutorial_classical_expval_estimation.metadata.json create mode 100644 demonstrations/tutorial_classical_expval_estimation.py diff --git a/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_classical_expval_estimation.png b/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_classical_expval_estimation.png new file mode 100644 index 0000000000000000000000000000000000000000..3a755c347dd84350a7dda6554f8cc9a7f119a384 GIT binary patch literal 38835 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 literal 0 HcmV?d00001 diff --git a/demonstrations/tutorial_classical_expval_estimation.metadata.json b/demonstrations/tutorial_classical_expval_estimation.metadata.json new file mode 100644 index 0000000000..b3ce4a2140 --- /dev/null +++ b/demonstrations/tutorial_classical_expval_estimation.metadata.json @@ -0,0 +1,88 @@ +{ + "title": "Classically estimating expectation values from parametrized quantum circuits", + "authors": [ + { + "username": "dwierichs" + } + ], + "dateOfPublication": "2024-09-10T00:00:00+00:00", + "dateOfLastModification": "2024-09-10T00:00:00+00:00", + "categories": [ + "Quantum Computing" + ], + "tags": [], + "previewImages": [ + { + "type": "thumbnail", + "uri": "/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_classical_expval_estimation.png" + }, + { + "type": "large_thumbnail", + "uri": "/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_classical_expval_estimation.png" + } + ], + "seoDescription": "Estimate expectation values from parametrized quantum circuits efficiently on average with truncated Pauli propagation.", + "doi": "", + "canonicalURL": "/qml/demos/tutorial_classical_expval_estimation", + "references": [ + { + "id": "gottesman", + "type": "article", + "title": "The Heisenberg Representation of Quantum Computers.", + "authors": "D. Gottesman", + "year": "1998", + "journal": "", + "url": "https://arxiv.org/abs/quant-ph/9807006" + }, + { + "id": "angrisani", + "type": "article", + "title": "Classically estimating observables of noiseless quantum circuits.", + "authors": "Armando Angrisani, Alexander Schmidhuber, Manuel S. Rudolph, M. Cerezo, Zoë Holmes, Hsin-Yuan Huang", + "year": "2024", + "journal": "", + "url": "https://arxiv.org/abs/2409.01706" + }, + { + "id": "aharonov", + "type": "article", + "title": "A polynomial-time classical algorithm for noisy random circuit sampling.", + "authors": "Dorit Aharonov, Xun Gao, Zeph Landau, Yunchao Liu, Umesh Vazirani", + "year": "2022", + "journal": "", + "url": "https://arxiv.org/abs/2211.03999" + }, + { + "id": "lowesa", + "type": "article", + "title": "Classical surrogate simulation of quantum systems with LOWESA.", + "authors": "Manuel S. Rudolph, Enrico Fontana, Zoë Holmes, Lukasz Cincio", + "year": "2023", + "journal": "", + "url": "https://arxiv.org/abs/2308.09109" + }, + { + "id": "begusic", + "type": "article", + "title": "Fast and converged classical simulations of evidence for the utility of quantum computing before fault tolerance.", + "authors": "Tomislav Begušić, Johnnie Gray, Garnet Kin-Lic Chan", + "year": "2023", + "journal": "", + "url": "https://arxiv.org/abs/2308.05077" + } + ], + "basedOnPapers": ["10.48550/arXiv.2409.01706"], + "referencedByPapers": [], + "relatedContent": [ + { + "type": "demonstration", + "id": "tutorial_clifford_circuit_simulations", + "weight": 1.0 + }, + { + "type": "demonstration", + "id": "tutorial_liesim", + "weight": 1.0 + } + ] +} diff --git a/demonstrations/tutorial_classical_expval_estimation.py b/demonstrations/tutorial_classical_expval_estimation.py new file mode 100644 index 0000000000..e9a2cd1311 --- /dev/null +++ b/demonstrations/tutorial_classical_expval_estimation.py @@ -0,0 +1,570 @@ +r""" +Classically estimating expectation values from parametrized quantum circuits +============================================================================ + +In the race between classical and `quantum computing `__, an important question +is whether there exist efficient classical algorithms to simulate quantum +circuits. +Probably the most widely-known result of this type is the Gottesman–Knill +theorem [#gottesman]_. It states that quantum circuits consisting of Clifford +gates alone can be simulated classically, provided that the initial state +of the circuit is "nice enough" (also see the :doc:`PennyLane Demo on Clifford simulation +`). + +In this demo we will showcase a new result on classical simulation of quantum +circuits at a glance! For this, we will learn about *Pauli propagation*, how to +truncate it, and how it results in an efficient classical algorithm for +estimating expectation values of parametrized quantum circuits (on average +across parameter settings). +We will implement a basic variant in PennyLane, and discuss limitations and the +important details that lie at the heart of the new preprint called +*Classically estimating observables of noiseless quantum circuits* +by Angrisani et al. [#angrisani]_. + +This result is important, as it casts doubt on the usefulness of generic parametrized quantum +circuits in quantum computations. Read on if you are wondering whether this +preprint just dequantized your work! + +.. figure:: ../_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_classical_expval_estimation.png + :align: center + :width: 60% + :target: javascript:void(0) + +Our target: Estimating expectation values from quantum circuits +--------------------------------------------------------------- + +Let's start by looking at the type of quantum computations that we want to +simulate classically. +Given an initial state :math:`|\psi_0\rangle`, a parametrized quantum +circuit :math:`U(\theta)`, and an observable :math:`H`, a common task in +many variational quantum algorithms is to compute the expectation value + +.. math:: + + E(\theta) = \langle \psi_0 | U^\dagger(\theta) H U(\theta) |\psi_0\rangle + +for various parameter settings :math:`\theta`. +Being able to estimate such an expectation value efficiently is required +to train the parametrized quantum circuit in applications such as +:doc:`QAOA `, +the :doc:`variational quantum eigensolver ` and a wide +range of `quantum machine learning `__ tasks. + +For simplicity, we will assume the initial state to be +:math:`|\psi_0\rangle=|0\rangle` throughout. +Similarly, we will work with a particular example for the circuit +:math:`U(\theta)` and discuss the class of :doc:`parametrized circuits ` the algorithm +can tackle further below. + +For our demo, we choose the widely used hardware-efficient ansatz, which alternates +arbitrary single-qubit rotations with layers of entangling gates. +Lastly, the observable :math:`H` can be decomposed into a sum of Pauli words as + +.. math:: + + H = \sum_{\ell=1}^L h_\ell P_\ell, \quad P_\ell \in \{I, X, Y, Z\}^{\otimes N}. + +Here, :math:`N` is the total number of qubits. +The number of qubits on which a Pauli word is supported (i.e., has a non-identity +component) is called its *weight*. +For the algorithm to work, the weights of the Hamiltonian's Pauli words may not +exceed a set threshold, see the truncation step below. +For our example we pick the Heisenberg model Hamiltonian + +.. math:: + + H_{XYZ} = \sum_{j=1}^{N-1} h_j^{(X)} X_j X_{j+1} + h_j^{(Y)} Y_j Y_{j+1} + h_j^{(Z)} Z_j Z_{j+1} + +with random coefficients :math:`h_j^{(X|Y|Z)}`. In :math:`H_{XYZ}`, each Pauli word +has weight two. + +We will discuss the type of Hamiltonians that the algorithm can tackle +further below, but for now, let's define the Hamiltonian and the circuit ansatz in code. +We pick a :math:`\operatorname{CNOT}` layer on a ring as entangler for the ansatz. +We transform the ``ansatz`` function with :func:`~.pennylane.transforms.make_tape`, making +the function into one that returns a tape containing the gates (and expectation value). +This also allows us to draw the ansatz easily with :func:`~.pennylane.drawer.tape_text`. +To maintain an overview, we set the number of qubits and layers to just 4 and 3, respectively. +""" + +import pennylane as qml +import numpy as np +from itertools import combinations, product + + +def _ansatz(params, num_qubits, H): + """Parametrized quantum circuit ansatz that alternates arbitrary single-qubit + rotations with strongly entangling CNOT layers. The depth of the ansatz and the + number of qubits are given by the first dimension of the input parameters.""" + + for i, params_layer in enumerate(params): + # Execute arbitrary parametrized single-qubit rotations + for j, params_qubit in enumerate(params_layer): + qml.RZ(params_qubit[0], j) + qml.RY(params_qubit[1], j) + qml.RZ(params_qubit[2], j) + # If we are not in the last layer, execute an entangling CNOT layer + if i < len(params) - 1: + for j in range(num_qubits): + qml.CNOT([j, (j + 1) % num_qubits]) + + return qml.expval(H) + + +ansatz = qml.transforms.make_tape(_ansatz) + +num_qubits = 4 +num_layers = 3 +np.random.seed(852) +H_coeffs = np.random.random((num_qubits - 1) * 3) +H_ops = [op(j) @ op(j + 1) for j in range(num_qubits - 1) for op in [qml.X, qml.Y, qml.Z]] +H = qml.dot(H_coeffs, H_ops) + +# Smaller parameter set to get smaller circuit to draw +params = np.random.random((num_layers, num_qubits, 3)) +tape = ansatz(params, num_qubits, H) +print(qml.drawer.tape_text(tape)) + +############################################################################## +# Now that we have our example set up, let's look at the core technique behind +# the simulation algorithm. +# +# Pauli propagation +# ----------------- +# +# A standard classical simulation technique for quantum circuits is based on +# state vector simulation, which updates the state vector of the quantum system +# with each gate applied to it. From a physics perspective, this is the evolution of +# a quantum state in the Schrödinger picture. To conclude the simulation, this approach +# then contracts the evolved state with the observable :math:`H`. +# +# Here we will use a technique based on the Heisenberg picture, which +# describes the evolution of the measurement observable :math:`H` instead. +# This technique is called *Pauli propagation* and has also been used by +# related simulation algorithms [#aharonov]_, [#lowesa]_, [#begusic]_. +# +# In the Heisenberg picture, each gate :math:`V`, be it parametrized or not, +# acts on the observable via +# +# .. math:: +# +# H' = V^\dagger H V. +# +# The evolved observable can then be contracted with the initial state at the end +# of the simulation. +# +# Pauli propagation tracks the Pauli words :math:`P_\ell` in the Hamiltonian throughout +# this Heisenberg picture evolution, requiring us to only determine how a gate +# :math:`V` acts on any Pauli word. For Clifford gates, including the Hadamard +# gate, :math:`\operatorname{CNOT}`, :math:`\operatorname{CZ}` and Pauli gates themselves, any Pauli word is mapped +# to another Pauli word. As a matter of fact, this is a standard way to *define* +# Clifford gates. As an example, consider a :math:`\operatorname{CNOT}` gate acting on the Pauli +# word :math:`Z\otimes Z` in the Heisenberg picture. We can evaluate (note that +# :math:`\operatorname{CNOT}^\dagger=\operatorname{CNOT}`) +# +# .. math:: +# +# \operatorname{CNOT} (Z\otimes Z) \operatorname{CNOT} +# &=(P_0 \otimes \mathbb{I}+P_1\otimes X) (Z\otimes Z) (P_0 \otimes \mathbb{I}+P_1\otimes X)\\ +# &=(Z \otimes \mathbb{I}) (P_0 \otimes Z - P_1 \otimes Z)\\ +# &=\mathbb{I}\otimes Z. +# +# Here we abbreviated the projectors :math:`P_i=|i\rangle\langle i|` and used simple +# operator arithmetic. We can similarly look at the action of :math:`\operatorname{CNOT}` +# on any other two-qubit Pauli word. However, this might get tedious, so let us +# do it in code. + +cnot = qml.CNOT([0, 1]) + +for op0, op1 in product([qml.Identity, qml.X, qml.Y, qml.Z], repeat=2): + original_op = op0(0) @ op1(1) + new_op = cnot @ original_op @ cnot + new_op = qml.pauli_decompose(new_op.matrix()) + print(f"CNOT transformed {original_op} to {new_op}") + +############################################################################## +# This fully specifies the action of :math:`\operatorname{CNOT}` on any Pauli word, +# because any tensor factors that the gate does not act on are simply left unchanged. +# We will use these results as a lookup table for the simulation below, +# so let's store them in a string-based dictionary: + +cnot_table = { + ("I", "I"): (("I", "I"), 1), + ("I", "X"): (("I", "X"), 1), + ("I", "Y"): (("Z", "Y"), 1), + ("I", "Z"): (("Z", "Z"), 1), + ("X", "I"): (("X", "X"), 1), + ("X", "X"): (("X", "I"), 1), + ("X", "Y"): (("Y", "Z"), 1), + ("X", "Z"): (("Y", "Y"), -1), + ("Y", "I"): (("Y", "X"), 1), + ("Y", "X"): (("Y", "I"), 1), + ("Y", "Y"): (("X", "Z"), -1), + ("Y", "Z"): (("X", "Y"), 1), + ("Z", "I"): (("Z", "I"), 1), + ("Z", "X"): (("Z", "X"), 1), + ("Z", "Y"): (("I", "Y"), 1), + ("Z", "Z"): (("I", "Z"), 1), +} + + +############################################################################## +# Now, on to some non-Clifford gates, namely Pauli rotation gates. They +# have the important property of mapping a Pauli word to two Pauli words whenever +# the rotation generator and the transformed Pauli word do not commute. +# +# As an example, we can compute the action of :class:`~.pennylane.RZ` on the Pauli +# :class:`~.pennylane.X` operator: +# +# .. math:: +# +# R_Z^\dagger(\theta) X R_Z(\theta) +# &= (\cos(\theta/2) \mathbb{I} + i\sin(\theta/2) Z) X (\cos(\theta/2) \mathbb{I} - i\sin(\theta/2) Z)\\ +# &= (\cos(\theta/2)^2 - \sin(\theta/2)^2) X + i\sin(\theta/2)\cos(\theta/2)[Z, X]\\ +# &= \cos(\theta) X - \sin(\theta) Y. +# +# Here we used trigonometric identities and :math:`[Z, X]=2iY` in the last step. +# Again, the tensor factors of the Pauli word on which the rotation does not act is +# left unchanged. +# And if the rotation generator commutes with the transformed Pauli word, the +# gate will of course leave the word unchanged. +# +# Great, now that we know how a :math:`\operatorname{CNOT}` gate and single-qubit +# Pauli rotations act on a Pauli word, we will be able to tackle our example +# circuit. +# +# But before we move on to implementing it, there is still a *crucial* point missing! +# +# Truncating the Pauli propagation +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Pauli propagation is a neat way to approach the task of estimating expectation +# values that we are after, like :math:`E(\theta)`\ . However, if we were to run +# a classical simulation using this approach as is, we would quickly run into +# a scaling problem. There are :math:`4^N` Pauli words on :math:`N` qubits, an +# unfeasibly large number if we hit all of them during our simulation. +# +# Both existing algorithms and the new work [#angrisani]_ therefore use +# truncation methods to keep the number of Pauli words that need to be tracked +# below a reasonable threshold. +# The algorithm we discuss here does this based on the weight of the tracked Pauli +# words. For a chosen threshold :math:`k`, it simply discards all Pauli words with +# non-trivial tensor factors on more than :math:`k` qubits. +# +# This is clearly an approximation, and in principle we could introduce a large +# error in this truncation. However, Angrisani et al. show that this is not the case +# for a wide class of parametrized circuits at most parameter settings. +# +# As anticipated above, the truncation step requires the Pauli words of the initial :math:`H` +# to be at most :math:`k`-local, as they get truncated away otherwise. Alternatively, +# non-local terms need to make a negligible contribution to the expectation value +# in order for the truncation to be a good approximation. +# +# So let's move on to implementing truncated Pauli propagation technique! +# We will make use of :class:`~.pennylane.pauli.PauliWord` and +# :class:`~.pennylane.pauli.PauliSentence` objects that allow us to handle the +# observable easily. Let's start with two functions that implement a +# single-qubit rotation and a :math:`\operatorname{CNOT}` gate in the Heisenberg +# picture, respectively. Note that single-qubit rotation gates do not +# require us to implement truncation, because they never increase the weight of +# a Pauli word. +# + +from pennylane.pauli import PauliWord, PauliSentence + + +def apply_cnot(wires, H, k=None): + """Apply a CNOT gate on given wires to operator H in the Heisenberg picture. + Truncate all Pauli words in the transformed operator that have weight larger than k.""" + new_H = PauliSentence() + for pauli_word, coeff in H.items(): + # Extract the Pauli tensor factors on the wires of the CNOT + op_pw_0 = pauli_word.get(wires[0], "I") + op_pw_1 = pauli_word.get(wires[1], "I") + # Look up the prefactor and new Pauli tensor factors in our lookup table + (new_op_pw_0, new_op_pw_1), factor = cnot_table[(op_pw_0, op_pw_1)] + # Create new Pauli word from old one and update it with new tensor factors + new_pw = pauli_word.copy() + new_pw.update({wires[0]: new_op_pw_0, wires[1]: new_op_pw_1}) + new_pw = PauliWord(new_pw) + + # Truncation: Only add to the new H if the new Pauli word is small enough + if (k is None) or len(new_pw) <= k: + new_H[new_pw] += factor * coeff + + return new_H + + +def apply_single_qubit_rot(pauli, wire, param, H): + """Apply a single-qubit rotation about the given ``pauli`` on the given ``wire`` + by a rotation angle ``param`` to an operator ``H``.""" + new_H = PauliSentence() + rot_pauli_word = PauliWord({wire: pauli}) + for pauli_word, coeff in H.items(): + if pauli_word.commutes_with(rot_pauli_word): + # Rotation generator commutes with Pauli word from H, the word is unchanged + new_H[pauli_word] += coeff + else: + # Rotation generator does not commute with Pauli word from H; + # Multiply old coefficient by cosine, and add new term with modified Pauli word + new_H[pauli_word] += qml.math.cos(param) * coeff + new_pauli_word, factor = list((rot_pauli_word @ pauli_word).items())[0] + new_H[new_pauli_word] += (qml.math.sin(param) * coeff * factor * 1j).real + + return new_H + + +############################################################################## +# Completing the simulation with the initial state +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# With those two essential functions implemented, we're almost ready to put the algorithm together. +# Before doing so, we need a function that computes the expectation value of the evolved observable +# with respect to the initial state :math:`|0\rangle`. This is simple, though, because we know for +# each Pauli word :math:`P_\ell` in the Hamiltonian that it will contribute its coefficient :math:`h_\ell` +# to the expectation value if (and only if) all tensor factors are :math:`I` or :math:`Z`. + + +def initial_state_expval(H): + """Compute the expectation value of an operator ``H`` in the state |0>.""" + expval = 0.0 + for pauli_word, coeff in H.items(): + if all(pauli in {"I", "Z"} for pauli in pauli_word.values()): + expval += coeff + return expval + + +############################################################################## +# Putting the pieces together +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Now let's combine everything into a function that can handle the tape of our quantum +# circuit from the beginning. It simply extracts the measurement observable and then +# goes through the circuit backwards, propagating the Pauli words of the observable +# according to the Heisenberg picture. Finally, it evaluates the expectation value +# with respect to :math:`|0\rangle`. The truncation threshold :math:`k` for ``apply_cnot`` +# is a hyperparameter of the execution function. + + +def execute_tape(tape, k=None): + """Classically simulate a tape and estimate the expectation value + of its output observable using truncated Pauli propagation.""" + H = tape.measurements[0].obs.pauli_rep + for op in reversed(tape.operations): + if isinstance(op, qml.CNOT): + # Apply CNOT + H = apply_cnot(op.wires, H, k=k) + elif isinstance(op, (qml.RZ, qml.RX, qml.RY)): + # Extract the Pauli rotation generator, wire, and parameter from the gate + pauli = op.name[-1] + wire = op.wires[0] + param = op.data[0] + H = apply_single_qubit_rot(pauli, wire, param, H) + else: + raise NotImplementedError + + return initial_state_expval(H) + + +############################################################################## +# Great! So let's run it on our circuit, but now on 25 qubits and with 5 layers, +# and compare the result to the exact value from PennyLane's `fast statevector simulator, +# Lightning Qubit `__. +# We also set the truncation threshold to :math:`k=8`\ . + +num_qubits = 25 +num_layers = 5 +k = 7 +H_coeffs = np.random.random((num_qubits - 1) * 3) +H_ops = [op(j) @ op(j + 1) for j in range(num_qubits - 1) for op in [qml.X, qml.Y, qml.Z]] +H = qml.dot(H_coeffs, H_ops) +params = np.random.random((num_layers, num_qubits, 3)) + + +def run_estimate(params, H): + tape = ansatz(params, num_qubits, H) + expval = execute_tape(tape, k=k) + return expval + + +expval = run_estimate(params, H) + + +@qml.qnode(qml.device("lightning.qubit", wires=num_qubits)) +def run_lightning(params, H): + return _ansatz(params, num_qubits, H) + + +exact_expval = run_lightning(params, H) + +print(f"Expectation value estimated by truncated Pauli propagation: {expval:.6f}") +print(f"Numerically exact expectation value: {exact_expval:.6f}") + + +############################################################################## +# Wonderful, we have a working approximate simulation of the circuit that is scalable (for +# fixed :math:`k`) that estimates the expectation value of :math:`H`! +# Note that a single estimate neither is a proof that the algorithm works in general, +# nor is it the subject of the main results by Angrisani et al. +# However, a full-fledged benchmark goes beyond this demo. +# +# Fine print: Which circuits can be simulated? +# -------------------------------------------- +# +# As anticipated multiple times throughout the demo, we now want to consider some details on +# the circuits for which the truncated Pauli propagation is guaranteed to work. +# +# It's a statistical thing +# ~~~~~~~~~~~~~~~~~~~~~~~~ +# +# First, it is very important to note that the guarantee of good approximations does not +# apply to any single instance of a quantum circuit, but to the full parametrized *family* +# defined by a circuit ansatz, together with a probability distribution to pick the parameters. +# The guarantee then is that the approximation error of truncated Pauli propagation +# *on average across the sampled parameter settings* can be suppressed exponentially by +# increasing the truncation threshold :math:`k`. +# +# This can be rephrased as follows: the probability of obtaining an error larger than some +# tolerance can be suppressed exponentially by increasing :math:`k`\ . +# Note that this does not prevent the simulation +# algorithm to be *very* wrong at some rare parameter settings! +# +# The circuit needs to be locally scrambling +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Second, there is a requirement for the structure and gates of the parametrized circuit: +# We need to be able to divide the circuit into layers such that each layer, together with +# the distribution of parameters we consider for the parametrized family, does not change under +# random single-qubit rotations. The circuit and its parameter distribution are said to be +# *locally scrambling* in this case. +# +# This may sound complicated, but is easy to understand for a +# small example: Consider an arbitrary rotation :class:`~.pennylane.Rot` on a single qubit, +# together with a distribution for its three angles that leads to Haar random rotations +# (see the :doc:`PennyLane Demo on the Haar measure ` for details). +# This parametrized rotation then is unchanged if we apply another Haar random rotation! +# That is, even though an individual rotation does get modified, the *distribution* of rotations +# remains the same (an important property of the Haar measure!). +# +# For our purposes it is sufficient +# to note that the hardware-efficient layers from above do indeed satisfy this requirement. +# Please take a look at the original paper for further details [#angrisani]_, in particular +# Sections II and VIII and Appendix A. +# +# Scrambling layers need to be shallow +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Third, the parametrized circuit may not "branch too much." That is, if a Pauli word has +# weight :math:`r`, none of the locally scrambling layers of the circuit +# may produce more than :math:`n^r` different Pauli words under the Heisenberg evolution. +# Intuitively, this requirement limits the layers of the circuit to be sufficiently shallow. +# +# For our hardware-efficient circuit, we can bound this amount of branching directly: +# Each :math:`\operatorname{CNOT}` in the entangling layer can at most double the weight of the Pauli word, e.g., +# if each :math:`\operatorname{CNOT}` gate hits a :math:`Z` on its target qubit. +# Afterwards, each single-qubit rotation can create all three Pauli operators on each +# qubit in the support of the enlarged Pauli word, leading to a factor of three. +# Taken together, a Pauli word with weight :math:`r` is transformed into at most +# :math:`3^{2r}=9^r` Pauli words with weights at most :math:`2r`. The requirement +# of not "branching too much" therefore is satisfied, because :math:`9^r`__), +# but does not help the truncated Pauli propagation. + +num_qubits = 15 +num_layers = 3 +H_coeffs = np.random.random((num_qubits - 1) * 3) +H_ops = [op(j) @ op(j + 1) for j in range(num_qubits - 1) for op in [qml.X, qml.Y, qml.Z]] +H = qml.dot(H_coeffs, H_ops) +specific_params = np.ones((num_layers, num_qubits, 3)) * np.pi / 4 + +expval = run_estimate(specific_params, H) +exact_expval = run_lightning(specific_params, H) + +print(f"Expectation value estimated by truncated Pauli propagation: {expval:.6f}") +print(f"Numerically exact expectation value: {exact_expval:.6f}") + +############################################################################## +# As we can see, the estimation error became quite large, although we reduced the +# qubit and layer count while keeping :math:`k` fixed. +# This is a manifestation of the statement that the algorithm only will estimate expectation +# values successfully *on average* over the parameter domain. +# +# Conclusion +# ---------- +# We learned about Pauli propagation, how to truncate it, and how it results in an efficient +# classical algorithm that estimates expectation values of parametrized quantum circuits. +# This result is important, as it casts doubt on the usefulness of generic parametrized quantum +# circuits in quantum computations. Instead of such generic circuits, we will need to make +# use of specialized circuit architectures and smart parametrization and initialization +# techniques if we want to employ parametrized circuits in a useful manner. +# +# Besides the caveat that the approximation is only guaranteed across the full distribution +# of parameters, it is important to note that expectation value estimation is not the only +# interesting task on a quantum computer. +# Similar to the result discussed here, there already exist other classes of quantum circuits +# for which this estimation task is easy, but sampling from the quantum state prepared by +# the circuit is hard. +# One prominent example are so-called instantaneous quantum polynomial-time (IQP) circuits +# [#bremner]_, [#bremner2]_, which arise in the context of :doc:`Boson sampling `. +# +# Finally, it is important to note that while truncated Pauli propagation scales +# polynomially with the qubit count, the exponent of this scaling contains :math:`k`, +# which still can lead to impractical computational cost, e.g., for deep circuits. +# +# References +# ---------- +# +# .. [#gottesman] +# +# Daniel Gottesman +# "The Heisenberg Representation of Quantum Computers" +# `arXiv:quant-ph/9807006 `__, 1998. +# +# .. [#angrisani] +# +# Armando Angrisani, Alexander Schmidhuber, Manuel S. Rudolph, M. Cerezo, Zoë Holmes, Hsin-Yuan Huang +# "Classically estimating observables of noiseless quantum circuits" +# `arXiv:2409.01706 `__, 2024. +# +# .. [#aharonov] +# +# Dorit Aharonov, Xun Gao, Zeph Landau, Yunchao Liu, Umesh Vazirani +# "A polynomial-time classical algorithm for noisy random circuit sampling" +# `arXiv:2211.03999 `__, 2022. +# +# .. [#lowesa] +# +# Manuel S. Rudolph, Enrico Fontana, Zoë Holmes, Lukasz Cincio +# "Classical surrogate simulation of quantum systems with LOWESA" +# `arXiv:2308.09109 `__, 2023. +# +# .. [#begusic] +# +# Tomislav Begušić, Johnnie Gray, Garnet Kin-Lic Chan +# "Fast and converged classical simulations of evidence for the utility of quantum computing before fault tolerance" +# `arXiv:2308.05077 `__, 2023. +# +# .. [#bremner] +# +# M. Bremner, R. Jozsa, D. Shepherd. +# "Classical simulation of commuting quantum computations implies collapse of the polynomial hierarchy." +# `arXiv:1005.1407 `__, 2010. +# +# .. [#bremner2] +# +# Michael J. Bremner, Ashley Montanaro, Dan J. Shepherd +# "Achieving quantum supremacy with sparse and noisy commuting quantum computations." +# `arXiv:1610.01808 `__, 2016. +# +# About the author +# ----------------