我本科是个和计算机、数学毫不相关的人文类专业,后来用了大三、大四两年时间,从中学级别的数学捡起,一路自学、实习、读研到现在。我太熟悉入门时候的坑了,直接从一大堆概念、公式、书单入手,谁看谁懵。
所谓入门,绝不是粘课程链接、讲概念定义。有些答案确实解释的非常通俗,但这不叫入门。
古语说入门,就一句话
师傅领进门,修行在个人
所以我不会随便复制粘贴一些高分书目,或者讲讲什么是深度学习。我希望能从一个不一样的角度来回答该如何入门深度学习,希望可以授人与渔,教教大家入门的方法论。
对于自学成分居多、想转行、转专业的同学来说,我的入门经历或许可以当作过来人的经验之谈,供大家参考。
对于非常幸运已经在计算机、数学等算法相关专业读书的同学,也可以看看我踩过的坑,走过的弯路,用作警示。
第一步、找到兴趣
很多同学入门深度学习,做的第一件事往往是上知乎、搜索引擎找相关资源,或者GITHUB翻项目,希望找到一份完美无缺的入门教程。
但很可惜,这份“完美教程”并不存在。于是,不少人只能硬着头皮从这个问题下海量的推荐书目,课程看起,看到最后晕头转向,兴趣被消耗殆尽。
正确的姿势应该是:先找到兴趣
先不要管什么是梯度、怎么搭建网络、要看哪些书,如果有人这么教你,请跳过那些答案。先想想自己为什么对深度学习感兴趣,然后找到自己感兴趣的点。这样做的最主要原因是,深度学习范畴下的分类太多太多了,每一个分类都可以当作博士研究、公司业务的领域,也就是说,除了深度学习最基础的一些知识(可能占所有知识的50%),其他的你并不需要深入了解:
如果你对计算机视觉感兴趣,那么除了基础知识,你还需要学习C++,学习图像识别、传统物体识别的知识。同时,你没有必要去深入了解RNN和各种变体,也不需要自己推导因子分解机。
如果你对自然语言处理感兴趣,那么你要更加了解RNN和transformer框架,你要深入了解word2vec机制,尽管它并非起源于深度学习理论。你不需要学会CNN反向传播如何推导,也不需要知道玻尔兹曼机该如何应用于语音识别。
如此一来,有两点好处
你的时间被大大节省了,至少缩短你50%的教材、课程阅读时间
你对特定领域的了解提高,在打好基础的同时,你也知道了这些知识被用来干什么
第二步、制定计划
根据自身情况制定计划。很多答案下的书单都很好,但并不适合所有人,如果你是数学专业,那么大多数书你并不用看,如果你和我一样是人文类专业,那么除了那些书,你还需要看很多。
这是我当时的部分计划,第1阶段比较基础,主要包括MIT的线性代数以及可汗学院的统计、AP微积分这类基础课程,以及简单的Python和C语言入门。第二阶段如下图,会更加深入一点。具体该看什么书,怎么划分,因人而异,大家不要套用我的计划,因为当时安排的也并非十分合理。
第三步、执行计划
制定计划不难,但执行起来才是最困难的。我的算法学习计划从大三下半学期开始,持续到研一,整整两年,中间有过停止,但总归是完成了所列的目标。这也是为何我强调第一点:兴趣的原因,如果没有兴趣,或者学错方向,那么很可能你根本坚持不了那么久就自己放弃了。
现在就业形势不太乐观,如果你连兴趣都没有找准,大概率以后也会考虑转型开发。所以,一定要去执行。如何构建学习的反馈回路,增加自己学习的执行力,我后面会单独出一篇文章聊聊,这里大家先自行琢磨。
学完一个领域的知识,还得学会应用才能叫入门。讲完计划层面的入门方法,再谈谈具体算法的学习方法。我曾经在我的博客里写过一篇文章:如何高效地学习算法? 里面讲到,对于同一个问题,同一类算法,要彻底搞懂吃透,可以简单分割成几个步骤
?
第一步,即初步了解,是对算法的基本构成,大致用途以及基础假设有一个模糊的认识,比如从某某博客中看到一个不认识的算法,知道它主要是用于分类,基于线性模型,要求独立同分布等。
第二步是教材学习,就是说当你听到这个算法的大致意思后,去寻找教材,可以是一本书,一篇博客或是知乎的一个回答,进一步了解这个算法的原理和应用场景,如算法由Logit构成,属于广义线性模型,在定义域内充分饱和等,可以用于二分类和多分类。
第三步,深入原理,此时经过一定的教材,你已经完全了解了算法的流程,知道它为什么叫逻辑回归,以及逻辑回归的作用甚至衍生算法,但对其基础原理还是一知半解,不知道Logit函数怎么来的,为什么要用负对数似然函数做LOSS,以及什么时候不该用LR等。这一步往往是最难的一步,需要大量的时间和思考,来充分理解并推导算法的组成。
最后一步,自我实践,顾名思义就是通过代码将所学算法实现,现如今python和tensorflow的封装API以及各种库、包已经十分完善,我个人的建议是,除非是算法底层架构开发方向的人员,否则没有必要从0开始编写一个算法(比如在某本中文教材中,作者连numpy或pandas都不用),适当的借助工具,如可以让自己的学习经验更加的实用化,同时也加强对算法的理解。针对基础性较强的一些算法,比如反向传播、逻辑回归或KNN,从底层逻辑一步步实现也是必要的。
第2、3、4步并非固定顺序,也不是走过一次就可以高枕无忧。实际上,很多时候它们是打乱的,也是迭代的,比如早上的一个项目要临时迁移算法,那么下午之前你就要完成第一步和第四步,在初步完成后,或许你会花一些时间来把第、二三步走一遍。而迭代的循环这个学习链条,可以加固算法知识和理解。
建议计划
虽然前面提到每个人的计划都应该量身定做,但是基本的方向我还是会写一写,下面是我以前整理过的一些入门计划,当作计划模板,大家酌情参考:
基础篇
1. 《Introduction to Data Mining》,这本书很浅显易懂,没有复杂高深的公式,很合适入门的人。另外可以用这本书做参考《Data Mining : Concepts and Techniques》。第二本比较厚,也多了一些数据仓库方面的知识。如果对算法比较喜欢,可以再阅读《Introduction to Machine Learning》。中文书籍方面,则推荐《机器学习实战》《统计学习方法第二版》。
2. 实现经典算法。有几个部分:
a. 关联规则挖掘 (Apriori, FPTree, etc.)
b. 分类 (C4.5, KNN, Logistic Regression, SVM, etc.)
c. 聚类 (Kmeans, DBScan, Spectral Clustering, etc.)
d. 降维 (PCA, LDA, etc.)
e. 推荐系统 (基于内容的推荐,协同过滤,如矩阵分解等)
然后在公开数据集上测试,看实现的效果。可以在下面的网站找到大量的公开数据集:http://archive.ics.uci.edu/ml/
3. 熟悉几个开源的工具: Weka (用于上手); LibSVM, scikit-learn, Shogun
4. 到 https://www.kaggle.com/ 上参加几个101的比赛,学会如何将一个问题抽象成模型,并从原始数据中构建有效的特征 (Feature Engineering).
到这一步的话基本几个国内的大公司都会给你面试的机会。
进阶篇(如果你已入门,可以看看,否则跳过)
1. 读书,下面几部都是大部头,但学完进步非常大。
a.《Pattern Recognition and Machine Learning》
b.《The Elements of Statistical Learning》
c.《Machine Learning: A Probabilistic Perspective》
第一本比较偏Bayesian;第二本比较偏Frequentist;第三本在两者之间,但我觉得跟第一本差不多,不过加了不少新内容。当然除了这几本大而全的,还有很多介绍不同领域的书,例如《Boosting Foundations and Algorithms》,《Probabilistic Graphical Models Principles and Techniques》;以及理论一些的《Foundations of Machine Learning》,《Optimization for Machine Learning》等等。这些书的课后习题也非常有用,做了才会在自己写Paper的时候推公式。
2. 读论文。包括几个相关会议:KDD,ICML,NIPS,IJCAI,AAAI,WWW,SIGIR,ICDM;以及几个相关的期刊:TKDD,TKDE,JMLR,PAMI等。跟踪新技术跟新的热点问题。当然,如果做相关research,这一步是必须的。例如我们组的风格就是上半年读Paper,暑假找问题,秋天做实验,春节左右写/投论文。
3. 跟踪热点问题。例如最近几年的Recommendation System,Social Network,Behavior Targeting等等,很多公司的业务都会涉及这些方面。以及一些热点技术,例如现在很火的Deep Learning。
4. 学习大规模并行计算的技术,例如MapReduce、MPI,GPU Computing。基本每个大公司都会用到这些技术,因为现实的数据量非常大,基本都是在计算集群上实现的。
5. 参加实际的数据挖掘的竞赛,例如KDDCUP,或 https://www.kaggle.com/ 上面的竞赛。这个过程会训练你如何在一个短的时间内解决一个实际的问题,并熟悉整个数据挖掘项目的全过程。
6. 参与一个开源项目,如上面提到的Shogun或scikit-learn还有Apache的Mahout,或为一些流行算法提供更加有效快速的实现,例如实现一个Map/Reduce平台下的SVM。这也是锻炼Coding的能力。
下一篇文章将会为大家整理深度学习、机器学习的入门必备数学知识点以及最新入门学习资料。此外,
更多机器学习、编程、AI相关知识,欢迎关注我的公众号“图灵的猫”~
原文地址:https://www.cnblogs.com/y1ran/p/12169132.html