1474 lines (1473 with data), 285.2 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"id": "8M5M9PlyJcSp"
},
"outputs": [],
"source": [
"# This cell is added by sphinx-gallery\n",
"# It can be customized to whatever you like\n",
"%matplotlib inline\n",
"# !pip install pennylane"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jvQZBJU3JcSq"
},
"source": [
"Quantum models as Fourier series\n",
"================================\n",
"\n",
"::: {.meta}\n",
":property=\\\"og:description\\\": The class of functions a quantum model can\n",
"learn is characterized by the structure of its corresponding Fourier\n",
"series. :property=\\\"og:image\\\":\n",
"<https://pennylane.ai/qml/_images/scheme.png>\n",
":::\n",
"\n",
"::: {.related}\n",
"tutorial\\_data\\_reuploading\\_classifier Data-reuploading classifier\n",
":::\n",
"\n",
"*Authors: Maria Schuld and Johannes Jakob Meyer --- Posted: 24 August\n",
"2020. Last updated: 15 January 2021.*\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wQaAkjNrJcSr"
},
"source": [
"This demonstration is based on the paper *The effect of data encoding on\n",
"the expressive power of variational quantum machine learning models* by\n",
"[Schuld, Sweke, and Meyer (2020)](https://arxiv.org/abs/2008.08605).\n",
"\n",
"{.align-center\n",
"width=\"50.0%\"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Gd-5kQ-KJcSr"
},
"source": [
"The paper links common quantum machine learning models designed for\n",
"near-term quantum computers to Fourier series (and, in more general, to\n",
"Fourier-type sums). With this link, the class of functions a quantum\n",
"model can learn (i.e., its \\\"expressivity\\\") can be characterized by the\n",
"model\\'s control of the Fourier series\\' frequencies and coefficients.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "CZtJRBgdJcSr"
},
"source": [
"Background\n",
"==========\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "rBGFzz46JcSr"
},
"source": [
"Ref. considers quantum machine learning models of the form\n",
"\n",
"$$f_{\\boldsymbol \\theta}(x) = \\langle 0| U^{\\dagger}(x,\\boldsymbol \\theta) M U(x, \\boldsymbol \\theta) | 0 \\rangle$$\n",
"\n",
"where $M$ is a measurement observable and $U(x, \\boldsymbol \\theta)$ is\n",
"a variational quantum circuit that encodes a data input $x$ and depends\n",
"on a set of parameters $\\boldsymbol \\theta$. Here we will restrict\n",
"ourselves to one-dimensional data inputs, but the paper motivates that\n",
"higher-dimensional features simply generalize to multi-dimensional\n",
"Fourier series.\n",
"\n",
"The circuit itself repeats $L$ layers, each consisting of a\n",
"data-encoding circuit block $S(x)$ and a trainable circuit block\n",
"$W(\\boldsymbol \\theta)$ that is controlled by the parameters\n",
"$\\boldsymbol \\theta$. The data encoding block consists of gates of the\n",
"form $\\mathcal{G}(x) = e^{-ix H}$, where $H$ is a Hamiltonian. A\n",
"prominent example of such gates are Pauli rotations.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cOO9wOoKJcSr"
},
"source": [
"The paper shows how such a quantum model can be written as a\n",
"Fourier-type sum of the form\n",
"\n",
"$$f_{ \\boldsymbol \\theta}(x) = \\sum_{\\omega \\in \\Omega} c_{\\omega}( \\boldsymbol \\theta) \\; e^{i \\omega x}.$$\n",
"\n",
"As illustrated in the picture below (which is Figure 1 from the paper),\n",
"the \\\"encoding Hamiltonians\\\" in $S(x)$ determine the set $\\Omega$ of\n",
"available \\\"frequencies\\\", and the remainder of the circuit, including\n",
"the trainable parameters, determines the coefficients $c_{\\omega}$.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "z_N46n9XJcSs"
},
"source": [
"{.align-center\n",
"width=\"50.0%\"}\n",
"\n",
"|\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "c6BT0LuvJcSs"
},
"source": [
"The paper demonstrates many of its findings for circuits in which\n",
"$\\mathcal{G}(x)$ is a single-qubit Pauli rotation gate. For example, it\n",
"shows that $r$ repetitions of a Pauli rotation-encoding gate in\n",
"\\\"sequence\\\" (on the same qubit, but with multiple layers $r=L$) or in\n",
"\\\"parallel\\\" (on $r$ different qubits, with $L=1$) creates a quantum\n",
"model that can be expressed as a *Fourier series* of the form\n",
"\n",
"$$f_{ \\boldsymbol \\theta}(x) = \\sum_{n \\in \\Omega} c_{n}(\\boldsymbol \\theta) e^{i n x},$$\n",
"\n",
"where $\\Omega = \\{ -r, \\dots, -1, 0, 1, \\dots, r\\}$ is a spectrum of\n",
"consecutive integer-valued frequencies up to degree $r$.\n",
"\n",
"As a result, we expect quantum models that encode an input $x$ by $r$\n",
"Pauli rotations to only be able to fit Fourier series of at most degree\n",
"$r$.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aWRFbQOaJcSs"
},
"source": [
"Goal of this demonstration\n",
"==========================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Iq0OUR-_JcSs"
},
"source": [
"The experiments below investigate this \\\"Fourier-series\\\"-like nature of\n",
"quantum models by showing how to reproduce the simulations underlying\n",
"Figures 3, 4 and 5 in Section II of the paper:\n",
"\n",
"- **Figures 3 and 4** are function-fitting experiments, where quantum\n",
" models with different encoding strategies have the task to fit\n",
" Fourier series up to a certain degree. As in the paper, we will use\n",
" examples of qubit-based quantum circuits where a single data feature\n",
" is encoded via Pauli rotations.\n",
"- **Figure 5** plots the Fourier coefficients of randomly sampled\n",
" instances from a family of quantum models which is defined by some\n",
" parametrized ansatz.\n",
"\n",
"The code is presented so you can easily modify it in order to play\n",
"around with other settings and models. The settings used in the paper\n",
"are given in the various subsections.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ph8H6eQMJcSs"
},
"source": [
"First of all, let\\'s make some imports and define a standard loss\n",
"function for the training.\n"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"id": "LxU9FaWAJcSs"
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import pennylane as qml\n",
"from pennylane import numpy as np\n",
"\n",
"np.random.seed(42)\n",
"\n",
"def square_loss(targets, predictions):\n",
" loss = 0\n",
" for t, p in zip(targets, predictions):\n",
" loss += (t - p) ** 2\n",
" loss = loss / len(targets)\n",
" return 0.5*loss"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QuoNQMahJcSt"
},
"source": [
"Part I: Fitting Fourier series with serial Pauli-rotation encoding\n",
"==================================================================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-TEc0KxLJcSt"
},
"source": [
"First we will reproduce Figures 3 and 4 from the paper. These show how\n",
"quantum models that use Pauli rotations as data-encoding gates can only\n",
"fit Fourier series up to a certain degree. The degree corresponds to the\n",
"number of times that the Pauli gate gets repeated in the quantum model.\n",
"\n",
"Let us consider circuits where the encoding gate gets repeated\n",
"sequentially (as in Figure 2a of the paper). For simplicity we will only\n",
"look at single-qubit circuits:\n",
"\n",
"{.align-center\n",
"width=\"50.0%\"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oDUoimZzJcSt"
},
"source": [
"Define a target function\n",
"========================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hlrDJI2EJcSt"
},
"source": [
"We first define a (classical) target function which will be used as a\n",
"\\\"ground truth\\\" that the quantum model has to fit. The target function\n",
"is constructed as a Fourier series of a specific degree.\n",
"\n",
"We also allow for a rescaling of the data by a hyperparameter `scaling`,\n",
"which we will do in the quantum model as well. As shown in, for the\n",
"quantum model to learn the classical model in the experiment below, the\n",
"scaling of the quantum model and the target function have to match,\n",
"which is an important observation for the design of quantum machine\n",
"learning models.\n"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"id": "cHNfuc9LJcSt"
},
"outputs": [],
"source": [
"degree = 1 # degree of the target function\n",
"scaling = 1 # scaling of the data\n",
"coeffs = [0.15 + 0.15j]*degree # coefficients of non-zero frequencies\n",
"coeff0 = 0.1 # coefficient of zero frequency\n",
"\n",
"def target_function(x):\n",
" \"\"\"Generate a truncated Fourier series, where the data gets re-scaled.\"\"\"\n",
" res = coeff0\n",
" for idx, coeff in enumerate(coeffs):\n",
" exponent = np.complex128(scaling * (idx+1) * x * 1j)\n",
" conj_coeff = np.conjugate(coeff)\n",
" res += coeff * np.exp(exponent) + conj_coeff * np.exp(-exponent)\n",
" return np.real(res)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LIazLexTJcSt"
},
"source": [
"Let\\'s have a look at it.\n"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
},
"id": "IxG3Xc5KJcSt",
"outputId": "4ca312dc-0968-4136-c17f-891645dcc874"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"x = np.linspace(-6, 6, 70, requires_grad=False)\n",
"target_y = np.array([target_function(x_) for x_ in x], requires_grad=False)\n",
"\n",
"plt.plot(x, target_y, c='black')\n",
"plt.scatter(x, target_y, facecolor='white', edgecolor='black')\n",
"plt.ylim(-1, 1)\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EzayLur8JcSt"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"To reproduce the figures in the paper, you can use the following\n",
"settings in the cells above:\n",
"\n",
"- For the settings\n",
"\n",
" degree = 1\n",
" coeffs = (0.15 + 0.15j) * degree\n",
" coeff0 = 0.1\n",
"\n",
" this function is the ground truth\n",
" $g(x) = \\sum_{n=-1}^1 c_{n} e^{-nix}$ from Figure 3 in the paper.\n",
"\n",
"- To get the ground truth $g'(x) = \\sum_{n=-2}^2 c_{n} e^{-nix}$ with\n",
" $c_0=0.1$, $c_1 = c_2 = 0.15 - 0.15i$ from Figure 3, you need to\n",
" increase the degree to two:\n",
"\n",
" degree = 2\n",
"\n",
"- The ground truth from Figure 4 can be reproduced by changing the\n",
" settings to:\n",
"\n",
" degree = 5\n",
" coeffs = (0.05 + 0.05j) * degree\n",
" coeff0 = 0.0\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Rc_zGNV4JcSt"
},
"source": [
"Define the serial quantum model\n",
"===============================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ne0dxusGJcSt"
},
"source": [
"We now define the quantum model itself.\n"
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"id": "XyXFJ2i8JcSt"
},
"outputs": [],
"source": [
"scaling = 1\n",
"\n",
"dev = qml.device('default.qubit', wires=1)\n",
"\n",
"def S(x):\n",
" \"\"\"Data-encoding circuit block.\"\"\"\n",
" qml.RX(scaling * x, wires=0)\n",
"\n",
"def W(theta):\n",
" \"\"\"Trainable circuit block.\"\"\"\n",
" qml.Rot(theta[0], theta[1], theta[2], wires=0)\n",
"\n",
"\n",
"@qml.qnode(dev, interface=\"autograd\")\n",
"def serial_quantum_model(weights, x):\n",
"\n",
" for theta in weights[:-1]:\n",
" W(theta)\n",
" S(x)\n",
"\n",
" # (L+1)'th unitary\n",
" W(weights[-1])\n",
"\n",
" return qml.expval(qml.PauliZ(wires=0))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "eKfmzbuhJcSu"
},
"source": [
"You can run the following cell multiple times, each time sampling\n",
"different weights, and therefore different quantum models.\n"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
},
"id": "DY378RTpJcSu",
"outputId": "2477c0e8-7f52-4cab-c3dd-08dbec2e8f74"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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RaVvI0eOxIoVK7Bp0ybce++9ssPRpfT0dJw+fRpt2rSxPlZUVIRNmzbhiy++QH5+Ptzd3SVGqB8hISGl/ucBYpLsn376SUo8THAqqGbNmqhZs+Zt94uIiICXlxcOHDiATp06AQAKCwtx9OhR1K1bV+swdaG8n9XUqVPx7rvvWn8+efIkYmNjsXjxYkRGRmoZom6U97MCRMlN165draWCbm4siAUAT09PREREIDk52TocQ3FxMZKTkzFy5Ei5wemMoih4/vnnsWTJEmzYsAH169eXHZJude/eHbt37y712JAhQxAWFoaxY8cyuSmhY8eONww3cPDgQWn/85jgaMTPzw/PPvssJkyYgNDQUNStWxcff/wxAOCJJ56QHJ2+1KlTp9TP6szwDRs25F3ldbKystClSxfUrVsXkydPxpkzZ6y/YykFMGrUKDzzzDNo27Yt2rdvj08//RR5eXkYMmSI7NB0ZcSIEVi4cCGWLl2KqlWrWtso+fv7w8fHR3J0+lK1atUb2iZVrlwZNWrUYJul67z88svo0KED3n//fTz55JNIS0vDjBkzpJUyM8HR0McffwwPDw8MHDgQV65cQWRkJFJSUuSNCUBOLykpCYcOHcKhQ4duSP4URZEUlX707dsXZ86cwfjx45GdnY3w8HAkJibe0PDY1X311VcAgC5dupR6fM6cObetKiW6mXbt2mHJkiVISEjAO++8g/r16+PTTz9F//79pcRjUnhVJCIiIoNh5T0REREZDhMcIiIiMhwmOERERGQ4THCIiIjIcJjgEBERkeEwwSEiIiLDYYJDREREhsMEh4iIiAyHCQ4REREZDhMcIiIiMhwmOERERGQ4/w/XMvQSWoKZSwAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
],
"source": [
"r = 1 # number of times the encoding gets repeated (here equal to the number of layers)\n",
"weights = 2 * np.pi * np.random.random(size=(r+1, 3), requires_grad=True) # some random initial weights\n",
"\n",
"x = np.linspace(-6, 6, 70, requires_grad=False)\n",
"random_quantum_model_y = [serial_quantum_model(weights, x_) for x_ in x]\n",
"\n",
"plt.plot(x, random_quantum_model_y, c='blue')\n",
"plt.ylim(-1,1)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yR24kmdFJcSu"
},
"source": [
"No matter what weights are picked, the single qubit model for\n",
"[L=1]{.title-ref} will always be a sine function of a fixed frequency.\n",
"The weights merely influence the amplitude, y-shift, and phase of the\n",
"sine.\n",
"\n",
"This observation is formally derived in Section II.A of the paper.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qc6vKf7wJcSu"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"You can increase the number of layers. Figure 4 from the paper, for\n",
"example, uses the settings `L=1`, `L=3` and `L=5`.\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yGhX4z6cJcSu"
},
"source": [
"Finally, let\\'s look at the circuit we just created:\n"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "T6F2mU6BJcSu",
"outputId": "35bdc5e3-f83d-4d4f-a49b-802b15d30da6"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"0: ──Rot(2.35,5.97,4.60)──RX(6.00)──Rot(3.76,0.98,0.98)─┤ <Z>\n"
]
}
],
"source": [
"print(qml.draw(serial_quantum_model)(weights, x[-1]))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BkOa77rZJcSu"
},
"source": [
"Fit the model to the target\n",
"===========================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Pi-5dw3vJcSu"
},
"source": [
"The next step is to optimize the weights in order to fit the ground\n",
"truth.\n"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "SI6m4vJbJcSu",
"outputId": "40a5a2c2-f0fc-45c6-c22e-5e089ae0eb74"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cost at step 10: 0.03212041720004567\n",
"Cost at step 20: 0.01385356188302468\n",
"Cost at step 30: 0.004049396436389442\n",
"Cost at step 40: 0.0005624933894468399\n",
"Cost at step 50: 8.145777333271303e-05\n"
]
}
],
"source": [
"def cost(weights, x, y):\n",
" predictions = [serial_quantum_model(weights, x_) for x_ in x]\n",
" return square_loss(y, predictions)\n",
"\n",
"max_steps = 50\n",
"opt = qml.AdamOptimizer(0.3)\n",
"batch_size = 25\n",
"cst = [cost(weights, x, target_y)] # initial cost\n",
"\n",
"for step in range(max_steps):\n",
"\n",
" # Select batch of data\n",
" batch_index = np.random.randint(0, len(x), (batch_size,))\n",
" x_batch = x[batch_index]\n",
" y_batch = target_y[batch_index]\n",
"\n",
" # Update the weights by one optimizer step\n",
" weights, _, _ = opt.step(cost, weights, x_batch, y_batch)\n",
"\n",
" # Save, and possibly print, the current cost\n",
" c = cost(weights, x, target_y)\n",
" cst.append(c)\n",
" if (step + 1) % 10 == 0:\n",
" print(\"Cost at step {0:3}: {1}\".format(step + 1, c))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ipiobq1RJcSu"
},
"source": [
"To continue training, you may just run the above cell again. Once you\n",
"are happy, you can use the trained model to predict function values, and\n",
"compare them with the ground truth.\n"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
},
"id": "UjG0u7R4JcSu",
"outputId": "fa6fb709-2973-47ff-a77e-72363668ee59"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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EREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpDgMOERERKQ4DDhERESkOAw4REREpjtkCzueff446derA2dkZ7u7uOXqPiGDs2LHw8fGBk5MTwsLCcO7cuSzrJCQkoGvXrnB1dYW7uzt69+6N+/fvm+EbEBERka0yW8BJTU1Fx44d0a9fvxy/Z+rUqfjqq68wf/587Nu3Dy4uLmjatCkePXpkWqdr1644efIktm3bhk2bNmHXrl3o27evOb4CERER2SiViIg5/8DSpUsxaNAg3Lt375nriQh8fX0xdOhQfPzxxwCAxMREeHl5YenSpejcuTNOnz6NwMBAHDhwADVq1AAAbNmyBc2bN8fVq1fh6+ub7WenpKQgJSXF9DwxMRElS5bElStX4OrqmjdflIiIiMxKq9WiRIkSuHfvHtzc3J69spjZkiVLxM3N7bnrXbhwQQDIkSNHsixv0KCBDBw4UEREFi1aJO7u7lleT0tLE41GI1FRUU/97PDwcAHABx988MEHH3wo4HHlypXn5go7WIm4uDgAgJeXV5blXl5eptfi4uLg6emZ5XU7OzsUKVLEtE52Ro4ciSFDhpieGwwGJCQkoGjRolCpVHn1FQD8my55dej5uK1yjtsq57itco7bKue4rXLHXNtLRJCUlPTUOzaZ5SrgjBgxAl988cUz1zl9+jQqVKiQm481OwcHBzg4OGRZltOGzy/K1dWVO0EOcVvlHLdVznFb5Ry3Vc5xW+WOObbXc29NZchVwBk6dCh69uz5zHVKly6dm4808fb2BgDEx8fDx8fHtDw+Ph5VqlQxrXPz5s0s79PpdEhISDC9n4iIiChXAcfDwwMeHh5mKYi/vz+8vb2xY8cOU6DRarXYt2+fqSdW7dq1ce/ePRw6dAjVq1cHAPz2228wGAwICQkxS7mIiIjI9pitm/jly5dx9OhRXL58GXq9HkePHsXRo0ezjFlToUIFrFu3DgCg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\n"
},
"metadata": {}
}
],
"source": [
"predictions = [serial_quantum_model(weights, x_) for x_ in x]\n",
"\n",
"plt.plot(x, target_y, c='black')\n",
"plt.scatter(x, target_y, facecolor='white', edgecolor='black')\n",
"plt.plot(x, predictions, c='blue')\n",
"plt.ylim(-1,1)\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZIypPJtdJcSu"
},
"source": [
"Let\\'s also have a look at the cost during training.\n"
]
},
{
"cell_type": "code",
"execution_count": 80,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"id": "33WfEBTxJcSu",
"outputId": "cf3ac57b-25a9-45c8-e147-4e778f956bd2"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"plt.plot(range(len(cst)), cst)\n",
"plt.ylabel(\"Cost\")\n",
"plt.xlabel(\"Step\")\n",
"plt.ylim(0, 0.23)\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "KF9oCzZiJcSu"
},
"source": [
"With the initial settings and enough training steps, the quantum model\n",
"learns to fit the ground truth perfectly. This is expected, since the\n",
"number of Pauli-rotation-encoding gates and the degree of the ground\n",
"truth Fourier series are both one.\n",
"\n",
"If the ground truth\\'s degree is larger than the number of layers in the\n",
"quantum model, the fit will look much less accurate. And finally, we\n",
"also need to have the correct scaling of the data: if one of the models\n",
"changes the `scaling` parameter (which effectively scales the\n",
"frequencies), fitting does not work even with enough encoding\n",
"repetitions.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "6CR3koWLJcSu"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"You will find that the training takes much longer, and needs a lot more\n",
"steps to converge for larger L. Some initial weights may not even\n",
"converge to a good solution at all; the training seems to get stuck in a\n",
"minimum.\n",
"\n",
"It is an open research question whether for asymptotically large L, the\n",
"single qubit model can fit *any* function by constructing arbitrary\n",
"Fourier coefficients.\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9gcAQCXUJcSu"
},
"source": [
"Part II: Fitting Fourier series with parallel Pauli-rotation encoding\n",
"=====================================================================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VW-UAdPaJcSv"
},
"source": [
"Our next task is to repeat the function-fitting experiment for a circuit\n",
"where the Pauli rotation gate gets repeated $r$ times on *different*\n",
"qubits, using a single layer $L=1$.\n",
"\n",
"As shown in the paper, we expect similar results to the serial model: a\n",
"Fourier series of degree $r$ can only be fitted if there are at least\n",
"$r$ repetitions of the encoding gate in the quantum model. However, in\n",
"practice this experiment is a bit harder, since the dimension of the\n",
"trainable unitaries $W$ grows quickly with the number of qubits.\n",
"\n",
"In the paper, the investigations are made with the assumption that the\n",
"purple trainable blocks $W$ are arbitrary unitaries. We could use the\n",
"`~.pennylane.templates.ArbitraryUnitary`{.interpreted-text role=\"class\"}\n",
"template, but since this template requires a number of parameters that\n",
"grows exponentially with the number of qubits ($4^L-1$ to be precise),\n",
"this quickly becomes cumbersome to train.\n",
"\n",
"We therefore follow Figure 4 in the paper and use an ansatz for $W$.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-FrL-WMjJcSv"
},
"source": [
"{.align-center\n",
"width=\"70.0%\"}\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wUEK2r8-JcSv"
},
"source": [
"Define the parallel quantum model\n",
"=================================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OKM6saGAJcSv"
},
"source": [
"The ansatz is PennyLane\\'s layer structure called\n",
"`~.pennylane.templates.StronglyEntanglingLayers`{.interpreted-text\n",
"role=\"class\"}, and as the name suggests, it has itself a user-defined\n",
"number of layers (which we will call \\\"ansatz layers\\\" to avoid\n",
"confusion).\n"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {
"id": "nWEBY1-0JcSv"
},
"outputs": [],
"source": [
"from pennylane.templates import StronglyEntanglingLayers"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Z_Zk9ZVqJcSv"
},
"source": [
"Let\\'s have a quick look at the ansatz itself for 3 qubits by making a\n",
"dummy circuit of 2 ansatz layers:\n"
]
},
{
"cell_type": "code",
"execution_count": 82,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "JHX9N75BJcSv",
"outputId": "6294ccf6-3601-46e1-b193-2d8be3cab51b"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"0: ──Rot(1.38,4.29,0.48)─╭●────╭X──Rot(4.26,3.55,1.68)─╭●─╭X────┤ <I>\n",
"1: ──Rot(5.35,3.11,3.02)─╰X─╭●─│───Rot(5.52,5.01,4.14)─│──╰●─╭X─┤ \n",
"2: ──Rot(3.72,5.18,2.19)────╰X─╰●──Rot(5.34,5.45,4.45)─╰X────╰●─┤ \n"
]
}
],
"source": [
"n_ansatz_layers = 2\n",
"n_qubits = 3\n",
"\n",
"dev = qml.device('default.qubit', wires=4)\n",
"\n",
"@qml.qnode(dev, interface=\"autograd\")\n",
"def ansatz(weights):\n",
" StronglyEntanglingLayers(weights, wires=range(n_qubits))\n",
" return qml.expval(qml.Identity(wires=0))\n",
"\n",
"weights_ansatz = 2 * np.pi * np.random.random(size=(n_ansatz_layers, n_qubits, 3))\n",
"print(qml.draw(ansatz, expansion_strategy=\"device\")(weights_ansatz))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xxwwB1p2JcSv"
},
"source": [
"Now we define the actual quantum model.\n"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {
"id": "fwSjxDoYJcSv"
},
"outputs": [],
"source": [
"scaling = 1\n",
"r = 3\n",
"\n",
"dev = qml.device('default.qubit', wires=r)\n",
"\n",
"def S(x):\n",
" \"\"\"Data-encoding circuit block.\"\"\"\n",
" for w in range(r):\n",
" qml.RX(scaling * x, wires=w)\n",
"\n",
"def W(theta):\n",
" \"\"\"Trainable circuit block.\"\"\"\n",
" StronglyEntanglingLayers(theta, wires=range(r))\n",
"\n",
"\n",
"@qml.qnode(dev, interface=\"autograd\")\n",
"def parallel_quantum_model(weights, x):\n",
"\n",
" S(x)\n",
" W(weights[0])\n",
"\n",
" return qml.expval(qml.PauliZ(wires=0))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "pW3WmvDHJcSv"
},
"source": [
"Again, you can sample random weights and plot the model\n",
"\n",
"* List item\n",
"* List item\n",
"\n",
"function:\n"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
},
"id": "0l7NkV9UJcSv",
"outputId": "c49e5ceb-32e0-4d55-bef0-e64578e8b6a7"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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n5OIiIicW4kDjp+fH/z8/O66XXh4OLKzs5GWloaQkBAAwLZt22A2my2hpTgyMjIAADVr1rTs991338X58+ctl8CSk5Ph5eWFpk2blvDVEBERkRbZrZFxkyZNEBUVhdjYWOzZswc//vgjhgwZgujoaEsPqjNnzqBx48aWMzLHjh3DpEmTkJaWhhMnTmDjxo3o27cvHn/8cTRv3hwA0LlzZzRt2hR9+vTBr7/+iq1bt+Ltt99GXFwcz9IQERERADsP9LdixQo0btwYnTp1QteuXdGuXTssWLDA8vP8/HwcOXLE0kvKw8MD3333HTp37ozGjRtjxIgR6NmzJ7766ivLY1xdXfH111/D1dUV4eHhePHFF9G3b1+bcXOIiIiofLPbODiOjOPgEBEROR+HGAeHiIiISC0MOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5DDhERESkOQw4REREpDkMOERERKQ5dg04WVlZ6N27N7y8vODj44MBAwYgJyfnttufOHECOp2uyNvatWst2xX189WrV9vzpRAREZETcbPnznv37o1z584hOTkZ+fn5iImJwcCBA7Fy5coitw8KCsK5c+ds1i1YsADTp09Hly5dbNYvXboUUVFRlvs+Pj6lXj8RERE5J7sFnEOHDmHLli3Yu3cvWrduDQCYPXs2unbtihkzZiAwMPCWx7i6uiIgIMBm3fr16/Hss8+icuXKNut9fHxu2ZaIiIgIsOMlqtTUVPj4+FjCDQBERETAxcUFu3fvLtY+0tLSkJGRgQEDBtzys7i4OPj6+iI0NBRLliyBoii33U9ubi5MJpPNjYiIiLTLbmdwDAYDatSoYftkbm6oVq0aDAZDsfaxePFiNGnSBI8++qjN+okTJ+KJJ55AxYoV8e233+LVV19FTk4Ohg4dWuR+kpKSMGHChHt7IUREROR0SnwGZ/To0bdtCFx4O3z48H0Xdu3aNaxcubLIszdjx45F27Zt0apVK4waNQojR47E9OnTb7uvhIQEGI1Gy+3UqVP3XR8RERE5rhKfwRkxYgT69+9/x23q1auHgIAAnD9/3mb9jRs3kJWVVay2M1988QWuXr2Kvn373nXbsLAwTJo0Cbm5udDr9bf8XK/XF7meiIiItKnEAcfPzw9+fn533S48PBzZ2dlIS0tDSEgIAGDbtm0wm80ICwu76+MXL16Mp556qljPlZGRgapVqzLEEBEREQA7tsFp0qQJoqKiEBsbi3nz5iE/Px9DhgxBdHS0pQfVmTNn0KlTJ3zyyScIDQ21PPbo0aPYuXMnvvnmm1v2+9VXXyEzMxOPPPIIPD09kZycjMmTJ+ONN96w10shIiIiJ2PXcXBWrFiBIUOGoFOnTnBxcUHPnj0xa9Ysy8/z8/Nx5MgRXL161eZxS5YsQa1atdC5c+db9unu7o45c+Zg+PDhUBQFDRo0wPvvv4/Y2Fh7vhQiIiJyIjrlTv2rNcpkMsHb2xtGoxFeXl5ql0NERETFUJLvb85FRURERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmsOAQ0RERJrDgENERESaw4BDREREmmO3gPPuu+/i0UcfRcWKFeHj41OsxyiKgnHjxqFmzZqoUKECIiIi8Mcff9hsk5WVhd69e8PLyws+Pj4YMGAAcnJy7PAKiIiIyFnZLeDk5eWhV69eGDx4cLEfM23aNMyaNQvz5s3D7t27UalSJURGRuL69euWbXr37o0DBw4gOTkZX3/9NXbu3ImBAwfa4yUQERGRk9IpiqLY8wmWLVuGYcOGITs7+47bKYqCwMBAjBgxAm+88QYAwGg0wt/fH8uWLUN0dDQOHTqEpk2bYu/evWjdujUAYMuWLejatStOnz6NwMDAIved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\n"
},
"metadata": {}
}
],
"source": [
"trainable_block_layers = 3\n",
"weights = 2 * np.pi * np.random.random(size=(2, trainable_block_layers, r, 3), requires_grad=True)\n",
"\n",
"x = np.linspace(-6, 6, 70, requires_grad=False)\n",
"random_quantum_model_y = [parallel_quantum_model(weights, x_) for x_ in x]\n",
"\n",
"plt.plot(x, random_quantum_model_y, c='blue')\n",
"plt.ylim(-1,1)\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZBwG2dJbJcSv"
},
"source": [
"Training the model\n",
"==================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5XfPKn9NJcSv"
},
"source": [
"Training the model is done exactly as before, but it may take a lot\n",
"longer this time. We set a default of 25 steps, which you should\n",
"increase if necessary. Small models of \\<6 qubits usually converge after\n",
"a few hundred steps at most---but this depends on your settings.\n"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 0
},
"id": "BthXNDu_JcSv",
"outputId": "03d8f460-aac9-46eb-cbb1-788161586090"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cost at step 10: 0.004197140311257253\n",
"Cost at step 20: 0.004688522721255801\n",
"Cost at step 30: 0.001078343375831772\n",
"Cost at step 40: 0.0003287425375791772\n",
"Cost at step 50: 0.0002291808572632402\n"
]
}
],
"source": [
"def cost(weights, x, y):\n",
" predictions = [parallel_quantum_model(weights, x_) for x_ in x]\n",
" return square_loss(y, predictions)\n",
"\n",
"max_steps = 50\n",
"opt = qml.AdamOptimizer(0.3)\n",
"batch_size = 25\n",
"cst = [cost(weights, x, target_y)] # initial cost\n",
"\n",
"for step in range(max_steps):\n",
"\n",
" # select batch of data\n",
" batch_index = np.random.randint(0, len(x), (batch_size,))\n",
" x_batch = x[batch_index]\n",
" y_batch = target_y[batch_index]\n",
"\n",
" # update the weights by one optimizer step\n",
" weights, _, _ = opt.step(cost, weights, x_batch, y_batch)\n",
"\n",
" # save, and possibly print, the current cost\n",
" c = cost(weights, x, target_y)\n",
" cst.append(c)\n",
" if (step + 1) % 10 == 0:\n",
" print(\"Cost at step {0:3}: {1}\".format(step + 1, c))"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 435
},
"id": "6p59DREzJcSv",
"outputId": "50907f48-4f9a-44e1-f51a-2f84a7c2e379"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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wCEiIiKbw4BDRERENocBh4iIiGwOAw4RERHZHAYcIiIisjkMOERERGRzGHCIiIjI5jDgEBERkc1hwCEiIiKbw4BDRERENocBh4iIiGwOAw4RERHZHAYcIiIisjkMOERERGRzGHCIiIjI5jDgEBERkc1hwCEiIiKbw4BDRERENocBh4iIiGwOAw4RERHZHAYcIiIisjkMOERERGRzGHCIiIjI5jDgEBERkc1hwCEiIiKbw4BDRERENocBh4iIiGwOAw4RERHZHAYcIiIisjkMOERERGRzGHCIiIjI5jDgEBERkc0xacC5c+cOunbtCnd3d3h6eqJ37964d+/eM9e/dOkSFArFUx9r1qwxrPe051euXGnKt0JERERWxN6UG+/atSsSExOxZcsWZGVloVevXujXrx+io6Ofun5AQAASExONli1YsABTpkxB8+bNjZYvXboUzZo1M/zu6emZ7+UnIiIi62SygHP69Gls3rwZBw8eRI0aNQAAs2fPRosWLTB16lT4+/s/8RqlUglfX1+jZT///DM6duyIQoUKGS339PR8Yl0iIiIiwIS3qBISEuDp6WkINwAQFhYGOzs77N+/P1fbOHToEI4cOYLevXs/8dzAgQNRvHhx1KpVC0uWLIGIPHM7GRkZUKlURg8iIiKyXSa7gpOUlARvb2/jP2Zvj6JFiyIpKSlX21i8eDFef/111KlTx2j5l19+iXfeeQeurq74/fff8dFHH+HevXsYPHjwU7cTFRWFL7744uXeCBEREVmdPF/BGTt27DMbAusfZ86c+dcFe/DgAaKjo5969eazzz5D3bp1Ua1aNYwZMwajR4/GlClTnrmtiIgIpKamGh5Xr1791+UjIiIiy5XnKzgjRoxAz549n7tOmTJl4Ovri5SUFKPlarUad+7cyVXbmbVr1+L+/fvo3r37C9cNDQ3FhAkTkJGRAScnpyeed3JyeupyIiIisk15DjheXl7w8vJ64Xq1a9fG3bt3cejQIYSEhAAAtm/fDq1Wi9DQ0Be+fvHixWjdunWu/taRI0dQpEgRhhgiIiICYMI2OK+//jqaNWuGvn37Yt68ecjKysKgQYPQuXNnQw+q69evo3HjxlixYgVq1apleO358+exc+dObNq06Yntbty4EcnJyXjrrbfg7OyMLVu2YOLEiRg5cqSp3goRERFZGZOOg/Pjjz9i0KBB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\n"
},
"metadata": {}
}
],
"source": [
"predictions = [parallel_quantum_model(weights, x_) for x_ in x]\n",
"\n",
"plt.plot(x, target_y, c='black')\n",
"plt.scatter(x, target_y, facecolor='white', edgecolor='black')\n",
"plt.plot(x, predictions, c='blue')\n",
"plt.ylim(-1,1)\n",
"plt.show();"
]
},
{
"cell_type": "code",
"execution_count": 87,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 449
},
"id": "FPmTrT2vJcSv",
"outputId": "b9fe3331-76a1-4ca2-94e0-c80bbdc3f517"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
],
"image/png": "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\n"
},
"metadata": {}
}
],
"source": [
"plt.plot(range(len(cst)), cst)\n",
"plt.ylabel(\"Cost\")\n",
"plt.xlabel(\"Step\")\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "qpsCV7dKJcSw"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"To reproduce the right column in Figure 4 from the paper, use the\n",
"correct ground truth, $r=3$ and `trainable_block_layers=3`, as well as\n",
"sufficiently many training steps. The amount of steps depends on the\n",
"initial weights and other hyperparameters, and in some settings training\n",
"may not converge to zero error at all.\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yjb_VXs3JcSw"
},
"source": [
"Part III: Sampling Fourier coefficients\n",
"=======================================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BlYUQOAlJcSw"
},
"source": [
"When we use a trainable ansatz above, it is possible that even with\n",
"enough repetitions of the data-encoding Pauli rotation, the quantum\n",
"model cannot fit the circuit, since the expressivity of quantum models\n",
"also depends on the Fourier coefficients the model can create.\n",
"\n",
"Figure 5 in shows Fourier coefficients from quantum models sampled from\n",
"a model family defined by an ansatz for the trainable circuit block. For\n",
"this we need a function that numerically computes the Fourier\n",
"coefficients of a periodic function f with period $2 \\pi$.\n"
]
},
{
"cell_type": "code",
"execution_count": 88,
"metadata": {
"id": "PXrbVOKXJcSw"
},
"outputs": [],
"source": [
"def fourier_coefficients(f, K):\n",
" \"\"\"\n",
" Computes the first 2*K+1 Fourier coefficients of a 2*pi periodic function.\n",
" \"\"\"\n",
" n_coeffs = 2 * K + 1\n",
" t = np.linspace(0, 2 * np.pi, n_coeffs, endpoint=False)\n",
" y = np.fft.rfft(f(t)) / t.size\n",
" return y"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "SgoXi74sJcSw"
},
"source": [
"Define your quantum model\n",
"=========================\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EMrj1cKgJcSw"
},
"source": [
"Now we need to define a quantum model. This could be any model, using a\n",
"qubit or continuous-variable circuit, or one of the quantum models from\n",
"above. We will use a slight derivation of the `parallel_qubit_model()`\n",
"from above, this time using the\n",
"`~.pennylane.templates.BasicEntanglerLayers`{.interpreted-text\n",
"role=\"class\"} ansatz:\n"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"id": "-IDEmK8fJcSw"
},
"outputs": [],
"source": [
"from pennylane.templates import BasicEntanglerLayers\n",
"\n",
"scaling = 1\n",
"n_qubits = 4\n",
"\n",
"dev = qml.device('default.qubit', wires=n_qubits)\n",
"\n",
"def S(x):\n",
" \"\"\"Data encoding circuit block.\"\"\"\n",
" for w in range(n_qubits):\n",
" qml.RX(scaling * x, wires=w)\n",
"\n",
"def W(theta):\n",
" \"\"\"Trainable circuit block.\"\"\"\n",
" BasicEntanglerLayers(theta, wires=range(n_qubits))\n",
"\n",
"\n",
"@qml.qnode(dev, interface=\"autograd\")\n",
"def quantum_model(weights, x):\n",
"\n",
" W(weights[0])\n",
" S(x)\n",
" W(weights[1])\n",
"\n",
" return qml.expval(qml.PauliZ(wires=0))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mncMngsOJcSw"
},
"source": [
"It will also be handy to define a function that samples different random\n",
"weights of the correct size for the model.\n"
]
},
{
"cell_type": "code",
"execution_count": 90,
"metadata": {
"id": "iuWz4KK6JcSw"
},
"outputs": [],
"source": [
"n_ansatz_layers = 1\n",
"\n",
"def random_weights():\n",
" return 2 * np.pi * np.random.random(size=(2, n_ansatz_layers, n_qubits))"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "iuJX_s4BJcSw"
},
"source": [
"Now we can compute the first few Fourier coefficients for samples from\n",
"this model. The samples are created by randomly sampling different\n",
"parameters using the `random_weights()` function.\n"
]
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"id": "E1JPiEJyJcSw"
},
"outputs": [],
"source": [
"n_coeffs = 5\n",
"n_samples = 100\n",
"\n",
"\n",
"coeffs = []\n",
"for i in range(n_samples):\n",
"\n",
" weights = random_weights()\n",
"\n",
" def f(x):\n",
" return np.array([quantum_model(weights, x_) for x_ in x])\n",
"\n",
" coeffs_sample = fourier_coefficients(f, n_coeffs)\n",
" coeffs.append(coeffs_sample)\n",
"\n",
"coeffs = np.array(coeffs)\n",
"coeffs_real = np.real(coeffs)\n",
"coeffs_imag = np.imag(coeffs)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "uz5CugLwJcSw"
},
"source": [
"Let\\'s plot the real vs. the imaginary part of the coefficients. As a\n",
"sanity check, the $c_0$ coefficient should be real, and therefore have\n",
"no contribution on the y-axis.\n"
]
},
{
"cell_type": "code",
"execution_count": 92,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 179
},
"id": "e3fxL5gHJcSw",
"outputId": "154a32e1-b27b-479e-b2a3-ade6bf3ad73d"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1500x400 with 6 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAABegAAAEDCAYAAABOCuTPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/k0lEQVR4nO3de3hU1b3/8U8CJCHGXBBMQEGFcNMiUeQSn0qoRpFQlZ5aRUNATwVRUBEPCr9jRaw9VOFUC8VirUA9KfVyDngDLxQvPNVwKZIDIpKAkVBr4iWSGIUAyfr9sc5kMrkxGTKzZ3ber+eZZzJ79p5ZO8knO/s7a68VZYwxAgAAAAAAAAAAIRXtdAMAAAAAAAAAAOiIKNADAAAAAAAAAOAACvQAAAAAAAAAADiAAj0AAAAAAAAAAA6gQA8AAAAAAAAAgAMo0AMAAAAAAAAA4AAK9AAAAAAAAAAAOIACPQAAAAAAAAAADqBADwAAAAAAAACAAyjQAwAAAAAAAADgAAr0AAAAAAAAAAA4gAI9AAAAAAAAAAAOoECPdrF9+3Zde+21Ov300xUXF6dBgwbpoYcecrpZANoB+QbcjYwD7kbGAXcj44C7kfGOobPTDUDkW7t2rSZOnKi+fftqzpw5SkhI0LZt2/T+++873TQAJ4l8A+5GxgF3I+OAu5FxwN3IeMcRZYwxTjcCkauoqEgXXHCBxo4dq9WrVysuLq7+uZqaGsXGxjrYOgAng3wD7kbGAXcj44C7kXHA3ch4x0KBHidl4sSJ2rBhg0pKSpSYmOh0cwC0I/INuBsZB9yNjAPuRsYBdyPjHQtj0CNgNTU1euWVVzRp0qRW/1h8+eWXGj9+vE455RQNHDhQGzduDGErAQTC33z//ve/14UXXqguXbrowQcfDF0DAZwUfzJeU1Ojf/3Xf1WfPn2UmJioUaNGqaCgIMQtBRAIf4/j06ZNU8+ePZWYmKghQ4bolVdeCWErAQTK34x7FBQUKDo6Wg8//HAIWgfgZPmb8TFjxiguLk4JCQlKSEjQuHHjQthKtCcK9AjYJ598ou+//17Dhg1rdb0ZM2YoLS1NX375pRYtWqTrrrtOFRUVIWolgED4m++ePXvqwQcf1E9/+tMQtQxAe/An48ePH9fZZ5+tv/3tbzp06JBmzZqlq666StXV1SFsKYBA+Hscnz17tj799FNVVVVpxYoVmjRpkr7++usQtRJAoPzNuCTV1dXp7rvv1vDhw0PQMgDtoS0Z/+Mf/6jq6mpVV1frtddeC0HrEAwU6BGww4cPS5KioqJaXKe6ulovvviiFixYoPj4eF199dUaMmSIXnrppVA1E0AA/Mm3JE2YMEFXX321kpOTQ9AqAO3Fn4yfcsopeuCBB9SnTx9FR0dr4sSJiomJ0d69e0PVTAAB8vc4PmjQoPoxbKOionT06FF99tlnQW8fgJPjb8Yl6Q9/+INGjhypwYMHB7tZANpJWzIOd6BAj4Clp6dLkv761782ee7YsWOSpOLiYiUkJOjMM8+sf27IkCHavXt3aBoJICD+5BtA5Aok48XFxaqoqKjfFkD4akvGb7/9dnXt2lXDhw/XpZdeqiFDhoSkjQAC52/Gv/76az3++ONasGBByNoG4OS15Th+9913q0ePHrr88su1c+fOkLQP7a+z0w1A5EpMTNRNN92kVatWqaamRmPGjNG3336rt99+W+PHj9eMGTNUXV3dZLysxMRELp0Fwpw/+QYQudqa8cOHD2vSpEmaN2+ekpKSHGo1AH+1JeNPPPGEli5dqnfeeUcffvghvfWACOBvxv/93/9ds2bN4mpXIML4m/FHH31U5557rjp16qSlS5dq3Lhx+vjjj3Xqqac6vAdoKwr0OCnLli3TGWecoeeff14vvviiunXrposvvlhXXnmlJCkhIUFVVVU+21RVVSkhIcGJ5gJogxPlG0Bk8zfjx44d089+9jOlp6frgQcecKi1ANqqLcfxTp066bLLLtPjjz+u/v37Kycnx4EWA2iLE2V8x44d2rZtm5YtW+ZwSwEEwp/j+IgRI+q/vvfee7VixQpt3rxZl19+uRNNxkmIMsYYpxsB96qurla3bt1UUlKiM844Q5L0ox/9SJMnT9bNN9/scOsAtJfp06crLS1NDz74oNNNAdCO6urqdOONN+q7777T2rVr1bkzfTsANxs3bpzGjRunO++80+mmADhJjz/+uO6///76znGVlZXq3Lmzrr32Wq1cudLh1gEIhnPPPVePP/64rrjiCqebgjZiDHoEVUJCgq655hrNnz9fhw8f1quvvqqdO3fqmmuucbppANrB8ePHdeTIEdXW1vp8DcAdbr31Vn3++ed64YUXKM4DLlNZWanVq1erurpax48f1wsvvKC3335bo0ePdrpp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\n"
},
"metadata": {}
}
],
"source": [
"n_coeffs = len(coeffs_real[0])\n",
"\n",
"fig, ax = plt.subplots(1, n_coeffs, figsize=(15, 4))\n",
"\n",
"for idx, ax_ in enumerate(ax):\n",
" ax_.set_title(r\"$c_{}$\".format(idx))\n",
" ax_.scatter(coeffs_real[:, idx], coeffs_imag[:, idx], s=20,\n",
" facecolor='white', edgecolor='red')\n",
" ax_.set_aspect(\"equal\")\n",
" ax_.set_ylim(-1, 1)\n",
" ax_.set_xlim(-1, 1)\n",
"\n",
"\n",
"plt.tight_layout(pad=0.5)\n",
"plt.show();"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "9LL8m72SJcSw"
},
"source": [
"Playing around with different quantum models, you will find that some\n",
"quantum models create different distributions over the coefficients than\n",
"others. For example `BasicEntanglingLayers` (with the default Pauli-X\n",
"rotation) seems to have a structure that forces the even Fourier\n",
"coefficients to zero, while `StronglyEntanglingLayers` will have a\n",
"non-zero variance for all supported coefficients.\n",
"\n",
"Note also how the variance of the distribution decreases for growing\n",
"orders of the coefficients---an effect linked to the convergence of a\n",
"Fourier series.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hRy9brBkJcSw"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"To reproduce the results from Figure 5 you have to change the ansatz (no\n",
"unitary, `BasicEntanglerLayers` or `StronglyEntanglingLayers`, and set\n",
"`n_ansatz_layers` either to $1$ or $5$). The `StronglyEntanglingLayers`\n",
"requires weights of shape `size=(2, n_ansatz_layers, n_qubits, 3)`.\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_JjHvLp7JcSw"
},
"source": [
"Continuous-variable model\n",
"=========================\n",
"\n",
"Ref. mentions that a phase rotation in continuous-variable quantum\n",
"computing has a spectrum that supports *all* Fourier frequecies. To play\n",
"with this model, we finally show you the code for a continuous-variable\n",
"circuit. For example, to see its Fourier coefficients run the cell\n",
"below, and then re-run the two cells above.\n"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {
"id": "nLxDpdcbJcSw"
},
"outputs": [],
"source": [
"var = 2\n",
"n_ansatz_layers = 1\n",
"dev_cv = qml.device('default.gaussian', wires=1)\n",
"\n",
"def S(x):\n",
" qml.Rotation(x, wires=0)\n",
"\n",
"def W(theta):\n",
" \"\"\"Trainable circuit block.\"\"\"\n",
" for r_ in range(n_ansatz_layers):\n",
" qml.Displacement(theta[0], theta[1], wires=0)\n",
" qml.Squeezing(theta[2], theta[3], wires=0)\n",
"\n",
"@qml.qnode(dev_cv)\n",
"def quantum_model(weights, x):\n",
" W(weights[0])\n",
" S(x)\n",
" W(weights[1])\n",
" return qml.expval(qml.X(wires=0))\n",
"\n",
"def random_weights():\n",
" return np.random.normal(size=(2, 5 * n_ansatz_layers), loc=0, scale=var)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vYS-GcICJcSw"
},
"source": [
"::: {.note}\n",
"::: {.title}\n",
"Note\n",
":::\n",
"\n",
"To find out what effect so-called \\\"non-Gaussian\\\" gates like the `Kerr`\n",
"gate have, you need to install the [strawberryfields\n",
"plugin](https://pennylane-sf.readthedocs.io/en/latest/) and change the\n",
"device to\n",
"\n",
"``` {.python}\n",
"dev_cv = qml.device('strawberryfields.fock', wires=1, cutoff_dim=50)\n",
"```\n",
":::\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3fhWQ5MrJcSx"
},
"source": [
"References\n",
"==========\n",
"\n",
"About the authors\n",
"=================\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.17"
},
"colab": {
"provenance": []
}
},
"nbformat": 4,
"nbformat_minor": 0
}