Exploring Neural Networks

A few months ago my brother, a medical student, asked me some questions regarding neural networks, how they worked, and the tools available for non-programmers.  Being interested in machine learning but not having explored the field very much, I shopped around to see what simple tools, if any, were available to provide an intro to Artificial Neural Networks (ANNs).  While it seems like this nascent branch of Artificial Intelligence is fairly sparse when it comes to high level tools, I did find one interesting game that was helpful in learning about ANNs.

Bug Brain is a pretty interesting neural network simulator with a built in tutorial that walks you through the process of creating a neural network to control simulated insects.  It explains the process of network inputs, outputs, nodes, and connections by starting with bare bones networks and gradually increasing the complexity.  Despite its 90s-esque graphics, it’s a fun and educational game that is really helpful in explaining the complex concept of ANNs.  The only thing missing, that I can tell, from Bug Brain is ANN training.  As I learned after a few Bug Brain lessons, programming neural networks is hard!  The idea of using thresholds and propagating signals along complex pathways is abstract and gets exceedingly difficult as the neural network gets bigger.

Luckily machine learning scientists have put a lot of thought into how to configure neural networks to train themselves.  By developing special algorithms and feeding input data and correct outputs into this algorithm, a neural networks thresholds and connections weights can be tweaked by the algorithm, effectively causing the ANN to “learn” how it’s supposed to distinguish the data.

An interesting spin on this learning concept is MarI/O, linked above.  Instead of merely tweaking an existing ANN to optimize the thresholds and weights as most algorithms do, MarI/O is based a paper that describes a way to automatically build both the network structure, the connections, and the weights from scratch.  Giving the algorithm a fitness function (in the MarI/O example this is how far Mario gets in the level), the algorithm randomly adds connections and nodes, and changes the weights for the current neural network.  It does this multiple times, generating several randomly tweaked ANNs.  It then runs each of the new neural networks, decides which one is the fittest, and uses that as the baseline for the next series of random mutations.

As cool as it is to see Mario “learn” how to navigate on his own, I think a really interesting project would be taking a simple robot with very basic ins and outs, and adapting this same algorithm to get the robot to achieve a goal.

Advertisements