From 07e8411b50d9d59f5936623e8e5d3edced5eb4ab Mon Sep 17 00:00:00 2001 From: jfrery Date: Tue, 21 Dec 2021 22:26:29 +0100 Subject: [PATCH] feat: update IrisFHE.ipynb with signed weights + add visualization --- docs/user/advanced_examples/IrisFHE.ipynb | 168 +++++++++++++++------- 1 file changed, 118 insertions(+), 50 deletions(-) diff --git a/docs/user/advanced_examples/IrisFHE.ipynb b/docs/user/advanced_examples/IrisFHE.ipynb index 12ec2db58..bbdb2ac46 100644 --- a/docs/user/advanced_examples/IrisFHE.ipynb +++ b/docs/user/advanced_examples/IrisFHE.ipynb @@ -13,25 +13,11 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 1, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "import torch\n", "from torch import nn\n", - "import numpy as np\n", - "\n", - "# Set the random seed for reproducibility\n", - "torch.manual_seed(1)" + "import numpy as np" ] }, { @@ -50,9 +36,9 @@ "class FCIris(torch.nn.Module):\n", " \"\"\"Neural network for Iris classification\n", " \n", - " We define a fully connected network with five (5) fully connected (fc) layers that \n", + " We define a fully connected network with five (3) fully connected (fc) layers that \n", " perform feature extraction and one (fc) layer to produce the final classification. \n", - " We will use 15 neurons on all the feature extractor layers to ensure that the FHE accumulators\n", + " We will use 3 neurons on all layers to ensure that the FHE accumulators\n", " do not overflow (we are currently only allowed a maximum of 7 bits-width).\n", "\n", " Due to accumulator limits, we have to design a deep network with only a few neurons on each layer. \n", @@ -64,19 +50,13 @@ " super().__init__()\n", "\n", " # The first layer processes the input data, in our case 4 dimensional vectors \n", - " self.linear1 = nn.Linear(input_size, 15)\n", + " self.linear1 = nn.Linear(input_size, 3)\n", " self.sigmoid1 = nn.Sigmoid()\n", - " # Next, we add four intermediate layers to perform features extraction\n", - " self.linear2 = nn.Linear(15, 15)\n", + " # Next, we add a one intermediate layer\n", + " self.linear2 = nn.Linear(3, 3)\n", " self.sigmoid2 = nn.Sigmoid()\n", - " self.linear3 = nn.Linear(15, 15)\n", - " self.sigmoid3 = nn.Sigmoid()\n", - " self.linear4 = nn.Linear(15, 15)\n", - " self.sigmoid4 = nn.Sigmoid()\n", - " self.linear5 = nn.Linear(15, 15)\n", - " self.sigmoid5 = nn.Sigmoid()\n", " # Finally, we add the decision layer for 3 output classes encoded as one-hot vectors\n", - " self.decision = nn.Linear(15, 3)\n", + " self.decision = nn.Linear(3, 3)\n", "\n", " def forward(self, x):\n", "\n", @@ -84,12 +64,6 @@ " x = self.sigmoid1(x)\n", " x = self.linear2(x)\n", " x = self.sigmoid2(x)\n", - " x = self.linear3(x)\n", - " x = self.sigmoid3(x)\n", - " x = self.linear4(x)\n", - " x = self.sigmoid4(x)\n", - " x = self.linear5(x)\n", - " x = self.sigmoid5(x)\n", " x = self.decision(x)\n", "\n", " return x\n" @@ -114,7 +88,7 @@ "\n", "# Split into train and test\n", "from sklearn.model_selection import train_test_split\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=42)\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)\n", "\n", "# Convert to tensors\n", "X_train = torch.tensor(X_train).float()\n", @@ -129,10 +103,10 @@ "criterion = nn.CrossEntropyLoss()\n", "\n", "# Define our optimizer\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n", + "optimizer = torch.optim.SGD(model.parameters(), lr=0.1)\n", "\n", "# Define the number of iterations\n", - "n_iters = 5000\n", + "n_iters = 5001\n", "\n", "# Define the batch size\n", "batch_size = 16\n" @@ -154,11 +128,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iterations: 00 | Loss: 1.1348 | Accuracy: 31.25%\n", - "Iterations: 1000 | Loss: 0.4863 | Accuracy: 68.75%\n", - "Iterations: 2000 | Loss: 0.0661 | Accuracy: 100.00%\n", - "Iterations: 3000 | Loss: 0.0185 | Accuracy: 100.00%\n", - "Iterations: 4000 | Loss: 0.0477 | Accuracy: 100.00%\n" + "Iterations: 00 | Loss: 1.1663 | Accuracy: 37.50%\n", + "Iterations: 1000 | Loss: 0.5603 | Accuracy: 87.50%\n", + "Iterations: 2000 | Loss: 0.3205 | Accuracy: 93.75%\n", + "Iterations: 3000 | Loss: 0.1029 | Accuracy: 100.00%\n", + "Iterations: 4000 | Loss: 0.0304 | Accuracy: 100.00%\n", + "Iterations: 5000 | Loss: 0.0261 | Accuracy: 100.00%\n" ] } ], @@ -208,7 +183,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Compile the model" + "## Compile the model\n", + "\n", + "The `compile_torch_model` applies first a quantization to `model` with `n_bits` of precision using `X_train` as the calibration dataset and compile the model to its FHE counterparts. Here we use 3 bits of precision such that the accumulator does not overflow our 7 bits limitation." ] }, { @@ -221,7 +198,7 @@ "quantized_compiled_module = compile_torch_model(\n", " model,\n", " X_train,\n", - " n_bits=2,\n", + " n_bits=3,\n", ")" ] }, @@ -264,7 +241,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████| 23/23 [04:14<00:00, 11.07s/it]\n" + "100%|██████████| 38/38 [00:54<00:00, 1.43s/it]\n" ] } ], @@ -297,15 +274,104 @@ "output_type": "stream", "text": [ "Test Accuracy: 100.00%\n", - "Test Accuracy Quantized Inference: 73.91%\n", - "Test Accuracy Homomorphic Inference: 73.91%\n" + "Test Accuracy Quantized Inference: 97.37%\n", + "Test Accuracy Homomorphic Inference: 97.37%\n" ] } ], "source": [ "print(f'Test Accuracy: {100*(y_pred.argmax(1) == y_test).float().mean():.2f}%')\n", "print(f'Test Accuracy Quantized Inference: {100*(quant_model_predictions.argmax(1) == y_test_numpy).mean():.2f}%')\n", - "print(f'Test Accuracy Homomorphic Inference: {100*(homomorphic_predictions.argmax(1) == y_test_numpy).mean():.2f}%') \n" + "print(f'Test Accuracy Homomorphic Inference: {100*(homomorphic_predictions.argmax(1) == y_test_numpy).mean():.2f}%') " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.decomposition import PCA\n", + "pca = PCA(n_components=2)\n", + "X_train_2d = pca.fit_transform(X_train_numpy)\n", + "\n", + "b_min = np.min(X_train_2d, axis=0)\n", + "b_max = np.max(X_train_2d, axis=0)\n", + "\n", + "grid_dims = tuple([np.linspace(b_min[i], b_max[i], 128) for i in range(X_train_2d.shape[1])])\n", + "ndgrid_tuple = np.meshgrid(*grid_dims)\n", + "grid_2d = np.vstack([g.ravel() for g in ndgrid_tuple]).transpose()\n", + "\n", + "grid_test = pca.inverse_transform(grid_2d)\n", + "\n", + "grid_pred_all = quantized_compiled_module(grid_test)\n", + "grid_pred_all_original = model(torch.tensor(grid_test).float()).detach().numpy()\n", + "\n", + "pred_classes = np.argmax(grid_pred_all, axis=1).astype(np.int32)\n", + "pred_classes_original = np.argmax(grid_pred_all_original, axis=1).astype(np.int32)\n", + "\n", + "from matplotlib import pyplot as plt\n", + "\n", + "cmap = 'autumn'\n", + "# Create two subplots and set their locations\n", + "plt.clf()\n", + "fig, axs = plt.subplots(1, 2, figsize=(12, 6))\n", + "\n", + "# Plot original model contour plot\n", + "axs[0].contourf(ndgrid_tuple[0], ndgrid_tuple[1], pred_classes_original.reshape(ndgrid_tuple[0].shape), cmap=cmap)\n", + "\n", + "# Plot the scatter with marker borders\n", + "axs[0].scatter(X_train_2d[:, 0], X_train_2d[:, 1], c=y_train_numpy, s=50, edgecolors='k', cmap=cmap)\n", + "\n", + "# Add title and axis labels\n", + "axs[0].set_title('Original Inference')\n", + "\n", + "\n", + "\n", + "\n", + "# Plot quantized model contour plot\n", + "axs[1].contourf(ndgrid_tuple[0], ndgrid_tuple[1], pred_classes.reshape(ndgrid_tuple[0].shape), cmap=cmap)\n", + "\n", + "# Plot the scatter with marker borders\n", + "axs[1].scatter(X_train_2d[:, 0], X_train_2d[:, 1], c=y_train_numpy, s=50, edgecolors='k', cmap=cmap)\n", + "\n", + "# Add title and axis labels\n", + "axs[1].set_title('Quantized Inference')\n", + "\n", + "\n", + "\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the above plot, we show the decision boundaries for both the original and quantized model. The quantized model has it's decision boundaries (colored regions) slightly shifted compared to the original model. This is due to the low bit quantization applied to the model in post training.\n", + "\n", + "Here we do not compute the contour plot for the FHE inference as this would be really costly but it should be pretty close to the quantized model. " ] }, { @@ -316,10 +382,12 @@ "\n", "In this notebook, we presented a few steps to have a model (torch neural network) inference in over homomorphically encrypted data: \n", "- We first trained a fully connected neural network yielding ~100% accuracy\n", - "- Then, we quantized it using Concrete Framework. As we can see, the extreme post training quantization (only 2 bits of precision for weights, inputs and activations) made the neural network accruracy slighlty drop (~73%).\n", + "- Then, we quantized it using Concrete Framework. As we can see, the extreme post training quantization (only 3 bits of precision for weights, inputs and activations) made the neural network accuracy slightly drop (~97%).\n", "- We then used the compiled inference into its FHE equivalent to get our FHE predictions over the test set\n", "\n", - "The Homomorphic inference achieves a similar accuracy as the quantized model inference. " + "The Homomorphic inference achieves a similar accuracy as the quantized model inference.\n", + "\n", + "Disclaimer: post training quantization with such a low bit width (<=3) can yield different results for the quantized model which will mainly depends on the range of the learned weights." ] } ],