{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Effective Dimension of Qiskit Neural Networks\n", "In this tutorial, we will take advantage of the `EffectiveDimension` and `LocalEffectiveDimension` classes to evaluate the power of Quantum Neural Network models. These are metrics based on information geometry that connect to notions such as trainability, expressibility or ability to generalize.\n", "\n", "Before diving into the code example, we will briefly explain what is the difference between these two metrics, and why are they relevant to the study of Quantum Neural Networks. More information about global effective dimension can be found in [this paper](https://arxiv.org/pdf/2011.00027.pdf), while the local effective dimension was introduced in a [later work](https://arxiv.org/abs/2112.04807)." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## 1. Global vs. Local Effective Dimension\n", "Both classical and quantum machine learning models share a common goal: being good at **generalizing**, i.e. learning insights from data and applying them on unseen data.\n", "\n", "Finding a good metric to assess this ability is a non-trivial matter. In [The Power of Quantum Neural Networks](https://arxiv.org/pdf/2011.00027.pdf), the authors introduce the **global** effective dimension as a useful indicator of how well a particular model will be able to perform on new data. In [Effective Dimension of Machine Learning Models](https://arxiv.org/pdf/2112.04807.pdf), the **local** effective dimension is proposed as a new capacity measure that bounds the generalization error of machine learning models.\n", "\n", "The key difference between global (`EffectiveDimension` class) and **local** effective dimension (`LocalEffectiveDimension` class) is actually not in the way they are computed, but in the nature of the parameter space that is analyzed. The global effective dimension incorporates the **full parameter space** of the model, and is calculated from a **large number of parameter (weight) sets**. On the other hand, the local effective dimension focuses on how well the **trained** model can generalize to new data, and how **expressive** it can be. Therefore, the local effective dimension is calculated from **a single** set of weight samples (training result). This difference is small in terms of practical implementation, but quite relevant at a conceptual level." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. The Effective Dimension Algorithm\n", "\n", "Both the global and local effective dimension algorithms use the Fisher Information matrix to provide a measure of complexity. The details on how this matrix is calculated are provided in the [reference paper](https://arxiv.org/pdf/2011.00027.pdf), but in general terms, this matrix captures how sensitive a neural network's output is to changes in the network's parameter space.\n", "\n", "In particular, this algorithm follows 4 main steps:\n", "\n", "1. **Monte Carlo simulation:** the forward and backward passes (gradients) of the neural network are computed for each pair of input and weight samples.\n", "2. **Fisher Matrix Computation:** these outputs and gradients are used to compute the Fisher Information Matrix.\n", "3. **Fisher Matrix Normalization:** averaging over all input samples and dividing by the matrix trace\n", "4. **Effective Dimension Calculation:** according to the formula from [*Abbas et al.*](https://arxiv.org/pdf/2011.00027.pdf)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 3. Basic Example (SamplerQNN)\n", "\n", "This example shows how to set up a QNN model problem and run the global effective dimension algorithm. Both Qiskit `SamplerQNN` (shown in this example) and `EstimatorQNN` (shown in a later example) can be used with the `EffectiveDimension` class.\n", "\n", "We start off from the required imports and a fixed seed for the random number generator for reproducibility purposes." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# Necessary imports\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from IPython.display import clear_output\n", "from qiskit import QuantumCircuit\n", "from qiskit.circuit.library import ZFeatureMap, RealAmplitudes\n", "from qiskit_algorithms.optimizers import COBYLA\n", "from qiskit_algorithms.utils import algorithm_globals\n", "from sklearn.datasets import make_classification\n", "from sklearn.preprocessing import MinMaxScaler\n", "\n", "from qiskit_machine_learning.circuit.library import QNNCircuit\n", "from qiskit_machine_learning.algorithms.classifiers import NeuralNetworkClassifier\n", "from qiskit_machine_learning.neural_networks import EffectiveDimension, LocalEffectiveDimension\n", "from qiskit_machine_learning.neural_networks import SamplerQNN, EstimatorQNN\n", "\n", "# set random seed\n", "algorithm_globals.random_seed = 42" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" }, "slideshow": { "slide_type": "skip" } }, "source": [ "### 3.1 Define QNN\n", "\n", "The first step to create a `SamplerQNN` is to define a parametrized feature map and ansatz. In this toy example, we will use 3 qubits and the `QNNCircuit` class to simplify the composition of a feature map and an ansatz circuit. The resulting circuit is then used in the `SamplerQNN` class." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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Z8HadylbqgoNa3Zg418/mM0v7VKORrU6FlDvpCjT2BTJmUIb5JUqVSI4OJjAwEC2bNlCeHg4Pj4+zJ49mxEjRuDt7Q1gMchTU1Pp06cPu3fvZsOGDfj4+OR39/PM0bMhAJy/dIYpQUMyzfet3kYHSykQGpsiOWOTkZGRUdCdyG8JCQm4urpiY2PD1atXKV78nydp09PT6d+/P0uXLmXlypW0b9++AHtqvezeIxfJSrsACvQeuUhRkVv7WqE9I7+TgwcPkpGRQa1atcxCHOCFF17gp59+4vXXX6d48eL8+eefpnne3t4WX08TEREpKEXySZIDBw4Ali+rr1q1CoBJkybRokULsz8rVqzI136KiIjcTZE8I79TkIeHh+dzb0RERHJOZ+QiIiIGViTPyG/9DruIiIjRFckzchERkcJCQS4iImJgCnIREREDU5CLiIgYmIJcRETEwBTkIiIiBqYgFxERMTAFuYiIiIEpyEVERAxMQS4iImJgRfL/Iy/MMjIgPbWgeyFGZusANjZ5U7fGp8g/cmtfU5CLiIgYmC6ti4iIGJiCXERExMAU5CIiIgamIBcRETEwBbmIiIiBKchFREQMTEEuIiJiYApyERERA1OQi4iIGJiCXERExMAU5CIiIgamIBcRETEwBbmIiIiBKchFREQMTEEuIiJiYApyERERA1OQi4iIGJiCXERExMAU5CIiIgamIBcRETEwBbmIiIiBKchFREQMTEEuIiJiYApyERERA1OQi4iIGNj/A84XweTcygDHAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "num_qubits = 3\n", "# combine a custom feature map and ansatz into a single circuit\n", "qc = QNNCircuit(\n", " feature_map=ZFeatureMap(feature_dimension=num_qubits, reps=1),\n", " ansatz=RealAmplitudes(num_qubits, reps=1),\n", ")\n", "qc.draw(output=\"mpl\", style=\"clifford\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The parametrized circuit can then be sent together with an optional interpret map (parity in this case) to the `SamplerQNN` constructor." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# parity maps bitstrings to 0 or 1\n", "def parity(x):\n", " return \"{:b}\".format(x).count(\"1\") % 2\n", "\n", "\n", "output_shape = 2 # corresponds to the number of classes, possible outcomes of the (parity) mapping." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# construct QNN\n", "qnn = SamplerQNN(\n", " circuit=qc,\n", " interpret=parity,\n", " output_shape=output_shape,\n", " sparse=False,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Set up Effective Dimension calculation\n", "\n", "In order to compute the effective dimension of our QNN using the `EffectiveDimension` class, we need a series of sets of input samples and weights, as well as the total number of data samples available in a dataset. The `input_samples` and `weight_samples` are set in the class constructor, while the number of data samples is given during the call to the effective dimension computation, to be able to test and compare how this measure changes with different dataset sizes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can define the number of input samples and weight samples and the class will randomly sample a corresponding array from a normal (for `input_samples`) or a uniform (for `weight_samples`) distribution. Instead of passing a number of samples we can pass an array, sampled manually." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# we can set the total number of input samples and weight samples for random selection\n", "num_input_samples = 10\n", "num_weight_samples = 10\n", "\n", "global_ed = EffectiveDimension(\n", " qnn=qnn, weight_samples=num_weight_samples, input_samples=num_input_samples\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we want to test a specific set of input samples and weight samples, we can provide it directly to the `EffectiveDimension` class as shown in the following snippet:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# we can also provide user-defined samples and parameters\n", "input_samples = algorithm_globals.random.normal(0, 1, size=(10, qnn.num_inputs))\n", "weight_samples = algorithm_globals.random.uniform(0, 1, size=(10, qnn.num_weights))\n", "\n", "global_ed = EffectiveDimension(qnn=qnn, weight_samples=weight_samples, input_samples=input_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The effective dimension algorithm also requires a dataset size. In this example, we will define an array of sizes to later see how this input affects the result." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# finally, we will define ranges to test different numbers of data, n\n", "n = [5000, 8000, 10000, 40000, 60000, 100000, 150000, 200000, 500000, 1000000]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.3 Compute Global Effective Dimension\n", "Let's now calculate the effective dimension of our network for the previously defined set of input samples, weights, and a dataset size of 5000." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "global_eff_dim_0 = global_ed.get_effective_dimension(dataset_size=n[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The effective dimension values will range between 0 and `d`, where `d` represents the dimension of the model, and it's practically obtained from the number of weights of the QNN. By dividing the result by `d`, we can obtain the normalized effective dimension, which correlates directly with the capacity of the model." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data size: 5000, global effective dimension: 4.6657\n", "Number of weights: 6, normalized effective dimension: 0.7776\n" ] } ], "source": [ "d = qnn.num_weights\n", "\n", "print(\"Data size: {}, global effective dimension: {:.4f}\".format(n[0], global_eff_dim_0))\n", "print(\n", " \"Number of weights: {}, normalized effective dimension: {:.4f}\".format(d, global_eff_dim_0 / d)\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By calling the `EffectiveDimension` class with an array if input sizes `n`, we can monitor how the effective dimension changes with the dataset size." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "global_eff_dim_1 = global_ed.get_effective_dimension(dataset_size=n)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Effective dimension: [4.66565096 4.7133723 4.73782922 4.89963559 4.94632272 5.00280009\n", " 5.04530433 5.07408394 5.15786005 5.21349874]\n", "Number of weights: 6\n" ] } ], "source": [ "print(\"Effective dimension: {}\".format(global_eff_dim_1))\n", "print(\"Number of weights: {}\".format(d))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" }, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the normalized effective dimension for the model\n", "plt.plot(n, np.array(global_eff_dim_1) / d)\n", "plt.xlabel(\"Number of data\")\n", "plt.ylabel(\"Normalized GLOBAL effective dimension\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## 4. Local Effective Dimension Example\n", "As explained in the introduction, the local effective dimension algorithm only uses **one** set of weights, and it can be used to monitor how training affects the expressiveness of a neural network. The `LocalEffectiveDimension` class enforces this constraint to ensure that these calculations are conceptually separate, but the rest of the implementation is shared with `EffectiveDimension`.\n", "\n", "This example shows how to leverage the `LocalEffectiveDimension` class to analyze the effect of training on QNN expressiveness." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1 Define Dataset and QNN\n", "\n", "We start by creating a 3D binary classification dataset using `make_classification` function from scikit-learn." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "num_inputs = 3\n", "num_samples = 50\n", "\n", "X, y = make_classification(\n", " n_samples=num_samples,\n", " n_features=num_inputs,\n", " n_informative=3,\n", " n_redundant=0,\n", " n_clusters_per_class=1,\n", " class_sep=2.0,\n", ")\n", "X = MinMaxScaler().fit_transform(X)\n", "y = 2 * y - 1 # labels in {-1, 1}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The next step is to create a QNN, an instance of `EstimatorQNN` in our case in the same fashion we created an instance of `SamplerQNN`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "estimator_qnn = EstimatorQNN(circuit=qc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Train QNN\n", "\n", "We can now proceed to train the QNN. The training step may take some time, be patient. You can pass a callback to the classifier to observe how the training process is going on. We fix `initial_point` for reproducibility purposes as usual." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# callback function that draws a live plot when the .fit() method is called\n", "def callback_graph(weights, obj_func_eval):\n", " clear_output(wait=True)\n", " objective_func_vals.append(obj_func_eval)\n", " plt.title(\"Objective function value against iteration\")\n", " plt.xlabel(\"Iteration\")\n", " plt.ylabel(\"Objective function value\")\n", " plt.plot(range(len(objective_func_vals)), objective_func_vals)\n", " plt.show()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# construct classifier\n", "initial_point = algorithm_globals.random.random(estimator_qnn.num_weights)\n", "\n", "estimator_classifier = NeuralNetworkClassifier(\n", " neural_network=estimator_qnn,\n", " optimizer=COBYLA(maxiter=80),\n", " initial_point=initial_point,\n", " callback=callback_graph,\n", ")" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAIjCAYAAAB/OVoZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACK+UlEQVR4nOzde3xT9f3H8XcuTXq/0Qu3UqAoFy/oUBDvFyaKd52ic4o4dTqYKE6nc96nOJ2IOJV5BXVTvPvbdDqHoKJ4QUW8cb8UoQVK6b1NmuT8/khO2tALTZs0gb6ej/UBPTlJvk1Sx/t8P9/P12IYhiEAAAAAABBz1lgPAAAAAAAA+BHSAQAAAACIE4R0AAAAAADiBCEdAAAAAIA4QUgHAAAAACBOENIBAAAAAIgThHQAAAAAAOIEIR0AAAAAgDhBSAcAAAAAIE4Q0gFgD3X77bfLYrGorKxst+cOHDhQl1xySfQHtYu5c+fKYrFow4YN3f7cX3zxhQ4//HClpKTIYrFo2bJl3T6GjojVexNpsXyvY8lisej222+P9TAk7ZnvgfnfMQBAE0I6AMSR77//Xr/61a/Ur18/OZ1O9e3bVxdeeKG+//77WA+tXffcc4/eeOONWA8jqLGxUeeee67Ky8v14IMP6rnnnlNhYWHMxvPJJ5/o9ttvV0VFRczGgD3Pli1bdPvtt3fpAtOjjz6quXPnRmxMnVFXV6fbb79dixYtiuk4AGBPYTEMw4j1IAAA0muvvaYLLrhA2dnZ+vWvf61BgwZpw4YNeuqpp7Rjxw69+OKLOuuss4Ln33777brjjju0fft25eTktPvYLpdLVqtVCQkJURl7amqqfvGLX7QIA16vV42NjXI6nd06W7ZixQoNHz5cTzzxhC677LJue962/PWvf9X111+v9evXa+DAgSG3Rfu96S5z587V5MmTW/0Z92YNDQ2y2+2y2+0Rf+ylS5fq0EMP1TPPPNOhaovWft/2339/5eTkxDQgl5WVKTc3V7fddluLqgOPxyOPx6PExMTYDA4A4lDk/x8FABC2tWvX6qKLLtLgwYP14YcfKjc3N3jbtGnTdNRRR+miiy7S8uXLNXjw4LAf3+l0RnK4HWaz2WSz2br9ebdt2yZJyszM7PbnDles3htERjyFy+76ffN4PPL5fHI4HF1+rGhd4ACAPRnl7gAQB+6//37V1dXp8ccfDwnokpSTk6O///3vqq2t1X333dfivmVlZTrvvPOUnp6uXr16adq0aWpoaAg5p7V1zxUVFbrmmmtUUFAgp9OpIUOG6C9/+Yt8Pl/IeT6fTw899JAOOOAAJSYmKjc3VyeddJKWLl0qyb8mt7a2VvPmzZPFYpHFYgk+165rZE899dQ2LzKMHTtWhxxySMix559/XqNGjVJSUpKys7N1/vnna9OmTe2+lpdccomOOeYYSdK5554ri8WiY489VpJ07LHHBv++632az/5u2LBBFotFf/3rX/X444+rqKhITqdThx56qL744osW91+xYoXOO+885ebmKikpSUOHDtXNN98syV/xcP3110uSBg0aFHyNzNektfdm3bp1Ovfcc5Wdna3k5GQddthheuutt0LOWbRokSwWi1566SXdfffd6t+/vxITE3XCCSdozZo17b5Gr7zyiiwWiz744IMWt/3973+XxWLRd999J0lavny5LrnkEg0ePFiJiYnq3bu3Lr30Uu3YsaPd55DaXq/dlc9ja958802dcsop6tu3r5xOp4qKinTXXXfJ6/W2OPeRRx7R4MGDlZSUpNGjR+ujjz5q8blwu9269dZbNWrUKGVkZCglJUVHHXWUFi5cuNuf0VxjvWbNGl1yySXKzMxURkaGJk+erLq6upD7vvfeezryyCOVmZmp1NRUDR06VH/84x8l+d/fQw89VJI0efLk4OemvdL1XX/fBg4cqO+//14ffPBB8P7Nf86OvObNfxdmzZoV/F344YcfOvQ6bdiwIfjftDvuuCM4DvM1a21Nusfj0V133RV8roEDB+qPf/yjXC5XyHkDBw7UqaeeqsWLF2v06NFKTEzU4MGD9eyzz7b5GgHAnoBLlwAQB/71r39p4MCBOuqoo1q9/eijj9bAgQNbBDVJOu+88zRw4EDNmDFDn376qWbPnq2dO3e2+w/Vuro6HXPMMdq8ebN+85vfaMCAAfrkk0900003qaSkRLNmzQqe++tf/1pz587VySefrMsuu0wej0cfffSRPv30Ux1yyCF67rnndNlll2n06NG64oorJElFRUWtPu/EiRN18cUX64svvggGEEnauHGjPv30U91///3BY3fffbduueUWnXfeebrsssu0fft2Pfzwwzr66KP19ddftzlL/pvf/Eb9+vXTPffco6uvvlqHHnqo8vPz23wt2vPPf/5T1dXV+s1vfiOLxaL77rtPZ599ttatWxcsT1++fLmOOuooJSQk6IorrtDAgQO1du1a/etf/9Ldd9+ts88+W6tWrdILL7ygBx98MLg0YdeLMaatW7fq8MMPV11dna6++mr16tVL8+bN0+mnn65XXnklZMmDJN17772yWq36/e9/r8rKSt1333268MIL9dlnn7X5c51yyilKTU3VSy+9FLygYZo/f772228/7b///pL8QXLdunWaPHmyevfure+//16PP/64vv/+e3366acRWcYQzuexNXPnzlVqaqqmT5+u1NRUvf/++7r11ltVVVUV8pl67LHHNHXqVB111FG69tprtWHDBp155pnKyspS//79g+dVVVXpySef1AUXXKDLL79c1dXVeuqppzR+/Hh9/vnnOuigg3b7M5133nkaNGiQZsyYoa+++kpPPvmk8vLy9Je//EWSv//EqaeeqgMPPFB33nmnnE6n1qxZo48//liSNHz4cN1555269dZbdcUVVwT/23D44Yd3+HWdNWuWfve73yk1NTV40cj8XQj3NX/mmWfU0NCgK664Qk6nU9nZ2R16nXJzc/XYY4/pqquu0llnnaWzzz5bknTggQe2Oe7LLrtM8+bN0y9+8Qtdd911+uyzzzRjxgz9+OOPev3110POXbNmjX7xi1/o17/+tSZNmqSnn35al1xyiUaNGqX99tuvw68VAMQVAwAQUxUVFYYk44wzzmj3vNNPP92QZFRVVRmGYRi33XabIck4/fTTQ8777W9/a0gyvvnmm+CxwsJCY9KkScHv77rrLiMlJcVYtWpVyH1vvPFGw2azGcXFxYZhGMb7779vSDKuvvrqFuPx+XzBv6ekpIQ8vumZZ54xJBnr1683DMMwKisrDafTaVx33XUh5913332GxWIxNm7caBiGYWzYsMGw2WzG3XffHXLet99+a9jt9hbHd7Vw4UJDkvHyyy+HHD/mmGOMY445psX5kyZNMgoLC4Pfr1+/3pBk9OrVyygvLw8ef/PNNw1Jxr/+9a/gsaOPPtpIS0sLjt3U/PW5//77Q16H5nZ9b6655hpDkvHRRx8Fj1VXVxuDBg0yBg4caHi93pCfcfjw4YbL5Qqe+9BDDxmSjG+//bb1FyfgggsuMPLy8gyPxxM8VlJSYlitVuPOO+8MHqurq2tx3xdeeMGQZHz44YfB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SFKHXqMJEybo888/15IlS4LHamtr9fjjj2vgwIEaMWJEp8bamnHjxik7O1vz58/X/PnzNXr06JALPuYs5a7vwe66rZuKioparG1+/PHHW8ykd/Tz2JrWxuh2u/Xoo4+GnHfIIYeoV69eeuKJJ0Ie7x//+EeL0ujWHvOzzz4LeU+6qry8vMUxs2u8udVYOJ+btrT1u9mV19zU0dcpOTk5+Li7M2HCBEktP2MzZ86U5N+ZAAD2dsykA0Ac2GeffTRv3jxdeOGFOuCAA/TrX/9agwYN0oYNG/TUU0+prKxML7zwQqtbm61fv16nn366TjrpJC1ZskTPP/+8fvnLX2rkyJFtPt/111+v//u//9Opp54a3K6otrZW3377rV555RVt2LBBOTk5Ou6443TRRRdp9uzZWr16dbDE+aOPPtJxxx2nqVOnSpJGjRql//3vf5o5c6b69u2rQYMGtbqu2jRhwgSlpaXp97//vWw2m84555yQ24uKivTnP/9ZN910U3CbrLS0NK1fv16vv/66rrjiCv3+978P+3W+9NJLNXPmTI0fP16//vWvtW3bNs2ZM0f77bdfi7XMHTV79mwdeeSR+tnPfqYrrrgi+L699dZbWrZsmST/6yNJN998s84//3wlJCTotNNOC4aw5m688Ua98MILOvnkk3X11VcrOztb8+bN0/r16/Xqq69GdL1yQkKCzj77bL344ouqra3VX//615Db09PTdfTRR+u+++5TY2Oj+vXrp//+978tZqnbctlll+nKK6/UOeeco5///Of65ptv9O677wa3oTN19PPYmsMPP1xZWVmaNGmSrr76alksFj333HMtLiw4HA7dfvvt+t3vfqfjjz9e5513njZs2KC5c+eqqKgoZLb31FNP1WuvvaazzjpLp5xyitavX685c+ZoxIgRqqmp6dDPvjt33nmnPvzwQ51yyikqLCzUtm3b9Oijj6p///7BapqioiJlZmZqzpw5SktLU0pKisaMGRPWeu9Ro0bpscce05///GcNGTJEeXl5Ov7447v0mps6+jolJSVpxIgRmj9/vvbdd19lZ2dr//33b7WXw8iRIzVp0iQ9/vjjwaUMn3/+uebNm6czzzwzpAoCAPZa3dxNHgDQjuXLlxsXXHCB0adPHyMhIcHo3bu3ccEFF7S6nZa5ddEPP/xg/OIXvzDS0tKMrKwsY+rU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vfdeffnll1q6dKmOP/54nXHGGfr+++8l8T7Fqy+++EJ///vfdeCBB4Yc5/2KH/vtt59KSkqCX4sXLw7exvsUP3bu3KkjjjhCCQkJ+s9//qMffvhBDzzwgLKysoLn8O+L+PDFF1+E/E699957kqRzzz1XEr9X8eQvf/mLHnvsMf3tb3/Tjz/+qL/85S+677779PDDDwfPifvfKwNxZ/To0caUKVOC33u9XqNv377GjBkzYjgqNCfJeP3114Pf+3w+o3fv3sb9998fPFZRUWE4nU7jhRdeiMEI0dy2bdsMScYHH3xgGIb/vUlISDBefvnl4Dk//vijIclYsmRJrIaJgKysLOPJJ5/kfYpT1dXVxj777GO89957xjHHHGNMmzbNMAx+r+LJbbfdZowcObLV23if4ssf/vAH48gjj2zzdv59Eb+mTZtmFBUVGT6fj9+rOHPKKacYl156acixs88+27jwwgsNw9gzfq+YSY8zbrdbX375pcaNGxc8ZrVaNW7cOC1ZsiSGI0N71q9fr9LS0pD3LSMjQ2PGjOF9iwOVlZWSpOzsbEnSl19+qcbGxpD3a9iwYRowYADvVwx5vV69+OKLqq2t1dixY3mf4tSUKVN0yimnhLwvEr9X8Wb16tXq27evBg8erAsvvFDFxcWSeJ/izf/93//pkEMO0bnnnqu8vDwdfPDBeuKJJ4K38++L+OR2u/X888/r0ksvlcVi4fcqzhx++OFasGCBVq1aJUn65ptvtHjxYp188smS9ozfK3usB4BQZWVl8nq9ys/PDzmen5+vFStWxGhU2J3S0lJJavV9M29DbPh8Pl1zzTU64ogjtP/++0vyv18Oh0OZmZkh5/J+xca3336rsWPHqqGhQampqXr99dc1YsQILVu2jPcpzrz44ov66quv9MUXX7S4jd+r+DFmzBjNnTtXQ4cOVUlJie644w4dddRR+u6773if4sy6dev02GOPafr06frjH/+oL774QldffbUcDocmTZrEvy/i1BtvvKGKigpdcsklkvjvX7y58cYbVVVVpWHDhslms8nr9eruu+/WhRdeKGnP+Hc7IR3AXm3KlCn67rvvQtZjIr4MHTpUy5YtU2VlpV555RVNmjRJH3zwQayHhV1s2rRJ06ZN03vvvafExMRYDwftMGeLJOnAAw/UmDFjVFhYqJdeeklJSUkxHBl25fP5dMghh+iee+6RJB188MH67rvvNGfOHE2aNCnGo0NbnnrqKZ188snq27dvrIeCVrz00kv6xz/+oX/+85/ab7/9tGzZMl1zzTXq27fvHvN7Rbl7nMnJyZHNZmvRDXLr1q3q3bt3jEaF3THfG963+DJ16lT9+9//1sKFC9W/f//g8d69e8vtdquioiLkfN6v2HA4HBoyZIhGjRqlGTNmaOTIkXrooYd4n+LMl19+qW3btulnP/uZ7Ha77Ha7PvjgA82ePVt2u135+fm8X3EqMzNT++67r9asWcPvVZzp06ePRowYEXJs+PDhweUJ/Psi/mzcuFH/+9//dNlllwWP8XsVX66//nrdeOONOv/883XAAQfooosu0rXXXqsZM2ZI2jN+rwjpccbhcGjUqFFasGBB8JjP59OCBQs0duzYGI4M7Rk0aJB69+4d8r5VVVXps88+432LAcMwNHXqVL3++ut6//33NWjQoJDbR40apYSEhJD3a+XKlSouLub9igM+n08ul4v3Kc6ccMIJ+vbbb7Vs2bLg1yGHHKILL7ww+Hfer/hUU1OjtWvXqk+fPvxexZkjjjiixRahq1atUmFhoST+fRGPnnnmGeXl5emUU04JHuP3Kr7U1dXJag2NuTabTT6fT9Ie8nsV6851aOnFF180nE6nMXfuXOOHH34wrrjiCiMzM9MoLS2N9dB6tOrqauPrr782vv76a0OSMXPmTOPrr782Nm7caBiGYdx7771GZmam8eabbxrLly83zjjjDGPQoEFGfX19jEfe81x11VVGRkaGsWjRIqOkpCT4VVdXFzznyiuvNAYMGGC8//77xtKlS42xY8caY8eOjeGoe6Ybb7zR+OCDD4z169cby5cvN2688UbDYrEY//3vfw3D4H2Kd827uxsG71e8uO6664xFixYZ69evNz7++GNj3LhxRk5OjrFt2zbDMHif4snnn39u2O124+677zZWr15t/OMf/zCSk5ON559/PngO/76IH16v1xgwYIDxhz/8ocVt/F7Fj0mTJhn9+vUz/v3vfxvr1683XnvtNSMnJ8e44YYbgufE++8VIT1OPfzww8aAAQMMh8NhjB492vj0009jPaQeb+HChYakFl+TJk0yDMO/ncMtt9xi5OfnG06n0zjhhBOMlStXxnbQPVRr75Mk45lnngmeU19fb/z2t781srKyjOTkZOOs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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create empty array for callback to store evaluations of the objective function (callback)\n", "objective_func_vals = []\n", "plt.rcParams[\"figure.figsize\"] = (12, 6)\n", "\n", "# fit classifier to data\n", "estimator_classifier.fit(X, y)\n", "\n", "# return to default figsize\n", "plt.rcParams[\"figure.figsize\"] = (6, 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The classifier can now differentiate between classes with an accuracy of:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.92" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# score classifier\n", "estimator_classifier.score(X, y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.3 Compute Local Effective Dimension of trained QNN\n", "\n", "Now that we have trained our network, let's evaluate the local effective dimension based on the trained weights. To do that we access the trained weights directly from the classifier." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "normalized local effective dimensions for trained QNN: [0.58623471 0.60420027 0.61284093 0.6656515 0.68024498 0.69775597\n", " 0.71086553 0.71971528 0.74536669 0.76231854]\n" ] } ], "source": [ "trained_weights = estimator_classifier.weights\n", "\n", "# get Local Effective Dimension for set of trained weights\n", "local_ed_trained = LocalEffectiveDimension(\n", " qnn=estimator_qnn, weight_samples=trained_weights, input_samples=X\n", ")\n", "\n", "local_eff_dim_trained = local_ed_trained.get_effective_dimension(dataset_size=n)\n", "\n", "print(\n", " \"normalized local effective dimensions for trained QNN: \",\n", " local_eff_dim_trained / estimator_qnn.num_weights,\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.4 Compute Local Effective Dimension of untrained QNN\n", "\n", "We can compare this result with the effective dimension of the untrained network, using the `initial_point` as our weight sample:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "normalized local effective dimensions for untrained QNN: [0.73058008 0.74442074 0.75105073 0.79007233 0.80024262 0.81209897\n", " 0.82075796 0.82651404 0.84288243 0.85351517]\n" ] } ], "source": [ "# get Local Effective Dimension for set of untrained weights\n", "local_ed_untrained = LocalEffectiveDimension(\n", " qnn=estimator_qnn, weight_samples=initial_point, input_samples=X\n", ")\n", "\n", "local_eff_dim_untrained = local_ed_untrained.get_effective_dimension(dataset_size=n)\n", "\n", "print(\n", " \"normalized local effective dimensions for untrained QNN: \",\n", " local_eff_dim_untrained / estimator_qnn.num_weights,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### 4.5 Plot and analyze results\n", "\n", "If we plot the effective dimension values before and after training, we can see the following result:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" }, "tags": [ "nbsphinx-thumbnail" ] }, "outputs": [ { "data": { "image/png": "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xg6HiIhIEskzptapU6fYYbonT55Eq1atSi1eJcO5k56DL/dcAgB83NUX5mYsCiYioqrFYAUEQgioVCpDnY6e4POoC8jMVcG/jh16+rsbOxwiIiLJWMVYBV26nY71hxMBAJ91b8LRMEREVCUxCamCInech0ot0KWpC0Lq1TJ2OERERGWid01IWlpaqa+np6c/dTD0ZP9cSkbU+dswNZFhXLfGxg6HiIiozPROQuzt7UudhVMIwVk6y5laLTBjxzkAQP+QuqhX29rIEREREZWd3knInj17yjMO0sMvxx5NTDa6UyNjh0NERPRU9E5CQkNDyzMOeoIHuSrM+1MzMdnIjg3gaKUwckRERERPh4WpVUThickGt/E2djhERERPjUlIFcCJyYiIqDpiElIFLNqlmZgsgBOTERFRNcIkpJLLzMnHhv80E5N9yonJiIioGmESUskdT0xBvlrAw96CE5MREVG1otfomFdeeUXvE27evLnMwVBRR67cBwAEeTkYORIiIiLD0qslxM7OTvtla2uLqKgoHDlyRPt6TEwMoqKiYGdnV26B1lRHrt4DALTyZhJCRETVi14tIatWrdI+/uSTT9C7d28sW7YMcrlmlIZKpcK7774LW1vb8omyhlKpBY4lpABgSwgREVU/kmtCVq5ciTFjxmgTEACQy+UIDw/HypUrDRpcTReblI6MnHxYK03R2JUJHhERVS+Sk5D8/HycP3++yPbz589DrVYbJCjSiHnYFRNY1x5yjoohIqJqRu9p2wsMGTIEQ4cORVxcHIKDgwEAhw4dwqxZszBkyBCDB1iTHbnKolQiIqq+JCch8+bNg6urK+bPn4+bN28CANzc3DB27Fh89NFHBg+wJisYGdPKy9HIkRARERme5CTExMQEH3/8MT7++GOkpaUBAAtSy0FSajaupzyAiQxoUdfe2OEQEREZXJkmK8vPz8euXbuwfv16yGSaWoUbN24gIyPDoMHVZAVDc5u42cJaKTlXJCIiqvQkf7pdvXoVXbt2RUJCAnJyctC5c2fY2Nhg9uzZyMnJwbJly8ojzhrnUVcM60GIiKh6ktwSMnr0aLRq1Qr379+HhYWFdvvLL7+MqKgogwZXk8UUFKV6sx6EiIiqJ8lJyN9//40JEyZAoVDobPf29sb169clB7B06VJ4e3vD3NwcISEhOHz4cKn7p6SkYOTIkXBz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gVKpRIsWLbBz507t6zKZDDExMZg6dSpkMhkmT55c7HkyMzMxcOBAWFtbw83NDfPnzy+yz/fff49WrVrBxsYGrq6u6NevH27fvg1A0w313HPPAQAcHBwgk8kwePBgAMDOnTvRrl072Nvbo1atWnjhhRcQFxdXbBxEFW3UqFE4ePAgfvzxR5w8eRL/93//h65du+LixYsAgN9++w316tXDtm3b4OPjA29vbwwbNgz37t2TfC0mIUQ1gFwux8yZM7FkyRJcu3btqc61e/du3LhxA/v27cOCBQsQERGBF154AQ4ODjh06BBGjBiBt99+u8h1xo4di48++gjHjh1D69at0bNnT9y9excAkJKSgo4dOyIwMBBHjhzBzp07cevWLfTu3VvnHGvWrIFCocCBAwewbNmyYuP7/PPPMX/+fMybNw8nT55EWFgYXnzxRe1/oDdv3kSzZs3w0Ucf4ebNmxgzZkyx5xk7diz27t2LX3/9FX/++Seio6Nx9OhRnX3y8vIwbdo0nDhxAlu2bMGVK1e0iYanpyc2bdoEAIiNjcXNmzfx+eefA9AkOOHh4Thy5AiioqJgYmKCl19+GWq1WsK/BJHhJSQkYNWqVdi4cSPat2+P+vXrY8yYMWjXrp32j4vLly/j6tWr2LhxI7777jusXr0aMTExeO2116RfsFyXxyMioyu8Au7//vc/8eabbwohhPjll19E4f8CIiIiREBAgM6xCxcuFF5eXjrn8vLyEiqVSrvN19dXtG/fXvs8Pz9fWFlZifXr1wshhIiPjxcAxKxZs7T75OXliTp16ojZs2cLIYSYNm2a6NKli861ExMTBQARGxsrhNCsoBoYGPjE9+vu7i5mzJihs+2ZZ54R7777rvZ5QEBAqassp6enC4VCIX766Sfttrt37woLCwsxevToEo/777//BACRnp4uhHi0iumTVnW9c+eOACBOnTpV6n5EhgZA/PLLL9rn27ZtEwCElZWVzpepqano3bu3EEKIt956S+d3UwghYmJiBABx/vx5SddnTQhRDTJ79mx07NixxL/+9dGsWTOYmDxqRHVxcUHz5s21z+VyOWrVqqXtlijQunVr7WNTU1O0atUK586dAwCcOHECe/bsgbW1dZHrxcXFoVGjRgCAoKCgUmNLS0vDjRs30LZtW53tbdu2xYkTJ/R8h5pr5ubmIiQkRLvN0dFR2/9dICYmBpMnT8aJEydw//59bUtGQkICmjZtWuL5L168iEmTJuHQoUNITk7WOa7wvSSqaBkZGZDL5YiJiYFcLtd5reD3083NDaamptrfSwBo0qQJAM3P8OO/J6VhEkJUgzz77LMICwvD+PHjtd0GBUxMTKD5w+iRvLy8IucwMzPTeS6TyYrdJqVrISMjAz179sTs2bOLvObm5qZ9bGVlpfc5y1tmZibCwsIQFhaGtWvXonbt2khISEBYWBhyc3NLPbZnz57w8vLC8uXL4e7uDrVajebNmz/xOKLyFhgYCJVKhdu3b6N9+/bF7tO2bVvk5+cjLi4O9evXBwBcuHABACQXe7MmhKiGmTVrFn777TccPHhQZ3vt2rWRlJSkk4gYcm6Pf//9V/s4Pz8fMTEx2r+eWrZsiTNnzsDb2xsNGjTQ+ZKSeNja2sLd3R0HDhzQ2X7gwIFSWyYeV79+fZiZmeHQoUPabffv39f+RwtoCm3v3r2LWbNmoX379mjcuHGR1p+C0TsqlUq77e7du4iNjcWECRPw/PPPo0mTJrh//77esRE9rYyMDBw/flz7+x0fH4/jx48jISEBjRo1Qv/+/TFw4EBs3rwZ8fHxOHz4MCIjI7F9+3YAmkL3li1b4s0338SxY8cQExODt99+G507d9ZpHdEHkxCiGsbPzw/9+/fH4sWLdbZ36NABd+7cwZw5cxAXF4elS5fi999/N9h1ly5dil9++QXnz5/HyJEjcf/+fbz55psAgJEjR+LevXvo27cv/vvvP8TFxeGPP/7AkCFDdD7A9TF27FjMnj0bGzZsQGxsLMaNG4fjx49j9OjRep/D2toaQ4cOxdixY7F7926cPn0agwcP1umGqlu3LhQKBZYsWYLLly9j69atmDZtms55vLy8IJPJsG3bNty5cwcZGRlwcHBArVq18M033+DSpUvYvXs3wsPDJb1Hoqdx5MgRBAYGIjAwEAAQHh6OwMBATJo0CQCwatUqDBw4EB999BF8fX3Rq1cv/Pfff6hbty4ATavpb7/9BicnJzz77LPo0aMHmjRpgh9//FF6MAaoayGiSqxwYWqB+Ph4oVAoxOP/BXz11VfC09NTWFlZiYEDB4oZM2YUKUx9/FyhoaFFijW9vLzEwoULtdcCINatWyeCg4OFQqEQTZs2Fbt379Y55sKFC+Lll18W9vb2wsLCQjRu3Fh88MEHQq1Wl3id4qhUKjF58mTh4eEhzMzMREBAgPj999919nlSYaoQmuLUN954Q1haWgoXFxcxZ86cIjGsW7dOeHt7C6VSKVq3bi22bt0qAIhjx45p95k6dapwdXUVMplMDBo0SAghxF9//SWaNGkilEql8Pf3F9HR0UUKBIlqApkQj3UCExEREVUAdscQERGRUTAJISIiIqNgEkJERERGwSSEiIiIjIJJCBERERkFkxAiIiIyCiYhREREZBRMQoiIiMgomIQQERGRUTAJISIiIqNgEkJERERGwSSEiIiIjOL/ARSjFMnu/GgdAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the normalized effective dimension for the model\n", "plt.plot(n, np.array(local_eff_dim_trained) / estimator_qnn.num_weights, label=\"trained weights\")\n", "plt.plot(\n", " n, np.array(local_eff_dim_untrained) / estimator_qnn.num_weights, label=\"untrained weights\"\n", ")\n", "\n", "plt.xlabel(\"Number of data\")\n", "plt.ylabel(\"Normalized LOCAL effective dimension\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In general, we should expect the value of the local effective dimension to decrease after training. This can be understood by looking back into the main goal of machine learning, which is to pick a model that is expressive enough to fit your data, but not too expressive that it overfits and performs badly on new data samples. \n", "\n", "Certain optimizers help regularize the overfitting of a model by learning parameters, and this action of learning inherently reduces a model’s expressiveness, as measured by the local effective dimension. Following this logic, a randomly initialized parameter set will most likely produce a higher effective dimension that the final set of trained weights, because that model with that particular parameterization is “using more parameters” unnecessarily to fit the data. After training (with the implicit regularization), a trained model will not need to use so many parameters and thus have more “inactive parameters” and a lower effective dimension. \n", "\n", "We must keep in mind though that this is the general intuition, and there might be cases where a randomly selected set of weights happens to provide a lower effective dimension than the trained weights for a specific model. " ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit0.45.2
qiskit_machine_learning0.7.1
qiskit_algorithms0.2.2
System information
Python version3.10.13
Python compilerGCC 9.4.0
Python buildmain, Jan 10 2024 19:45:45
OSLinux
CPUs1
Memory (Gb)7.744113922119141
Wed Jan 24 07:01:58 2024 UTC
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of Qiskit

© Copyright IBM 2017, 2024.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" ] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 1 }