Jekyll2017-02-17T22:37:42+00:00ofir.io/Ofir PressSometimes deep sometimes learningHow to Start Learning Deep Learning2016-06-26T00:00:00+00:002016-06-26T00:00:00+00:00ofir.io/How-to-Start-Learning-Deep-Learning<p>Due to the recent achievements of artificial neural networks across many different tasks (such as <a href="https://research.facebook.com/publications/deepface-closing-the-gap-to-human-level-performance-in-face-verification/">face recognition</a>, <a href="http://blogs.microsoft.com/next/2015/12/10/microsoft-researchers-win-imagenet-computer-vision-challenge/">object detection</a> and <a href="https://deepmind.com/alpha-go">Go</a>), deep learning has become extremely popular. This post aims to be a starting point for those interested in learning more about it.</p>
<p><strong>If you already have a basic understanding of linear algebra, calculus, probability and programming:</strong> I recommend starting with Stanford’s <a href="http://cs231n.stanford.edu/">CS231n</a>. 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.</p>
<p><strong>If you don’t have the relevant math background:</strong> There is an incredible amount of free material online that can be used to learn the required math knowledge. <a href="http://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/index.htm">Gilbert Strang’s course on linear algebra</a> is a great introduction to the field. For the other subjects, edX has courses from MIT on both <a href="https://www.edx.org/course/calculus-1a-differentiation-mitx-18-01-1x">calculus</a> and <a href="https://www.edx.org/course/introduction-probability-science-mitx-6-041x-1">probability</a>.</p>
<p><strong>If you are interested in learning more about machine learning:</strong> <a href="https://www.coursera.org/learn/machine-learning">Andrew Ng’s Coursera class</a> is a popular choice as a first class in machine learning. There are other great options available such as <a href="https://work.caltech.edu/telecourse.html">Yaser Abu-Mostafa’s machine learning course</a> 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.</p>
<p><strong>CS231n isn’t the only deep learning course available online.</strong> <a href="https://www.coursera.org/course/neuralnets">Geoffrey Hinton’s Coursera class “Neural Networks for Machine Learning”</a> covers a lot of different topics, and so does <a href="https://www.youtube.com/playlist?list=PL6Xpj9I5qXYEcOhn7TqghAJ6NAPrNmUBH">Hugo Larochelle’s “Neural Networks Class”</a>. Both of these classes contain video lectures. <a href="https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/">Nando de Freitas also has a course available online</a> which contains videos, slides and also a list of homework assignments.</p>
<p><strong>If you prefer reading over watching video lectures:</strong> <a href="http://neuralnetworksanddeeplearning.com/">Neural Networks and Deep Learning</a> is a free online book for beginners to the field. The <a href="http://www.deeplearningbook.org/">Deep Learning Book</a> is also a great free book, but it is slightly more advanced.</p>
<p><strong>Where to go after you’ve got the basics:</strong></p>
<ul>
<li><strong>Computer Vision</strong> is covered by most, if not all, of the deep learning resources mentoined above.</li>
<li><strong>Recurrent Neural Networks (RNNs)</strong> are the basis of neural network based models that solve tasks related to sequences such as machine translation or speech recognition. <a href="http://karpathy.github.io/2015/05/21/rnn-effectiveness/">Andrej Karpathy’s blog post on RNNs</a> is a great place to start learning about them. Christopher Olah has a <a href="http://colah.github.io/">great blog</a> where many deep learning concepts are explained in a very visual and easy to understand way. <a href="http://colah.github.io/posts/2015-08-Understanding-LSTMs/">His post on LSTM networks</a> is an introduction to LSTM networks which are a wildly used RNN variant.</li>
<li><strong>Natural Language Processing (NLP):</strong> <a href="http://cs224d.stanford.edu/">CS224d</a> is an introduction to NLP with deep learning. Advanced courses are available from both <a href="http://www.kyunghyuncho.me/home/courses/ds-ga-3001-fall-2015">Kyunghyun Cho</a> (with lecture notes <a href="https://github.com/nyu-dl/NLP_DL_Lecture_Note/blob/master/lecture_note.pdf">here</a>) and <a href="http://u.cs.biu.ac.il/~yogo/nnlp.pdf">Yoav Goldberg</a>.</li>
<li><strong>Reinforcement Learning:</strong> If you’d like to control robots or beat the human champion of Go, you should probably use reinforcement learning. <a href="http://karpathy.github.io/2016/05/31/rl/">Andrej Karpathy’s post on deep reinforcement learning</a> is an excellent starting point. David Silver also recently published a short <a href="https://deepmind.com/blog/deep-reinforcement-learning/">blog post</a> introducing deep reinforcement learning.</li>
</ul>
<p><strong>Deep learning frameworks:</strong> There are many frameworks for deep learning but the top three are probably <a href="http://tensorflow.org/">Tensorflow</a> (by Google), <a href="http://torch.ch/">Torch</a> (by Facebook) and <a href="http://deeplearning.net/software/theano/">Theano</a> (by <a href="https://mila.umontreal.ca/en/">MILA</a>). 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 <a href="https://www.tensorflow.org/versions/r0.9/tutorials/index.html">tutorials</a> avialable.</p>
<p><strong>If you’d like to train neural networks you should probably do it on a GPU.</strong> 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 <a href="https://www.kaggle.com/c/facial-keypoints-detection/details/deep-learning-tutorial">here</a>).</p>
<p>Good luck!</p>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.