A.I. for the rest of us

2020-06-04

A.I. for the rest of us

It happened while we were watching videos of machine learning classes during our suppers. Yep. We're geeks.

I think it was way back during videos of Yaser Abu-Mostafa's class at Caltech. Or maybe it wasn't until Patrick Winston's class at MIT. Or maybe it wasn't until we had watched the 404th tutorial about how to use TensorFlow to do MNIST which is Hello World in machine learning-speak.

Anyway it was last Fall.

My wife and I are what people call senior software engineers. This is a broad category that includes everyone with five or more years professional experience. We happen to have embarrassingly more experience than that but in the marketplace, all senior software engineers are lumped together as if our brains fill up and they can only hold 3 to 5 years of programming experience at a time. We do spend a lot of time paging in what passes for data sheets these days from stackoverflow or silly interview algorithm tricks from geeksforgeeks or sit back and let npm do the work - so maybe they are right? Maybe we really haven't learned anything from several decades of making mistakes. The software industry sure hasn't. ;-P

Whatever. We're all screwed. Junior software engineers, too.

You can hardly dodge more than one or two painfully drawn out or hastily-manufactured hysterically sanctimonious tech industry crises before encountering a story about Machine Learning. Deep Learning. AI.

High salaries. Jobs and more jobs. Fame. High demand skill sets. Prestigious employers.

Cool, right? We want to do that!

Half of all software jobs will involve machine learning. AI-first initiatives.

We are used to modernizing our skill set. OO, C++, Extreeeeeme programming. Java (yay!). UML (uh), Rails, the Cloud, Node, yadayadayada.

I love this about or little profession. Hard to get bored if you are awake. [Yes you can argue that nothing significant has changed in 30 years if not for cloud computing, github, npm and stackoverflow, and only one of these has anything to do with actual programming, but that is another post (and no, you positively absolutely cannot count the 101 billionth feature addition to C++, Java, Rails as "significant changes"].

So it is off to Machine Learning-land we go.

Cool matrix sunglasses animation

Tensors, stochastic gradient decent, inverted matrices, ...

OK. Sure. Learn the math.

Probability. Minimum loss vs. max likelihood. Gaussians and Baysians.

OK. Learn statistics.

Proofs. Long algebraic derivations. Overly convenient assumptions. Thousands of Arxiv papers. Per year.

Yeah...

A suite of frameworks that wrap the kick-ass python math libraries.

Ok...

Examples of how to implement standard demos like CNNs by calling the framework's convenience wrappers around the kick-ass python math libraries.

Cool. I know it is new and all, but this is just a toy right? Fancy function fitting or glorified k-means: after training with 1 billion images it recognizes the billionth and 1th.

And the engineer inside me did a big WTF?

I am the prototypical lazy software engineer. A terrible, unrepentant lay-a-bout. Write once, debug once, optimize once, put it in a library or toolkit. And freaking forget it. Move the fuck on.

Always, always looking to build a tool of some sort to make my job easier so I can reduce cognitive overhead and focus on the Real Problem that needs to be solved.

It's not that I don't love tweaking an inner loop here and register allocation there - or tracking down anomalies in distributed runtimes. Seriously, I really do. But when I think of the stupendously colossal waste of time of everyone everywhere having to do this kind of stuff, everybody rewriting the same code over and over. Debugging the same code over and over. Hour after hour, day after day, year after year. All these really smart people. All the wasted time. All this grunt work to eventually run some experiment that might have some relationship to some problem they are working on. This seriously irritates this lazy engineer. I mean, really, WTF. What... The... Fuck.

Software development had this problem at one time. In the late 80's the Object-Oriented software craze introduced C++, and C++ introduced the STL. Software libraries. Maybe other's experiences were different - but this was mine.

Mike, they said, "you don't have to write everything anymore, some of the routines you are writing are in the library that comes with the language. Free!".

Like I am going to trust some compiler writing schmo to write decent enough software that I can just use it without question. These were the days when many compilers, and assemblers, were slow and buggy. Anyone remember MASM? Anyone remember how we had to use BDS C and Demet C because the 'official' compilers sucked?

But I was wrong. The reuse of previously written software is of tremendous benefit if you want to get work done. If you want to experiment, if you want to learn how things work, if you want to do research, then fine - do it the hard way and write your own.

Scikit, NLTK, Numpy, Pandas, TensorFlow, Keras, R, Spark, Caffe, PyTorch - they are all wonderful libraries. But they conceptually operate at a very low level. They are the for loop and arithmetic instructions of the machine learning paradigm.

All of this is just to say that I understand how the AI research community feels, that they can't trust someone else's Convolutional Neural Network. Or that they are doing research so they need to write unique software as they explore the solution space.

Fine.

But what about the rest of us who want to use these technologies to solve problems? Or to make money. Or save money. Or save the world?

And do researchers really have to rewrite everything? Yes, I am sure the largest organizations have template code that people can munge. And presumably some sort of life-cycle management. And presumably some kind of way to track experiments and results so they can be correlated with similar experiments in other parts of the organization.

But there is a long history of software that does this kind of stuff for us. For example Computer-Aided Engineering (CAE) applications. Another is Integrated Development Environments (IDE). Jupyter is awfully cool but it is just not an IDE.

As far as I can see only Microsoft gets it. Strange I know to have Microsoft back out in front., but their Machine Learning Studio appears to be a serious step in this direction.

But the Microsoft Machine Learning Studio is expensive for most of us. And the rest of the gang has instead provided us lower level services which we can also pay to use.

Again, what about the rest of us who want to use these technologies to solve problems? Or to make money. Or save money. Or save the world?

I want to do work with machine learning - I find it really entertaining to mix math and software, and it really can, I believe, help make quantum leaps in quality of life, at scale. This is so awesome! But the engineer's WTF alarm made me hesitate.

So I proposed the idea of building this Machine Learning Studio-like CAE application to several of the major players in the machine learning world. Not interested. Typically these kind of applications when introduced result in a 10X improvement in accessibility and productivity - through reduction of grunt work, duplicated effort and cognitive load (among many other things). Not interested.

So if plain ordinary software engineers want machine learning tools so we can solve problems and maybe even get ahead of the curve and make some discoveries, we need to make tools for ourselves. Kind of the definition of open-source from another point of view.

And, remember that "10X improvement in accessibility" ? That means that plain ordinary data scientists who don't want to have to learn to write and debug software ("R" anyone?) can use machine learning to solve larger problems. And if the application is done really well, then game designers, and business analysts, and other domain experts from many fields, all these other smart people can gain access to this technology. It wouldn't just be for PhD mathematicians and computer scientists anymore - the so-called "elite machine learning community".

This is the seed of the vision of Automatic.ai.

The vision of applying CAE to machine learning and AI. Easy enough for any reasonably smart person to use. And without you having to learn an entire new field (or two) of math and science.

The vision of building a free, open, extremely powerful IDE that builds brains.

...and then we thought about, longer term, what the heck would we would want to do with such tool, a tool with this kind of power...

... Digitals maybe? ...

-the rest of us