{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Differentiable Vietoris-Rips persistent homology\n", "\n", "In this example, we essentially reproduce the *toy experiment* from\n", "\n", "**Connectivity-Optimized Representation Learning via Persistent Homology** \n", "C. Hofer, R. Kwitt, M. Dixit and M. Niethammer \n", "ICML '19 \n", "[Online](http://proceedings.mlr.press/v97/hofer19a.html)\n", "\n", "## Notation\n", "\n", "- $S$ is a mini-batch of points $x \\in \\mathbb{R}^2$ of size $|S|=b$\n", "- $\\dagger(S)$ is the set of death-times obtained from the VR PH of $S$\n", "- $\\eta$ is the desired lifetime value (in our case $\\eta=2$)\n", "- $\\varepsilon_t, t \\in \\dagger(S)$ are the pairwise distance values of points in $S$\n", "\n", "## Learning task\n", "\n", "Given a 2D point cloud (sampled from three Gaussians), find a mapping \n", "$f_\\theta: \\mathbb{R}^2 \\to \\mathbb{R}^2$ (implemented via a simple MLP) such that the \n", "*connectivity loss* \n", "\n", "$$L_\\eta(S) = \\sum_{t \\in \\dagger(S)} |\\eta -\\epsilon_t|$$\n", "\n", "is minimized over mini-batches of samples ($S$).\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# PyTorch imports\n", "import torch\n", "import torch.nn as nn\n", "from torch.utils.data import DataLoader\n", "from torch.utils.data.dataset import Subset, random_split, TensorDataset\n", "\n", "# matplotlib imports\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "from matplotlib.colors import LinearSegmentedColormap\n", "\n", "# misc\n", "from collections import defaultdict, Counter\n", "from itertools import combinations\n", "\n", "# imports from torchph\n", "from torchph.pershom import vr_persistence_l1\n", "\n", "\n", "def apply_model(model, dataset, batch_size=100, device='cpu'):\n", " \"\"\"\n", " Utility function which applies ``model`` to ``dataset``. \n", " \"\"\"\n", " dl = torch.utils.data.DataLoader(\n", " dataset,\n", " batch_size=batch_size,\n", " num_workers=0\n", " )\n", " X, Y = [], []\n", "\n", " model.eval()\n", " model.to(device)\n", "\n", " with torch.no_grad():\n", " for x, y in dl:\n", "\n", " x = x.to(device)\n", " x = model(x)\n", "\n", " # If the model returns more than one tensor, e.g., encoder of an\n", " # autoencoder model, take the first one as output...\n", " if isinstance(x, (tuple, list)):\n", " x = x[0]\n", "\n", " X += x.cpu().tolist()\n", " Y += (y.tolist())\n", "\n", " return X, Y\n", "\n", "# Run everything on the GPU\n", "device = \"cuda\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Toy data\n", "\n", "First, we create a toy dataset with 2D points sampled from three Gaussians with different means and covariances. In particular, we create a class which derives from `torch.utils.data.Dataset` so we can later conveniently use PyTorch's dataloader." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "class Toy2DData(torch.utils.data.Dataset):\n", " def __init__(self, n_samples_by_class):\n", " super().__init__()\n", " X = []\n", " Y = [] \n", " self.mus = [\n", " [4.0,4.0],\n", " [3.0,3.0],\n", " [0.0,0.5]\n", " ]\n", " self.sigmas = [\n", " [1.0,1.0],\n", " [3.0,3.0],\n", " [0.5,0.5]\n", " ]\n", " \n", " for y, (m, s) in enumerate(zip(self.mus, self.sigmas)):\n", " X_class = torch.randn((n_samples_by_class, 2))* torch.tensor(s) - torch.tensor(m)\n", " X.append(X_class)\n", " Y += n_samples_by_class*[0] \n", " \n", " self.X = torch.cat(X, dim=0)\n", " self.Y = Y\n", " \n", " def __len__(self):\n", " return len(self.Y)\n", "\n", " def __getitem__(self, item):\n", " return self.X[item], self.Y[item]\n", " \n", " def __iter__(self):\n", " return zip(self.X, self.Y) \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's sample 1,500 points from this dataset (500 per Gaussian) and visualize the configuration in $\\mathbb{R}^2$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "dataset = Toy2DData(500)\n", "\n", "plt.figure(figsize=(5,5))\n", "X = dataset.X.numpy()\n", "plt.plot(X[:,0],\n", " X[:,1], '.',markersize=2);\n", "plt.xlabel('x')\n", "plt.ylabel('y')\n", "plt.title('Toy2DData');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Model & Optimization\n", "\n", "We implement our mapping $f_\\theta$ as a simple MLP with three linear layers, interleaved with LeakyReLU activations. For optimization we use ADAM. We run over 30 epochs with a learning rate of $0.01$ and over 20 additional epochs with a learning rate of $0.001$." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch: 50 | Loss: 37.76\r" ] } ], "source": [ "model = nn.Sequential(\n", " nn.Linear(2, 10), \n", " nn.LeakyReLU(),\n", " nn.Linear(10, 10), \n", " nn.LeakyReLU(), \n", " nn.Linear(10, 2)\n", ").to(device)\n", "\n", "\n", "opt = torch.optim.Adam(\n", " model.parameters(), \n", " lr=0.01)\n", "\n", "dl = DataLoader(\n", " dataset, \n", " batch_size=50, \n", " shuffle=True, \n", " drop_last=True)\n", "\n", "# Get the transformed points at initialization\n", "transformed_pts = [apply_model(model, dataset, device=device)[0]]\n", "\n", "iteration_loss = []\n", "for epoch_i in range(1, 51):\n", " epoch_loss = 0\n", " \n", " model.train()\n", "\n", " # Learning rate schedule\n", " if epoch_i == 20:\n", " for param_group in opt.param_groups:\n", " param_group['lr'] = 0.001\n", " if epoch_i == 40:\n", " for param_group in opt.param_groups:\n", " param_group['lr'] = 0.0001\n", "\n", " # Iterate over batches\n", " for x, _ in dl: \n", "\n", " x = x.to(device)\n", "\n", " # Compute f_\\theta(S)\n", " x_hat = model(x)\n", "\n", " \"\"\"\n", " Loss computation (for \\eta=2):\n", " \n", " (1) Compute VR persistent homology (0-dim)\n", " (2) Get lifetime values\n", " (3) Compute connectivity loss\n", " \n", " Note that all barcode elements are of the form (0,\\varepsilon_t)!\n", " \"\"\"\n", " loss = 0 \n", " pers = vr_persistence_l1(x_hat, 0, 0)[0][0] # VR PH computation\n", " pers = pers[:, 1] # get lifetimes\n", " loss = (pers - 2.0).abs().sum() # \n", " \n", " # Track loss over iterations and epochs\n", " iteration_loss.append(loss.item())\n", " epoch_loss += loss.item()\n", "\n", " # Zero-grad, backprop, update!\n", " opt.zero_grad() \n", " loss.backward()\n", " opt.step()\n", "\n", " print('Epoch: {:2d} | Loss: {:.2f}'.format(epoch_i, epoch_loss/len(dl)), end='\\r')\n", "\n", " x_hat, _ = apply_model(\n", " model, \n", " dataset, \n", " device=device)\n", " transformed_pts.append(x_hat)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Visualize the loss over all iterations ..." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(5,3))\n", "plt.plot(iteration_loss)\n", "plt.xlabel('#Batches');\n", "plt.ylabel('Loss');\n", "plt.grid();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualization\n", "\n", "To study the effect of minimizing the connectivity loss, we freeze the model and check how the min/max/avg. lifetime changes over (1) epochs." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "def track_persistence_info(points, batch_size, N):\n", " \n", " ds = TensorDataset(\n", " torch.tensor(points), \n", " torch.tensor([0]*len(points)))\n", " \n", " dl = DataLoader(\n", " ds, \n", " batch_size=batch_size, \n", " shuffle=True, \n", " drop_last=True) \n", " \n", " stats = defaultdict(list)\n", " for i in range(N):\n", " for x,_ in dl:\n", " \n", " x = x.to(device)\n", " \n", " pers = vr_persistence_l1(x, 0, 0)[0][0]\n", " pers = pers[:, 1]\n", "\n", " stats['alpha'].append(pers.min().item())\n", " stats['beta'].append(pers.max().item())\n", " stats['avgeps'].append(pers.mean().item())\n", "\n", " return stats" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def visualize(transformed_pts, ax):\n", " \n", " pts = np.array(transformed_pts)\n", " x, y = pts[:,0], pts[:,1] \n", " \n", " ax.plot(x, y, '.', **{'markersize':2, 'color':'black', 'alpha': 0.3})\n", "\n", " stats = track_persistence_info(\n", " pts, \n", " 50,\n", " 10)\n", " \n", " ax.set_title(r'$\\widehat{\\alpha},\\widehat{\\varepsilon}, \\widehat{\\beta}$ = ' + '{:.2f}, {:.2f}, {:.2f}'.format(\n", " np.mean(np.array(stats['alpha'])),\n", " np.mean(np.array(stats['avgeps'])),\n", " np.mean(np.array(stats['beta']))),\n", " position=(0.04,0.02), \n", " fontsize=12, \n", " horizontalalignment='left',\n", " bbox=dict(facecolor='white', alpha=0.7));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From left to right: Initialization (epoch 0), after 5 epochs, after 50 epochs:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, axes = plt.subplots(1, 3, figsize=(14, 4))\n", "for i, epoch in enumerate([0, 5, 50]):\n", " ax = axes[i]\n", " visualize(transformed_pts[epoch], ax)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Note**: Observe how the $[\\hat{\\alpha}, \\hat{\\beta}]$ interval gets tighter throughout the epochs and $\\hat{\\varepsilon}$ gets closer to $\\eta=2$. However, arranging batches of size 50 in the desired manner is impossible in $\\mathbb{R}^2$ which is why the actual value of $2$ is never reached (for details see paper)." ] } ], "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": 2 }