How to Start Learning Deep Learning

Due to the recent achievements of artificial neural networks across many different tasks (such as face recognition, object detection and Go), deep learning has become extremely popular. This post aims to be a starting point for those interested in learning more about it.

If you already have a basic understanding of linear algebra, calculus, probability and programming: I recommend starting with Stanford’s CS231n. The course notes are comprehensive and well-written. The slides for each lesson are also available, and even though the accompanying videos were removed from the official site, re-uploads are quite easy to find online.

If you don’t have the relevant math background: There is an incredible amount of free material online that can be used to learn the required math knowledge. Gilbert Strang’s course on linear algebra is a great introduction to the field. For the other subjects, edX has courses from MIT on both calculus and probability.

If you are interested in learning more about machine learning:Andrew Ng’s Coursera class is a popular choice as a first class in machine learning. There are other great options available such as Yaser Abu-Mostafa’s machine learning course which focuses much more on theory than the Coursera class but it is still relevant for beginners. Knowledge in machine learning isn’t really a prerequisite to learning deep learning, but it does help. In addition, learning classical machine learning and not only deep learning is important because it provides a theoretical background and because deep learning isn’t always the correct solution.

Computer Vision is covered by most, if not all, of the deep learning resources mentoined above.

Recurrent Neural Networks (RNNs) are the basis of neural network based models that solve tasks related to sequences such as machine translation or speech recognition. Andrej Karpathy’s blog post on RNNs is a great place to start learning about them. Christopher Olah has a great blog where many deep learning concepts are explained in a very visual and easy to understand way. His post on LSTM networks is an introduction to LSTM networks which are a wildly used RNN variant.

Natural Language Processing (NLP):CS224d is an introduction to NLP with deep learning. Advanced courses are available from both Kyunghyun Cho (with lecture notes here) and Yoav Goldberg.

Reinforcement Learning: If you’d like to control robots or beat the human champion of Go, you should probably use reinforcement learning. Andrej Karpathy’s post on deep reinforcement learning is an excellent starting point. David Silver also recently published a short blog post introducing deep reinforcement learning.

Deep learning frameworks: There are many frameworks for deep learning but the top three are probably Tensorflow (by Google), Torch (by Facebook) and Theano (by MILA). All of them are great, but if I had to select just one to recommend I’d say that Tensorflow is the best for beginners, mostly because of the great tutorials avialable.

If you’d like to train neural networks you should probably do it on a GPU. You dont have to, but its much faster if you do. NVIDIA cards are the industry standard, and while most research labs use $1000 dollar graphics cards, there are a few affordable cards that can also get the work done. An even cheaper option is to rent a GPU-enabled instance from a cloud server provider like Amazon’s EC2 (short guide here).