Okay, I know a reasonable amount about neural nets, so don''t be afraid to answer in techno-babble.
There was a long standing difficulty using perceptrons when they were first invented to solve the exor operation. And and or operators were easily solved using two layer nets with no hidden layers but exor need a three layer net consisting of two input neurons (A and B), two neurons in the hidden layer (C and D) and one output neuron (E), each layer having complete connectivity to the next layer.
A is weighted to C at 1.0 and to D at -1.0
B is weighted to D at 1.0 and to C at -1.0
So when only A or B fire but not both, they pass activation to fire C and D respectively which pass activation to E.
When they both fire they also inhibit D and C from firing respectivly so E does not fire, giving the exor function.
Given random starting weights (positive or negative floats) and either a Binary sigmoid or Binary step activation function I don''t see how it is possible to train the net using the Hebb or Delta rules with backpropagation.
If the input vector is (0,0) then neither input neurons fire and there is no backpropagation. If the input vector is (1,0) then neuron A will send activation to both C and D and if either of these neurons fire because of it then their weights will be reinforced. The same goes for B.
When the input vector is (1,1) then both neurons fire activating any exhitory connections, whose weight is then decreased by the backpropagation.
If the initial weights are random then it seems that vector (1,0) will increase weights from A (0,1) will increase weights from B and (1,1) will decrease weights from both A and B resulting in the weights see-sawing up and down during training.
The only way I can see this working is if the initial setup of the net ''knew'' that it required one exhitory connection and one inhibitory connection from each input neuron.
This does not seem right.
Either that or I''m missing the best way of training the net.
Do you only increase exhitory connections when the net fires correctly and inhibitory connections when it doesn''t fire correctly or vice versa perhaps?
Cheers for your time and thoughts,
But why not use mlff-nets with backpropagation instead? They will certainly learn XOR and much more advanced types of problems. If you already plan to use perceptrons with backprop, I think it''s better to use mlffs.
But hey, correct me if I''m wrong but isn''t perceptrons with backpropagation the same as mlff-nets with backpropagation?
Do you mean that you don''t see how it should be able to learn? Or do you mean that your net (program) doesn''t learn?
If your program doesn''t learn, then it''s probably because you use binary sigmoid funcs and not ordinary. Btw, what do you mean by binary sigmoid? I have used both f(x)=sin(x) and f(x)=1/(1+exp(-beta*x)) which is the usual sigmoid, and my nets have learned the xor. Try changing your functions.
Are you sure you use mlffs with backprop? I really think you should find out whether you use the correct mlff-bp algorithm, as your explanation of your net is quite strange.
Could you please give a short explanation of your algorithm and say what you mean by binary sigmoid?
Note that I''m just in 6th form (according to the UK-education system) and don''t have that much experience with lin.algebra, partial derivs... but I know quite well how the nets work anyway.