Techno-Tinkering

View Original

What I’m doing.

A few weeks ago, I came across a YouTube video that caught my attention entitled “I programmed some creatures. They Evolved.” It caught my attention because I’d been playing around with various forms of AI for a bit (Neural Networks, Genetic Programming, Genetic Algorithms, etc. to increase my understanding and to brush the cobwebs off of my C++ coding skills) but this video presented an idea that hadn’t occurred to me previously.

Pretty much everything I’d read about Neural Networks included a discussion of back propagation as a fundamental concept. But for back propagation to work, there needs to be a clearly defined answer to what the neural network is trying to do with each forward propagation pass. For example, you show the neural network a picture of the number “1”, run the network and look to see if it output a “1”. Then you run back propagation so that all of it’s internal workings are tuned a little better for that input. Repeat that process with many different examples and over time the network gets better at, for example, identifying handwritten numbers correctly. That’s a pretty straight forward process. If however, you don’t know what the right answer actually is for a given activation of the network, there’s no way to implement back propagation.

In the case highlighted in the video, there is no inherently “right” answer for the individual neural networks in the simulation for each activation and therefore back propagation simply won’t work. What I hadn’t considered previously is that for a sufficiently small network, weights and biases can be treated as though it was a genetic algorithm problem. Specifically, just throwing random values at those quantities and seeing which network works best. Then throwing in breeding and mutations and, while you may never get the rigorously best solution, you can come pretty close.

This revelation ultimately sent me down the path of exploring this idea. I’ve started working on a program that mimics the system showcased in the video. It’s been slower going that I would have liked, but I finally have a system that I can play with. And with that came the idea of documenting my voyage of discovery into this (AI) and other topics and hopefully being able to present what I’m doing and learning in an engaging manner. We shall see how that goes. The next step will be to make a video of what I have so far, show it off and talk through some next steps. Though really, the next step is likely to be doing some serious refactoring of the current system.

But for now, let me leave you with a quick video I made a week or two back when I was just starting to play around with this concept.