{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quantum Circuit Learning\n", "**Quantum Circuit Learning** (QCL) is an algorithm for applying quantum computers to machine learning [1].\n", "Just like the VQE (Variational Quantum Eigensolver) we have learned in the previous section, it is a **quantum-classical hybrid algorithm**, designed to operate on **NISQ** (Noisy Intermediate-Scale Quantum Computer), a medium-scale quantum computer without error correction function.\n", "\n", "Experiments using actual NISQ devices have already been performed, and in March 2019, a paper on actual implementation of QCL by an IBM experiment team [2] was published in Nature and became a hot topic.\n", "\n", "In the following, the outline of the algorithm and the specific learning procedure are introduced, then an implementation example using the quantum simulator Qulacs is presented.\n", "\n", "This notebook is tranlated from https://dojo.qulacs.org/ja/latest/notebooks/5.1_variational_quantum_eigensolver.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview of QCL\n", "In recent years, deep learning has been spotlighted in the field of machine learning.\n", "In deep learning, by approximating a complex function using a deep neural network, the relationship between input and output can be learned and predictions can be performed on new data. QCL is a machine learning method that replaces this neural network with a **quantum circuit**, and hence a quantum computer. \n", "\n", "By using the quantum circuit, the learning process can be **performed exponentially by using a large number of basis functions** by utilizing the principle of superposition of quantum mechanics, so that the expression capacity of the model is improved. \n", "\n", "Furthermore, it is considered that overfitting can be automatically prevented depending on the condition (unitary property) to be satisfied by the quantum circuit. As a result, higher performance can be expected beyond machine learning in classical computers. (See Reference [1] for details)\n", "\n", "In a neural network, the function is approximated by adjusting the weight parameter *W* of each layer, and the concept is exactly the same in QCL.\n", "\n", "That is, although the quantum circuit used in the QCL includes multiple “rotating gates”, the function is approximated by adjusting the rotating angle $\\theta$ of the rotating gate. The specific procedure is shown below.\n", "\n", "## Learning procedure\n", "1. Prepare training data {($x_i,y_i$)}. ($x_i$ is input data (teacher data), $y_i$ is the correct output data expected to be predicted from $x_i$)\n", "2. Prepare a circuit called $U_\\text{in}(x)$ that is determined by some rule from the input $x$, and create an input state $\\{\\left|\\psi_{\\text{in}}(x_i)\\right>\\}_i=\\{U_{\\text{in}}(x_i)\\left|0\\right>\\}_i$ with the information of $x_i$ embedded.\n", "3. Multiply gate $U(\\theta)$ which depends on parameter $\\theta$ with the input state to obtain the output state $\\{\\left|\\psi_{\\text{out}}(x_i,\\theta)\\right>=U(\\theta)\\left|\\psi_{\\text{in}}(x_i)\\right>\\}_i$.\n", "4. The measurement is done by measuring some observable under the output state. (eg. the $Z$ expection of the first qubit: $\\left=\\left<\\psi_{\\text{out}}\\left|Z_1\\right|\\psi_{\\text{out}}\\right>$)\n", "5. Set F as an appropriate function (sigmoid, softmax or constant function, etc.), and the output $y(x_i,\\theta)$ of the model is F(measurement_i).\n", "6. Calculate the cost function $L(\\theta)$ representing the divergence between the correct data $\\{y_i\\}$ and the output $\\{y(x_i,\\theta)\\}_i$ of the model.\n", "7. Obtain the $\\theta=\\theta^*$ which minimizes the cost function.\n", "8. Then $y(x,\\theta^*)$ is the desired prediction model.\n" ] }, { "attachments": { "image.png": { "image/png": "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vx0mTJgQ9t1337DjjjuG7bbbLuyxxx7hgAMOCEcddVQ48cQTwwUXXBBuvfXW8NxzzwVE326G//znP+GRRx4Jv//978Npp50Wjj766HDggQeG3XffPcnb9ttvP5a/448/Ppx11lnhmmuuCU8++WThvCGew+LOO+8ci5MnT07E626WsVdpKzD3irTXkYAEJCABCUhAAhKQgAQkIAEJSEACEpBAZwQqLzC/8sor4Z577glnnnlm2H///cNaa60V5plnnvD6178+zDDDDA3jLLPMEhZaaKGwySabhEMPPTScd9554cEHHyzdshlhGaH3lFNOCbvuumtYZZVVwjvf+c4w44wzNszbTDPNFN773veG8ePHh6985Svhl7/8ZXj44YdzC81YaJ9zzjlhiy22GIu77LJLuOSSSzprDRU5W4G5IhVhNiQgAQlIQAISkIAEJCABCUhAAhKQgAQk0IJApQVm3F1cfPHFAetfBNnXve51DUXbZmLzG97whrDgggsmFsSXX355ePbZZ1tgaf0zFtFPPPFEOPvss8PnP//58J73vKetvL3pTW8KiyyySNhvv/3CddddF/K4z/jHP/4RDj744JrrzTXXXOGb3/xm64wPwBEKzANQSWZRAhKQgAQkIAEJSEACEpCABCQgAQlIQAKhoi4yEG/xW4xguvzyy4c3vvGNNWJqMzG52W8zzzxzkh7pkn67gfzde++94fDDD0/E4WbCN5bMCNytLK7f+ta3hvXWWy9cdNFF4YUXXmiaNQXmpnj8UQISkIAEJCABCUhAAhKQgAQkIAEJSEACEugRgUpaMLMhHq4j3v3ud08nLCPmzjHHHGHJJZcMa6+9dth8883DtttuG3bYYYewzTbbhM022yxxPfGhD30ovPnNb57ufARoXGzgboPrFA34P8bfMb6f61ktI2K///3vDx//+McT9xU777xz2GuvvcJuu+0Wttpqq7DBBhuEcePGJedm3WggpK+66qrhV7/6VbJJYKO8KTA3IuP3EpCABCQgAQlIQAISkIAEJCABCUhAAhKQQC8JVE5gfvTRR8Nhhx2WiMBpa2SEZQTnddZZJ/GpfO6554a//OUviZuK559/PnEtgfDKRntsBHjqqaeGL33pS2GFFVYIs80223RC83zzzRcOOuigxC9zEeCI0rizwCVFOn+Iwx/84AfDF77whfCDH/wgXHvtteGpp54K+Ggm4Esa1xx33313uPLKK5ONCNdYY43EX3M6HVxmIJxfffXVDX0yKzAXqTGPlYAEJCABCUhAAhKQgAQkIAEJSEACEpCABLpFoFICMwLsxIkTwwc+8IEa8ZZN8ZZddtlwxBFHhD//+c+JWJsHCELsZZddFr74xS+G+eefvyZNRF2+O/bYYwPH5QnPPfdcOP7448Pcc89dk9ass84aVltttURYfuihh/IkFdio7/rrrw/77LNPYvGcFpkRxHfcccdk4796iSkw16PidxKQgAQkIAEJSEACEpCABCQgAQlIQAISkECvCVRGYH711VcT/8PLLbdcjXiLm4vx48cHLJZb+SZuBO/BBx8MEyZMSCyM00Iuf+Pj+ZJLLmloLRzTxAKZDQexiE6ngRiMVfWll146Zq0cz8nzicU1ltRZi2isoX/0ox8FuGSDAnOWiP9LQAISkIAEJCABCUhAAhKQgAQkIAEJSEAC/SBQGYH5gQceCLvsskvNhn5sjrfKKqskwm50NdEupMceeywRmfG/nBaIsT7GfzOuOZoFNgXEqji94SAb92G5fPnll9cVgpull/7tzjvvDNttt10gLzFvpL3FFlvUtWJWYE7T828JSEACEpCABCQgAQlIQAISkIAEJCABCUigXwQqITBjHXz66aeHBRZYYExgRWhlo76TTjqp6YZ3RcDdc889iUicFnK5zmKLLRZ+/vOfN0zqtddeS37HqjgKwHziyuPEE0/sOH9sHHjhhRcmGxem019qqaXCeeedN12+FJinQ+IXEpCABCQgAQlIQAISkIAEJCABCUhAAhKQQB8IVEJgxk3ErrvuGmacccYxARfXGDvvvHOyiV9ZXBBysTZeccUVx66DoIvgvPfee4d//vOfdS/1xBNPJL9jVRwFYPxCb7vtti0tn+smWOdL3HjstNNONQzmmGOOxO909nAF5iwR/5eABCQgAQlIQAISkIAEJCABCUhAAhKQgAT6QaASAjOiL5v4RfGWT6yKzzrrrNKZsJHgoYceGmaZZZaa633yk59MNt2rd8Hf/OY3YaWVVqo5Huvlk08+ud7hbX2HFfekSZPCuHHjwkc+8pEkwuS4446bzv2GAnNbiD1JAhKQgAQkIAEJSEACEpCABCQgAQlIQAISKJlA3wXml156KZxwwgmBzfKiwPy6170ubL755gGr3m6EX/3qV2HxxRcfux7XXXDBBcOpp5463eWwesZNx9vf/vaa49ddd91w2223TXd8J188/vjj4Yorrgjnn3/+WLzlllsC4nM6KDCnafi3BCQgAQlIQAISkIAEJCABCUhAAhKQgAQk0C8CfReYo3uMKC7z+ba3vS187WtfC/g+7ka4++67w1ZbbVUjGHPNww47LEybNq3mkoi5hxxySI3rCjb623PPPTv2vVxzoQL/KDAXgOWhEpCABCQgAQlIQAISkIAEJCABCUhAAhKQQNcI9F1gvvHGGwPWwGmBmc39fvKTn3St0PhaRsDGUjpel7932GGH6fwwT548eTox+l3velc49thju5a/VgkrMLci5O8SkIAEJCABCUhAAhKQgAQkIAEJSEACEpBALwj0XWC+6KKLwpJLLjkm9CL4rrzyygG/x90KWCnj9mL22Wevue6mm24aHnjggZrLXnvttQH/zFGI5nPRRRdN/CXXHNjDfxSYewjbS0lAAhKQgAQkIAEJSEACEpCABCQgAQlIQAINCfRdYD7jjDPCPPPMUyPgrrfeeuH2229vmOkyfjj77LPDAgss0PK69Tb4QwC/8sory8hGW2koMLeFzZMkIAEJSEACEpCABCQgAQlIQAISkIAEJCCBkgn0XWA+5ZRTprMk3myzzbq2wV/kd+GFF4bFFlusRmDGUvmGG26IhySfF198cVhqqaVqjhs/fny47rrrao7r5T8KzL2k7bUkIAEJSEACEpCABCQgAQlIQAISkIAEJCCBRgT6LjB///vfDzPNNFONgLvllluGJ598slGeS/n+sssuC8sss0zNdVdfffXwhz/8oSb9888/Pyy00EI1x33qU58Kf/7zn2uO6+U/Csy9pO21JCABCUhAAhKQgAQkIAEJSEACEpCABCQggUYE+i4wT5w4sWazPXwcb7vttuG5555rlOdSvr/00kvD0ksvXSMcf/zjHw/XXHNNTfq/+MUvwoc//OGa49Zff/1wxx131BzXy38UmHtJ22tJQAISkIAEJCABCUhAAhKQgAQkIAEJSEACjQj0XWD+3ve+F970pjfVCLjbbLNNmDJlSqM8l/L9L3/5y7DwwgvXXHfttdcOt9xyS036l1xyyXQuMtZaa61w88031xzXy38UmHtJ22tJQAISkIAEJCABCUhAAhKQgAQkIAEJSEACjQj0XWCu54P5c5/7XHjsscca5bmU7ydNmhTmm2++GoF5ww03DHfffXdN+mzyN27cuJrj+P/Xv/51zXG9/EeBuZe0vZYEJCABCUhAAhKQgAQkIAEJSEACEpCABCTQiEDfBebTTz89zD333DUCLkLv5MmTG+W54+9fe+21gO/n2Wabrea6n//858NTTz1Vkz4uM9ZYY42a49gc8Oc//3nNcb38R4G5l7S9lgQkIAEJSEACEpCABCQgAQlIQAISkIAEJNCIQN8FZlxVLLLIIjUCLr6Q//jHPzbKc8ffI9AecsghNdfETcc+++wTXnnllZr02cxvo402qjn2ve99byJQ1xxYwj//+c9/wuOPPx7uuuuusfjQQw+Ff//73zWpKzDX4PAfCUhAAhKQgAQkIAEJSEACEpCABCQgAQlIoE8E+i4w17MQRnA+44wzuobknnvuCVtvvXWNaPzud787HH/88dNd8+GHHw4777xzzbGzzz57OPzww6c7ttMv7rvvvnDssceGLbfcciwed9xxAZE5HRSY0zT8WwISkIAEJCABCUhAAhKQgAQkIAEJSEACEugXgb4LzA888ED44he/WCPgzjHHHGHChAnh1Vdf7QqXyy+/PCy33HI111xmmWXCBRdcMN31XnzxxXDMMceEmWaaaez4N7zhDWGXXXYJzz///HTHd/LFRRddFJZYYomx68w444wBtx1PPPFETbIKzDU4/EcCEpCABCQgAQlIQAISkIAEJCABCUhAAhLoE4G+C8wvvPBCOPLII8Mb3/jGMWH1da97XfjMZz4T7r///rawkOaUKVMCLieygd+++c1vhre85S1j13v9618f2FjwwQcfzB6e/I+/5fnnn3/s+BlmmCGsuuqq4aqrrqp7fDtfkteJEyfW5Outb31r4soDn9HpoMCcpuHfEpCABCQgAQlIQAISkIAEJCABCUhAAhKQQL8I9F1gpuDnnntuWHDBBWsE3IUXXjj87Gc/C9OmTSvE5uWXXw5XXnll4sLikksuCf/85z9rzr/11lvDpptuWnMt3GPgiiIr5MYTceMxfvz4mnPmnHPOcPDBB4d//etf8bCOPnGPsd1229VcY6GFFkoYZBNWYM4S8X8JSEACEpCABCQgAQlIQAISkIAEJCABCUigHwQqITDffffdYauttqoRV2eeeebET3IRK+apU6eGG2+8MRGQZ5tttjBu3Lhw8sknh8ce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tRoxP90koMDcTbqmLQEJdJuAAnO3CZu+BCQgAQlIQAISkIAE+k9Agbn/dWAOChJQYC4IzMMHmoAC80BXn5mXwMgTUGAe+SYgAAlIQAISkIAEJCCBESCgwDwClTxsRVRgHrYatTzNCKQF5oUXXjiceuqpgXsgxueffz7E+M9//jNk4z/+8Y+Qjn//+99DNj733HOBePHFF4eVV145zDDDDGGFFVYIl112WbOs+ZsEJCCBlgTSAvPrX//68KlPfSr87Gc/G4s//elPQzaedtppIcaf/OQnIR3pA7Pxxz/+cUjHU045JWTjySefHGI86aSTQjb+6Ec/Cul44YUXhscff7xl+Qb5gFdffTU8+uij4b777gsvvfTSIBelYd6nTZuWPPNuvvnmcP3114dnn3224bH+kJ/Aww8/HH7/+9+HyZMnB+7xMsNrr70WnnrqqXDvvfcmdVdm2qY1OAS4d6dMmRJuuOGGcOONNybvsoOT+9qc8p5+2223heuuuy488cQTtT/2+L8HHngg/Pa3v036/ZdffrnHVy/vcrSPJ598Mtx9993hhRdeKC/hiqbEuO+OO+4I1157bfLcrmg2ByZbr7zySrjzzjuT59hjjz0WeB8qM/BOxb1GbCftp59+Oukv/vKXvwxc36fAXGZLGvC0/vOf/yQvczx00vE3v/lNSMcrr7wypOOvf/3rkI5XXHFFyMbLL788pCPCVTZeeumlIcZLLrkkZCPiF/Hcc88NW2yxRSKCzTTTTGH//fcfcPJmXwKNCaQF5ne9611hs802C4cffngSJ0yYEGI87LDDQoxf+9rXQjoeeuihgXjIIYeMxYMPPjik40EHHRS22mqrMP/88yswN64Of5GABAoSSAvMTF7NOuus4Z3vfGdNfMc73hFinHPOOQPx7W9/e02cY445Qoyzzz57iPFtb3tbiPGtb31riPEtb3lLiHG22WYLMb75zW8OMZKXdJxlllkCceaZZw7jx48PV111VcHSDtbhjzzySDj22GPDdtttlwj+wySoT506NRFyeK/kmbnBBhuEz372s8n76mDVUvVyiyjFhM7HPvaxsPXWW4fvfOc74U9/+lMywd1pbhmUc9/tt99+YbfddkvGDp2m6fmDRYAJBia+mOTj3XWdddYJX/jCFxKxZZBKggD6t7/9LRlDH3300cn7+6c//elwzjnn9K0YiJTf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f/+78yODxDB+8cUXziIDsTAiBvvxr3/9q/Pj559/7vz42WefuTB++umnzo/vvfeeO+CAA9zXvvY1953vfCf6uU6clVYRSEPAF5hnn312d+ihh7pJkya5hx9+uC0+9NBDzo8PPvig8+MDDzzgwjhx4kRn8f7773ennnqqW3DBBaN3a/HFF3f33HNPmqTqXBEQARGYjIAvMH/96193P//5zx0is8XtttvO+XH06NGOuO2227bFbbbZxhG33nrrtjhq1ChncauttnLELbfcsi1uscUWzuLmm2/uLG622WbO4qabbuosbrLJJu6www6LxOjJMqQ/iIAIiIAIiIAIiIAIiIAITEZAAvNkSIb3D4jDCFInnniiO+GEE1rx+OOPdxaPO+44Z/HYY491Fo855hhn8eijj3Z+POqooxzxyCOPbMUjjjjC+fHwww93FhnUWURMszhu3DhH3H///d1yyy0ngXl4q+pQ5dwXmL/3ve+5eeed1y277LJRXGaZZRxx6aWXbotLLbWUs7jkkks6i0sssYSziIBsceTIkY4433zzuWmmmUYC81DVMGVWBIol4AvMTAzXJdLOMmmnIAIiIAIiIAIiIAIiIAIi0JuABObejIbmjL/85S9u7733rs3gTxbMQ1M1hzqjvsBcpjAjC+ahrnbKvAjkRiAUmKeeemo366yztsWf/OQnLoyzzTab8yMrOCzOMcccLoxzzjmn8+Ncc83lwjj33HM7i/PMM48L409/+lNnESvop556KjcOupEIiIAIiIAIiIAIiIAINJmABOYml27KvCEwjx071n3jG9+YLH7zm990fvzWt77lwvjtb3/bWcR1RRinmGIK58cpp5zShfG73/2us4i1Zhinmmqq6G88RwJzygLW6bUk4AvMvBsIImaRbEezVrZjaNFsls52NAto/8iqgIUWWshNO+20smCuZU1RokWgmgR8gRkXGSuttJI7++yz3TnnnNMWzz33XGfxvPPOc8Tzzz+/LV5wwQXO4oUXXugsXnTRRc7ixRdf7CxecsklzuKll17qLF522WXO4uWXX+78eMUVVzjivffe6+gXKYiACIiACIiACIiACIiACPQmIIG5N6OhOQPfyOPHj3d77LFHFPfcc0/nx7322ssRsXK2iCDtx3322ccR991337a43377OYu4uLCIL2WLBx54oLN40EEHOYsHH3yw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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "![QCL.png](img/QCL.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(In the QCL, input data $x$ is first converted to a quantum state using $U_{\\text{in}}(x)$, and an output $y$ is obtained there from using a variational quantum circuit $U(\\theta)$ and measurement (In the figure, the output is $\\left$.) Source: Revised Figure 1 in reference [1].)\n", "\n", "## Implementation using quantum simulator Qulacs \n", "In the following, a fitting of sin function $y=sin(\\pi x)$ is performed as a demonstration of approximating function." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from functools import reduce" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "######## Parameter #############\n", "nqubit = 3 ## number of qubit\n", "c_depth = 3 ## depth of circuit\n", "time_step = 0.77 ## elapsed time of time evolution with random Hamiltonian\n", "\n", "## randomly take num_x_train points from [x_min, x_max] as teacher data.\n", "x_min = - 1.; x_max = 1.;\n", "num_x_train = 50\n", "\n", "## one variable function to learn\n", "func_to_learn = lambda x: np.sin(x*np.pi)\n", "\n", "## seed of random number\n", "random_seed = 0\n", "## initialization of random number generator\n", "np.random.seed(random_seed)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Prepare training data" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#### Prepare teacher data\n", "x_train = x_min + (x_max - x_min) * np.random.rand(num_x_train)\n", "y_train = func_to_learn(x_train)\n", "\n", "# Add noise to pure sine function assuming real data used\n", "mag_noise = 0.05\n", "y_train = y_train + mag_noise * np.random.randn(num_x_train)\n", "\n", "plt.plot(x_train, y_train, \"o\"); plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Construct the input state\n", "Firstly, create a gate $U_{\\text{in}}(x_i)$ for embedding the input value $x_i$ in the initial state $\\left|00...0\\right>$.\n", "According to reference [1], define $U_{\\text{in}}(x_i)=\\prod_jR^Z_j(\\text{cos}^{-1}x^2)R^Y_j(\\text{sin}^{-1}x)$ using rotation gates $R^Y_j(\\theta)=e^{i\\theta Y_j/2}, R^Z_j(\\theta)=e^{i\\theta Z_j/2}$.\n", "The input $x_i$ is converted into quantum state $\\left|\\psi_\\text{in}(x_i)\\right>=U_{\\text{in}}(x_i)\\left|00...0\\right>$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: qulacs in /anaconda3/envs/VibSpec/lib/python3.7/site-packages (0.1.9)\r\n" ] } ], "source": [ "## When using Google Colaboratory・please run in a local environment where Qulacs is not installed.\n", "!pip install qulacs" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]\n" ] } ], "source": [ "# Create intial state\n", "from qulacs import QuantumState, QuantumCircuit\n", "\n", "state = QuantumState(nqubit) # Initial state |000>\n", "state.set_zero_state()\n", "print(state.get_vector())" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# Function that creats a gate encoding x\n", "def U_in(x):\n", " U = QuantumCircuit(nqubit)\n", "\n", " angle_y = np.arcsin(x)\n", " angle_z = np.arccos(x**2)\n", "\n", " for i in range(nqubit):\n", " U.add_RY_gate(i, angle_y)\n", " U.add_RZ_gate(i, angle_z)\n", "\n", " return U" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-6.93804351e-01+7.14937415e-01j -3.54871219e-02-3.51340074e-02j\n", " -3.54871219e-02-3.51340074e-02j 1.77881430e-03-1.76111422e-03j\n", " -3.54871219e-02-3.51340074e-02j 1.77881430e-03-1.76111422e-03j\n", " 1.77881430e-03-1.76111422e-03j 8.73809020e-05+9.00424970e-05j]\n" ] } ], "source": [ "# Test initial state\n", "x = 0.1 # appropriate value\n", "U_in(x).update_quantum_state(state) # calculation of U_in|000>\n", "print(state.get_vector())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Construct variational quantum circuit $U(\\theta)$\n", "Next, a variational quantum circuit $U(\\theta)$ to be optimized is created. The procedure is the following three steps:\n", "1. Create a transverse magnetic field Ising Hamiltonian.\n", "2. Create rotation gates.\n", "3. Combine step1 and step2's gates alternatively to make a large variational quantum circuit $U(\\theta)$.\n", "\n", "#### 1.Create a transverse magnetic field Ising Hamiltonian\n", "The expressiveness of the model is enhanced by increasing the complexity (entanglement) of the quantum circuit after performing time evolution based on the transverse magnetic field Ising model learned in section 4-2. (This part can be skipped unless you want to know the details.)\n", "\n", "The Hamiltonian of transverse magnetic file Ising model is shown below, time evolution operator is defined as $U_{\\text{rand}}=e^{-iHt}$:\n", "\n", "\\begin{equation}\n", "H=\\sum_{j=1}^N a_jX_j+\\sum_{j=1}^N\\sum_{k=1}^{j-1}J_{jk}Z_jZ_k\n", "\\end{equation}\n", "\n", "Coefficient $a$ and $J$ is a uniform distribution of $[-1,1]$." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "## Basic gate\n", "from qulacs.gate import X, Z\n", "I_mat = np.eye(2, dtype=complex)\n", "X_mat = X(0).get_matrix()\n", "Z_mat = Z(0).get_matrix()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "## Function that creates fullsize gate.\n", "def make_fullgate(list_SiteAndOperator, nqubit):\n", " '''\n", " Take list_SiteAndOperator = [ [i_0, O_0], [i_1, O_1], ...],\n", " Insert Identity into unrelated qubit\n", " make (2**nqubit, 2**nqubit) matrix:\n", " I(0) * ... * O_0(i_0) * ... * O_1(i_1) ...\n", " '''\n", " list_Site = [SiteAndOperator[0] for SiteAndOperator in list_SiteAndOperator]\n", " list_SingleGates = [] ## Arrange 1-qubit gates and reduce with np.kron\n", " cnt = 0\n", " for i in range(nqubit):\n", " if (i in list_Site):\n", " list_SingleGates.append( list_SiteAndOperator[cnt][1] )\n", " cnt += 1\n", " else: ## an empty site is identity\n", " list_SingleGates.append(I_mat)\n", "\n", " return reduce(np.kron, list_SingleGates)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "#### Create time evolution operator by making random magnetic field and random coupling Ising Hamiltonian\n", "ham = np.zeros((2**nqubit,2**nqubit), dtype = complex)\n", "for i in range(nqubit): ## i runs 0 to nqubit-1\n", " Jx = -1. + 2.*np.random.rand() ## random number in -1~1\n", " ham += Jx * make_fullgate( [ [i, X_mat] ], nqubit)\n", " for j in range(i+1, nqubit):\n", " J_ij = -1. + 2.*np.random.rand()\n", " ham += J_ij * make_fullgate ([ [i, Z_mat], [j, Z_mat]], nqubit)\n", "\n", "## Create a time evolution operator by diagonalization. H*P = P*D <-> H = P*D*P^dagger\n", "diag, eigen_vecs = np.linalg.eigh(ham)\n", "time_evol_op = np.dot(np.dot(eigen_vecs, np.diag(np.exp(-1j*time_step*diag))), eigen_vecs.T.conj()) # e^-iHT" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(8, 8)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "time_evol_op.shape" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# Convert to qulacs gate\n", "from qulacs.gate import DenseMatrix\n", "time_evol_gate = DenseMatrix([i for i in range(nqubit)], time_evol_op)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.Create rotation gates, 3.Create $U(\\theta)$\n", "Combine the time evolution operator $U_{\\text{rand}}$ accroding to random transverse magnetic field Ising model and the operator of rotation gates operating on $j(=1,2,\\dots n)$th qubit\n", "\n", "\\begin{equation}\n", "U_\\text{rot}(\\theta_j^{(i)})=R_j^X(\\theta_{j1}^{(i)})R_j^Z(\\theta_{j2}^{(i)})R_j^X(\\theta_{j3}^{(i)})\n", "\\end{equation}\n", "\n", "to create variational quantum circuit $U(\\theta)$:\n", "\n", "\\begin{equation}\n", "U\\Big(\\{\\theta_j^{(i)}\\}_{i,j}\\Big)= \\prod_{i=1}^d\\bigg(\\bigg(\\prod_{j=1}^nU_\\text{rot}(\\theta_j^{(i)})\\bigg)\\cdot U_\\text{rand} \\bigg)\n", "\\end{equation}\n", "\n", "Here $i$ is a suffix representing the layer of the quantum circuit, and $U_\\text{rand}$ and the above rotation are repeated in $d$ layers in total. There are $3\\times n \\times d$ parameters. The intial value of each $\\theta$ is a uniform distribution of $[0,2\\pi]$." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "from qulacs import ParametricQuantumCircuit" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# Assemble output gate U_out & set initial parameter values\n", "U_out = ParametricQuantumCircuit(nqubit)\n", "for d in range(c_depth):\n", " U_out.add_gate(time_evol_gate)\n", " for i in range(nqubit):\n", " angle = 2.0 * np.pi * np.random.rand()\n", " U_out.add_parametric_RX_gate(i,angle)\n", " angle = 2.0 * np.pi * np.random.rand()\n", " U_out.add_parametric_RZ_gate(i,angle)\n", " angle = 2.0 * np.pi * np.random.rand()\n", " U_out.add_parametric_RX_gate(i,angle)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "# Get the list of initial values of the parameter theta\n", "parameter_count = U_out.get_parameter_count()\n", "theta_init = [U_out.get_parameter(ind) for ind in range(parameter_count)]" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[6.007250646127814,\n", " 4.046309757767312,\n", " 2.663159813474645,\n", " 3.810080933381979,\n", " 0.12059442161498848,\n", " 1.8948504571449056,\n", " 4.14799267096281,\n", " 1.8226113595664735,\n", " 3.88310546309581,\n", " 2.6940332019609157,\n", " 0.851208649826403,\n", " 1.8741631278382846,\n", " 3.5811951525261123,\n", " 3.7125630518871535,\n", " 3.6085919651139333,\n", " 4.104181793964002,\n", " 4.097285684838374,\n", " 2.71068197476515,\n", " 5.633168398253273,\n", " 2.309459341364396,\n", " 2.738620094343915,\n", " 5.6041197193647925,\n", " 5.065466226710866,\n", " 4.4226624059922806,\n", " 0.6297441057449945,\n", " 5.777279648887616,\n", " 4.487710439107831]" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta_init" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For convenience, a function for updating parameter $\\theta$ in $U(\\theta)$ is created." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# Function that updates parameter theta\n", "def set_U_out(theta):\n", " global U_out\n", "\n", " parameter_count = U_out.get_parameter_count()\n", "\n", " for i in range(parameter_count):\n", " U_out.set_parameter(i, theta[i])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Measurement\n", "In this demonstration, the output of the model is the expectation value of 0th qubit's Pauli Z on output state $\\left|\\psi_\\text{out}\\right>$, that is:\n", "\n", "\\begin{equation}\n", "y(\\theta,x_i)=\\left=\\left<\\psi_\\text{out}|Z_0|\\psi_\\text{out}\\right>\n", "\\end{equation}" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Create observable Z_0\n", "from qulacs import Observable\n", "obs = Observable(nqubit)\n", "obs.add_operator(2.,'Z 0') \n", "# Set observable as 2*Z。\n", "# The reason for multiplying by 2 here is to expand the value range of the final .\n", "# In order to cope with any unknown function, this constant also needs to be optimized as one parameter." ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.9899748742132415" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "obs.get_expectation_value(state)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Combine a series of procedures into one function\n", "The procedures up to this point can be combined to define a function that returns the predicted value $y(x_i,\\theta)$ of the model from the input $x_i$." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "# Function that gives prediction value y(x_i, theta) of the model from input x_i\n", "def qcl_pred(x, U_out):\n", " state = QuantumState(nqubit)\n", " state.set_zero_state()\n", "\n", " # Calculate input state\n", " U_in(x).update_quantum_state(state)\n", "\n", " # Calculate output state\n", " U_out.update_quantum_state(state)\n", "\n", " # Output of the model\n", " res = obs.get_expectation_value(state)\n", "\n", " return res" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Calculation of cost function\n", "The cost function $L(\\theta)$ is a mean square error (MSE) between the teacher data and the prediction data." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "# Calculate cost function L\n", "def cost_func(theta):\n", " '''\n", " theta: ndarray of length c_depth * nqubit * 3\n", " '''\n", " # update the parameter theta of U_out\n", " # global U_out\n", " set_U_out(theta)\n", "\n", " # calculate basing on data of num_x_train in total\n", " y_pred = [qcl_pred(x, U_out) for x in x_train]\n", "\n", " # quadratic loss\n", " L = ((y_pred - y_train)**2).mean()\n", "\n", " return L" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1.38892593161935" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Value of cost function with initial parameter theta\n", "cost_func(theta_init)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAD4CAYAAADvsV2wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXxU9b3/8ddnJitJgISENYQd2RSEsKiodV+uglq14oYLxVqXWm9/vda2127+2t72arVutYqi3orU5Yp7EdwXNCD7lgAiO0mAsASyfu8fM9gpZoNZziTzfj4e88jMOWfmvDkZ3nNyzplzzDmHiIi0fT6vA4iISGyo8EVEEoQKX0QkQajwRUQShApfRCRBJHkdoCm5ubmud+/eXscQEWk15s+fX+acy2toXFwXfu/evSkqKvI6hohIq2Fm6xsbp006IiIJQoUvIpIgVPgiIglChS8ikiBU+CIiCUKFLyKSIFT4IiIJIq6Pw/falor9LN+8mx37qtlVWcOBmjryslLp0iGNntnp9MvLxMy8jiki0iIq/BDOOeat28GrizfzcUk5a8v2NTl9XlYqJw7I5eSBeZw1tCtpyf4YJRUROXwqfKCmrp7XFm/hsQ/XsnTTbtql+BnbJ4fLxxZwbEE2eZmpZGckk5LkY/vuKrbtPsCa0r18WFLOOyu38+KCTeRkpHD5mAKuOq4XXdqnef1PEhH5BovnK14VFha6aJ9a4YPiUu56eRlry/bRLy+DKSf25cJje7R4bb2u3jFvXTlPfvQls1dsw2/GVcf14rbTBtKhXXJUs4uIHMrM5jvnChsa1ybX8D9eU0b/vEw6N7GmvbXiAL9+dTmvLdlC707t+OvVhZw2qDM+3+Ftk/f7jOP75XJ8v1w27KjkoXfX8OTHX/Lyws3cfsZAJo0pwH+YrykiEg1tbg1/V2U1J/xuLsfkd+SZKWMbLNtZizbzs5eWUFVbz02n9GfqSX0juv192eYKfvXKcuat28HYPjnc850R9OiYHrHXFxFpTFNr+G3usMyO7VK4a8JQPllbzp/nFv/LuN0Havjhcwu59dkv6Nc5k7duO4lbTxsQ8Z2tQ7t3YMbUcfzxkuEs27ybs//0Pi8v3BTReYiIHK6IFL6ZTTOz7Wa2tJHxZmb3m1mJmS02s5GRmG9jLhmVz0Uje3DfnGI+LinDOcdby7Zy1r3vM2vRZm47fQB/v+E4eudmRC2DmXHxqHze+MGJDOySxQ9mLOSOFxZTXVsftXmKiDQlIpt0zOwkYC/wlHNuWAPjzwVuAc4FxgL3OefGNve64ey03VdVy4QHPqRify3D8zswZ+V2BnXN4rcXHc2xBdlH9JpHqraunntmr+ahd9cwunc2D185itzM1JhmEJHEEPVNOs6594EdTUwykcCHgXPOfQp0NLNukZh3YzJSk3joilHsrarh4zXl/PTcwbxyy/iYlz1Akt/Hj88exP2TjmXxxgomPvARK7bsjnkOEUlssTpKpwewIeTxxuCwLYdOaGZTgakABQUFYc30qK5ZvHrLeDJTk+nawftj4ycM706fThl896kiLv3LJzw+eTRj+uR4HUtEEkTc7bR1zj3qnCt0zhXm5TV4WcbD0r9zVlyU/UFH53fghe8fT15WKlc9Po85K7Z5HUlEEkSsCn8T0DPkcX5wWELq0TGdv99wHEd1zWLq0/P53y8SdlGISAzFqvBnAVcHj9YZB1Q4576xOSeRdMpM5W/fHceY3jncPnOhSl9Eoi4i2/DN7FngW0CumW0E7gKSAZxzjwCvEzhCpwSoBK6NxHxbu8zUJKZdM5rrnvyc22cuxAwmjujhdSwRaaMiUvjOuUnNjHfATZGYV1uTnuLn8WsKue7Jz/nhcwsBlb6IREfc7bRNRO1SAmv6o3vncPvMRdqRKyJRocKPE+1SknhsciFDurXn+/+zgHlry72OJCJtjAo/jmSlJfPktaPJz05nyvQilm6q8DqSiLQhKvw40ykzlaevH0v79GSueeIzviqv9DqSiLQRKvw41L1jOtOvG0NNneOaJz5j575qryOJSBugwo9T/Ttn8tjkQjbu2s+Up4o4UFPndSQRaeVU+HFsdO8c7vvOCBZ8tZMfPreQ+vr4vViNiMQ/FX6cO+fobvz03MG8sXQrf/jHKq/jiEgr1iavadvWXD++D2vL9vHwu2vok5vBpYU9m3+SiMghVPitgJnxywlD2bCjkp++tISCnHaM69vJ61gi0spok04rkez38cDlI+nVKYPvPTOf9eX7vI4kIq2MCr8V6ZCezOOTA1cumzK9iD0HajxOJCKtiQq/lenVKYOHLh/J2rJ93DZjIXU6ckdEWkiF3wod3z+Xu84fwpyV2/nDWzpyR0RaRjttW6mrxvVi5dY9PPLeGgZ3y9IplUWkWVrDb6XMjF+cP5TRvbP5jxcW60RrItIsFX4rlpLk46ErRpHdLoUbnp5P+d4qryOJSBxT4bdyeVmp/OWqUZTureKmvy2gpq7e60giEqdU+G3AMfkd+d1FR/Pp2h389vWVXscRkTilnbZtxEUj81myqYJpH63j6Pz2XHhsvteRRCTOaA2/Dbnz3MGM7ZPDHS8s0U5cEfkGFX4bkuz38eAVI8nJCOzE3aELp4hICBV+G5Ob+c+duLc++4W+iSsiX1Pht0HH5HfkNxcM48OSMn0TV0S+psJvoy4t7MmV4wp45L01vL5ki9dxRCQOqPDbsP88bygjCzryo78vYvW2PV7HERGPqfDbsJQkHw9fOYqM1CRueHo+Fft1OmWRRKbCb+O6tE/j4StGsmFHJbfrQugiCU2FnwAKe+d8fTrl++YUex1HRDwSkcI3s7PNbJWZlZjZHQ2Mv8bMSs1sYfA2JRLzlZa7clwvLh6Vz31zipm9fJvXcUTEA2EXvpn5gQeBc4AhwCQzG9LApM8550YEb4+FO185PGbGby4YxjH5Hfjhcwsp2b7X60giEmORWMMfA5Q459Y656qBGcDECLyuRFhasp9HrhxFapKPG57WNXFFEk0kCr8HsCHk8cbgsEN928wWm9nzZtazsRczs6lmVmRmRaWlpRGIJ6G6d0zngctH8mV5JT98bpF24ookkFjttH0F6O2cOwaYDUxvbELn3KPOuULnXGFeXl6M4iWW4/p14mf/Npi3V2zTTlyRBBKJwt8EhK6x5weHfc05V+6cO3g5pseAURGYr4ThmuN78+2RgZ24by7d6nUcEYmBSBT+58AAM+tjZinAZcCs0AnMrFvIwwnAigjMV8JgZtx94TCG53fg32cu1DdxRRJA2IXvnKsFbgbeIlDkM51zy8zsV2Y2ITjZrWa2zMwWAbcC14Q7XwlfWrKfR64aRXpKEt99qohdlTqdskhbZs7F7067wsJCV1RU5HWMNm/++h1c9uinjO3TiSevHU2SX9/HE2mtzGy+c66woXH6ny2M6pXD3RcczYclZfzmNW1tE2mrdE1bAeDS0T1ZuXUP0z5ax6CuWVw2psDrSCISYVrDl6/dee4gThyQy89fXspn63Z4HUdEIkyFL19L8vt4YNJIema344ani/iqvNLrSCISQSp8+Rcd2iXz+DWjqXdw/fTP2a3TL4i0GSp8+YY+uRk8fOVI1pXt45a/fUFtXb3XkUQkAlT40qDj++Xy6wuG8d7qUn716nLi+fBdEWkZHaUjjZo0poC1pXv56wfr6NUpg+vH9/E6koiEQYUvTfrJOYPZsGM/v3ltOfnZ6Zw1tKvXkUTkCGmTjjTJ5zPu/c4IjsnvyA9mfMGiDbu8jiQiR0iFL81KT/Hz2NWF5Gamcv30z1lfvs/rSCJyBFT40iJ5WalMv24MtfWOydM+o3xvVfNPEpG4osKXFuuXl8njkwvZUnGA66YXUVld63UkETkMKnw5LKN65XD/pGNZsnEXN//tC2p0jL5Iq6HCl8N21tCu/PqCYcxduZ0fP79Y18UVaSV0WKYckSvG9mLH3mr+e/Zqstul8PPzBmNmXscSkSao8OWI3Xxqf8r3VTPto3XkZCRz86kDvI4kIk1Q4csRMzP+87whVOyv4Y//WE1GahLXnqBv44rEKxW+hMXnM/5w8TFUVtfyy1eW0y7Fz3dG6+IpIvFIO20lbEl+H/dPOpaTB+Zxx4tLeHnhJq8jiUgDVPgSEalJfh65chRj++Rw+8xFvLp4s9eRROQQKnyJmPQUP49PHs2ogmx+MGMhry3e4nUkEQmhwpeIykhN4olrRzOyoCO3zvhCpS8SR1T4EnGB0h/DsT0Dpa9t+iLxQYUvUZGZmsT068Ywunc2tz23kOc+/8rrSCIJT4UvUZORmsQT14zhxAF5/McLS3jyo3VeRxJJaCp8iar0FD9/vXoUZw7pwi9eWc59bxfr+rgiHlHhS9SlJvl58IqRfHtkPve+vZq7Zi3TCddEPBCRwjezs81slZmVmNkdDYxPNbPnguPnmVnvSMxXWo9kv48/XnIMU0/qy1OfrOfWGV9QVVvndSyRhBJ24ZuZH3gQOAcYAkwysyGHTHY9sNM51x+4F/h9uPOV1sfMuPPcwfzknEG8ungLVz3+Gbsqq72OJZIwIrGGPwYocc6tdc5VAzOAiYdMMxGYHrz/PHCa6Vy6CeuGk/tx32UjWPjVLr798Mds2FHpdSSRhBCJwu8BbAh5vDE4rMFpnHO1QAXQKQLzllZq4ogePDNlLGV7q7nwoY+Yv36H15FE2ry422lrZlPNrMjMikpLS72OI1E0pk8OL37/eDJTk5j06DxmFm1o/kkicsQiUfibgJ4hj/ODwxqcxsySgA5AeUMv5px71DlX6JwrzMvLi0A8iWf98jJ5+abxjOmTw4+fX8yvX11Ora6TKxIVkSj8z4EBZtbHzFKAy4BZh0wzC5gcvH8xMNfpYGwJ6tAumSevHc21J/Tm8Q/XceXj89i+54DXsUTanLALP7hN/mbgLWAFMNM5t8zMfmVmE4KTPQ50MrMS4HbgG4duSmJL8vu46/yh3HPpcBZu2MV593/I519qu75IJFk8r2gXFha6oqIir2NIjK3Yspsbn5nPxp37+fczj+KGk/ri8+mgLpGWMLP5zrnChsbF3U5bkcHd2jPrlvGcObQLv39zJVdP+4ztu7WJRyRcKnyJS+3Tknnw8pH89qKjKVq/g3Pu+4DZy7d5HUukVVPhS9wyMyaNKeCVm8fTuX0a332qiB/9fRG7D9R4HU2kVVLhS9wb0CWLl286gZtP6c+LCzZy1r3v886q7V7HEml1VPjSKqQk+fjRWUfxwo3H0y7Fz7VPfM6tz35B6Z4qr6OJtBoqfGlVji3I5vUfnMhtpw/gzaVbOf2e9/jbvK+o0+mWRZqlwpdWJzXJz22nD+T1H5zIoK5Z3PnSEi54UOfjEWmOCl9arf6dM5kxdRz3TzqW0j1VfPvhT7j12S909k2RRiR5HUAkHGbGhOHdOW1QZx5+dw2PfbiWN5Zu4cpxvbjl1AHkZKR4HVEkbuibttKmbK04wJ/eXs3Mog2kJfu5+rjefPfEPnTKTPU6mkhMNPVNWxW+tEkl2/dy/5xiXlm8mfRkP1eMLeC68X3o1iHd62giUaXCl4RVsn0Pf55bwiuLNuMLbv6ZcmJfhnRv73U0kahQ4UvC27Cjksc/XMfMog1UVtdR2Cubq47rxdnDupKa5Pc6nkjEqPBFgioqa/j7/A088+l6viyvJCcjhQnDu3PxqHyGdm+PLrUsrZ0KX+QQ9fWOD0rKmPn5BmYv30Z1XT1Hdcni/OHd+LdjutMnN8PriCJHRIUv0oRdldW8smgzLy/cTNH6nUDgFM1nDO7MqYO7cEyPDjofv7QaKnyRFtpSsZ/Xl2zlzaVbmL9+J/UOcjNTOaF/J07on8sJ/XPp0VFH+kj8UuGLHIGd+6p5b3Up76zazkclZZTtrQage4c0RvXOobBXNsfkd2Bwt/akJWvHr8QHFb5ImJxzrN62l4/XlFG0fidFX+5g2+7AmTr9PmNA50wGdc1iQJcsBnbJom9eBj2z25GSpLOXSGyp8EUizDnH5ooDLNlYwdJNFSzZVEHxtj1srvjnpRh9Bt07ppOfnU73Dul075hO5/ap5GWmkpuVSna7FDqkJ9MhPTlmHwzOOapq66mpq6emzlFTV091bT219Y7aunrqnKOu3hFaCz4z/D4j2W8k+32kJvtol5JEerIfv/ZtxJ2mCl/n0hE5AmZGj47p9OiYztnDun49fPeBGoq37WV9+T6+LK9kffk+Nu/az7x1O9i6+0Cjp3FOTfKRmZpEu1Q/7ZKTSE32kZrkI9nvw+8zknyGz4zQo0br6h11LnDEUU3dP0u7ps5RXVf/dZlX1QZ+VtfWU11XH9Hl0C7F//UHV6fMFDpnpdGlfSrdOqTRq1MGvTtl0L1jGkl+/aUTD1T4IhHUPi2ZUb2yGdUr+xvj6uod5fuqKNtTTdneKnZWVrN7fw07K2vYW1XLvqpaKqvrqKyu/ZeiPrjWHfph4VxgU5LPZ/gNkvw+0pJ9+FOTSPEf/LAwUpJ8gZvfT2qyjxR/4PHBD5PAzf7lg8XMOLji7gj8VVBXT+ADpC6Qa391Lfuq6thzoJaK/TVU7K+mbG81a7aXsX1PFbUhWVP8Pvp3zmRQtyyGdu/AyIKODO3eQZu7PKDCF4kRv8/onJVG56w0r6NEVX29Y/ueKtaX72P9jkrWlO5lxZY9fFhcxosLNgGBv2hG9OzISQPzOHlgnr70FiPahi8iMbN994HgTu+dzFtXzrLNuwHonJXKOcO6cv7w7owsyNb3HsKgnbYiEpe27znA+6vLmLNiG3NXbqeqtp4eHdO5pDCfSWMK6NK+bf81FA0qfBGJe3sO1PD2im28uGATHxSX4fcZZw3twpQT+zKy4Jv7RKRhKnwRaVW+LNvH3z77iplFG9hVWcP4/rnccmp/xvbt5HW0uKfCF5FWaV9VLf8zbz2Pvr+Osr1VnDggl5+fN4SBXbK8jha3VPgi0qodqKnjmU/Xc/+cYvZW1XL52AJuP+MoXbO4AU0VflgHwppZjpnNNrPi4M8GN7SZWZ2ZLQzeZoUzTxFJPGnJfqac2Jd3/98pXDWuF89+toEz7nmP1xZvIZ5XWuNNuN98uAOY45wbAMwJPm7IfufciOBtQpjzFJEElZORwi8nDuO1W8fTIzudm/62gBufWUDpniqvo7UK4Rb+RGB68P504IIwX09EpFmDurbnxRuP545zBjF31XbOue8DPiop8zpW3Au38Ls457YE728FujQyXZqZFZnZp2amDwURCVuS38f3Tu7Hq7eMp2O7ZK58fB73zl7d6PmKpAWnVjCzt4GuDYz6aegD55wzs8aWdC/n3CYz6wvMNbMlzrk1jcxvKjAVoKCgoLl4IpLgBnbJYtbNJ/Cz/13KfXOKWfDVTh64fCQd0pO9jhZ3wjpKx8xWAd9yzm0xs27Au865o5p5zpPAq86555t7fR2lIyKHY8ZnX/Gz/11Kn9wMpl0zmp457byOFHNRO0oHmAVMDt6fDLzcwMyzzSw1eD8XOAFYHuZ8RUS+4bIxBTx1/Ri27T7ABQ9+xIKvdnodKa6EW/i/A84ws2Lg9OBjzKzQzB4LTjMYKDKzRcA7wO+ccyp8EYmK4/vl8tJNJ5CZlsQVf53Hh8XamXuQvnglIm1S6Z4qrnp8HmvL9vHIlSM5dVBjx5S0LdHcpCMiEpfyslJ59rvjGNQ1i6lPzef1JVuaf1Ibp8IXkTYrOyOFZ6aMZUTPjtz67BfMXbnN60ieUuGLSJvWPi2ZJ64dzeBu7bnxmQXMW1vudSTPqPBFpM3LSktm+nVjyM9OZ8r0IpZuqvA6kidU+CKSEHKCm3fapyczedpnbNhR6XWkmFPhi0jC6NYhnaeuH0NNXT1Tphex50CN15FiSoUvIgmlX14mD10xipLSvdz67BcJde4dFb6IJJzxA3L55YShvLOqlLtfW+F1nJhp9uRpIiJt0ZXjerGmdC/TPlrH8J4dmDiih9eRok5r+CKSsO48dzCje2fzkxeXULJ9j9dxok6FLyIJK9nv48+TRpKe7OfGZxZQWV3rdaSoUuGLSELr2iGN+y47lpLSvfzspaVt+hq5KnwRSXjjB+Ry22kDefGLTby8cLPXcaJGhS8iAtx8an8Ke2Xz85eXsmnXfq/jRIUKX0QE8PuMey4dQX2940czF1HfBo/PV+GLiAQVdGrHXecP5ZO15Uz7aJ3XcSJOhS8iEuKSwnzOHNKF/3pzFcXb2tahmip8EZEQZsb/v+hoMlL93PHikja1aUeFLyJyiNzMVH5+3hDmr9/JM/PWex0nYlT4IiINuPDYHpw0MI/fv7GyzRy1o8IXEWmAmXH3BcNwwM9eWtImvpClwhcRaUTPnHb86MyjeGdVKa8v2ep1nLCp8EVEmjD5+N4M6dae37y2nH1VrftcOyp8EZEm+H3Gry8YypaKAzzwTonXccKiwhcRacaoXjl8e2Q+j32wljWle72Oc8RU+CIiLXDHOYNIS/bzi1nLWu0OXBW+iEgL5GWlcvsZA/mguIx/LN/mdZwjosIXEWmhq8b1YkDnTH73xkqqa+u9jnPYVPgiIi2U5Pdx57mDWVe2j/9phd/ADavwzewSM1tmZvVmVtjEdGeb2SozKzGzO8KZp4iIl751VB7j++dy35xiKiprvI5zWMJdw18KXAS839gEZuYHHgTOAYYAk8xsSJjzFRHxhJlx57mDqdhfw5/nFnsd57CEVfjOuRXOuVXNTDYGKHHOrXXOVQMzgInhzFdExEtDurfn0lE9mf7Jl6wv3+d1nBaLxTb8HsCGkMcbg8NERFqtfz9zIEk+H//9j9VeR2mxZgvfzN42s6UN3KKylm5mU82syMyKSktLozELEZGwdW6fxvXj+zBr0WaWba7wOk6LNFv4zrnTnXPDGri93MJ5bAJ6hjzODw5rbH6POucKnXOFeXl5LZyFiEjsTT25Lx3bJfOHt5rbsh0fYrFJ53NggJn1MbMU4DJgVgzmKyISVe3Tkvn+t/rx7qpSPl1b7nWcZoV7WOaFZrYROA54zczeCg7vbmavAzjnaoGbgbeAFcBM59yy8GKLiMSHq4/rTdf2afzXmyvj/pQL4R6l85JzLt85l+qc6+KcOys4fLNz7tyQ6V53zg10zvVzzt0dbmgRkXiRluznttMHsOCrXcyO81Mu6Ju2IiJhunhUPn1yM7hn9uq4vui5Cl9EJExJfh8/OG0AK7fu4Y2l8XtlLBW+iEgEnD+8OwM6Z3Lv26upi9O1fBW+iEgE+H3GbacPpGT7Xl5dvNnrOA1S4YuIRMg5w7oyqGsWf3q7mNq6+Dt9sgpfRCRCfD7j9jMGsq5sHy990ej3Sz2jwhcRiaAzhnTh6B4deOCdkrhby1fhi4hEkJlx2+kDWF9eyYtxtpavwhcRibBTB3UOrOXPLaEmjtbyVfgiIhF2cC3/qx2VcbUtX4UvIhIFB9fy/zy3OG7W8lX4IiJRcHAtf8OO/by4YKPXcQAVvohI1Hy9Lf+d+NiWr8IXEYkSM+OHZwTW8l+Y7/1avgpfRCSKTjmqM8N7duTPc0uorvV2LV+FLyISRQe35W/atZ/nPV7LV+GLiETZtwbmMaJnRx58x9u1fBW+iEiUmQXOsbNp135mFm3wLIcKX0QkBk4ckEthr2wemFvCgZo6TzKo8EVEYsDM+PHZg9i6+wDTP/7SkwwqfBGRGBnTJ4dTjsrjoXfXULG/JubzV+GLiMTQj88exO4DNfzlvTUxn7cKX0QkhgZ3a8/E4d2Z9tE6tu0+ENN5q/BFRGLs9jOOorbO8ae3i2M6XxW+iEiMFXRqx9XH9WbG51+xcMOumM1XhS8i4oEfnjGAzlmp3PnikphdClGFLyLigay0ZH5x/lCWb9nNkzE6TFOFLyLikbOHdeXUQZ25Z/ZqNu3aH/X5qfBFRDxiZvxywlDqneOOFxZH/Tw7YRW+mV1iZsvMrN7MCpuY7kszW2JmC82sKJx5ioi0JT1z2vGf5w3lg+IyvvfM/KiediHcNfylwEXA+y2Y9hTn3AjnXKMfDCIiiejysQXcfeEw5q7czpTpRVRW10ZlPmEVvnNuhXNuVaTCiIgkqivG9uKPlwzn4zVlXDPt86iUflLEX7FhDviHmTngL865R2M0XxGRVuPiUfmkJvn4sLiMtCR/xF+/2cI3s7eBrg2M+qlz7uUWzme8c26TmXUGZpvZSudcg5uBzGwqMBWgoKCghS8vItI2nD+8O+cP7x6V12628J1zp4c7E+fcpuDP7Wb2EjCGRrb7B9f+HwUoLCx04c5bREQCon5YppllmFnWwfvAmQR29oqISAyFe1jmhWa2ETgOeM3M3goO725mrwcn6wJ8aGaLgM+A15xzb4YzXxEROXxh7bR1zr0EvNTA8M3AucH7a4Hh4cxHRETCp2/aiogkCBW+iEiCUOGLiCQIFb6ISIIw5+L3UHczKwXWH+HTc4GyCMaJlHjNBfGbLV5zQfxmU67DF6/ZDjdXL+dcXkMj4rrww2FmRfF4orZ4zQXxmy1ec0H8ZlOuwxev2SKZS5t0REQShApfRCRBtOXCj9czcsZrLojfbPGaC+I3m3IdvnjNFrFcbXYbvoiI/Ku2vIYvIiIhVPgiIgmiVRf+YVxE/WwzW2VmJWZ2R8jwPmY2Lzj8OTNLiVCuHDObbWbFwZ/ZDUxzSvCi7gdvB8zsguC4J81sXci4EZHI1dJswenqQuY/K2S4l8tshJl9EvydLzaz74SMi+gya+w9EzI+NfjvLwkuj94h434SHL7KzM4KJ8cR5LrdzJYHl88cM+sVMq7B32kMs11jZqUhGaaEjJsc/N0Xm9nkGOe6NyTTajPbFTIuasvMzKaZ2XYza/B08RZwfzD3YjMbGTLuyJaXc67V3oDBwFHAu0BhI9P4gTVAXyAFWAQMCY6bCVwWvP8IcGOEcv0XcEfw/h3A75uZPgfYAbQLPn4SuDhKy6xF2YC9jQz3bJkBA4EBwfvdgS1Ax0gvs6beMyHTfB94JHj/MuC54P0hwelTgT7B1/HHMNcpIe+jGw/maup3GsNs1wAPNPDcHGBt8Gd28H52rHIdMv0twLQYLbOTgJHA0kbGnwu8ARgwDpgX7kJaGgoAAAQXSURBVPJq1Wv4rmUXUR8DlDjn1jrnqoEZwEQzM+BU4PngdNOBCyIUbWLw9Vr6uhcDbzjnKiM0/6Ycbraveb3MnHOrnXPFwfubge1Ag98oDFOD75km8j4PnBZcPhOBGc65KufcOqAk+HoxyeWceyfkffQpkB+heYedrQlnAbOdczucczuB2cDZHuWaBDwboXk3yQUu87qjiUkmAk+5gE+BjmbWjTCWV6su/BbqAWwIebwxOKwTsMs5V3vI8Ejo4pzbEry/lcBFYJpyGd98k90d/DPuXjNLjVCuw8mWZmZFZvbpwU1NxNEyM7MxBNbY1oQMjtQya+w90+A0weVRQWD5tOS50cwV6noCa4gHNfQ7jZSWZvt28Hf0vJn1PMznRjMXwc1ffYC5IYOjucya01j2I15eYV0AJRYsMhdRj7imcoU+cM45M2v02NfgJ/bRwFshg39CoPRSCByD+x/Ar2KcrZcLXHi+LzDXzJYQKLUjFuFl9jQw2TlXHxwc1jJra8zsSqAQODlk8Dd+p865NQ2/QlS8AjzrnKsysxsI/IV0agzn35zLgOedc3Uhw7xeZhEV94Xvwr+I+iagZ8jj/OCwcgJ/IiUF19AODg87l5ltM7NuzrktwXLa3sRLXQq85JyrCXntg2u6VWb2BPCjluaKVDb3zwvPrzWzd4FjgRfweJmZWXvgNQIf+J+GvHZYy+wQjb1nGppmo5klAR0IvKda8txo5sLMTifwIXqyc67q4PBGfqeRKq9msznnykMePkZgv83B537rkOe+G6tcIS4DbgodEOVl1pzGsh/x8kqETTqfAwMscHRJCoFf6iwX2PvxDoHt5wCTgUj9xTAr+Hoted1vbDMMFt7BbeYXENmLvjebzcyyD24SMbNc4ARgudfLLPj7e4nAds3nDxkXyWXW4HumibwXA3ODy2cWcJkFjuLpAwwgcC3nSGg2l5kdC/wFmOCc2x4yvMHfaYRytTRbt5CHE4AVwftvAWcGM2YDZ/Kvf/FGNVcw2yACO0A/CRkW7WXWnFnA1cGjdcYBFcEVmyNfXtHaAx2LG3Ahge1XVcA24K3g8O7A6yHTnQusJvDJ/NOQ4X0J/GcsAf4OpEYoVydgDlAMvA3kBIcXAo+FTNebwKe175DnzwWWECitZ4DMCC6zZrMBxwfnvyj48/p4WGbAlUANsDDkNiIay6yh9wyBTUQTgvfTgv/+kuDy6Bvy3J8Gn7cKOCfC7/nmcr0d/L9wcPnMau53GsNsvwWWBTO8AwwKee51wWVZAlwby1zBx78AfnfI86K6zAis6G0Jvqc3Etjn8j3ge8HxBjwYzL2EkCMRj3R56dQKIiIJIhE26YiICCp8EZGEocIXEUkQKnwRkQShwhcRSRAqfBGRBKHCFxFJEP8HwEcoCLOUsWcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Figure basing on inital parameter theta\n", "xlist = np.arange(x_min, x_max, 0.02)\n", "y_init = [qcl_pred(x, U_out) for x in xlist]\n", "plt.plot(xlist, y_init)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Learning (optimization by scipy.optimize.minimize)\n", "Preparation is finally finished, and let's start learning from now on. Here, for simplicity, optimization is performed using the Nelder-Mead method, which does not need a gradient calculation formula. When using an optimization method that needs gradients (eg: the BFGS method), refer to the useful gradients calculation formulas introduced in Reference [1]." ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "from scipy.optimize import minimize" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 11.7 s, sys: 11.7 s, total: 23.4 s\n", "Wall time: 14.2 s\n" ] } ], "source": [ "%%time\n", "# Learning (takes 14 seconds with the writer's PC)\n", "result = minimize(cost_func, theta_init, method='Nelder-Mead')" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.003987076559624772" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Value of cost_function after optimization\n", "result.fun" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[7.17242144 5.4043736 1.27744316 3.09192904 0.13144047 2.13757354\n", " 4.58470259 2.01924008 2.96107066 2.91843537 1.0609229 1.70351774\n", " 6.41114609 6.25686828 2.41619471 3.69387805 4.07551328 1.47666316\n", " 3.4108701 2.28524042 1.75253621 7.44181397 3.20314179 5.11364648\n", " 1.2831137 2.07306927 3.75112591]\n" ] } ], "source": [ "# Solution of theta by optimization\n", "theta_opt = result.x\n", "print(theta_opt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot results" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "# Insert optimized theta into U_out\n", "set_U_out(theta_opt)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot\n", "plt.figure(figsize=(10, 6))\n", "\n", "xlist = np.arange(x_min, x_max, 0.02)\n", "\n", "# teacher data\n", "plt.plot(x_train, y_train, \"o\", label='Teacher')\n", "\n", "# Figure basing on inital parameter theta\n", "plt.plot(xlist, y_init, '--', label='Initial Model Prediction', c='gray')\n", "\n", "# Prediction of the model\n", "y_pred = np.array([qcl_pred(x, U_out) for x in xlist])\n", "plt.plot(xlist, y_pred, label='Final Model Prediction')\n", "\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is clear that the approximation of the sin function was successful.\n", "\n", "Here we dealt with a very simple task of a one-dimensional function approximation for both input and output, but it can be extended to approximation and classification problems with multidimensional inputs and outputs.\n", "\n", "Motivated readers are encouraged to try to classify the [Iris dataset](https://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html), one of the typical machine learning datasets, in column `5.2c. Application of QCL to Machine Learning`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reference\n", "[1] K. Mitarai, M. Negoro, M. Kitagawa, and K. Fujii, “Quantum circuit learning”, [Phys. Rev. A 98, 032309 (2018)](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.98.032309), arXiv:https://arxiv.org/abs/1803.00745\n", "\n", "[2] V. Havlicek et al. , “Supervised learning with quantum-enhanced feature spaces”, [Nature 567, 209–212 (2019)](https://www.nature.com/articles/s41586-019-0980-2), arXiv:https://arxiv.org/abs/1804.11326" ] } ], "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.7.6" } }, "nbformat": 4, "nbformat_minor": 4 }