Assignment 3: FANNExplorer (Non-Computational Credit)
Assigned Tuesday, February 6th
Due Thursday, February 22nd, by 11:59pm - submit electronically.

This assignment again involves using fannExplorer, which can be accessed with a web browser at http://harborhouseoakland.com:2718/fannExplorer.html. In this assignment, we will experiment with a standard backpropagation example, the auto-encoder.


The Auto-Encoder

The basic idea of this assignment is very simple: get fannExplorer to produce output that is as close as possible to its input. As before, we will restrict ourselves to binary strings. The catch is that the network will have a hidden layer that is significantly smaller than the input and output layers.

The basic case will have 4 binary input units, 2 hidden units and 4 output units. This is called the 4-2-4 encoder. Only one input unit will be "on" (set to 1) at a time. We want the network to learn weights that will cause the corresponding output unit to turn on. That is, the network should learn to produce output that is exactly the same as its input, with only 1 neuron on; but it must encode this using only the 2 neurons in the hidden layer.

We can envision the network as doing a kind of compact encoding. For example, if some language had only 4 phonemes, the auditory system could get by with just 2 fibers for transmitting one phoneme at a time. More realistically, a phoneme from a language with 64 phonemes could be transmitted by just 6 nerve fibers from one brain region to another. One could imagine a complex neural structure that computed which phoneme was most likely at each moment and another complex structure that made use of phonemes to make up words. Since each phoneme has different uses, we would need a separate unit for each one at the receiving end, but the transmission could be done more compactly using the idea above.

The assignment is to experiment with how well backpropagation learning can do at finding weights that will produce a good encoding.


Problem 1
The first part of this assignment is to analyze how the system does on the 4-2-4 encoder problem. In fannExplorer, create a network with 4 inputs, 4 outputs, and 1 hidden layer with 2 nodes in it; load 424.train and 424.test. You may want to look at the data (both training and test data are identical) to see what the desired patterns look like. (Remember that the output should match the input, and only one neuron should be on.) Now experiment with different values for the learning rate and momentum, using Incremental Training. Don't forget random initialization. Again, please don't train for longer than necessary so that the server does not get bogged down.
Problem 2
Now expand the task to solve the 8-3-8 encoder problem. (Create a network with 8 inputs, 8 outputs, and 1 hidden layer with 3 nodes in it; load 838.train and 838.test.) Problem 3
Finally, try fannExplorer on the 9-3-9 encoder problem. (Create a network with 9 inputs, 9 outputs, and 1 hidden layer with 3 nodes in it; load 939.train and 939.test.) Problem 4
FannExplorer uses the backpropagation algorithm that we studied in class. The goal of this problem is to produce in a hand simulation of one step in the learning of the 4-2-4 encoder. The assigned reading has further discussion as well as numerical values that may be of use.

Problem 5
Problem 6