{ "cells": [ { "cell_type": "markdown", "id": "a7b0ef25", "metadata": {}, "source": [ "Author: Thomas M. Breuel\n", "Title: Associative Memories\n", "Institution: UniKL" ] }, { "cell_type": "code", "execution_count": 4, "id": "a4e9e325", "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pylab import *\n", "import tables" ] }, { "cell_type": "markdown", "id": "631a6e0e", "metadata": {}, "source": [ "Input Patterns\n", "==============" ] }, { "cell_type": "markdown", "id": "4e1ec9fc", "metadata": {}, "source": [ "As input patterns, we use images from the MNIST database.\n", "We're not performing character recognition with this database here,\n", "but just using the digits as simple patterns.\n", "(We will be performing true character recognition later.)" ] }, { "cell_type": "code", "execution_count": 8, "id": "ce0881b7", "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\ne3JyEjU1NeT/9Xo96Wy68Hg8PPLII+jq6sKf//znjPvk8/lI3LNGo4HP58u4rTfffBPt7e147rnn\ntvRIz+IyJd4SAAACEElEQVRwONDT04NDhw5tqz9sO/fcc8+2+pMuXNQVyJ622/kcs6FtNnXNibGz\nGU/86aefoqenBx9++CH+9Kc/4erVq9tuk8fjZdzHF154AXa7HTdu3IBWq8WLL764peuCwSBOnDiB\n8+fPQyqVZtyfYDCI73znOzh//jwkEknG/ckErusKZK7tdj7HbGibbV1zYuzq6uqkvNwulwt6vT6j\ntrRaLYC7qYmfeOIJdHd3Z9SORqOB1+sFcHd7olqtzqgdtVpNxHr++ee31J9YLIYTJ07gmWeeIcXk\nM+kP2873v/990k4m/ckULuoKZEfbTD/HbGibC11zYuyuri6Mjo7C4XAgGo3i73//O44fP552O4uL\niyS5eygUwkcffZTxHuHjx4/j4sWLAICLFy+SDzBd0t2zzGyw9znd/mzUzk7uoeairkB2tM3kc8yG\ntjnTNeNpt0344IMPGKvVypjNZub111/PqI3x8XGmvb2daW9vZ5qbm7fcztNPP81otVpGIBAwer2e\n+ctf/sLMzMwwDz/8MGOxWJhjx44xgUAg7XYuXLjAPPPMM0xrayvT1tbGfPvb32a8Xm/KNq5evcrw\neDymvb09Ka1vuv1Zr50PPvgg7f5sl93UlWGyo202dGWY7GibK11pSCmFUoDQyDMKpQChxqZQChBq\nbAqlAKHGplAKEGpsCqUAocamUAoQamwKpQD5P/AFJPAbO5H0AAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "h5 = tables.openFile(\"mnist.h5\",\"r\")\n", "images = h5.root.images[:100,:,:].copy()\n", "images = array([1.0*(image>0.5) for image in images])\n", "w,h = images[0].shape\n", "n = w*h\n", "def cshow(image): imshow(image.reshape(w,h))\n", "gray()\n", "subplot(131); cshow(images[0])\n", "subplot(132); cshow(images[1])" ] }, { "cell_type": "markdown", "id": "81dd9ef5", "metadata": {}, "source": [ "Willshaw Associative Memory\n", "===========================\n", "\n", "Willshaw's associative memory (or perhaps Steinbuch's Lernmatrix) is a very\n", "simple example of an associative learning rule, developed in the early 1960's." ] }, { "cell_type": "markdown", "id": "3f1c9c12", "metadata": {}, "source": [ "We're considering a grid of n binary inputs $x\\in \\\\{0,1\\\\}^n$\n", "and n binary outputs $y\\in \\\\{0,1\\\\}^n$.\n", "\n", "The output is determined as \n", "\n", "$y = \\theta(C \\cdot x)$\n", "\n", "Where $\\theta$ is a threshold function and $C$ is an $n\\times n$ matrix." ] }, { "cell_type": "markdown", "id": "87fbf4ea", "metadata": {}, "source": [ "Given training patterns $\\xi^{(k)}$, the entries of $C$ are determined as:\n", "\n", "$C_{ij} = \\min(1,\\sum_k \\xi_i^{(k)} \\xi_j^{(k)})$\n", "\n", "The goal of this associative memory is that if a partial or corrupted\n", "version of one of the training vectors $\\xi^{(k)}$ is presented,\n", "the original training vector is reproduced." ] }, { "cell_type": "markdown", "id": "5aa90ddb", "metadata": {}, "source": [ "Note the close connection with two aspects of neurons:\n", "\n", "- output values are a thresholded sum of the inputs, just as in the McCulloch-Pitts neurons\n", "- the training rule for the $C_{ij}$ is a _Hebbian rule_: the value increases if input and output are active simultanously\n", "\n", "There has been a lot of work on this particular memory, determining\n", "its capacity etc." ] }, { "cell_type": "markdown", "id": "a47d7ae4", "metadata": {}, "source": [ "We are just going to train two patterns here to keep things simple and robust.\n", "\n", "The capacity of this associative memory is fairly limited in this example because\n", "the patterns don't satisfy the randomness and sparsity criteria that make\n", "Willshaw's associative memory work better than this. " ] }, { "cell_type": "code", "execution_count": 9, "id": "a903a9d6", "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nPxoZjoPyww0cAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "C = zeros((n,n))\n", "for i in range(2): C += outer(images[i].flat,images[i].flat)\n", "C = minimum(1,C)\n", "imshow(C)" ] }, { "cell_type": "markdown", "id": "f5eee442", "metadata": {}, "source": [ "Now we can reconstruct patterns from corrupted inputs." ] }, { "cell_type": "code", "execution_count": 10, "id": "27500ba3", "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(131); cshow(images[0])\n", "corrupted = (images[0].flat+0.5*randn(n)>0.5)\n", "subplot(132); cshow(corrupted)\n", "out = dot(C,corrupted)\n", "subplot(133); cshow(out>0.7*amax(out))" ] }, { "cell_type": "code", "execution_count": 11, "id": "f0b86b15", "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(131); cshow(images[1])\n", "corrupted = (images[1].flat+0.5*randn(n)>0.5)\n", "subplot(132); cshow(corrupted)\n", "out = dot(C,corrupted)\n", "subplot(133); cshow(out>0.7*amax(out))" ] }, { "cell_type": "markdown", "id": "0b0f36ca", "metadata": {}, "source": [ "\"Hopfield\" Network\n", "==================" ] }, { "cell_type": "markdown", "id": "2f9a2106", "metadata": {}, "source": [ "(Hopfield Networks)\n", "\n", "The Hopfield network is another associative memory. \n", "\n", "Like Willshaw's memory, it is composed of McCulloch-Pitts neurons, and its learning rule is an associative learning rule.\n", "\n", "Unlike Willshaw's memory, it uses _recurrent connections_.\n", "\n", "That is, the output of the units at time $t$ becomes an input to the units at time $t+1$." ] }, { "cell_type": "markdown", "id": "f438ea16", "metadata": {}, "source": [ "(Update Rule)\n", "\n", "The update rule is:\n", "\n", "$s(t+1) = \\hbox{sgn}(W \\cdot s(t))$\n", "\n", "The learning rule is as before:\n", "\n", "$W_{ij} = \\frac{1}{N}\\sum_k \\xi^{(k)}_{i} \\xi^{(k)}_j$" ] }, { "cell_type": "markdown", "id": "b3cd0604", "metadata": {}, "source": [ "(Note)\n", "\n", "However, input patterns are now assumed to be in $\\\\{-1,1\\\\}$. \n", "They are also assumed to be random vectors with expected mean zero.\n", "These conditions, however, are violated for the training examples below,\n", "which is why the Hopfield network here has a much lower capacity." ] }, { "cell_type": "markdown", "id": "1ea55737", "metadata": {}, "source": [ "(Differences)\n", "\n", "\n", "\n", "The version implemented here is not the original Hopfield memory but a similar variety (it uses parallel updates\n", "and a slightly different weight matrix)." ] }, { "cell_type": "code", "execution_count": 12, "id": "94c3c2f2", "metadata": { "collapsed": true }, "outputs": [], "source": [ "simages = [2*(images[i].flat>0.5)-1 for i in range(2)]" ] }, { "cell_type": "markdown", "id": "3fe710f6", "metadata": {}, "source": [ "Let's now create the weight matrix." ] }, { "cell_type": "code", "execution_count": 13, "id": "23a5d9f4", "metadata": { "collapsed": true }, "outputs": [], "source": [ "W = 0.5*sum(array([outer(simages[i],simages[i]) for i in range(len(simages))]),axis=0)" ] }, { "cell_type": "markdown", "id": "cc61e279", "metadata": {}, "source": [ "And now we perform the associative retrieval.\n", "The images are the original pattern, the corrupted pattern, and the reconstructed pattern." ] }, { "cell_type": "code", "execution_count": 14, "id": "7cabf102", "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(131); cshow(simages[0])\n", "r = sign(simages[0]+randn(n))\n", "subplot(132); cshow(r)\n", "for i in range(100): r = sign(dot(W,r))\n", "subplot(133); cshow(r)" ] }, { "cell_type": "code", "execution_count": 15, "id": "88342da8", "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subplot(131); cshow(simages[1])\n", "r = sign(simages[1]+randn(n))\n", "subplot(132); cshow(r)\n", "for i in range(100): r = sign(dot(W,r))\n", "subplot(133); cshow(r)" ] }, { "cell_type": "markdown", "id": "de8dca5a", "metadata": {}, "source": [ "\n", "\n", "Significance\n", "============\n", "\n", "Both Willshaw's and Hopfield's associative memories have generated enormous numbers\n", "of citations and follow-on publications.\n", "\n", "From a computational and statistical point, this is hard to understand.\n", "Both approaches solve a problem that amounts to little more than a nearest\n", "neighbor lookup, where \"nearest neighbor\" is defined not necessarily\n", "by Hamming or Euclidean distance, but by some other generally reasonable\n", "but fairly haphazard distance.\n", "Furthermore, even out of McCulloch-Pitts neurons, it is much easier to\n", "create better kinds of associative memories.\n", "\n", "However, both approaches show how very simple Hebbian learning rules\n", "can be used to build potentially useful pattern recognition systems\n", "that learn from data (think about: why is associative memory useful \n", "for pattern recognition?). \n", "This means that they show that neural hardware, even in its most simplified\n", "form, could be capable of learning, association, and memory tasks.\n", "\n", "The extreme simplicity of either algorithm also means that very simple\n", "analog hardware might be used for implementing it. This was\n", "particularly motivating for the original Lernmatrix approach.\n", "But it might also become important again in nanotechnology, where\n", "we may be able to generate very large computational structures\n", "out of molecules, but without the kind of fine-grained control\n", "that we have for regular VLSI chips.\n", "\n", "Hopfield's network also illustrates that neural computation can be viewed\n", "not as the computation of a static function, but as convergence\n", "of a _dynamical system_ towards fixed points or attractors.\n", "Hopfield networks also have mathematical connections to much more powerful\n", "statistical methods as well as models in statistical mechanics, \n", "such as Boltzman machines, Ising models and Bayesian networks.\n", "In addition, they are Turing universal in some sense.\n", "Hopfield networks are also interesting as dynamical systems,\n", "and their behavior can be described using Lyapunov functions.\n", "\n", "Much of the work on these models has focused on exploring these mathematical\n", "connections, as well as determining the \"capacity\" of these memories.\n", "\n", "From a practical point of view, these models are of limited value.\n", "Associative memories in real-world pattern recognition systems are\n", "usually implemented using nearest neighbor methods, PCA, and similar \n", "techniques. If you want to use these models for building \"useful\" \n", "associative memories, you need to be a lot more careful with the\n", "conditions on the input vectors, as well as the details of the\n", "implementation, than in the rough examples above." ] }, { "cell_type": "markdown", "id": "38805eca", "metadata": {}, "source": [ "(Significance)\n", "\n", "History and utility:\n", "\n", "- enormous academic interest, analysis\n", "- computationally, little more than nearest neighbor\n", "- little practical value\n", "- little biological plausibility\n", "\n", "Main contributions:\n", "\n", "- shows how Hebbian learning can be used to create nearest neighbor systems out of random networks\n", "- Hopfield demonstrates learning and computation in dynamical systems" ] }, { "cell_type": "code", "execution_count": null, "id": "85c28d5f", "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 }