Why Genetic Algorithms?

These days, the Artificial Intelligence community is pretty fixated on Deep Learning, a software tool inspired by the human brain. It’s popular because it’s successful. Deep Learning technology has driven incredible advances in natural language processing, image perception / generation, and game playing (not to mention ad targeting, feed ranking, and surveillance). That success was partly driven by luck. It turns out, even a fairly simple DL algorithm, given enormous amounts of data and computational power, can do pretty remarkable things. Other attempts at reproducing intelligent behavior haven’t been so successful, and are relatively neglected for that reason. That’s a shame, because I believe there are big opportunities in areas where we aren’t looking, they’re just a little more difficult to uncover.

Recently, I’ve taken particular interest in Genetic Algorithms. Put very simply, these are computer programs which use the principle of “survival of the fittest” at their core. They’ve been a popular topic of research since the 1960’s. Since then, they’ve found moderate success and have become standard kit for solving certain kinds of computational problems. Unfortunately, the fundamental design principles for GAs haven’t changed much since the 70’s, despite the fact that our understanding of evolution and our computing hardware have improved dramatically since then. I think today’s GAs are a shadow of what they could be, and I have ideas for how to unlock that potential.

But first, let’s establish what a traditional Genetic Algorithm is. Like Deep Learning, GAs are a tool for training a computer to do a task without explicitly telling it how to do the work step by step. There’s one big difference, though. DL is good at replicating what a human being would do, but to learn that it needs hundreds (or better yet, millions) of examples to study and imitate. So, it’s mostly good for automating work that people already do routinely. In contrast, GAs don’t need any example data. They’re good at solving problems where we don’t know the best solution or how to find it, just so long as we can recognize a good answer when we see it. The main challenge is framing the problem in such a way that the GA can learn to solve it.

Genetic Algorithms are often used when the space of possible answers is so big it would be impossible to try them all, or even to explore them in a systematic way. Instead, a GA depends on randomness. It starts by just guessing a bunch of solutions. Most of these will be garbage, so they get thrown out right away. The ones that are slightly better than complete garbage become the starting point for the next iteration. The algorithm makes more possible solutions by mixing the best previous solutions together and sprinkling in some extra randomness for variety. By sheer luck, some of those solutions may be better than the previous ones, and the process repeats. This simple method can be surprisingly effective, gradually transforming garbage into gold. But it depends a lot on giving the algorithm the right pieces to start with such that randomly mashing them together might actually work.

Natural selection is a kind of design process. Like human designers do, nature gets inspiration from random sources, tests ideas against harsh reality, and iterates to discover and build highly functional objects. Genetic Algorithms are basically an automated version of that process, so they’re frequently used as design tools. For instance, modern Computer Aided Drafting (CAD) software for architecture and industrial design often use GAs. A human designer specifies some constraints (how big an object can be, how much weight it must hold, etc.) and fitness goals (minimize weight and material costs, but maximize tensile strength), then the software automatically finds good solutions. Recently, there’s also been a great deal of interest in using GAs to design effective architectures for Deep Learning systems.

So, that’s Genetic Algorithms in a nutshell. Why do I feel there’s unrealized potential here? What do I want to do differently? There are several insights from modern evolutionary theory that I want to apply to GAs. Generally speaking, though, it’s all about what work is done by the programmer vs. what is left up to evolution. A GA uses a “gene sequence” (usually just a string of digits) to represent each of its attempted solutions. A gene sequence can either be a solution in itself, or a program that generates the solution. Traditionally, what the gene sequence means and how to derive an answer from it is entirely up to the programmer. This is very different from nature, where life evolved the language of genetics and species-specific genomes along with all the organisms built using those tools.

Then there’s the search process itself. In a traditional Genetic Algorithm, the programmer takes great care to tune the rate of mutation and the process of recombining genes from multiple individuals. They often hand design “custom mutations” that are more clever than just randomly changing digits in the gene sequence. They use their knowledge and intuition to avoid testing obviously bad gene sequences, to make changes that seem useful, and to preserve good patterns in the gene sequence that might otherwise get clobbered or broken up. This can help enormously, but it’s a lot of hard work for the programmer. The science of epigenetics shows that nature uses many of the same tricks, but it discovered them through natural selection, without any human guidance.

In a nutshell, life has an element of self-determination. Life designs itself, and optimizes the search process for better designs, using evolution by natural selection as its tool. I think it’s a mistake to imagine life as a passive product of evolution, like traditional Genetic Algorithms do. I think it’s a mistake to leave the hardest parts of GA development to a human being. Not only does that make human creativity a limiting factor, it means we aren’t studying or reproducing the most remarkable thing about natural evolution.

I hope this perspective will be valuable. One of the biggest shortcomings of Genetic Algorithms so far is that they aren’t nearly as open-ended or creative as life itself. Very rarely do they exhibit the sort of accumulated layers of complexity and sophistication that are the hallmark of natural intelligence. Perhaps that will change, if we can hand over more of the creative work to the GA? Perhaps a new paradigm in GA designs could make them applicable to new kinds of problems, or produce more clever solutions? I’m working on a prototype that I hope will demonstrate that potential.

The main drawback of my approach is that evolving the design for a Genetic Algorithm takes way more time and computing power than just running a GA designed the old fashioned way. I’m not too worried about that, though. I’m using the same parallel processing hardware that has become ubiquitous for Deep Learning applications to make my code efficient and scalable. My hope is that this new approach to GAs will make it possible to improve their performance by just throwing more computational power at the problem, like we already do so successfully with DL. This would also make GAs less cumbersome, by replacing expert design and hand-tuning with automation.

There’s lots more beyond this that I hope to explore in time. For instance, life evolves whole ecosystems and environments where organisms collaborate and support each other, producing intelligence, robustness, and efficiency far greater than the sum of its parts. By comparison, many Genetic Algorithms work on single individuals that exist in total isolation. Then there’s the way life evolves layer upon layer of emergent complexity, building communities out of brains, bodies, cells, and proteins. I’m excited to build multi-layered intelligent systems, and especially to try combining evolved programs and neural networks in a biologically realistic way.

Turns out, there’s much more to AI than Deep Learning. I’m pretty excited by the untapped potential of Genetic Algorithms, but that’s just me. Are there other areas of AI research that interest you? Can you think of more examples of natural intelligence that computers can’t seem to replicate? I’d love to hear from you in the comments. This post is also a preview of my research. I hope to share my first prototype by the end of the year. So, stay tuned for more on that.