OpenGL Neural Network Simulator


This program is designed to take a plain text input file of associative pairs
and use Delta-rule learning in a feedforward neural network to "learn" the underlying pattern.


Delta-rule learning is the technique used to associate an input pattern with an output pattern.


Every input pattern is represented as a VECTOR, or a list of floating-point numbers.
Every output pattern is also represented as a vector of values, possibly different in size from inputs.
  Output vectors are often smaller than inputs - sometimes of size 1(for a classification task).
The network is represented as a WEIGHT MATRIX, of size (inputs*outputs).

An input vector can be FED THROUGH the network, producing an output vector.

The process of FEEDING a pattern through the matrix is as follows:
  The input vector should be of the same size(length) as the input dimension of the matrix.
  
  For each value in the output vector(i):
    For each value in the input vector(j):
      multiply the value of the input_vector[i] with the value of the weight matrix
      keep a running total
    end for
    store total in output_vector[j]
  end for

During the TRAINING PHASE, pre-arranged TRAINING PATTERNS are fed through the network.
Training patterns are provided by the operator of the network and have a known EXPECTED OUTPUT.
The network is initially SEEDED to contain all random values.
Then the network is TRAINED by consecutively feeding training examples through the network,
  comparing the OUTPUT of the network to the EXPECTED VALUE of each training example,
  and adjusting the WEIGHTS of the network so that the next time the same example is fed through the net,
  the output is closer to the expected output.
Basically, this calculation is a subtraction.
  First, the ERROR VECTOR is calculated by subtracting the expected value from the value optained by 
  running the pattern through the net.
  Then, that error(or its negative) is added back into the matrix by multiplying the Error vector with 
  the input vector from the current example(cross multiplication)
  This multiplication should yield a matrix with the same dimensions as the network, then each
    value is simply multiplied by a constant LEARNING RATE and added to the matrix.

By varying the LEARNING RATE, an operator can alter the magnitude of the effect that one training pattern 
  has on the neural network.  This is part of the subtle art of neural net learning.


Thanks to Boddhsattva Debnath at JHU for helping me out with these concepts.
Thanks to Rohit and Pranav to whom i now pass them along!

Check the face detection page for more info and links


Tutorial file - plain English instructions
Source tarball - requires g++/make/GL libraries
Windows zip file - contains executable, README and sample files - REQUIRES glut32.dll