Computer Engineering and the Hidden Neural network brain in the Arduino 101
Some people are already clued up about the way the world of Computer Engineering is composed, and even the way it is currently moving. If you are not one of these people, perhaps you are someone who is confused, or maybe even nonchalant about Computer Engineering, then allow me to elucidate.
There are two overlapping schools in Computer Engineering. The first of these I see as the older, more sagacious, erudite Hardware Engineering school. Esoteric with their magical soldering iron, secretly feeling a rush of excitement as they trim a milliamp off a circuit design here and there. They are more traditional with their craft, they have rules, procedures, tenets and some even say beliefs!
Not diametrically opposed, but definitely standing on the other side of the bridge, is the newfangled, rather geeky, and perhaps nerdy, zeitgeist worshiping Software Engineer. A person who thinks “Outside the box”, doesn’t need procedures and processes, in fact, would, up until recently, deny even needing a test suite!
“Think of the wasted hours writing tests! All that time would be better spent designing a new, more intuitive front end GUI, or perhaps optimizing the backend to make it more scalable” (driven by the envisaged 80 million unique daily users that the marketing department keep mentioning whenever a member of the board walks in).
I think of these two schools like the light side and the dark side. One relying on well trodden paths, following the wisdom and experience of others before them,seeking the one true, efficient, resilient circuit design. Whilst the other side, travelling in the shadows, get in, get out, live dangerously, white-knuckle, avoid all means of quality and hopefully in the process, not everyone flying on the plane, or driving across the bridge will end up dead from an un-handled exception due to a NULL pointer.
Why am I defining these two schools of engineering is such a cliched, stereotypical way? It’s a bit of fun really, but also a way of showing you, the interested party, where you could fit in. What are your skills? What are you good at? Do you like rules? Do you dream of creating the next killer smart phone app or mobile video game? Or do you have a design for a wearable that will blow the Apple Watch out of the water? Of course I am a Software Engineer, and therefore consider myself part of the heroic, better to burn-out-bright than to fade away brigade. In actual fact there are both types of these people prevalent in both trades. But fantasy is better than reality, right?
Whatever your passions are, and whatever truly motivates you, there is a place for you inside one of today’s schools of engineering. You’ve just got to follow your heart, find out what you really like. Start by experimenting with the different disciplines, get a feel for what gives you a sense of accomplishment and reward, and, if you do that, then I guarantee that you will stand a good chance of having a long lasting, exciting and amazingly rewarding career! A career working with cutting edge ideas, passionate people and mind-blowing concepts, with the opportunity to earn a great income, and work in jobs all over the world.
Arduino 101 with Intel Curie CPU with a built in 127 Node KNN/RCE Hardware Neural Network
Before you go, I also want each of my blog posts to include something for the more clued up engineer, someone who is already out there in the thick of it, either signed up on an engineering course that feels like it will never end, or battling their way through the daily quest for excellence in a production environment. And so what better way to start, then to mention the new Arduino 101 Micro Controller Board ?
Everyone today can go out and purchase a micro controller. It’s a generic board that can be programmed in a variety of Software Languages to process input signals collected from various sensors, and then based on those inputs, drive output signals to anything from an LCD screen, to a fully functional AI robot.
One of the most popular of these family of products is the Arduino. The Arduino family is open hardware, meaning anyone can take the hardware design and manufacture the boards, and it also utilizes open source software. So the libraries that drive the board, as well as the IDE (Integrated Development Environment) to program the board are all free to use. The source code is freely available in public repositories, and it can be changed/improved by anyone. It’s a fantastic, altruistic community model, even if the boards themselves are becoming a little dated. Well they were, up until recently.
Not so long ago, I stumbled upon a joint initiative between Arduino and Intel to produce what some would consider the natural progression of the Arduino product suite. The new Arduino Intel 101. The specifications are impressive compared to the ubiquitous Arduino Uno. This might be a little unfair, as you can pick up an Uno for from Amazon, whereas the 101 is priced at around (I’m sure this will nose dive soon enough).
So let’s see the specs…
Main Processor : ATmega328P
CPU Speed : 16 MHz
SRAM : 2k
Flash : 32k
Main Processor : Intel® Curie
CPU Speed : 32 MHz
SRAM : 24k
Flash : 196k
Extras : Bluetooth Lite 6 Axis Acceleromter Gyroscope (No compass though)
Both boards have the same number of GPIO (general purpose input output pins), and both have the same number of PWM pins (pulse width modulation – for jobs like rotating motors). You can see the 101 board is faster (twice as fast) and has more memory, it also BTW has Bluetooth Lite built in, and a 6 axis accelerometer and gyroscope. But so what? It’s more expensive, and who needs more speed from a board that basically just reads some pins, performs some basic function on the data, and sends output to either the serial monitor or an LCD/LED based display? And how many times have you run out of memory programming an Arduino board? (Actually quite a few, pull in a few libs, and add a few char arrays of debug strings to send to the Serial Monitor and….anyway, I digress). Well, the secret of what makes this board special is in the finer, less discussed details.
Looking again, I noticed the Arduino 101 has a little mentioned chip design built into its Curie CPU Module called the NueroMem. This is basically a 128 node hardware Neural Network. It’s made by a US company called General Vision, and you will need to spend to get the professional Arduino library from their web site to really start using this hardware Neural Network.
Firstly, a Neural Network is basically a model of the way a biological brain works. It’s part of the exciting and challenging world of Artificial Intelligence (making machines mimic intelligent biological brains). The Neural Network is a parallel machine in essence, meaning it has no central processor or controller, and it’s strength lies in it’s ability to learn how to classify complex things from patterns.
For example, imagine we take an image of a dog, read the pixel information from the file and pass it in to the Neural Network input layer, we then tell the Neural Network that the picture is indeed a dog. The theory is, that if we do this enough times with enough diverse images, then the Neural Network learns a generalization of a picture of a dog, and later, after we have finished teaching it, we can present it with an unknown image and ask the Neural Network if this new image is a dog. we can have as many classifications as will fit in the network, so we could classify dogs, cats, elephants etc. Due to the fact these systems are fuzzy logic systems (non-discrete) they are not guaranteed to always give the correct answer, they will however give you a degree of certainty. It should be noted that these machines are still deterministic, there is no randomness about the results, the same image presented to the system will yield the same classification, unless the network state is altered.
There are many factors that affect whether the Neural Network will be successful when used in this context, and it’s not at all obvious where the true panacea of using these machines really lies. It’s all fancy technology really, based on very simple concepts pioneered in the 1950’s and 1960’s (by people like Frank Rosenblatt).
So why is this important? Well, this is the first time I have ever seen a prototyping board with something as unpredictable, nay even unscientific as a hardware Neural Network on it. These are very exciting times, up until recently it would have been uneconomical to fit such a device to such a cheap, generic developers board. So we now have an artificially intelligent capability inside a cheap hobby prototyping board. It is research technology for the masses!
Intel’s motivation is obvious, it can see that the future of PC CPU’s is uncertain, and it doesn’t want to be the master of only a single,some would say dying market, namely the desktop PC market. No, it is desperately trying to diversify into the rapidly growing hobby and maker market. The technology industry is not an industry to be caught napping in, Blackberry RIP.
So the 101 is a real step up in terms of new functionality from the Uno, as well as a higher spec. It looks like this new functionality might be aimed at wearable devices.
So, who knows what will happen when this easy to use, out of the box ready, AI technology, is placed in the hands of all those hobbyists and makers out there? So come on people! Get out there and start learning fuzzy logic. Learn how a generic, adaptive machine, such as the Neural Network, really works deep down. Or actually, don’t bother. Maybe instead, just lie back and write a nice software application for it. Why not remain oblivious as to how any of it really works under the hood? Show the world what you can do with that little piece of Artificial Intelligence! It all depends on what really motivates you. And this, my friends, is the perfect development board to begin experimenting with. With all its multiple functions and capabilities, the easy to use 101 is surely the board that will enable you to discover exactly what, will give you that crucial sense of accomplishment in the field of Engineering!