Guide for Deep Learning aspirants with a focus on non-Computer Science students
A very common question that I get is, “How to get started with Deep Learning?”. Now, there are already many great answers already on this topic like this and this (They have mentioned a lot of resources and you should definitely check them out). This is just an attempt to answer this question based on my experience, provide a more uncluttered, precise pathway and a journey through the various challenges that I felt. This post starts with getting acquainted with the Fundamentals of Computer Science and Mathematics, moving through Getting started with Machine Learning & Deep Learning, to Specialisation and Project Advice, Building your Profile, Networking and Importance and finally ending with Tips that I would have given to my younger self.
The reason that the title says that it is primarily for non-CS students is because they feel an inherent obstacle in their path and feel restricted just because of their major in college, while the plethora of resources online has removed that struggle now (partly, you still can’t mess up the grades in your college major, you CAN’T), altogether.
Fundamentals of Computer Science and Mathematics
It’s no secret now that MOOCs (Massive Open Online Courses) like Coursera, Udacity, NPTEL, Stanford Online & MIT Opencourseware are changing the education landscape, making the courses from top graduate schools accessible to the wider audience. They have been my primary source of learning for various topics and the assignment-based approach ensures clearer understanding of the underlying concepts. I am mentioning the list of courses I would recommend to someone who hasn’t been taught anything before, so feel free to skip the ones that you are already familiar with.
- Probability course by Harvard University
- Linear Algebra
* Khan Academy
* Essence of Linear Algebra by 3Blue1Brown (shorter, more visual)
* Calculus One by Ohio State University on Coursera
* Essence of Calculus by 3Blue1Brown
- Statistics by Sebastian Thrun on Udacity
Computer Science (not for competitive programming)
- Data Structures and Algorithms
* IIT Delhi course videos (Theory)
* Specialization by UC San Diego on Coursera (Implementation)
* InterviewBit (Practise)
- Operating Systems by UC Berkeley
- Mathematics for Computer Science by MIT (for the interested ones)
Getting Started with Machine Learning & Deep Learning
Once you have the basics done, you can now dive into the courses specific to Machine Learning and / or Deep Learning. Deep Learning is now applied to a vast number of domains ranging from computer vision and natural language processing to generating art and self-driving cars. I’ll first list the courses which are available for free online and then, I’ll add links to a few programs which are expensive, but are also totally worth it because of the kind of support you receive.
- Machine Learning by Stanford University on Coursera and YouTube (CS 229), taught by Andrew Ng.
- Deep Learning Specialization by deeplearning.ai, taught by Andrew Ng.
- Practical Deep Learning for Coders by fast.ai
- Deep Learning for Computer Vision by Stanford University
- Deep Learning for Natural Language Processing by Stanford University
- Reinforcement Learning by David Silver (UCL / DeepMind)
- Deep Reinforcement Learning by UC Berkeley
- Self-driving Car Engineer Nanodegree
- Robotics Nanodegree
- Flying Car Nanodegree
- Artificial Intelligence Nanodegree
Additional Learning Resources
- Siraj Raval’s channel on YouTube (weekly videos and coding challenges)
- WildML blog
- Christopher Olah’s blog (extremely useful)
- Distill blog
- Andrew Trask’s Blog
- Google Research Blog
- OpenAI’s blog
- DeepMind’s blog
- Deep Learning Book
- NLP news — by Sebastian Ruder ( http://newsletter.ruder.io/ )
- inFERENCe- by Ferenc Huszár ( http://www.inference.vc/about/ )
- BAIR — from UCB ( http://bair.berkeley.edu/ )
- offConvex — by Moriz Hardt and others ( http://www.offconvex.org/)
- Otoro blog — by hardmaru— ( http://blog.otoro.net/ )
Specialisation and Project Advice
Trust me when I say that I tried my hand at a lot of things (Computer Vision, Natural Language Processing, Medical Imaging, Genomics) as I was fascinated by almost anything and everything that this field has to offer. But the biggest lesson that I have learnt is the importance of staying focused on one (two, at max) particular thing. I was not a believer of this before, but after actually doing multiple things, it’s clear to me that if we want to really achieve something, we should zero-in on one task and give it our best. The hard part is to not let the noise distract you. I’ll take this time to add a quote that sums up what I want to say:
Most people overestimate what they can do in one year and underestimate what they can do in ten years.
- Bill Gates
Now, the best way to learn something is by building something. Not only does it help you in understanding the concepts but also adds value to your résumé (more on profile building in the next section). There are many different sources of getting projects and make sure you choose one (two, at max) at a time.
- Project under a Professor: For students, this really is the best option. You start with some literature review of the problem statement, which gives you a flavour on both the history as well as the recent advances in the concerned domain. Then, you might implement something that the Professor has been thinking about or you might have a few discussions on how the problem should be proceeded. In any case, the learning opportunities are immense and you should make sure you work sincerely (for those who get distracted easily, a good idea could be to reserve a spot, like the lab monitored by the Professor, where you go to work daily). Finally, if the Prof. feels that you made a good contribution, he’ll happily (in most cases) write you a recommendation and a validation of your work ethic from a Prof. goes a long way in both your professional and academic career.
- Open Source Contribution: I am a big fan of Open Source Development. So many things in our world today wouldn’t have been there without Open Source contributions from millions of people around the world. I myself began Machine Learning by contributing to scikit-learn. Not only did it improve my programming skills immensely, it gave me a lot more clarity on the concepts I had learned. Also, companies value open-source work a lot, almost every company’s Careers page would ask a link to your Github Profile. Have a look at this post and this HackerEarth page on how you can get started with Open Source contribution. This could also be a good read — Students and Open Source: 3 common preconceptions.
- Remote Internship: This is your option in case the first one doesn’t work out. There are many websites like Internshala & AngelList (the best ones, according to me) where you can definitely find startups offering remote work for your area of interest. Your motive at this point of time shouldn’t be to earn money, rather it should be more focused on learning. A good thing about applying to startups is that you can look up the co-founders and contact them directly (via email or LinkedIn) regarding your application to speed up the process.
Building your Profile, Networking and Importance
This point needs to be stressed a lot. Your profile matters. For students, it’s true that it won’t be of much relevance in your placements, but what happens after you have graduated and want to change companies? There’s a wrong perception that building your profile is just for getting a job. It’s so much more. You get to place yourself on the internet, your entire history and who you are as a person. Your profile adds a layer of authenticity to your online presence and makes it much more easier for people to reach out to you. There are 3 things that you need to take care of— LinkedIn, Github profiles and your Website.
First off, building a personal website is too easy now, and I personally recommend Weebly, which I have used for mine too. A personal website follows a general pattern and you can refer this for headings and the content that should be placed in each heading.
Talking about LinkedIn can take another separate post, but the gist is that LinkedIn is also a social network, but it’s a Professional social network. You get the opportunity to connect with like-minded people there, share your ideas, apply for jobs and basically, build your outreach. The people who are the most active on LinkedIn constantly create valuable content and every minute spent on LinkedIn is useful (to an extent). On every job application portal, you’ll be asked to provide the link to your LinkedIn profile. A big USP of LinkedIn is the awesome search functionality. You can literally look up all your alumni there and even check for people working in a specific company / institution. Your LinkedIn profile provides you the opportunity to specify your entire history and they have recently started to match you up with potential mentors. Refer this for tips on optimising your LinkedIn profile.
Most of the people ignore building their Github profiles and a major reason is simply the lack of awareness. Building on my advice for open-source contribution, Github provides you the opportunity to showcase your work, not only in the form of words, but with actual code. A potential recruiter can look up your profile and figure out your coding style, how often you code, etc. There’s a small graph included along with your profile that lists your contributions in the past year:
Now, you don’t have to justify the other person that you can code. They can see it, literally. Also, many a times we assume that others have the same knowledge we have and can figure out on their own, how to make our code work. Including proper documentation for all your work is quintessential to the idea of Open Source. So, if you do spend your time coding, then let your profile speak that for you too.
Finally, the topic of networking is talked about far too less than it should be. Again, this can take a separate post, but I’ll try to summarize here. Networking isn’t looking out for your next potential hire. It is building actual relationships with people you connect with. Today, a lot of us are focused on thinking “What is good for me”, and we value a person’s profile more than the person. Always be on the lookout to build lasting fruitful relationships with anyone and everyone you meet (even virtually). Not only can they vouch for you when you actually need their help, but it’s in human nature to feel a sense of happiness and fulfillment to really connect with your peers deeply. I had interned at a startup named Twango (shoutout to the team if anyone’s reading) in 2015 and although the internship was for only a month, the bonding that we shared lasts till date and I still get a recommendation letter for my work there if I ask for it. A small tip: When you meet people physically or connect with someone on LinkedIn, don’t look for ways the other person could be of help to you. Instead, make sure to let the person know that you are there in case of any help required. Finally, this video really changed my perspective when I watched it the first time and I keep reminding myself the lessons I learned from it:
Tips that I would have given to my younger self
- Focus on fewer things
- Network more (give more)
- Be more empathetic
- Help more often
- Don’t think too much
- Do your part, and the rest will fall in place
I have tried to place all the resources I have used (and some that I should have) for my learning, along with some of the major lessons that have come out from my four years of undergraduate study. I know this was a long read, and if you’ve made this far, I’d like to thank you for valuing my opinions and sincerely hope that this could be of some help to you.
I think it’s possible for ordinary people to choose to be extraordinary
- Elon Musk