推荐一个非常优秀的深度学习教程:斯坦福CS231n

547 阅读4分钟
原文链接: zhuanlan.zhihu.com

最近突然多了很多私信询问怎么提高机器学习水平,其实我哪里有资格给学习建议,只能分享一些觉得优秀的资料。

CS231n: Convolutional Neural Networks for Visual Recognition,知乎里面已经有很多人安利过了,今天我再给大家安利一次,并稍微提下它好在哪里。

利益相关,我对斯坦福的课程有严重的个人偏好,因此对他们的课程的评价可能会偏高。可以说,若不是NG的CS 229 Machine Learning,可能到今天还是一个android开发工程师。当初毕业进入华为,老大把我们一堆人召集在一起,开了个会,说我们2012实验室要做华为的google brain,然后我们组要在手机上搞情景感知,大家开始学习Machine learning吧。接下来就开始了公司码代码,回到家10点多开始看视频。华为挺累的,经常看视频看睡着。NG的讲义写的极好,我把它打出来看了很多遍,慢慢的入了门。

回过头来说CS231n,虽然它是针对CV的,我们搞搜索推荐的同学,好像没有必要去学。但深度学习毕竟是从CV起家的,很多理念和思想是怎么来的,从这个领域了解是最合适的。特别是这门课由FeiFei Li打造,大牛云集,质量保证。对比Geoffrey Hinton的课程,个人觉得质量更好,老爷子虽然是开山鼻祖,但教课好像并不是他擅长的。

什么样的教程是好的入门教程呢?在我看来要具备两点:

  1. 覆盖面广但有所取舍,突出重点,否则就是参考资料了,不适合入门。
  2. 要有前沿主题。前沿的问题才最吸引人,介绍业界主流的研究问题,能让自己有现实带入感,减少枯燥。

我们很多时候有个毛病,喜欢神话某一个课程或某一本书,好像只要搞定了它,就什么问题都解决了。讽刺的是,你要搞定一本书,恰恰需要看很多其他资料或书籍。比死扣一本书的知识点有效率的多。在我有限的学习经验中,想理解的深入,反复才是最有效的,主题阅读,就算觉得自己懂了,也应该不断的对一个主题不断的查阅不同的资料,看起来有点浪费时间,但会比较全面。

所以,一个好的教程,把领域内的核心课题都提到,CS231n虽然是关于CV的,但RNN/LSTM、Generative Models、Deep Reinforcement Learning都有涉及,深入浅出。不用有很多细节,可以顺藤摸瓜,把相关的细节补齐。比如一直好奇图像这几年的模型是怎么迭代的,在课程的Lecture 9:CNN Architectures中,从LeNet-5、AlexNet、VGG、GoogLeNet、ResNet一路介绍过来。

其中AlexNet现在看起来没有什么了不起,但那个时候GPU GTX 580只有3GB的memory,AlexNet已经算是超大的网络,需要做模型并行,放到2个gpu上。而GoogLeNet,提出了Inception结构,又将每一层变的更wide,针对参数超多的问题,用1 x 1 conv作为bottleneck,有效的减少了参数。知乎上有不少讨论1 x 1 conv的答案,不如这里的背景介绍的清楚。

每个网络的介绍,一步步非常详尽,每一层的参数个数,memory cost都给出来,还有放在一起的对比:

另外,课程里面还请了嘉宾来介绍前沿进展,比如Lecture 15:Efficient Methods and Hardware for
Deep Learning。Song Han从四个主题介绍了前沿内容

其中关于参数Pruning的部分震惊到我了,一直以为Pruning个30-40%就能牛了,每想到业界给出来的是这个标准:

rnn的如下:

还有Weight Sharing、Quantization、Low Rank Approximation、Binary / Ternary Net、Winograd Transformation,对于不在该领域的,涨了很多见识。

更不用提对前沿硬件的介绍了。

总之,这是一门非常优秀的课程,明年放出18年版的时候,会去再看一遍。


youtube链接www.youtube.com


不能翻墙的同学看B站www.bilibili.com