I’d like to get into machine learning …
This is something I hear often, and with good reason. Machine Learning has risen as one of the hottest fields in Computer Science and the software industry. For companies it’s appealing because it serves as a tool to leverage the large volumes of data available nowadays to turn it into business value. For engineers it’s a fascinating field with all sorts of technically interesting topics, the most fun projects as well as good compensation due to the high demand for the skills.
And yet I find that many engineers don’t go past the “wanting” state. I was in this state myself for a while. I took some AI/ML classes while in grad school (see Can you to to graduate school while working as a software engineer?) and I’d sometimes read books or papers on ML to try to get started.
This can be intimidating because you quickly realize everything you don’t know. You find other people are light years ahead of you in statistics, or you get stumped trying to fully understand L-BFGS. But if you are a strong software engineer you bring your own type of expertise to the table, and adding a solid set of ML skills (even if you are not at the world expert level) can make you incredibly valuable to your industry.
So here I’ll outline what this process was like for me, which I hope can help others on their own journey.
Your background
Obviously your background has a big impact on how much and what you need to ramp up on to do ML. But as a software engineer, you are very fortunate that you are halfway there. ML involves a fair amount of coding, scripting and data management. You already know this so you are ahead of the game.
The next big component is math and stats. And again, as an engineer it’s very likely you have some good background on this, even if it’s a little rusty. If you need a refresher, head over to coursera.org or your favorite MOOC platform to review the math basics: linear algebra, calculus and probability and stats. Undergrad level versions of this courses should be sufficient to get started.
By the way, if you don’t enjoy math and you dread having to brush up on this then ML might not be for you. Yes, you can learn some techniques and apply them, but to be really good over time you’ll have to go deep, and there’s plenty of math in this path. But if this is exciting, ready on …
Learning the basics
You’ve probably heard of Andrew Ng’s Machine Learning class on Coursera. I think this is a great resource to get started. Some people criticize the class because it relatively shallow on the math, but I think that’s fine for an introductory course. You can (and should!) go deeper into the fundamentals as you continue to develop your expertise, but for now just get the basics. The class is also very good for keeping things to a manageable scope. The ML field is wide and deep, and it’s easy to feel like you have to know everything. But be sure to properly take the course by doing all the assignments, participating in the forums, etc. Just watching the lectures won’t do the trick.
After this I think the next step is to start to get familiar with some of the popular tool sets. As a software engineer I tend to prefer frameworks with a python interface, such as scikit.learn or TensorFlow. This has the side benefit of making you better at python if you are not already there, and python has become hugely prominent in the ML arena. Another popular option is R, which also has many ML packages. But in my experience R is a better fit for people with a background in stats or data science as opposed to programming.
So pick one, do the tutorials and start to get your hands dirty. You can also practice over in Kaggle. At this point you can keep going with some additional MOOCs on application areas that interest you, such as NLP, computer vision, anomaly detection, etc. Each of these has its own set of techniques that you’ll need to understand to really tackle practical problems. My suggestion would be to pick one so that you can focus your time and energy.
Note: Nowadays there are a few online nano-degrees in ML which sort of package some of what I described above (basics + application area + practice). I don’t have personal experience with these but they could be a reasonable option. If e-books are a better format for you I’d suggest trying the ones at Machine Learning Mastery, which I find concise and practical.
The key elements of this stage are: get started and don’t stay here too long. Up until this point you are probably doing this on your spare time, and this is not enough. Once you’ve taken the classes and gotten the basics down it’s time to get some practical experience and move the learning into the workplace.
ML @work
This step is probably the most challenging. You might need to overcome the impostor syndrome that comes with going into a new field. This is something I personally faced. The thing to realize is that you don’t need to be a world class expert to be able to provide value. Experience and depth of knowledge will come with time, but only if you allow yourself to start getting experience.
Of course there’s the typical dilemma of getting to work on ML when you have limited or no practical expertise. Here I can offer two alternatives (I did a bit of both):
Go small
Within your existing job, you can try to identify a small problem that you could solve with ML. In particular if no ML is being done at your team or company, you can provide value by getting things started in a small scale. Earlier in my career I had to manage a web site and we had a lot of content that we needed to categorize. So I decided to do a simple form of k-means clustering to help with this. I struggled and in the end it wasn’t great. But I tried a bunch of things and everything that didn’t work taught me something.
These projects can be small, but they allow you to get real world experience and the best part is you are now doing it as part of your job.
Go big
This is the opposite route. You can find a company/team/organization that uses ML extensively and has experienced people, and take a software engineering role there. Even if you are doing mostly coding, you’ll be immersed in the construction of an ML system or solution. You may even find a mentor. Start picking up the simpler ML tasks (automate some parameter sweeps? update previously trained models? move the models or code to the new version of whatever ML framework you are using?). Keep ramping this up, ask questions and spend more and more of your time on ML tasks.
Keep learning
With hard work, a few good mentors and a couple of lucky breaks (which somehow seem to correlate with the hard work) you can make yourself into a good ML engineer. Keep refreshing your skills, find an area you are passionate about and read the latest papers and attend conferences if you can.
If you put in the time, effort and passion, a few years down the road someone may come to you and ask: “I’d like to get into Machine Learning, any advice?”
Satish Kathiriya says
Hi, Thank you so much for sharing your experience!!!
Carlos says
My pleasure Satish, glad you found it helpful.