Why do you have two pictures of yourself?
I graduated from the computer science department of Cornell University, with a concentration in cognitive studies in May 1996. I lived in the Boston area for two years and worked for Cognex, on software for industrial machine vision applications.
I am currently working for IBM at the TJ Watson Research Center in Hawthorne, NY.
During the summer of '95, I was an intern at Xerox, where I first started to learn about programming for the web. While an undergrad, I worked part-time in Prof. David Field's lab, whose research centers on sparse coding in the visual system. I am still very interested in biological vision and cognition.
In Prof. Field's lab, much of the work I participated in was related to artificial neural networks. Another interest of mine is object-orientation in distributed computing. This summer, I began to learn Java, a new language from Sun, which addresses these topics, and incorporates the web. So, I wrote a neural network for practice.
A Hopfield network is an associative memory that works by calculating how much a node is in agreement with the nodes that it is connected to. The preferred states of agreement (that is, whether a node value should be like or unlike a certain neighbor) are determined by the patterns that are initially imposed upon the nodes.
These states of agreement are inherently distributed over the nodes, so no single connection can be thought of as "storing" a pattern. This leads to to the rather nice properties of graceful degradation and categorization in an overloaded space.
Here it is: (You must be using a browser (such as Netscape) which supports the beta API to use this applet)
Use the mouse to enter a pattern by clicking squares inside the rectangle "on" or "off". Then, have the network store your pattern by pressing "i", for impose. You can probably store about 33 random patterns. (The number of patterns you can store without interference depends on the number of nodes in the network.) After storing some patterns, try entering a new pattern, and then press the space bar repeatedly to watch the network "settle" into a previously imposed state. Alternatively, you can press "s" and it will settle through multiple steps to a stable state. The "s" option takes advantage of Java's support for multi-threading by starting a separate thread to do the calculations.
The following keyboard commands are recognized:
Loosely based on an artificial-life program by A.F. Slater
Here is the source code, which was written first for the alpha release compiler, and then updated for the first version of the JDK. If you're using JDK 1.0.2 or newer, and want to compile it yourself, read this.
Matt Hill -- mlh1@cornell.edu
Thanks for stopping by!