深度学习指南

深度学习上手指南

作者:徐嘉诚

[TOC]

说明

注:本文旨在为想要入手深度学习的同学提供一个经验性的入门参考方案。困于视野和能力,必然有不足之处,不吝斧正。仅供复旦大学内部使用,版权所有。

要(快速)上手一个一个方向或者一个小领域,一般来说需要掌握一些基础知识(最基本的概念和原理)、前沿进展(近几年的研究方向与热点)和特定的工具(例如编程语言、框架)。此外,如果有能力阅读一些有价值的论文、博客,那就更好了。

前提

  • 良好的英语水平。
  • 一定的编程经验。
  • 基本的数学功底。例如,什么是矩阵运算,什么是联合分布,什么是导数。如果这些基本概念都没有,可能需要再补一补,但一般来说,很多课程是self-packed的。

基础知识

深度学习是机器学习的一个子方向,而机器学习又是人工智能的一个分支。

机器学习

机器学习入门首推Andrew Ng在Coursera的公开课 机器学习,深入浅出。上完了这门课之后,应该对于机器学习的基本概念比较清楚了。

如果你对于统计机器学习或者一些经典的方法感兴趣,推荐看李航老师的 《统计学习方法》,竞品(同类中文教材)中无出其右。

如果你想再深入理解一下机器学习的来龙去脉(Ng在Coursera开的这门课是面向零基础同学开设的,难度有限),你可以参考一下斯坦福大学的机器学习课 CS229@Stanford,做好这门课的作业,把Lecture Note读个几遍,应该可以吊打至少90%的想申请机器学习或者数据科学的研究生的竞争者了。其实,市面上有太多的机器学习(和深度学习)的资源了(参考知乎问题:深度学习如何入门?),与其兴致勃勃地把它们加入你的收藏夹,不如学好任何一门。

如果你学完了以上的这一两门课,就应该具备选择传统机器学习相关资料的能力了。值得一提的是,最好选一些有video、有assignment(和答案)的课程,这对于自学者尤为关键。

此外,不要吝惜代码,实现,虽然不是必要的,会很大程度上加深你的理解。

深度学习

深度学习的入门资源,按照从简单到困难的顺序我推荐以下几门课:

  • UFLDL Tutorial是斯坦福大学Andrew Ng等人编纂的深度学习的入门教程,采用Matlab作为实现语言(这点似乎有些过时),而且官方自带中文版,是非常可贵的学习资料。
  • CS224d@Stanford是斯坦福大学博士毕业生、Salesforce首席科学家Richard Socher团队呈现的一门运用神经网络解决自然语言处理问题的课程,和CS231n应该是姐妹课程。本课程更注重RNN系列模型的运用。
  • CS231n@Stanford是斯坦福大学李飞飞团队呈现的一门运用神经网络解决计算机视觉问题的课程,严格来说也不需要太多基础。本课程更注重CNN系列模型的运用。
  • NN4ML是多伦多大学Geff Hinton教授录制的一门较为进阶的深度学习课程。如果没有一定的实战经验,可能会觉得这门课在讲天书,但有一定经验后回来看,里面藏了太多的黑科技。当然,Hinton爷爷的嗓音的确很催眠=。=

如果你顺利看完了上面的这些资源,应该已经算是20%的深度学习专家了;如果你做完了上面这些资源的Reading Material、Assignment和Lab,应该已经算是80%的深度学习专家了。到这里,你应该有能力看懂很多顶会的论文,当然这需要一定的时间。

前沿进展

文献

了解一个领域最好的方式还是阅读经典的、里程碑式的文献。上个版块中的课程自带的Reading Material都是极其重要的里程碑文献,请务必仔细阅读、反复阅读!
接下来给大家推荐深度学习一些相关的会议,排名越靠前推荐度越高:

  • 偏理论类(创新性更高,意义更大):ICLR,NIPS,ICML
  • 偏重应用类(一般来说创新性有限):AAAI,IJCAI
  • 计算机视觉:CVPR,ICCV,ECCV
  • 自然语言处理:ACL,EMNLP,NaACL

把握好上游的论文,看下游的、应用的自然会简单很多。

书籍

对于教科书,最为推荐的是Ian Goodfellow等人的Deep Learning Book,这是一本还没有出版就已经被引用几百次的教科书,价值可见一斑。
复旦大学邱锡鹏老师的神经网络与深度学习讲义是很好的中文参考资料。

框架与实现

主流框架有TensorflowTheanoTorchMXNetCaffe ,下面作简单介绍:

框架编程语言主导者特点
TensorflowPythonGoogleGoogle大力支持,新推出,效率一般
TheanoPythonBengio等人历史最久,Bengio等人主导,debug稍显困难
TorchLuaFacebook为主FB主导,实际运用较多,较火,cv、nlp、rl通吃
MXNetManyBaidu, NYU, CMU…效率较高,支持语言多,拓展性强
CaffePythonBerkeleyVLC在计算机视觉中运用最广泛,不适用于NLP

一般来说,每个team会有一个大家都用的框架,具体使用要看应用环境。

参考资源

编程上的问题请尽量问Google和Stackoverflow,以及各种group、论坛。用百度搜一般你就走远了:)
理论上的问题也可以Google,尽量自己思考、与同伴交流、查阅教科书。知乎上也有一些好的回答,但一般来说在上面烧掉的时间是值不回本的。

常见问题

  1. (知乎上有)好多资料、好多大神推荐的routine,我该选哪个?
    1. 答: 一般来说每个方案都有一定道理也一定会有缺陷,选一个能接受的做下去比刷知乎来的有用的多。
  2. 论文怎么看,看得好慢怎么办?
    1. 答: 英语基础其实不那么重要,因为CS的论文比英语考试的阅读要容易懂太多了,你去背红宝书学长难句是不能解决问题的,多读多思考,套路就在那里。
0%