{ "cells": [ { "cell_type": "markdown", "metadata": { "cell_id": "C922FC3BB88F43898C0ADD60D8CE405C" }, "source": [ "# Gaussian mixture density networks in one dimension\n", "*Thomas Viehmann* \n", "\n", "Today we want to implement a simple Gaussian mixture density network. Mixture Density Networks have been introduced by [Bishop](http://publications.aston.ac.uk/373/1/NCRG_94_004.pdf) in the 1994 article of the same name.\n", "\n", "The basic idea is simple: Given some input, say, $x$ we estimate the distribution of $Y | X=x$ as a mixture (in our case of Gaussians). In mixture density networks, the parameters of the mixture and its components are computed as a neural net. The canonical loss function is the negative log likelihood and we can backpropagate the loss through the parameters of the distribution to the network coefficients (so at the top there is what Kingma and Welling call the reparametrization trick and then there is plain neural network training).\n", "\n", "Mixture density models are generative in the sense that you can sample from the estimated distribution $Y | X=x$.\n", "\n", "Today we do this in 1d, but one popular application (in fact the one I implemented first) is the handwriting generation mode of [A. Graves: Generating Sequences With Recurrent Neural Networks](https://arxiv.org/abs/1308.0850).\n", "\n", "First, we import the world" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cell_id": "22B45543503E4A828049ABAA6A14BEAD" }, "outputs": [], "source": [ "from matplotlib import pyplot\n", "%matplotlib inline\n", "import torch\n", "import torch.utils.data\n", "import numpy\n", "from torch.autograd import Variable\n", "import IPython\n", "import itertools\n", "import seaborn\n" ] }, { "cell_type": "markdown", "metadata": { "cell_id": "5344669D4C254B8A8F12975250E266C5" }, "source": [ "I used [David Ha's example](http://blog.otoro.net/2015/11/24/mixture-density-networks-with-tensorflow/) which is almost twice as wiggly as Bishop's original example. Let's have a dataset and a data loader.\n", "\n", "I will differ from Ha and Bishop in that I don't start with the case of the distribution to learn being the graph of a function of the condition $x$ (plus error), but we jump right into the non-graphical case." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "cell_id": "9B43F7C6426F4B17801AE286415431F5" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_train = 1000\n", "batch_size = 32\n", "class DS(torch.utils.data.Dataset):\n", " def __init__(self, n):\n", " self.n = n\n", " self.y = torch.rand(n)*21-10.5\n", " self.x = torch.sin(0.75*self.y)*7.0+self.y*0.5+torch.randn(n)\n", " def __len__(self):\n", " return self.n\n", " def __getitem__(self,i):\n", " return (self.x[i],self.y[i])\n", "\n", "train_ds = DS(n_train)\n", "pyplot.scatter(train_ds.x.numpy(),train_ds.y.numpy(), s=2)\n", "pyplot.show()\n", "train_dl = torch.utils.data.DataLoader(train_ds, batch_size=batch_size)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "cell_id": "31266ED2AAA24AA79147FFC3FE364E37" }, "outputs": [], "source": [ "class GaussianMixture1d(torch.nn.Module):\n", " def __init__(self, n_in, n_mixtures, eps=0):\n", " super(GaussianMixture1d, self).__init__()\n", " self.n_in = n_in\n", " self.eps = eps\n", " self.n_mixtures = n_mixtures \n", " self.lin = torch.nn.Linear(n_in, 3*n_mixtures)\n", " self.log_2pi = numpy.log(2*numpy.pi)\n", "\n", " def params(self, inp, pi_bias=0, std_bias=0):\n", " # inp = batch x input\n", " p = self.lin(inp)\n", " pi = torch.nn.functional.softmax(p[:,:self.n_mixtures]*(1+pi_bias)) # mixture weights (probability weights)\n", " mu = p[:,self.n_mixtures:2*self.n_mixtures] # means of the 1d gaussians\n", " sigma = (p[:,2*self.n_mixtures:]-std_bias).exp() # stdevs of the 1d gaussians\n", " sigma = sigma+self.eps\n", " return pi,mu,sigma\n", "\n", " def forward(self, inp, x):\n", " # x = batch x 3 (=movement x,movement y,end of stroke)\n", " # loss, negative log likelihood\n", " pi,mu,sigma = self.params(inp)\n", " log_normal_likelihoods = -0.5*((x.unsqueeze(1)-mu) / sigma)**2-0.5*self.log_2pi-torch.log(sigma) # batch x n_mixtures\n", " log_weighted_normal_likelihoods = log_normal_likelihoods+pi.log() # batch x n_mixtures\n", " maxes,_ = log_weighted_normal_likelihoods.max(1)\n", " mixture_log_likelihood = (log_weighted_normal_likelihoods-maxes.unsqueeze(1)).exp().sum(1).log()+maxes # log-sum-exp with stabilisation\n", " neg_log_lik = -mixture_log_likelihood\n", " return neg_log_lik\n", "\n", " def predict(self, inp, pi_bias=0, std_bias=0):\n", " # inp = batch x n_in\n", " pi,mu,sigma = self.params(inp, pi_bias=pi_bias, std_bias=std_bias)\n", " x = inp.data.new(inp.size(0)).normal_()\n", " mixture = pi.data.multinomial(1) # batch x 1 , index to the mixture component\n", " sel_mu = mu.data.gather(1, mixture).squeeze(1)\n", " sel_sigma = sigma.data.gather(1, mixture).squeeze(1)\n", " x = x*sel_sigma+sel_mu\n", " return Variable(x)\n", "\n", "class Model(torch.nn.Module):\n", " def __init__(self, n_inp = 1, n_hid = 24, n_mixtures = 24):\n", " super(Model, self).__init__()\n", " self.lin = torch.nn.Linear(n_inp, n_hid)\n", " self.mix = GaussianMixture1d(n_hid, n_mixtures)\n", " def forward(self, inp, x):\n", " h = torch.tanh(self.lin(inp))\n", " l = self.mix(h, x)\n", " return l.mean()\n", " def predict(self, inp, pi_bias=0, std_bias=0):\n", " h = torch.tanh(self.lin(inp))\n", " return self.mix.predict(h, std_bias=std_bias, pi_bias=pi_bias)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "cell_id": "278E3874B9E24318AB050414F21185CC" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1990 1.3907438516616821\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m = Model(1, 32, 20) \n", "opt = torch.optim.Adam(m.parameters(), 0.001)\n", "m.cuda()\n", "losses = []\n", "for epoch in range(2000):\n", " thisloss = 0\n", " for i,(x,y) in enumerate(train_dl):\n", " x = Variable(x.float().unsqueeze(1).cuda())\n", " y = Variable(y.float().cuda())\n", " opt.zero_grad()\n", " loss = m(x, y)\n", " loss.backward()\n", " thisloss += loss.data[0]/len(train_dl)\n", " opt.step()\n", " losses.append(thisloss)\n", " if epoch % 10 == 0:\n", " IPython.display.clear_output(wait=True)\n", " print (epoch, loss.data[0])\n", " x = Variable(torch.rand(1000,1).cuda()*30-15)\n", " y = m.predict(x)\n", " y2 = m.predict(x, std_bias=10)\n", " pyplot.subplot(1,2,1)\n", " pyplot.scatter(train_ds.x.numpy(),train_ds.y.numpy(), s=2)\n", " pyplot.scatter(x.data.cpu().squeeze(1).numpy(), y.data.cpu().numpy(),facecolor='r', s=3)\n", " pyplot.scatter(x.data.cpu().squeeze(1).numpy(), y2.data.cpu().numpy(),facecolor='g', s=3)\n", " pyplot.subplot(1,2,2)\n", " pyplot.title(\"loss\")\n", " pyplot.plot(losses)\n", " pyplot.show()\n" ] }, { "cell_type": "markdown", "metadata": { "cell_id": "EA1910F4F9A3455CBAABCFA8EA296F2F" }, "source": [ "Not bad!\n", "The green line basically gives the means of the mixture components rather than drawing from the mixture. This is implemented by biasing the variance. In some applications we might want to \"clean\" the output but not disable stochasticity completely. This can be achieved by biasing the variance of the components and biasing the component probabilites towards the largest one in the softmax.\n", "I learnt this trick from Gaves' article.\n", "\n", "## Alternatives? Trying a GAN approach.\n", "\n", "We might also try to reproduce a SLOGAN (Single sided Lipschitz Objective General Adversarial Network, a Wasserstein GAN variant).\n", "Note that while the MDN above tries to learn the distribution of $y$ given $x$, the GAN below tries to learn the unconditional distribution of pairs $(x,y)$.\n", "\n", "I wrote a bit about the Wasserstein GAN and SLOGAN in two [blog](https://lernapparat.de/improved-wasserstein-gan/) [posts](https://lernapparat.de/more-improved-wgan/)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "cell_id": "E55E4BFA581243F98272E89B77C77E13" }, "outputs": [], "source": [ "class G(torch.nn.Module):\n", " def __init__(self, n_random=2, n_hidden=50):\n", " super(G, self).__init__()\n", " self.n_random = n_random\n", " self.l1 = torch.nn.Linear(n_random,n_hidden)\n", " self.l2 = torch.nn.Linear(n_hidden,n_hidden)\n", " #self.l2b = torch.nn.Linear(n_hidden,n_hidden)\n", " self.l3 = torch.nn.Linear(n_hidden,2)\n", " def forward(self, batch_size=32):\n", " x = Variable(self.l1.weight.data.new(batch_size, self.n_random).normal_())\n", " x = torch.nn.functional.relu(self.l1(x))\n", " x = torch.nn.functional.relu(self.l2(x))\n", " #x = torch.nn.functional.relu(self.l2b(x))\n", " x = self.l3(x)\n", " return x\n", "\n", "class D(torch.nn.Module):\n", " def __init__(self, lam=10.0, n_hidden=50):\n", " super(D, self).__init__()\n", " self.l1 = torch.nn.Linear(2,n_hidden)\n", " self.l2 = torch.nn.Linear(n_hidden,n_hidden)\n", " self.l3 = torch.nn.Linear(n_hidden,1)\n", " self.one = torch.FloatTensor([1]).cuda()\n", " self.mone = torch.FloatTensor([-1]).cuda()\n", " self.lam = lam\n", " def forward(self, x):\n", " x = torch.nn.functional.relu(self.l1(x))\n", " x = torch.nn.functional.relu(self.l2(x))\n", " x = self.l3(x)\n", " return x\n", " def slogan_loss_and_backward(self, real, fake):\n", " self.zero_grad()\n", " f_real = self(real.detach())\n", " f_real_sum = f_real.sum()\n", " f_real_sum.backward(self.one, retain_graph=True)\n", " f_fake = self(fake.detach())\n", " f_fake_sum = f_fake.sum()\n", " f_fake_sum.backward(self.mone, retain_graph=True)\n", " f_mean = (f_fake_sum+f_real_sum)\n", " f_mean.abs().backward(retain_graph=True)\n", " dist = ((real.view(real.size(0),-1).unsqueeze(0)-fake.view(fake.size(0),-1).unsqueeze(1))**2).sum(2)**0.5\n", " f_diff = (f_real.unsqueeze(0)-f_fake.unsqueeze(1)).squeeze(2).abs()\n", " lip_dists = f_diff/(dist+1e-6)\n", " lip_penalty = (self.lam * (lip_dists.clamp(min=1)-1)**2).sum()\n", " lip_penalty.backward()\n", " return f_real_sum.data[0],f_fake_sum.data[0],lip_penalty.data[0], lip_dists.data.mean()\n", "\n", "d = D()\n", "d.cuda()\n", "g = G(n_random=256, n_hidden=128)\n", "g.cuda()\n", "opt_d = torch.optim.Adam(d.parameters(), lr=1e-3)\n", "opt_g = torch.optim.Adam(g.parameters(), lr=1e-3)\n", "\n", "for p in itertools.chain(d.parameters(), g.parameters()):\n", " if p.data.dim()>1:\n", " torch.nn.init.orthogonal(p, 2.0)\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "cell_id": "6068FC8188A643C4AF91BEF73FDFBF21" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "30000\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def endless(dl):\n", " while True:\n", " for i in dl:\n", " yield i\n", "\n", "batch_size=256\n", "train_dl = torch.utils.data.DataLoader(train_ds, batch_size=batch_size)\n", "train_iter = endless(train_dl)\n", "\n", "for i in range(30001):\n", " if i>0 and i%10000 == 0:\n", " for pg in opt_g.param_groups:\n", " pg['lr'] /= 3\n", " for pg in opt_d.param_groups:\n", " pg['lr'] /= 3\n", " print (\"new lr\",pg['lr'])\n", " for j in range(100 if i < 10 or i % 100 == 0 else 10):\n", " g.eval()\n", " d.train()\n", " for p in d.parameters():\n", " p.requires_grad = True\n", " real_x,real_y = next(train_iter)\n", " real = Variable(torch.stack([real_x.float().cuda(), real_y.float().cuda()],dim=1))\n", " fake = g(batch_size=batch_size)\n", " l_r, l_f, l_lip, lip_mean = d.slogan_loss_and_backward(real, fake)\n", " opt_d.step()\n", " if i % 100 == 0:\n", " print (\"f_r:\",l_r,\"f_fake:\",l_f, \"lip loss:\", l_lip, \"lip_mean\", lip_mean)\n", " g.train()\n", " d.eval()\n", " for p in d.parameters():\n", " p.requires_grad = False\n", " g.zero_grad()\n", " fake = g(batch_size=batch_size)\n", " f = d(fake)\n", " fsum = f.sum()\n", " fsum.backward()\n", " opt_g.step()\n", " if i % 1000 == 0:\n", " IPython.display.clear_output(wait=True)\n", " print (i)\n", " fake = g(batch_size=10000)\n", " fd = fake.data.cpu().numpy()\n", " pyplot.figure(figsize=(15,5))\n", " pyplot.subplot(1,3,1)\n", " pyplot.title(\"Generated Density\")\n", " seaborn.kdeplot(fd[:,0], fd[:,1], shade=True, cmap='Greens', bw=0.01)\n", " pyplot.subplot(1,3,2)\n", " pyplot.title(\"Data Density Density\")\n", " seaborn.kdeplot(train_ds.x.numpy(),train_ds.y.numpy(), shade=True, cmap='Greens', bw=0.01)\n", " pyplot.subplot(1,3,3)\n", " pyplot.title(\"Data (blue) and generated (red)\")\n", " pyplot.scatter(train_ds.x.numpy(),train_ds.y.numpy(), s=2)\n", " pyplot.scatter(fd[:,0], fd[:,1], facecolor='r',s=3, alpha=0.5)\n", " pyplot.show()" ] }, { "cell_type": "markdown", "metadata": { "cell_id": "B5246D8BCC8F4C918534B61800E64591" }, "source": [ "We can try to see where $f$ sees the most discriminative power between the real sample and the generated fake distribution. Note that as $f$ depends on both distributions, it is not as simple as $f$ is low on the real data.\n", "\n", "While we are far from perfectly resolving the path, it does not look too bad, either." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "cell_id": "D97C7F36FBE8499B99967A297184EAE5" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N_dim = 100\n", "x_test = torch.linspace(-20,20, N_dim)\n", "y_test = torch.linspace(-15,15, N_dim)\n", "x_test = (x_test.unsqueeze(0)*torch.ones(N_dim,1)).view(-1)\n", "y_test = (y_test.unsqueeze(1)*torch.ones(1,N_dim)).view(-1)\n", "xy_test = Variable(torch.stack([x_test, y_test], dim=1).cuda())\n", "f_test = d(xy_test)\n", "pyplot.imshow(f_test.data.view(N_dim,N_dim).cpu().numpy(), origin='lower', cmap=pyplot.cm.gist_heat_r, extent=(-20,20,-15,15))\n", "pyplot.scatter(train_ds.x.numpy(),train_ds.y.numpy(), facecolor='b', s=2);" ] }, { "cell_type": "markdown", "metadata": { "cell_id": "00754FBE905E4BD398313B60B3EE496A" }, "source": [ "**Update:** In a previous version, I expressed discontent with the GAN result. I revisited this notebook and after playing with the learning rate and increasing the noise dimension, the GAN seems to work reasonably well, too.\n", "\n", "I appreciate your feedback at ." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.4rc1" } }, "nbformat": 4, "nbformat_minor": 2 }