Recently I decided to program an artificial neural network (ANN) framework which would allow me to train the neural networks though a type of
evolutionary process using a genetic algorithm which involves my own made up version of DNA code. The DNA code basically dictates the structure of the
ANN, so I can build a working ANN from any string of valid DNA code. The basic process goes something like this:
1) Generate a bunch of random DNA strings and construct ANN's from the DNA strings
2) Test how well each ANN performs the given task (could be predicting stock prices etc)
3) Keep a percentage of the best performing ANN's and "breed" them by merging their DNA
4) Repeat step 2 on the "offspring" and keep the best performing subjects and "breed" them
5) Repeat this process for x
number of generations until I get good enough performance
Now I wanted to mimic the actual process of evolution as best as I could because it seems to work very well, after all I believe evolution is
responsible for us being here and that's quite a feat. However the breeding process is not so simple... it seems to me that the best way to evolve
anything is to have it start off simple and build up in complexity, because that's exactly how nature did it; we started off as some very simple
celled organisms with a small amount of "DNA".
Over time our DNA got more and more complex as new useful components were built into our DNA. However this is an extremely tricky thing to replicate.
All genetic algorithms that I know of don't do it this way... for example the system I built requires that both parent ANN's have the same amount of
synaptic layers and the same amount of neurons on each layer, otherwise they simply aren't compatible. Adding an extra layer or an extra neuron can
cause incompatibilities between the ANN's.
This is a bit like how different species usually cannot interbreed because their DNA is too different. I can easily apply "mutations" to a single
neuron and the connections to and from that neuron, but I cannot see any easy way to breed two ANN's when one has "more" or "less" DNA code, the
slightest change in that respect will more than likely cause problems. This leads me to wonder exactly how nature is able to accomplish this without
Consider the first ancient human who had some sort of extra or missing chromosome compared to his common ancestor... how exactly did that individual
pass on this extra or missing DNA to other subjects in the population when such a change would most likely be incompatible with everyone else in the
population? It's not as simple as just slapping the extra DNA onto the offspring. Is there any scientific theory on how this happens?
Maybe it involves multiple twins with the same DNA change to breed between themselves and split from that evolutionary line? In that case it would
seem that if I want to mimic the process of evolution as closely as possible I can't simply have one species evolving, I'd need to add in a factor
which allow ANN's to split off into multiple different species, so that each time the DNA became more complex via mutations it would split off into a
Starting simple and building up on complexity is obviously the best way to go... generating a set of random DNA strings with a pre-determined length
and hoping for something useful is like hoping to win the lottery, the only thing which makes it work is the selective breeding process, but it's
still not as proficient as it could be. I'm interested to hear your thoughts and suggestions on this, preferably without getting into a religious
edit on 3/4/2013 by ChaoticOrder because: (no reason given)