It seems clear that we’re living in a golden age of capabilities. Satya Nadella’s “Bold Ambition and Our Core” memo boasts that “the Cortana app on my Windows Phone merges data from highway sensors and my own calendar and simply reminds me to leave work to make it to my daughter’s recital on time.” Siri, it turns out, can understand the question “What planes are over me right now?” and can answer, using Wolfram Alpha for the back-end processing.
Speaking of Wolfram, they’ve recently released Mathematica 10, a product that includes built-in machine learning facilities, including “highly automated functions like Predict and Classify.”
Cloud computing is now perfectly legitimate, both in terms of programming models and service providers. IBM’s Watson has moved on from Jeopardy into industrial use and now has a developer program.
Yet the other day I laughed at the suggestion of a “House, M.D.,”-style drama about a development team: “The <div> isn’t collapsing!” “Override the CSS!” “Still not working!” Jokes are always funnier when explained, so I’ll point out that the humor stems in part from the banal yet recognizable problem of getting the ?#@&%! Web page to render properly.
We’ve all heard about Big Data and Deep Learning, and while I happen to know some scientists whose data volumes are legitimately “Big,” I meet far more programmers whose working sets should be able to fit in RAM than those that need distributed streams. (Fun fact: the Large Synoptic Survey Telescope will generate 20TB of data per night and use around 150TFLOPs of computing power.)
As for Deep Learning, it’s a broad term, but it often refers to artificial neural nets with many hidden layers. I think it’s fair to say that not many of us have been so frustrated with tweaking the kernels in our Support Vector Machines that we’ve decided to take advantage of post-back-propagation techniques for setting the input weights to our sigmoidal activation functions. I mean, I dunno, but I haven’t heard a lot of chatter about that on Twitter.
Machine Learning has had a great decade, but “How could it improve your product in the next few release cycles?” seems to be a question that, if asked at all, would be be hard for most of us to answer. Better analysis of patterns of use and failure spring to mind, but ML shines, not when it answers a question once, but when it’s a runtime function.
Reasoning about static data, even if initially difficult, is wasteful when repeated indefinitely. I once developed an expert system for identifying seabirds (just now, 20 years too late, I realized that I missed the opportunity to name it “Rete Tern”). It worked, but even when flushed with success I was plagued by the knowledge that my troublesome memory requirements could be greatly reduced by replacing the chaining between the now-known rules with a bunch of “if” statements. I’ve similarly worked on optimization programs that were essentially one-shot wonders to generate “the” answer and never provided any additional leverage.
Even better is if the ML function incorporates and adapts to new data at runtime. A common use case for ML could be building a model, not just of “customers,” but of this customer: How does he or she use our product? What types of problems are they likely to encounter and what types of experience can our product provide to short-circuit those problems?
But I’ll admit that beyond suggesting that the question is a valuable one to ask, I have trouble with specifics about how to integrate Deep Learning or Natural Language Processing or Computer Vision or Sparse Trees into my current projects, or where, precisely, they could have added value in other projects I’ve worked on. That may be a failure of imagination on my part, but I don’t find it hard to think about how the technologies could be used in greenfield projects (automating root causes by analyzing program logs, cloud-based AIs for Game Description Language, customized curricula for professional development, etc.).