{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Problem Set 5: Exploring Hebbian Dynamics\n", "Sam Greydanus $\\cdot$ Dartmouth College $\\cdot$ Jeremy Manning's PSYC 051.09 $\\cdot$ 16 February 2017 $\\cdot$ MIT License" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import matplotlib.patches as patches\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Initialize parameters\n", "Initialize memory vectors **m** probe vectors **x**" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dim = 6\n", "noise_sigma = .5\n", "max_updates = 10\n", "epsilon = 1e-8\n", "m = [[ 1,-1,-1, 1,-1,-1],\n", " [-1,-1, 1,-1,-1, 1],]\n", "x = [[-1,-1, 0, 0, 0, 0],\n", " [ 1,-1, 0, 0, 0, 0],]\n", "\n", "m = [np.asarray(m_i, dtype=np.float32) for m_i in m]\n", "x = [np.asarray(x_i, dtype=np.float32) for x_i in x]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 1: Build weight matrix\n", "### Learning rule\n", "Update the weight matrix using the \"fire together wire together\" learning rule (outer product)\n", "$$W(i,j)=\\sum_{k=1}^L a_k(i) a_k(j)$$" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [], "source": [ "E = 1 - np.eye(dim)\n", "hebbs = [np.expand_dims(m_i,1)*np.expand_dims(m_i,0)*E for m_i in m]\n", "W = np.sum(hebbs,axis=0)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0. 0. -2. 2. 0. -2.]\n", " [ 0. 0. 0. 0. 2. 0.]\n", " [-2. 0. 0. -2. 0. 2.]\n", " [ 2. 0. -2. 0. 0. -2.]\n", " [ 0. 2. 0. 0. 0. 0.]\n", " [-2. 0. 2. -2. 0. 0.]]\n" ] }, { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=[2,2])\n", "plt.imshow(W,interpolation='none')\n", "print W ; plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 2: Probe the network\n", "### Dynamic rule\n", "$$a(i) = \\mathbf{sgn} \\left( \\sum_{j=1}^N W(j,i) a(j) \\right)$$" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def add_noise(a, sigma):\n", " return a + np.random.randn(len(a))*sigma\n", "\n", "def dynamic_rule(W, p, ix_async=None, sigma=0):\n", " p = add_noise(p, sigma)\n", " if ix_async is None:\n", " a = np.sign(np.dot(W, p) + epsilon)\n", " else:\n", " a = p.copy() ; a[ix_async] = np.sign(np.dot(W[ix_async,:], p) + epsilon)\n", " a_equals_p = np.allclose(p,a)\n", " return a, a_equals_p" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, we'll probe the network (asynchronously) with the **x** vectors" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def probe_network(W, p):\n", " aep_all = False # \"the probe and activation vector match for all elements\"\n", " aep_sum = True # \"a[i] and p[i] have matched for all elements so far in a given cycle\"\n", " i = 0\n", " while not aep_all and i < max_updates:\n", " print \"\\tstep {}, activation: {}\".format(i, p)\n", " index_asynchronous = 2 + i%4 # cyclically update indices 2,3,4,5\n", " p, aep = dynamic_rule(W, p, ix_async=index_asynchronous)\n", " i += 1\n", " aep_sum = aep_sum and aep\n", " if i%4 == 0:\n", " aep_all = aep_sum ; aep_sum = True\n", " a = p ; print \"{} updates produced {}\\n\".format(i, a)\n", " return a" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\tstep 0, activation: [-1. -1. 0. 0. 0. 0.]\n", "\tstep 1, activation: [-1. -1. 1. 0. 0. 0.]\n", "\tstep 2, activation: [-1. -1. 1. -1. 0. 0.]\n", "\tstep 3, activation: [-1. -1. 1. -1. -1. 0.]\n", "\tstep 4, activation: [-1. -1. 1. -1. -1. 1.]\n", "\tstep 5, activation: [-1. -1. 1. -1. -1. 1.]\n", "\tstep 6, activation: [-1. -1. 1. -1. -1. 1.]\n", "\tstep 7, activation: [-1. -1. 1. -1. -1. 1.]\n", "8 updates produced [-1. -1. 1. -1. -1. 1.]\n", "\n", "\tstep 0, activation: [ 1. -1. 0. 0. 0. 0.]\n", "\tstep 1, activation: [ 1. -1. -1. 0. 0. 0.]\n", "\tstep 2, activation: [ 1. -1. -1. 1. 0. 0.]\n", "\tstep 3, activation: [ 1. -1. -1. 1. -1. 0.]\n", "\tstep 4, activation: [ 1. -1. -1. 1. -1. -1.]\n", "\tstep 5, activation: [ 1. -1. -1. 1. -1. -1.]\n", "\tstep 6, activation: [ 1. -1. -1. 1. -1. -1.]\n", "\tstep 7, activation: [ 1. -1. -1. 1. -1. -1.]\n", "8 updates produced [ 1. -1. -1. 1. -1. -1.]\n", "\n", "Did we make errors? Look at difference between original memories and probe activations.\n", "[[ 0. 0. 0. 0. 0. 0.]\n", " [ 0. 0. 0. 0. 0. 0.]]\n", "\t\t\t\t...we made 0 errors!\n" ] } ], "source": [ "a = [probe_network(W, x[i]) for i in range(len(x))]\n", "a = a[::-1] # first two indices of second probe appear to match first two indices of first memory / vice versa\n", "diff = np.vstack(m) - np.vstack(a)\n", "\n", "print \"Did we make errors? Look at difference between original memories and probe activations.\\n\", diff\n", "print \"\\t\\t\\t\\t...we made {} errors!\".format(int(np.sum(np.sign(diff))))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Extra fun: Energy landscapes\n", "\n", "Professor Manning mentioned in class that the weight matrix $\\mathbf{W}$ can be thought of in terms of an energy landscape; probes naturally gravitate to \"low-energy\" states, producing activations which resemble the original memories.\n", "\n", "Can we visualize this? Of course...but it's tough because $\\mathbf{m}, \\mathbf{x}, \\mathbf{a} \\in R^{n}$ where $n >>2$. This means we'll need to reduce dimensionality. The best way to do this would be PCA, tSNE, or a related method. However, since I'm lazy I'll use a matrix of random values to reduce dimensionality. There are theoretical guarantees that this works \"most of the time.\"\n", "\n", "We also need to get rid of the **sgn** function because we need a smooth similarity measure between probes and activations. This certainly changes the dynamics of the system...but for this hand-wavy demo it's probably ok.\n", "\n", "### Build a new 7-dimensional weight matrix" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nJcz/AWKxWhUxXpeVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dim = 7\n", "num_probes = 2\n", "memories = [np.random.randn(dim) for _ in range(num_probes)]\n", "E = 1 - np.eye(dim)\n", "hebbs = [np.expand_dims(m_i,1)*np.expand_dims(m_i,0)*E for m_i in memories]\n", "W = np.sum(hebbs,axis=0)\n", "plt.figure(figsize=[1,1])\n", "plt.imshow(W, interpolation='none')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Helper functions\n", "Note that our dynamic rule is synchronous and lacks the **sgn** function" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def add_noise(a, sigma):\n", " return a + np.random.randn(len(a))*sigma\n", "\n", "def norm(u):\n", " return np.sqrt(np.sum(np.square(u)))\n", "\n", "def similarity(u,v):\n", " return np.dot(u,v) / (norm(u)*norm(v))\n", "\n", "def dynamic_rule(W, p, sigma=0):\n", " p = add_noise(p, sigma)\n", " a = np.dot(W, p)\n", " a_equals_p = np.allclose(p,a)\n", " return a, a_equals_p\n", "\n", "def interp1D(value, min, max, resolution):\n", " return int((value-min-epsilon)*resolution/(max-min))\n", "\n", "def get_transformation_matrix(dim):\n", " R = np.random.randn(dim, 2) # cave man dimensionality reduction :)\n", " return R" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Repeatedly probe W with random vectors\n", "Here we're measuring the similarity between the probe and the activation after one dynamic rule update. The idea is that the similarity should be larger for vectors near the original memories (these vectors will be more strongly attracted)" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false }, "outputs": [], "source": [ "probes = []\n", "similarities = []\n", "num_probes = 100000\n", "for _ in range(num_probes):\n", " probe = np.random.randn(dim)\n", " a_probe, _ = dynamic_rule(W, probe)\n", " in_out_similarity = similarity(probe, a_probe)\n", " probes.append(probe)\n", " similarities.append(in_out_similarity)" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def transform_to_2d(probes, memories):\n", " R = get_transformation_matrix(dim)\n", " mem2d = np.dot(np.vstack(memories), R)\n", " ps2d = np.dot(np.vstack(probes), R)\n", " return ps2d, mem2d\n", " \n", "def make_heatmap(xyz, mem2d, resolution):\n", " Q = np.zeros((resolution,resolution))\n", " mcoords = []\n", " minx, maxx = np.min(xyz['x']), np.max(xyz['x'])\n", " miny, maxy = np.min(xyz['y']), np.max(xyz['y'])\n", " \n", " for i in range(len(xyz['x'])):\n", " m = interp1D(xyz['x'][i], minx, maxx, resolution)\n", " n = interp1D(xyz['y'][i], miny, maxy, resolution)\n", " Q[m,n] = xyz['z'][i]\n", " \n", " for i in range(len(mem2d)):\n", " m = interp1D(mem2d[i,0], minx, maxx, resolution)\n", " n = interp1D(mem2d[i,1], miny, maxy, resolution)\n", " mcoords.append((m,n))\n", " \n", " return Q, mcoords" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize in 2D\n", "Having reduced the dimensionality of everything, we can plot the cloud in 2 dimensions. Note that the black dots are usually near the similarity \"hot spots\", aka the areas where probes changed more dramatically.\n", "\n", "You won't see this pattern every time owing to 1) my primitive dimensionality reduction and 2) the fact that I'm not directly measuring energy...I'm looking at how much a given probe differs from its activation, which _might_ have a loose correlation with the energy landscape" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nCB1XCtQBMvkAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "resolution = 120\n", "ps2d, mem2d = transform_to_2d(probes, memories)\n", "xyz = {'x': ps2d[:,0], 'y': ps2d[:,1], 'z': np.vstack(similarities)[:,0]}\n", "Q, mcoords = make_heatmap(xyz, mem2d, resolution=resolution)\n", "\n", "\n", "fig, ax = plt.subplots(1)\n", "plt.title(\"Energy landscape of $\\mathbf{W}$ matrix\")\n", "ax.imshow(Q, interpolation='none')\n", "\n", "for i in range(len(mcoords)):\n", " rect = patches.Circle(mcoords[i],1.5,linewidth=1,edgecolor='k',facecolor='k')\n", " ax.add_patch(rect)\n", "ax.set_ylim([0,resolution]) ; ax.set_xlim([0,resolution])\n", "\n", "plt.plot()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 1 }