Handbook of Neuroevolution
Gene I. Sher
Department of Electrical Engineering and Computer Science University of Central Florida
Orlando, FL, USA
by Joe Armstrong
I was delighted to be asked to write a foreword to Gene Sher's book on Neuroevolution.
To be honest I didn't have a clue what Neuroevolution was before I started reading his manuscript, but the more I read the more I became engaged in the content.
Gene addresses what is a fascinating problem: How can we simulate a biological system in a computer. Can we make a system that learns from its mistakes?
Gene chose to program his system in Erlang, which is where I come in. Erlang was designed over twenty five years ago to solve a completely different problem. What we were trying to do at the time and we are still trying, is to make a language for programming extremely large systems that never stop.
Our application was telephony. We wanted to write the control software for a set of large telephone exchanges. This software should in principle run forever. The telephone networks span the planet, and the control systems for these networks were running before the invention of the computer.
Any system like this must be able to tolerate both software and hardware failures, and thus we built a programming language where failures were not a problem. Our approach was to say, “well if something crashes, some other part of the system will detect the error, fix the problem and the system as a whole will not fail. ”
We also thought that such a system should evolve and change with time. It would never be the case that the software in the system would be correct, right from the start, instead we would have to change the software many times during the life of the product. And we would also have to make these changes without stopping the system.
The view of the world that Erlang presents the programmer is intrinsically distributed, intrinsically changing and capable of self-repair. Neuroevolution was far from our thoughts.
Twenty years later Gene comes along and discovers Erlang to him, Erlang processes are neurons. Well of course Erlang processes are not neurons, but they can easily be programmed to behave like neurons.
Erlang was designed to scale. So today we can run a few million processes per node, and a few dozen nodes per chip. Computer architectures have changed from the single core Von-Neumann machine, to the multicore processor, and the architectures will change again. Nobody actually knows how they are going to change, but my bet is that the change will be towards network-on-chip architectures.
We're already talking about putting a few hundred to a thousand cores on a single chip, but for this to happen we have to move to network on chip architectures. We can imagine large regular matrices of CPUs connected into a regular switching infrastructure. So we'll soon end up with thousands of cores, each capable of running millions of Erlang processes.
What will we do with such a monster computer and how are we going to program it? Well I suspect Gene has an answer to this question; he'll want to build a brain.
This book will tell you how. Will it work in the near future or will this take hundreds of years? Nobody knows, but the journey will be interesting and we might build some other useful things on the way.