Okay, I'm reading this thread, and I'm noticing a lot of confusion regarding artificial neural networks (I say artificial because we all have one in our heads, desu ne). I consider ANNs to be sort of my spécialité, so here goes:
First, some ANN specific terminology.
Neuron: The basic unit of an ANN. Recieves inputs on one side, and has one output (which may go to one or more neurons)
Synapse: The connection between two neurons
Layer: An array of neurons
The single neuron has n inputs, each of which is connected via a synapse to the output of another neuron. Each of these connections carries a weight. So, the first step in computing a neuron is to determine the net input to the neuron (neti) from the input vector (v) and the weight vector (w). This is computed using the dot product, such that neti = v.w (A note: usually the weights for an entire network are contained in a large matrix, and then one row of this matrix is used, but I'm only dealing with the single neuron here)
The second step is to calculate the activation of a neuronby passing the net input through an activation function ( a(x) ). However, usually this is the linear function (I've only seen one example where it is not), such that a(neti) = neti.
Then, the activation of the neuron is passed through an output function to determine the output of the neuron. There are roughly a dozen or so commonly used output functions, but I'm only going to mention one: the binary function. Define a threshold t, and the function is:
o(x) = 1 if x > t
o(x) = 0 if x < t
In other words, the neuron fires if the activiation is greater than t.
Now one neuron is pretty useless on its own, so to make computations more useful we generally group them into layers, and then stack the layers together, with each neuron in one layer connecting to every neuron in the next, forming a network. The following picture gives you an idea of the most common structure:

To use an ANN, first you have to train it. This is the most variable process in the network, and learning algorithms is still a relatively new field of research. I'm going to talk about the Backpropagation learning algorithm for a Fedd-forward ANN (FFANN, such as the picture above). This involves a lot of math and stuff, so I'm just going to give the basic jist of it. Initially, the network is random. So for any given input you get a random output. To train a FFANN well you must first devise a series of input/output pairs, that is, given a certain input, what should the output be. Then, you feed one input in and see what the network spits out. It'll probably be wrong. If it is, you calculate the error of the network (icky math here) and then backpropagate that error through the network, changing the weights of the connections. Then you try another input, and another, and repeat the process until the network is "good enough", i.e. a low error (0.01% or so).
Then, you should be able to give the network any input (even ones it hasn't seen before), and it should be able to give you a "good" output.
To review the example above, it takes five inputs, and then processes it down to 2 outputs by calculating the output values of all the neurons, eventually getting something on the output layer.
Now, I'd like to stress that the format I've put up there is by no means the best one for intuition. In fact it would suck. There's a lot of research going around about ANNs and creativity, and not much of it seems to be going anywhere. I'm about to start some research into three-dimensional arrays of matricies, as opposed to the traditional layers method.
But don't give up hope! If you want a network to suggest ideas for an AI, you could devise an evaluation formula to evaluate the sucess of any given idea the network had. You could then implement that as the determining factor in the training process. As you can probably see, training is really important. That's where the hard stuff is.
*Phew* Any questions? (Yes, there will be a test next week on this material)
Eric
Edited by - egerlach on July 31, 2000 7:17:00 PM