Machine learning is a hot field these days–just about every big company is investing heavily in ML research and development. It's a far cry from the immediate aftermath of the AI winter, a period of reduced funding and interest in AI research in the 1980's that was the result of excessive business hype, the winding down of the Cold War, and interest in a new, exciting technology–the internet.

Technology is a fashion industry, so it's no surprise that interest in AI rises and falls every decade or so. Yet, the capabilities of modern ML may be reaching a threshold. With good enough algorithms, sufficient computing power, and oceanic volumes of data, machines can be good enough to perform many tasks that are currently done by humans, from cataloging to driving automobiles.

I've been taking Andrew Ng's machine learning course on Coursera for the past few weeks, and am about halfway through. Here are a few observations:

  • A strong math background, especially in calculus and linear algebra, is absolutely necessary
  • A strong statistics background would be very useful
  • An engineering background is surprisingly helpful, if only because of expose to MATLAB/Octave.

First, let me state an irrefutable fact: being good at math is essential for studying machine learning. This is a heavily quantitative/computational area of computer science, one that could easily fit within an applied math department. I'm very glad to have been a math major at Duke; it's a lot easier to feel comfortable with the math and learn the necessary programming than to know how to program but be forced to learn a lot of math.

A strong statistics background would also be useful; alas, I've taken only a few statistics courses. Good intuition about probabilities could lead to better-designed ML systems.

An engineering background is not essential, but definitely helpful. For one thing, Prof. Ng's course uses MATLAB/Octave, a linear algebra focused language that's great for prototyping. Real ML systems, especially the massive ones used at large companies, likely use C++ for performance, but the concepts and calculations are much easier to express in MATLAB/Octave. MATLAB/Octave was my first "programming" language, and has imprinted on me many good expectations of programming languages, such as a REPL and functional programming style.

I studied math and engineering with no expectation that I would end up writing software, but my math/engineering background turns out to give me a leg up in the hottest computer science field today. I always like to think that good decisions pay off eventually, and I'm very glad that the things I spent 4 years studying have suddenly returned to relevance.