|
a |
|
b/Code/All Qiskit, PennyLane QML Nov 23/17a Function Fitting 0.26 Loss kkawchak.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"cell_type": "code", |
|
|
5 |
"execution_count": 24, |
|
|
6 |
"metadata": { |
|
|
7 |
"id": "2CJGEgyVcBoj", |
|
|
8 |
"colab": { |
|
|
9 |
"base_uri": "https://localhost:8080/", |
|
|
10 |
"height": 0 |
|
|
11 |
}, |
|
|
12 |
"outputId": "83aed071-0f43-4a44-cbe9-a7b1700e5afa" |
|
|
13 |
}, |
|
|
14 |
"outputs": [ |
|
|
15 |
{ |
|
|
16 |
"output_type": "stream", |
|
|
17 |
"name": "stdout", |
|
|
18 |
"text": [ |
|
|
19 |
"Time in seconds since beginning of run: 1700459465.6806204\n", |
|
|
20 |
"Mon Nov 20 05:51:05 2023\n" |
|
|
21 |
] |
|
|
22 |
} |
|
|
23 |
], |
|
|
24 |
"source": [ |
|
|
25 |
"# This cell is added by sphinx-gallery\n", |
|
|
26 |
"# It can be customized to whatever you like\n", |
|
|
27 |
"%matplotlib inline\n", |
|
|
28 |
"# !pip install pennylane\n", |
|
|
29 |
"import time\n", |
|
|
30 |
"seconds = time.time()\n", |
|
|
31 |
"print(\"Time in seconds since beginning of run:\", seconds)\n", |
|
|
32 |
"local_time = time.ctime(seconds)\n", |
|
|
33 |
"print(local_time)" |
|
|
34 |
] |
|
|
35 |
}, |
|
|
36 |
{ |
|
|
37 |
"cell_type": "markdown", |
|
|
38 |
"metadata": { |
|
|
39 |
"id": "FSW44zn1cBok" |
|
|
40 |
}, |
|
|
41 |
"source": [ |
|
|
42 |
"Function Fitting using Quantum Signal Processing\n", |
|
|
43 |
"================================================\n", |
|
|
44 |
"\n", |
|
|
45 |
"::: {.meta}\n", |
|
|
46 |
":property=\\\"og:description\\\": Learn how to create polynomial\n", |
|
|
47 |
"approximations to functions using Quantum Signal Processing (QSP).\n", |
|
|
48 |
":property=\\\"og:image\\\":\n", |
|
|
49 |
"<https://pennylane.ai/qml/demonstrations/function_fitting_qsp/cover.png>\n", |
|
|
50 |
":::\n", |
|
|
51 |
"\n", |
|
|
52 |
"*Author: Jay Soni --- Posted: 24 May 2022. Last updated: 17 April 2023.*\n", |
|
|
53 |
"\n", |
|
|
54 |
"Introduction\n", |
|
|
55 |
"------------\n", |
|
|
56 |
"\n", |
|
|
57 |
"This demo is inspired by the paper ['A Grand Unification of Quantum\n", |
|
|
58 |
"Algorithms'](https://arxiv.org/abs/2105.02859). This paper is centered\n", |
|
|
59 |
"around the Quantum Singular Value Transform (QSVT) protocol and how it\n", |
|
|
60 |
"provides a single framework to generalize some of the most famous\n", |
|
|
61 |
"quantum algorithms like Shor's factoring algorithm, Grover search, and\n", |
|
|
62 |
"more.\n", |
|
|
63 |
"\n", |
|
|
64 |
"The QSVT is a method to apply polynomial transformations to the singular\n", |
|
|
65 |
"values of *any matrix*. This is powerful because from polynomial\n", |
|
|
66 |
"transformations we can generate arbitrary function transformations using\n", |
|
|
67 |
"Taylor approximations. The QSVT protocol is an extension of the more\n", |
|
|
68 |
"constrained Quantum Signal Processing (QSP) protocol which presents a\n", |
|
|
69 |
"method for polynomial transformation of matrix entries in a single-qubit\n", |
|
|
70 |
"unitary operator. The QSVT protocol is sophisticated, but the idea at\n", |
|
|
71 |
"its core is quite simple. By studying QSP, we get a relatively simpler\n", |
|
|
72 |
"path to explore this idea at the foundation of QSVT.\n", |
|
|
73 |
"\n", |
|
|
74 |
"In this demo, we explore the QSP protocol and how it can be used for\n", |
|
|
75 |
"curve fitting. We show how you can fit polynomials, as illustrated in\n", |
|
|
76 |
"the animation below.\n", |
|
|
77 |
"\n", |
|
|
78 |
"{.align-center\n", |
|
|
79 |
"width=\"50.0%\"}\n", |
|
|
80 |
"\n", |
|
|
81 |
"This is a powerful tool that will ultimately allow us to approximate any\n", |
|
|
82 |
"function on the interval $[-1, 1]$ that satisfies certain constraints.\n", |
|
|
83 |
"Before we can dive into function fitting, let's develop some intuition.\n", |
|
|
84 |
"Consider the following single-qubit operator parameterized by\n", |
|
|
85 |
"$a \\in [-1, 1]$:\n", |
|
|
86 |
"\n", |
|
|
87 |
"$$\\begin{aligned}\n", |
|
|
88 |
"\\hat{W}(a) = \\begin{bmatrix} a & i\\sqrt{1 - a^{2}} \\\\ i\\sqrt{1 - a^{2}} & a \\end{bmatrix}.\n", |
|
|
89 |
"\\end{aligned}$$\n", |
|
|
90 |
"\n", |
|
|
91 |
"$\\hat{W}(a)$ is called the *signal rotation operator* (SRO). Using this\n", |
|
|
92 |
"operator, we can construct another operator which we call *signal\n", |
|
|
93 |
"processing operator* (SPO),\n", |
|
|
94 |
"\n", |
|
|
95 |
"$$\\hat{U}_{sp} = \\hat{R}_{z}(\\phi_{0}) \\prod_{k=1}^{d} \\hat{W}(a) \\hat{R}_{z}(\\phi_{k}).$$\n", |
|
|
96 |
"\n", |
|
|
97 |
"The SPO is parameterized by a vector $\\vec{\\phi} \\in \\mathbb{R}^{d+1}$,\n", |
|
|
98 |
"where $d$ is a free parameter which represents the number of repeated\n", |
|
|
99 |
"applications of $\\hat{W}(a)$.\n", |
|
|
100 |
"\n", |
|
|
101 |
"The SPO $\\hat{U}_{sp}$ alternates between applying the SRO $\\hat{W}(a)$\n", |
|
|
102 |
"and parameterized rotations around the z-axis. Let's see what happens\n", |
|
|
103 |
"when we try to compute the expectation value\n", |
|
|
104 |
"$\\langle 0|\\hat{U}_{sp}|0\\rangle$ for the particular case where $d = 2$\n", |
|
|
105 |
"and $\\vec{\\phi} = (0, 0, 0)$ :\n", |
|
|
106 |
"\n", |
|
|
107 |
"$$\\begin{aligned}\n", |
|
|
108 |
"\\begin{align*}\n", |
|
|
109 |
"\\langle 0 |\\hat{U}_{sp}|0\\rangle &= \\langle 0 | \\ \\hat{R}_{z}(0) \\prod_{k=1}^{2} \\hat{W}(a) \\hat{R}_{z}(0) \\ |0\\rangle \\\\\n", |
|
|
110 |
"\\langle 0 |\\hat{U}_{sp}|0\\rangle &= \\langle 0 | \\hat{W}(a)^{2} |0\\rangle \\\\\n", |
|
|
111 |
"\\end{align*}\n", |
|
|
112 |
"\\end{aligned}$$\n", |
|
|
113 |
"\n", |
|
|
114 |
"$$\\begin{aligned}\n", |
|
|
115 |
"\\langle 0 |\\hat{U}_{sp}|0\\rangle = \\langle 0 | \\begin{bmatrix} a & i\\sqrt{1 - a^{2}} \\\\ i\\sqrt{1 - a^{2}} & a \\end{bmatrix} \\ \\circ \\ \\begin{bmatrix} a & i\\sqrt{1 - a^{2}} \\\\ i\\sqrt{1 - a^{2}} & a \\end{bmatrix} |0\\rangle\n", |
|
|
116 |
"\\end{aligned}$$\n", |
|
|
117 |
"\n", |
|
|
118 |
"$$\\begin{aligned}\n", |
|
|
119 |
"\\langle 0|\\hat{U}_{sp}|0\\rangle = \\langle 0| \\begin{bmatrix} 2a^{2} - 1 & 2ai\\sqrt{1 - a^{2}} \\\\ 2ai\\sqrt{1 - a^{2}} & 2a^{2} - 1 \\end{bmatrix} |0\\rangle\n", |
|
|
120 |
"\\end{aligned}$$\n", |
|
|
121 |
"\n", |
|
|
122 |
"$$\\langle 0|\\hat{U}_{sp}|0\\rangle = 2a^{2} - 1$$\n", |
|
|
123 |
"\n", |
|
|
124 |
"Notice that this quantity is a polynomial in $a$. Equivalently, suppose\n", |
|
|
125 |
"we wanted to create a map $S: a \\to 2a^2 - 1$. This expectation value\n", |
|
|
126 |
"would give us the means to perform such a mapping. This may seem oddly\n", |
|
|
127 |
"specific at first, but it turns out that this process can be generalized\n", |
|
|
128 |
"for generating a mapping $S: a \\to \\text{poly}(a)$. The following\n", |
|
|
129 |
"theorem shows us how:\n", |
|
|
130 |
"\n", |
|
|
131 |
"### Theorem: Quantum Signal Processing\n", |
|
|
132 |
"\n", |
|
|
133 |
"Given a vector $\\vec{\\phi} \\in \\mathbb{R}^{d+1}$, there exist complex\n", |
|
|
134 |
"polynomials $P(a)$ and $Q(a)$ such that the SPO, $\\hat{U}_{sp}$, can be\n", |
|
|
135 |
"expressed in matrix form as:\n", |
|
|
136 |
"\n", |
|
|
137 |
"$$\\hat{U}_{sp} = \\hat{R}_{z}(\\phi_{0}) \\prod_{k=1}^{d} \\hat{W}(a) \\hat{R}_{z}(\\phi_{k}),$$\n", |
|
|
138 |
"\n", |
|
|
139 |
"$$\\begin{aligned}\n", |
|
|
140 |
"\\hat{U}_{sp} = \\begin{bmatrix} P(a) & iQ(a)\\sqrt{1 - a^{2}} \\\\ iQ^{*}(a)\\sqrt{1 - a^{2}} & P^{*}(a) \\end{bmatrix},\n", |
|
|
141 |
"\\end{aligned}$$\n", |
|
|
142 |
"\n", |
|
|
143 |
"where $a \\in [-1, 1]$ and the polynomials $P(a)$, $Q(a)$ satisfy the\n", |
|
|
144 |
"following constraints:\n", |
|
|
145 |
"\n", |
|
|
146 |
"- $deg(P) \\leq d \\ $ and $deg(Q) \\leq d - 1$,\n", |
|
|
147 |
"- $P$ has parity $d$ mod 2 and $Q$ has parity, $d - 1$ mod 2\n", |
|
|
148 |
"- $|P|^{2} + (1 - a^{2})|Q|^{2} = 1$.\n", |
|
|
149 |
"\n", |
|
|
150 |
"The third condition is actually quite restrictive because if we\n", |
|
|
151 |
"substitute $a = \\pm 1$, we get the result $|P^{2}(\\pm 1)| = 1$. Thus it\n", |
|
|
152 |
"restricts the polynomial to be pinned to $\\pm 1$ at the end points of\n", |
|
|
153 |
"the domain, $a = \\pm 1$. This condition can be relaxed to\n", |
|
|
154 |
"$|P^{2}(a)| \\leq 1$ by expressing the signal processing operator in the\n", |
|
|
155 |
"Hadamard basis, i.e., $\\langle + |\\hat{U}_{sp}(\\vec{\\phi};a)|+\\rangle$).\n", |
|
|
156 |
"This is equivalent to redefining $P(a)$ such that:\n", |
|
|
157 |
"\n", |
|
|
158 |
"$$P^{'}(a) = \\text{Re}(P(a)) + i\\text{Re}(Q(a))\\sqrt{1 - a^{2}}$$\n", |
|
|
159 |
"\n", |
|
|
160 |
"*This is the convention we follow in this demo.*\n" |
|
|
161 |
] |
|
|
162 |
}, |
|
|
163 |
{ |
|
|
164 |
"cell_type": "markdown", |
|
|
165 |
"metadata": { |
|
|
166 |
"id": "Ts0T3hdDcBol" |
|
|
167 |
}, |
|
|
168 |
"source": [ |
|
|
169 |
"Let\\'s Plot some Polynomials\n", |
|
|
170 |
"============================\n", |
|
|
171 |
"\n", |
|
|
172 |
"Now we put this theorem to the test! In this section we construct the\n", |
|
|
173 |
"SRO $\\hat{W}(a)$, and then use PennyLane to define the SPO. To test the\n", |
|
|
174 |
"theorem we will randomly generate parameters $\\vec{\\phi}$ and plot the\n", |
|
|
175 |
"expectation value $\\langle + |\\hat{U}_{sp}(\\vec{\\phi};a)|+\\rangle$ for\n", |
|
|
176 |
"$a \\in [-1, 1]$.\n" |
|
|
177 |
] |
|
|
178 |
}, |
|
|
179 |
{ |
|
|
180 |
"cell_type": "markdown", |
|
|
181 |
"metadata": { |
|
|
182 |
"id": "BeuyFNE2cBom" |
|
|
183 |
}, |
|
|
184 |
"source": [ |
|
|
185 |
"Next, we introduce a function called `rotation_mat(a)`, which will\n", |
|
|
186 |
"construct the SRO matrix. We can also make a helper function\n", |
|
|
187 |
"(`generate_many_sro(a_vals)`) which, given an array of possible values\n", |
|
|
188 |
"for '$a$', will generate an array of $\\hat{W}(a)$ associated with each\n", |
|
|
189 |
"element. We use Pytorch to construct this array as it will later be used\n", |
|
|
190 |
"as input when training our function fitting model.\n" |
|
|
191 |
] |
|
|
192 |
}, |
|
|
193 |
{ |
|
|
194 |
"cell_type": "code", |
|
|
195 |
"execution_count": 25, |
|
|
196 |
"metadata": { |
|
|
197 |
"id": "vOAKUWFUcBom" |
|
|
198 |
}, |
|
|
199 |
"outputs": [], |
|
|
200 |
"source": [ |
|
|
201 |
"import torch\n", |
|
|
202 |
"\n", |
|
|
203 |
"\n", |
|
|
204 |
"def rotation_mat(a):\n", |
|
|
205 |
" \"\"\"Given a fixed value 'a', compute the signal rotation matrix W(a).\n", |
|
|
206 |
" (requires -1 <= 'a' <= 1)\n", |
|
|
207 |
" \"\"\"\n", |
|
|
208 |
" diag = a\n", |
|
|
209 |
" off_diag = (1 - a**2) ** (1 / 2) * 1j\n", |
|
|
210 |
" W = [[diag, off_diag], [off_diag, diag]]\n", |
|
|
211 |
"\n", |
|
|
212 |
" return W\n", |
|
|
213 |
"\n", |
|
|
214 |
"\n", |
|
|
215 |
"def generate_many_sro(a_vals):\n", |
|
|
216 |
" \"\"\"Given a tensor of possible 'a' vals, return a tensor of W(a)\"\"\"\n", |
|
|
217 |
" w_array = []\n", |
|
|
218 |
" for a in a_vals:\n", |
|
|
219 |
" w = rotation_mat(a)\n", |
|
|
220 |
" w_array.append(w)\n", |
|
|
221 |
"\n", |
|
|
222 |
" return torch.tensor(w_array, dtype=torch.complex64, requires_grad=False)" |
|
|
223 |
] |
|
|
224 |
}, |
|
|
225 |
{ |
|
|
226 |
"cell_type": "markdown", |
|
|
227 |
"metadata": { |
|
|
228 |
"id": "L2EBaj75cBom" |
|
|
229 |
}, |
|
|
230 |
"source": [ |
|
|
231 |
"Now having access to the matrix elements of the SRO, we can leverage\n", |
|
|
232 |
"PennyLane to define a quantum function that will compute the SPO. Recall\n", |
|
|
233 |
"we are measuring in the Hadamard basis to relax the third condition of\n", |
|
|
234 |
"the theorem. We accomplish this by sandwiching the SPO between two\n", |
|
|
235 |
"Hadamard gates to account for this change of basis.\n" |
|
|
236 |
] |
|
|
237 |
}, |
|
|
238 |
{ |
|
|
239 |
"cell_type": "code", |
|
|
240 |
"execution_count": 26, |
|
|
241 |
"metadata": { |
|
|
242 |
"id": "aNby7jlFcBom" |
|
|
243 |
}, |
|
|
244 |
"outputs": [], |
|
|
245 |
"source": [ |
|
|
246 |
"import pennylane as qml\n", |
|
|
247 |
"\n", |
|
|
248 |
"def QSP_circ(phi, W):\n", |
|
|
249 |
" \"\"\"This circuit applies the SPO. The components in the matrix\n", |
|
|
250 |
" representation of the final unitary are polynomials!\n", |
|
|
251 |
" \"\"\"\n", |
|
|
252 |
" qml.Hadamard(wires=0) # set initial state |+>\n", |
|
|
253 |
" for angle in phi[:-1]:\n", |
|
|
254 |
" qml.RZ(angle+0.2, wires=0)\n", |
|
|
255 |
" qml.QubitUnitary(W, wires=0)\n", |
|
|
256 |
"\n", |
|
|
257 |
" qml.RZ(phi[-1], wires=0) # final rotation\n", |
|
|
258 |
" qml.Hadamard(wires=0) # change of basis |+> , |->\n", |
|
|
259 |
" return" |
|
|
260 |
] |
|
|
261 |
}, |
|
|
262 |
{ |
|
|
263 |
"cell_type": "markdown", |
|
|
264 |
"metadata": { |
|
|
265 |
"id": "ZC9gzKXOcBon" |
|
|
266 |
}, |
|
|
267 |
"source": [ |
|
|
268 |
"Finally, we randomly generate the vector $\\vec{\\phi}$ and plot the\n", |
|
|
269 |
"expectation value $\\langle +|\\hat{U}_{sp}|+\\rangle$ as a function of\n", |
|
|
270 |
"$a$. In this case we choose $d = 5$. We expect to observe the following:\n", |
|
|
271 |
"\n", |
|
|
272 |
"- Since $d$ is odd, we expect all of the polynomials we plot to have\n", |
|
|
273 |
" odd symmetry\n", |
|
|
274 |
"- Since $d = 5$, we expect none of the polynomials will have terms \\~\n", |
|
|
275 |
" $O(a^6)$ or higher\n", |
|
|
276 |
"- All of the polynomials are bounded by $\\pm1$\n" |
|
|
277 |
] |
|
|
278 |
}, |
|
|
279 |
{ |
|
|
280 |
"cell_type": "code", |
|
|
281 |
"execution_count": 27, |
|
|
282 |
"metadata": { |
|
|
283 |
"colab": { |
|
|
284 |
"base_uri": "https://localhost:8080/", |
|
|
285 |
"height": 430 |
|
|
286 |
}, |
|
|
287 |
"id": "dIFHdGdvcBon", |
|
|
288 |
"outputId": "3d385e9e-096b-4dc0-fcff-c832e0e49466" |
|
|
289 |
}, |
|
|
290 |
"outputs": [ |
|
|
291 |
{ |
|
|
292 |
"output_type": "display_data", |
|
|
293 |
"data": { |
|
|
294 |
"text/plain": [ |
|
|
295 |
"<Figure size 640x480 with 1 Axes>" |
|
|
296 |
], |
|
|
297 |
"image/png": "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\n" |
|
|
298 |
}, |
|
|
299 |
"metadata": {} |
|
|
300 |
} |
|
|
301 |
], |
|
|
302 |
"source": [ |
|
|
303 |
"import math\n", |
|
|
304 |
"import matplotlib.pyplot as plt\n", |
|
|
305 |
"\n", |
|
|
306 |
"d = 5\n", |
|
|
307 |
"a_vals = torch.linspace(-1, 1, 50)\n", |
|
|
308 |
"w_mats = generate_many_sro(a_vals)\n", |
|
|
309 |
"\n", |
|
|
310 |
"gen = torch.Generator()\n", |
|
|
311 |
"gen.manual_seed(444422) # set random seed for reproducibility\n", |
|
|
312 |
"\n", |
|
|
313 |
"for i in range(5):\n", |
|
|
314 |
" phi = torch.rand(d + 1, generator=gen) * 2 * torch.tensor([math.pi], requires_grad=False)\n", |
|
|
315 |
" matrix_func = qml.matrix(QSP_circ)\n", |
|
|
316 |
" y_vals = [matrix_func(phi, w)[0, 0].real for w in w_mats]\n", |
|
|
317 |
"\n", |
|
|
318 |
" plt.plot(a_vals, y_vals, label=f\"poly #{i}\")\n", |
|
|
319 |
"\n", |
|
|
320 |
"plt.vlines(0.0, -1.0, 1.0, color=\"black\")\n", |
|
|
321 |
"plt.hlines(0.0, -1.0, 1.0, color=\"black\")\n", |
|
|
322 |
"plt.legend(loc=1)\n", |
|
|
323 |
"plt.show()" |
|
|
324 |
] |
|
|
325 |
}, |
|
|
326 |
{ |
|
|
327 |
"cell_type": "markdown", |
|
|
328 |
"metadata": { |
|
|
329 |
"id": "ZZ_MLQ2EcBon" |
|
|
330 |
}, |
|
|
331 |
"source": [ |
|
|
332 |
"{.align-center\n", |
|
|
333 |
"width=\"50.0%\"}\n" |
|
|
334 |
] |
|
|
335 |
}, |
|
|
336 |
{ |
|
|
337 |
"cell_type": "markdown", |
|
|
338 |
"metadata": { |
|
|
339 |
"id": "kHiHHvzIcBon" |
|
|
340 |
}, |
|
|
341 |
"source": [ |
|
|
342 |
"Exactly as predicted, all of these conditions are met!\n", |
|
|
343 |
"\n", |
|
|
344 |
"- All curves have odd symmetry\n", |
|
|
345 |
"- Qualitatively, the plots look similar to polynomials of low degree\n", |
|
|
346 |
"- Each plot does not exceed $\\pm1$ !\n", |
|
|
347 |
"\n", |
|
|
348 |
"Function Fitting with Quantum Signal Processing\n", |
|
|
349 |
"===============================================\n", |
|
|
350 |
"\n", |
|
|
351 |
"Another observation we can make about this theorem is the fact that it\n", |
|
|
352 |
"holds true in both directions: If we have two polynomials $P(a)$ and\n", |
|
|
353 |
"$Q(a)$ that satisfy the conditions of the theorem, then there exists a\n", |
|
|
354 |
"$\\vec{\\phi}$ for which we can construct a signal processing operator\n", |
|
|
355 |
"which maps $a \\to P(a)$.\n", |
|
|
356 |
"\n", |
|
|
357 |
"In this section we try to answer the question:\n", |
|
|
358 |
"\n", |
|
|
359 |
"**Can we learn the parameter values of** $\\vec{\\phi}$ **to transform our\n", |
|
|
360 |
"signal processing operator polynomial to fit a given function?**\n", |
|
|
361 |
"\n", |
|
|
362 |
"In order to answer this question, we leverage the power of machine\n", |
|
|
363 |
"learning. In this demo we assume you are familiar with some concepts\n", |
|
|
364 |
"from quantum machine learning, for a refresher checkout this [blog post\n", |
|
|
365 |
"on\n", |
|
|
366 |
"QML](https://pennylane.ai/blog/2021/10/how-to-start-learning-quantum-machine-learning/).\n", |
|
|
367 |
"We begin by building a machine learning model using Pytorch. The\n", |
|
|
368 |
"`__init__()` method handles the random initialization of our parameter\n", |
|
|
369 |
"vector $\\vec{\\phi}$. The `forward()` method takes an array of signal\n", |
|
|
370 |
"rotation matrices $\\hat{W}(a)$ for varying $a$, and produces the\n", |
|
|
371 |
"predicted $y$ values.\n", |
|
|
372 |
"\n", |
|
|
373 |
"Next we leverage the PennyLane function\n", |
|
|
374 |
"[qml.matrix()](https://pennylane.readthedocs.io/en/stable/code/api/pennylane.matrix.html?highlight=qml%20matrix#pennylane.matrix),\n", |
|
|
375 |
"which accepts our quantum function (it can also accept quantum tapes and\n", |
|
|
376 |
"QNodes) and returns its unitary matrix representation. We are interested\n", |
|
|
377 |
"in the real value of the top left entry, this corresponds to $P(a)$.\n" |
|
|
378 |
] |
|
|
379 |
}, |
|
|
380 |
{ |
|
|
381 |
"cell_type": "code", |
|
|
382 |
"execution_count": 28, |
|
|
383 |
"metadata": { |
|
|
384 |
"id": "waKHRXcqcBon" |
|
|
385 |
}, |
|
|
386 |
"outputs": [], |
|
|
387 |
"source": [ |
|
|
388 |
"torch_pi = torch.Tensor([math.pi])\n", |
|
|
389 |
"\n", |
|
|
390 |
"\n", |
|
|
391 |
"class QSP_Func_Fit(torch.nn.Module):\n", |
|
|
392 |
" def __init__(self, degree, num_vals, random_seed=None):\n", |
|
|
393 |
" \"\"\"Given the degree and number of samples, this method randomly\n", |
|
|
394 |
" initializes the parameter vector (randomness can be set by random_seed)\n", |
|
|
395 |
" \"\"\"\n", |
|
|
396 |
" super().__init__()\n", |
|
|
397 |
" if random_seed is None:\n", |
|
|
398 |
" self.phi = torch_pi * torch.rand(degree + 1, requires_grad=True)\n", |
|
|
399 |
"\n", |
|
|
400 |
" else:\n", |
|
|
401 |
" gen = torch.Generator()\n", |
|
|
402 |
" gen.manual_seed(random_seed)\n", |
|
|
403 |
" self.phi = torch_pi * torch.rand(degree + 1, requires_grad=True, generator=gen)\n", |
|
|
404 |
"\n", |
|
|
405 |
" self.phi = torch.nn.Parameter(self.phi)\n", |
|
|
406 |
" self.num_phi = degree + 1\n", |
|
|
407 |
" self.num_vals = num_vals\n", |
|
|
408 |
"\n", |
|
|
409 |
" def forward(self, omega_mats):\n", |
|
|
410 |
" \"\"\"PennyLane forward implementation\"\"\"\n", |
|
|
411 |
" y_pred = []\n", |
|
|
412 |
" generate_qsp_mat = qml.matrix(QSP_circ)\n", |
|
|
413 |
"\n", |
|
|
414 |
" for w in omega_mats:\n", |
|
|
415 |
" u_qsp = generate_qsp_mat(self.phi, w)\n", |
|
|
416 |
" P_a = u_qsp[0, 0] # Taking the (0,0) entry of the matrix corresponds to <0|U|0>\n", |
|
|
417 |
" y_pred.append(P_a.real)\n", |
|
|
418 |
"\n", |
|
|
419 |
" return torch.stack(y_pred, 0)" |
|
|
420 |
] |
|
|
421 |
}, |
|
|
422 |
{ |
|
|
423 |
"cell_type": "markdown", |
|
|
424 |
"metadata": { |
|
|
425 |
"id": "OJRrAm7ucBoo" |
|
|
426 |
}, |
|
|
427 |
"source": [ |
|
|
428 |
"Next we create a `Model_Runner` class to handle running the\n", |
|
|
429 |
"optimization, storing the results, and providing plotting functionality:\n" |
|
|
430 |
] |
|
|
431 |
}, |
|
|
432 |
{ |
|
|
433 |
"cell_type": "code", |
|
|
434 |
"execution_count": 29, |
|
|
435 |
"metadata": { |
|
|
436 |
"id": "8olPljw6cBoo" |
|
|
437 |
}, |
|
|
438 |
"outputs": [], |
|
|
439 |
"source": [ |
|
|
440 |
"class Model_Runner:\n", |
|
|
441 |
" def __init__(self, model, degree, num_samples, x_vals, process_x_vals, y_true):\n", |
|
|
442 |
" \"\"\"Given a model and a series of model specific arguments, store everything in\n", |
|
|
443 |
" internal attributes.\n", |
|
|
444 |
" \"\"\"\n", |
|
|
445 |
" self.model = model\n", |
|
|
446 |
" self.degree = degree\n", |
|
|
447 |
" self.num_samples = num_samples\n", |
|
|
448 |
"\n", |
|
|
449 |
" self.x_vals = x_vals\n", |
|
|
450 |
" self.inp = process_x_vals(x_vals)\n", |
|
|
451 |
" self.y_true = y_true\n", |
|
|
452 |
"\n", |
|
|
453 |
" def execute(\n", |
|
|
454 |
" self, random_seed=13_02_1967, max_shots=25000, verbose=True\n", |
|
|
455 |
" ): # easter egg: oddly specific seed?\n", |
|
|
456 |
" \"\"\"Run the optimization protocol on the model using Mean Square Error as a loss\n", |
|
|
457 |
" function and using stochastic gradient descent as the optimizer.\n", |
|
|
458 |
" \"\"\"\n", |
|
|
459 |
" model = self.model(degree=self.degree, num_vals=self.num_samples, random_seed=random_seed)\n", |
|
|
460 |
"\n", |
|
|
461 |
" criterion = torch.nn.MSELoss(reduction=\"sum\")\n", |
|
|
462 |
" optimizer = torch.optim.SGD(model.parameters(), lr=1e-5)\n", |
|
|
463 |
"\n", |
|
|
464 |
" t = 0\n", |
|
|
465 |
" loss_val = 1.0\n", |
|
|
466 |
"\n", |
|
|
467 |
" while (t <= max_shots) and (loss_val > 0.25):\n", |
|
|
468 |
"\n", |
|
|
469 |
" self.y_pred = model(self.inp)\n", |
|
|
470 |
"\n", |
|
|
471 |
" if t == 1:\n", |
|
|
472 |
" self.init_y_pred = self.y_pred\n", |
|
|
473 |
"\n", |
|
|
474 |
" # Compute and print loss\n", |
|
|
475 |
" loss = criterion(self.y_pred, self.y_true)\n", |
|
|
476 |
" loss_val = loss.item()\n", |
|
|
477 |
"\n", |
|
|
478 |
" if (t % 1000 == 0) and verbose:\n", |
|
|
479 |
" print(f\"---- iter: {t}, loss: {round(loss_val, 4)} -----\")\n", |
|
|
480 |
"\n", |
|
|
481 |
" # Perform a backward pass and update weights.\n", |
|
|
482 |
" optimizer.zero_grad()\n", |
|
|
483 |
" loss.backward()\n", |
|
|
484 |
" optimizer.step()\n", |
|
|
485 |
"\n", |
|
|
486 |
" t += 1\n", |
|
|
487 |
"\n", |
|
|
488 |
" self.model_params = model.phi\n", |
|
|
489 |
"\n", |
|
|
490 |
" def plot_result(self, show=True):\n", |
|
|
491 |
" \"\"\"Plot the results\"\"\"\n", |
|
|
492 |
" plt.plot(self.x_vals, self.y_true.tolist(), \"--b\", label=\"target func\")\n", |
|
|
493 |
" plt.plot(self.x_vals, self.y_pred.tolist(), \".g\", label=\"optim params\")\n", |
|
|
494 |
" plt.plot(self.x_vals, self.init_y_pred.tolist(), \".r\", label=\"init params\")\n", |
|
|
495 |
" plt.legend(loc=1)\n", |
|
|
496 |
"\n", |
|
|
497 |
" if show:\n", |
|
|
498 |
" plt.show()" |
|
|
499 |
] |
|
|
500 |
}, |
|
|
501 |
{ |
|
|
502 |
"cell_type": "markdown", |
|
|
503 |
"metadata": { |
|
|
504 |
"id": "Ubl_AjJqcBoo" |
|
|
505 |
}, |
|
|
506 |
"source": [ |
|
|
507 |
"Now that we have a model, lets first attempt to fit a polynomial. We\n", |
|
|
508 |
"expect this to perform well when the target polynomial also obeys the\n", |
|
|
509 |
"symmetry and degree constraints that our quantum signal processing\n", |
|
|
510 |
"polynomial does. To do this, we defined a function `custom_poly(x)`\n", |
|
|
511 |
"which implements the target polynomial. In this case, we (arbitrarily)\n", |
|
|
512 |
"choose the target polynomial:\n", |
|
|
513 |
"\n", |
|
|
514 |
"$$y = 4x^{5} - 5x^{3} + x$$\n", |
|
|
515 |
"\n", |
|
|
516 |
"Lets see how well we can fit this polynomial!\n", |
|
|
517 |
"\n", |
|
|
518 |
"> ::: {.note}\n", |
|
|
519 |
"> ::: {.title}\n", |
|
|
520 |
"> Note\n", |
|
|
521 |
"> :::\n", |
|
|
522 |
">\n", |
|
|
523 |
"> Depending on the initial parameters, training can take anywhere from\n", |
|
|
524 |
"> 10 - 30 mins\n", |
|
|
525 |
"> :::\n" |
|
|
526 |
] |
|
|
527 |
}, |
|
|
528 |
{ |
|
|
529 |
"cell_type": "code", |
|
|
530 |
"execution_count": 30, |
|
|
531 |
"metadata": { |
|
|
532 |
"colab": { |
|
|
533 |
"base_uri": "https://localhost:8080/", |
|
|
534 |
"height": 726 |
|
|
535 |
}, |
|
|
536 |
"id": "n4R-bELScBoo", |
|
|
537 |
"outputId": "4c0f5359-85aa-48cf-9d57-f7a1f8730e3b" |
|
|
538 |
}, |
|
|
539 |
"outputs": [ |
|
|
540 |
{ |
|
|
541 |
"output_type": "stream", |
|
|
542 |
"name": "stdout", |
|
|
543 |
"text": [ |
|
|
544 |
"---- iter: 0, loss: 10.1121 -----\n", |
|
|
545 |
"---- iter: 1000, loss: 8.4185 -----\n", |
|
|
546 |
"---- iter: 2000, loss: 6.6658 -----\n", |
|
|
547 |
"---- iter: 3000, loss: 5.008 -----\n", |
|
|
548 |
"---- iter: 4000, loss: 3.643 -----\n", |
|
|
549 |
"---- iter: 5000, loss: 2.6466 -----\n", |
|
|
550 |
"---- iter: 6000, loss: 1.9656 -----\n", |
|
|
551 |
"---- iter: 7000, loss: 1.5028 -----\n", |
|
|
552 |
"---- iter: 8000, loss: 1.1774 -----\n", |
|
|
553 |
"---- iter: 9000, loss: 0.9372 -----\n", |
|
|
554 |
"---- iter: 10000, loss: 0.7527 -----\n", |
|
|
555 |
"---- iter: 11000, loss: 0.6069 -----\n", |
|
|
556 |
"---- iter: 12000, loss: 0.4902 -----\n", |
|
|
557 |
"---- iter: 13000, loss: 0.3963 -----\n", |
|
|
558 |
"---- iter: 14000, loss: 0.3205 -----\n", |
|
|
559 |
"---- iter: 15000, loss: 0.2595 -----\n" |
|
|
560 |
] |
|
|
561 |
}, |
|
|
562 |
{ |
|
|
563 |
"output_type": "display_data", |
|
|
564 |
"data": { |
|
|
565 |
"text/plain": [ |
|
|
566 |
"<Figure size 640x480 with 1 Axes>" |
|
|
567 |
], |
|
|
568 |
"image/png": "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GDFrYxC8OBiqg+zyLWOxACc3NxetW7c22NaoUSO0aNECubm51e43fPhwfPLJJ0hJScGMGTPw3//+F08++aTBcW8NbgDob1d33Llz58Lb21t/CQoKqutpUUPFcSPmweZ5agACvQIRHRJd47Rsc7S6GDWouQEzOcCZPn16pUHAFS8nTpyoc4USEhIQFxeH8PBwjBgxAmvXrsXmzZtx6tSpOh9zxowZKCgo0F9ycnLqfCxqgDhuxLzM3DxP5GjM1epi1KDmBszkRH8vvPACRo8eXWOZdu3awd/fH+fPnzfYXlJSgvz8fPj7+xv9eJGRkQCArKws3H777fD398e+ffsMyuTl5QFAtcd1d3eHu7u70Y9JZKCmcSNseaibwED+76hBqq7VJS40zuREfGWDmiuuM2UwqLkBMznA8fX1ha+vb63loqKicPnyZaSlpaF79+4AgB9//BGlpaX6oMUY6enpAIA2bdroj/vmm2/i/Pnz+i6wnTt3wsvLC506dTLxbIiMUE3KdI4bISJT1dTqUlWAU1NW5LJBzYlbE6ETuga1zpQxLJrJuH///sjLy8OyZctw8+ZNjBkzBj169MCnn34KADh79iz69OmDtWvXomfPnjh16hQ+/fRTDBgwAC1btsTvv/+O559/HoGBgfjpp58AyGniERERCAgIwIIFC5Cbm4unnnoKTz/9NN566y2j6sVMxmQylapSynR2rRCRqUxZ3bvWrMi3HLOhrDNlyve3RQOc/Px8TJw4Ed988w1cXFwwZMgQvP/++2jatCkAQK1Wo23btkhJSUF0dDRycnLw5JNP4ujRo7h69SqCgoLwz3/+E6+88orBiZw+fRrjxo3Drl270KRJE4waNQrz5s1Do0bGNUgxwKE6Ycp0IjID1UFVpVaXioGLKYFQQ2I3AY69YoBDRES2VFurS0p2CmLWxlTePioF0SHRVqihfTLl+5uriRMREVlZbat7cwBx/XGxTSIiIjtjdFZkqha7qNhFRUREdqohDSA2BruoiIiInEBtXVlUPXZRERERkdNhgENEREROhwEOEREROR0GOEREROR0GOAQERGR02GAQ0RERE6HAQ4RERE5HQY4RERE5HQY4BAREZHTYYBDRERETocBDhERETkdBjhERETkdBjgEBERkdNhgENE5qXRACkp8pqIyEYY4BCR+ahUQHAwEBMjr1UqW9eI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\n" |
|
|
569 |
}, |
|
|
570 |
"metadata": {} |
|
|
571 |
} |
|
|
572 |
], |
|
|
573 |
"source": [ |
|
|
574 |
"import numpy as np\n", |
|
|
575 |
"\n", |
|
|
576 |
"d = 9 # dim(phi) = d + 1,\n", |
|
|
577 |
"num_samples = 50\n", |
|
|
578 |
"\n", |
|
|
579 |
"\n", |
|
|
580 |
"def custom_poly(x):\n", |
|
|
581 |
" \"\"\"A custom polynomial of degree <= d and parity d % 2\"\"\"\n", |
|
|
582 |
" return torch.tensor(4 * x**5 - 5 * x**3 + x, requires_grad=False, dtype=torch.float)\n", |
|
|
583 |
"\n", |
|
|
584 |
"\n", |
|
|
585 |
"a_vals = np.linspace(-1, 1, num_samples)\n", |
|
|
586 |
"y_true = custom_poly(a_vals)\n", |
|
|
587 |
"\n", |
|
|
588 |
"qsp_model_runner = Model_Runner(QSP_Func_Fit, d, num_samples, a_vals, generate_many_sro, y_true)\n", |
|
|
589 |
"\n", |
|
|
590 |
"qsp_model_runner.execute()\n", |
|
|
591 |
"qsp_model_runner.plot_result()" |
|
|
592 |
] |
|
|
593 |
}, |
|
|
594 |
{ |
|
|
595 |
"cell_type": "markdown", |
|
|
596 |
"metadata": { |
|
|
597 |
"id": "5Q2gTY65cBoo" |
|
|
598 |
}, |
|
|
599 |
"source": [ |
|
|
600 |
"::: {.rst-class}\n", |
|
|
601 |
"sphx-glr-script-out\n", |
|
|
602 |
"\n", |
|
|
603 |
"Out:\n", |
|
|
604 |
"\n", |
|
|
605 |
"``` {.none}\n", |
|
|
606 |
"---- iter: 0, loss: 13.5938 -----\n", |
|
|
607 |
"---- iter: 1000, loss: 11.8809 -----\n", |
|
|
608 |
"---- iter: 2000, loss: 10.229 -----\n", |
|
|
609 |
"---- iter: 3000, loss: 8.6693 -----\n", |
|
|
610 |
"---- iter: 4000, loss: 7.2557 -----\n", |
|
|
611 |
"---- iter: 5000, loss: 6.0084 -----\n", |
|
|
612 |
"---- iter: 6000, loss: 4.9197 -----\n", |
|
|
613 |
"---- iter: 7000, loss: 3.9801 -----\n", |
|
|
614 |
"---- iter: 8000, loss: 3.1857 -----\n", |
|
|
615 |
"---- iter: 9000, loss: 2.5312 -----\n", |
|
|
616 |
"---- iter: 10000, loss: 2.0045 -----\n", |
|
|
617 |
"---- iter: 11000, loss: 1.5873 -----\n", |
|
|
618 |
"---- iter: 12000, loss: 1.2594 -----\n", |
|
|
619 |
"---- iter: 13000, loss: 1.0021 -----\n", |
|
|
620 |
"---- iter: 14000, loss: 0.7997 -----\n", |
|
|
621 |
"---- iter: 15000, loss: 0.6397 -----\n", |
|
|
622 |
"---- iter: 16000, loss: 0.5127 -----\n", |
|
|
623 |
"```\n", |
|
|
624 |
"\n", |
|
|
625 |
"{.align-center\n", |
|
|
626 |
"width=\"50.0%\"}\n", |
|
|
627 |
":::\n" |
|
|
628 |
] |
|
|
629 |
}, |
|
|
630 |
{ |
|
|
631 |
"cell_type": "markdown", |
|
|
632 |
"metadata": { |
|
|
633 |
"id": "OLd8Gl3YcBoo" |
|
|
634 |
}, |
|
|
635 |
"source": [ |
|
|
636 |
"We were able to fit that polynomial quite well! Lets try something more\n", |
|
|
637 |
"challenging: fitting a non-polynomial function. One thing to keep in\n", |
|
|
638 |
"mind is the symmetry and bounds constraints on our polynomials. If our\n", |
|
|
639 |
"target function does not satisfy them as well, then we cannot hope to\n", |
|
|
640 |
"generate a good polynomial fit, regardless of how long we train for.\n", |
|
|
641 |
"\n", |
|
|
642 |
"A good non-polynomial candidate to fit to, that obeys our constraints,\n", |
|
|
643 |
"is the step function. Let's try it!\n" |
|
|
644 |
] |
|
|
645 |
}, |
|
|
646 |
{ |
|
|
647 |
"cell_type": "code", |
|
|
648 |
"execution_count": 31, |
|
|
649 |
"metadata": { |
|
|
650 |
"colab": { |
|
|
651 |
"base_uri": "https://localhost:8080/", |
|
|
652 |
"height": 424 |
|
|
653 |
}, |
|
|
654 |
"id": "sbrwU-7bcBop", |
|
|
655 |
"outputId": "c2c6f26b-8aa4-4aed-9b99-b65da3a6809f" |
|
|
656 |
}, |
|
|
657 |
"outputs": [ |
|
|
658 |
{ |
|
|
659 |
"output_type": "stream", |
|
|
660 |
"name": "stdout", |
|
|
661 |
"text": [ |
|
|
662 |
"---- iter: 0, loss: 37.4139 -----\n" |
|
|
663 |
] |
|
|
664 |
}, |
|
|
665 |
{ |
|
|
666 |
"output_type": "error", |
|
|
667 |
"ename": "KeyboardInterrupt", |
|
|
668 |
"evalue": "ignored", |
|
|
669 |
"traceback": [ |
|
|
670 |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
|
|
671 |
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", |
|
|
672 |
"\u001b[0;32m<ipython-input-31-37a295e42cf4>\u001b[0m in \u001b[0;36m<cell line: 18>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0mqsp_model_runner\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mModel_Runner\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mQSP_Func_Fit\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0md\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_samples\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0ma_vals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgenerate_many_sro\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_true\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m \u001b[0mqsp_model_runner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexecute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 19\u001b[0m \u001b[0mqsp_model_runner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_result\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
|
|
673 |
"\u001b[0;32m<ipython-input-29-5bcae6f81244>\u001b[0m in \u001b[0;36mexecute\u001b[0;34m(self, random_seed, max_shots, verbose)\u001b[0m\n\u001b[1;32m 42\u001b[0m \u001b[0;31m# Perform a backward pass and update weights.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 43\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzero_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 44\u001b[0;31m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 45\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 46\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", |
|
|
674 |
"\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/_tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 490\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 491\u001b[0m )\n\u001b[0;32m--> 492\u001b[0;31m torch.autograd.backward(\n\u001b[0m\u001b[1;32m 493\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 494\u001b[0m )\n", |
|
|
675 |
"\u001b[0;32m/usr/local/lib/python3.10/dist-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 249\u001b[0m \u001b[0;31m# some Python versions print out the first line of a multi-line function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0;31m# calls in the traceback and some print out the last line\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 251\u001b[0;31m Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass\n\u001b[0m\u001b[1;32m 252\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[0mgrad_tensors_\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", |
|
|
676 |
"\u001b[0;31mKeyboardInterrupt\u001b[0m: " |
|
|
677 |
] |
|
|
678 |
} |
|
|
679 |
], |
|
|
680 |
"source": [ |
|
|
681 |
"d = 9 # dim(phi) = d + 1,\n", |
|
|
682 |
"num_samples = 50\n", |
|
|
683 |
"\n", |
|
|
684 |
"\n", |
|
|
685 |
"def step_func(x):\n", |
|
|
686 |
" \"\"\"A step function (odd parity) which maps all values <= 0 to -1\n", |
|
|
687 |
" and all values > 0 to +1.\n", |
|
|
688 |
" \"\"\"\n", |
|
|
689 |
" res = [-1.0 if x_i <= 0 else 1.0 for x_i in x]\n", |
|
|
690 |
" return torch.tensor(res, requires_grad=False, dtype=torch.float)\n", |
|
|
691 |
"\n", |
|
|
692 |
"\n", |
|
|
693 |
"a_vals = np.linspace(-1, 1, num_samples)\n", |
|
|
694 |
"y_true = step_func(a_vals)\n", |
|
|
695 |
"\n", |
|
|
696 |
"qsp_model_runner = Model_Runner(QSP_Func_Fit, d, num_samples, a_vals, generate_many_sro, y_true)\n", |
|
|
697 |
"\n", |
|
|
698 |
"qsp_model_runner.execute()\n", |
|
|
699 |
"qsp_model_runner.plot_result()" |
|
|
700 |
] |
|
|
701 |
}, |
|
|
702 |
{ |
|
|
703 |
"cell_type": "markdown", |
|
|
704 |
"metadata": { |
|
|
705 |
"id": "hrhFnaMicBop" |
|
|
706 |
}, |
|
|
707 |
"source": [ |
|
|
708 |
"::: {.rst-class}\n", |
|
|
709 |
"sphx-glr-script-out\n", |
|
|
710 |
"\n", |
|
|
711 |
"Out:\n", |
|
|
712 |
"\n", |
|
|
713 |
"``` {.none}\n", |
|
|
714 |
"---- iter: 0, loss: 33.8345 -----\n", |
|
|
715 |
"---- iter: 1000, loss: 19.0937 -----\n", |
|
|
716 |
"---- iter: 2000, loss: 11.6557 -----\n", |
|
|
717 |
"---- iter: 3000, loss: 8.2853 -----\n", |
|
|
718 |
"---- iter: 4000, loss: 6.6824 -----\n", |
|
|
719 |
"---- iter: 5000, loss: 5.8523 -----\n", |
|
|
720 |
"---- iter: 6000, loss: 5.3855 -----\n", |
|
|
721 |
"---- iter: 7000, loss: 5.1036 -----\n", |
|
|
722 |
"---- iter: 8000, loss: 4.9227 -----\n", |
|
|
723 |
"---- iter: 9000, loss: 4.8004 -----\n", |
|
|
724 |
"---- iter: 10000, loss: 4.7138 -----\n", |
|
|
725 |
"---- iter: 11000, loss: 4.6502 -----\n", |
|
|
726 |
"---- iter: 12000, loss: 4.6018 -----\n", |
|
|
727 |
"---- iter: 13000, loss: 4.5638 -----\n", |
|
|
728 |
"---- iter: 14000, loss: 4.5333 -----\n", |
|
|
729 |
"---- iter: 15000, loss: 4.5082 -----\n", |
|
|
730 |
"---- iter: 16000, loss: 4.4872 -----\n", |
|
|
731 |
"---- iter: 17000, loss: 4.4693 -----\n", |
|
|
732 |
"---- iter: 18000, loss: 4.4537 -----\n", |
|
|
733 |
"---- iter: 19000, loss: 4.4401 -----\n", |
|
|
734 |
"---- iter: 20000, loss: 4.4281 -----\n", |
|
|
735 |
"---- iter: 21000, loss: 4.4174 -----\n", |
|
|
736 |
"---- iter: 22000, loss: 4.4078 -----\n", |
|
|
737 |
"---- iter: 23000, loss: 4.3991 -----\n", |
|
|
738 |
"---- iter: 24000, loss: 4.3912 -----\n", |
|
|
739 |
"---- iter: 25000, loss: 4.3839 -----\n", |
|
|
740 |
"```\n", |
|
|
741 |
"\n", |
|
|
742 |
"{.align-center\n", |
|
|
743 |
"width=\"50.0%\"}\n", |
|
|
744 |
":::\n" |
|
|
745 |
] |
|
|
746 |
}, |
|
|
747 |
{ |
|
|
748 |
"cell_type": "code", |
|
|
749 |
"source": [ |
|
|
750 |
"seconds = time.time()\n", |
|
|
751 |
"print(\"Time in seconds since end of run:\", seconds)\n", |
|
|
752 |
"local_time = time.ctime(seconds)\n", |
|
|
753 |
"print(local_time)" |
|
|
754 |
], |
|
|
755 |
"metadata": { |
|
|
756 |
"id": "-iqvB4zXku3B" |
|
|
757 |
}, |
|
|
758 |
"execution_count": null, |
|
|
759 |
"outputs": [] |
|
|
760 |
}, |
|
|
761 |
{ |
|
|
762 |
"cell_type": "markdown", |
|
|
763 |
"metadata": { |
|
|
764 |
"id": "QWCru-kdcBop" |
|
|
765 |
}, |
|
|
766 |
"source": [ |
|
|
767 |
"Conclusion\n", |
|
|
768 |
"==========\n", |
|
|
769 |
"\n", |
|
|
770 |
"In this demo, we explored the Quantum Signal Processing theorem, which\n", |
|
|
771 |
"is a method to perform polynomial transformations on the entries of the\n", |
|
|
772 |
"SRO $\\hat{W}(a)$. This polynomial transformation arises from the\n", |
|
|
773 |
"repeated application of $\\hat{W}(a)$ and the parameterized Z-axis\n", |
|
|
774 |
"rotations $e^{i \\phi \\hat{Z}}$. Note, the SRO is itself a\n", |
|
|
775 |
"transformation, in this case a rotation around the X-axis by\n", |
|
|
776 |
"$\\theta = -2 \\cos^{-1}(a)$, which rotates our basis. Thus the underlying\n", |
|
|
777 |
"principal of quantum signal processing is that we can generate\n", |
|
|
778 |
"polynomial transformations through parameterized rotations along a\n", |
|
|
779 |
"principal axis followed by change of basis transformations which\n", |
|
|
780 |
"re-orients this axis.\n", |
|
|
781 |
"\n", |
|
|
782 |
"This is the same principal at the heart of QSVT. In this case the\n", |
|
|
783 |
"subspace in which we apply our parameterized rotations is defined by the\n", |
|
|
784 |
"singular vectors, the change of basis transformation takes us between\n", |
|
|
785 |
"these subspaces and this allows us to apply polynomial transformations\n", |
|
|
786 |
"on the singular values of our matrix of interest.\n", |
|
|
787 |
"\n", |
|
|
788 |
"We also showed that one could use a simple gradient descent model to\n", |
|
|
789 |
"train a parameter vector $\\vec{\\phi}$ to generate reasonably good\n", |
|
|
790 |
"polynomial approximations of arbitrary functions (provided the function\n", |
|
|
791 |
"satisfied the same constraints). This isn\\'t the only way to compute the\n", |
|
|
792 |
"optimal values. It turns out there exist *efficient* algorithms for\n", |
|
|
793 |
"explicitly computing the optimal values for $\\vec{\\phi}$ known as\n", |
|
|
794 |
"\\\"Remez-type exchange algorithms\\\" for analytic function fitting. If you\n", |
|
|
795 |
"want to explore other approaches to function fitting, checkout this\n", |
|
|
796 |
"[demo](https://pennylane.ai/qml/demos/quantum_neural_net.html) where we\n", |
|
|
797 |
"use a photonic neural network for function fitting.\n" |
|
|
798 |
] |
|
|
799 |
}, |
|
|
800 |
{ |
|
|
801 |
"cell_type": "markdown", |
|
|
802 |
"metadata": { |
|
|
803 |
"id": "Kg7gBQNScBop" |
|
|
804 |
}, |
|
|
805 |
"source": [ |
|
|
806 |
"{.align-center\n", |
|
|
807 |
"width=\"50.0%\"}\n" |
|
|
808 |
] |
|
|
809 |
}, |
|
|
810 |
{ |
|
|
811 |
"cell_type": "markdown", |
|
|
812 |
"metadata": { |
|
|
813 |
"id": "3vu4e3m1cBop" |
|
|
814 |
}, |
|
|
815 |
"source": [ |
|
|
816 |
"References\n", |
|
|
817 |
"==========\n", |
|
|
818 |
"\n", |
|
|
819 |
"\\[1\\]: *John M. Martyn, Zane M. Rossi, Andrew K. Tan, Isaac L. Chuang.\n", |
|
|
820 |
"\"A Grand Unification of Quantum Algorithms\"* [PRX Quantum 2,\n", |
|
|
821 |
"040203](https://arxiv.org/abs/2105.02859)*, 2021.*\n", |
|
|
822 |
"\n", |
|
|
823 |
"About the author\n", |
|
|
824 |
"================\n" |
|
|
825 |
] |
|
|
826 |
} |
|
|
827 |
], |
|
|
828 |
"metadata": { |
|
|
829 |
"kernelspec": { |
|
|
830 |
"display_name": "Python 3", |
|
|
831 |
"language": "python", |
|
|
832 |
"name": "python3" |
|
|
833 |
}, |
|
|
834 |
"language_info": { |
|
|
835 |
"codemirror_mode": { |
|
|
836 |
"name": "ipython", |
|
|
837 |
"version": 3 |
|
|
838 |
}, |
|
|
839 |
"file_extension": ".py", |
|
|
840 |
"mimetype": "text/x-python", |
|
|
841 |
"name": "python", |
|
|
842 |
"nbconvert_exporter": "python", |
|
|
843 |
"pygments_lexer": "ipython3", |
|
|
844 |
"version": "3.9.17" |
|
|
845 |
}, |
|
|
846 |
"colab": { |
|
|
847 |
"provenance": [] |
|
|
848 |
} |
|
|
849 |
}, |
|
|
850 |
"nbformat": 4, |
|
|
851 |
"nbformat_minor": 0 |
|
|
852 |
} |