编程知识 cdmana.com

如何高效地学习机器学习算法?

 

format,png

大家好,欢迎来到久违的机器学习系列,这是「美团」算法工程师带你入门机器学习 专栏的第一篇文章,不会太长,一半聊想法,一半聊干货。熟悉我的朋友可能知道,我以前的文章比较随意,涉及的内容极广,包括但不限于Python/Java/C/C++,网络编程,Hadoop等,但主要核心还是机器学习算法和数据科学相关的主题,这一点没变过。

最近认真总结和思考了之前的博客内容,决定将自己从入门到现在一路走来的学习经验和理解整理一番,帮助更多后来的小伙伴更好的入门,所以就有了这个系列。以前的知乎专栏虽然积累了不少关注,但是内容不成体系,我不是很满意,如今时隔半年,重新注册了一个账号,决定从头写起,我的CSDN昵称也将从“刺客五六七”改名为“图灵的猫”。今天是2019年12月24日,即将迎来2020,也是一个新的开始,在今后,通过这个专栏,希望能给所有新入门的同学带来更好的阅读体验。

 


1. 专栏导读

1.1 专栏的初衷

算法这条路,80%靠自学,个中辛酸只有自己知道。一路走来,也算是看过百叠书,阅过万篇博,其中印象最深刻的是中文教参的缺乏。数据科学是一门新兴学科,国外的高等教育建设尚不完善,而作为入门或者进阶,国内优秀的书也屈指可数,部分教材非常不错,但对理论知识要求很高,啃起来还是有些费劲的。比如小蓝书,本就是李航老师为教学和实验室做的一些笔记整理而来,行文严谨而流畅,每一个公式都极有考究,但并不适合所有人。

换句话说,这类教材只适合有一定基础,且具有极大耐心和丰富兴趣的人读,因为一开始读这些书,往往让人丧失兴趣,如果你的兴趣值是10,那么很可能在读完之后就变成了5,甚至更低。这并不代表传统书籍不好,相反,正是因为它们太过优秀,所以往往会浇灭一些兴趣,毕竟,数学的本质就是枯燥的。

如果有同学问:我就是要从这些书籍入手,该怎么办呢?  我会推荐你去购买

1.一本西瓜书/小蓝书或花书

2. 一本英文高分的机器学习入门教材,比如《Introduction of statistical learning with R》

3.一本实战类书籍

三本放在一起看,才能保证你的兴趣和进度持平。使用方法是,1当作课本,2当作教辅,3当作习题册。对,你没看错,这就是我们高中学习的三板斧。所以究其本质,算法学习,和高考学习没什么不同,只是一个侧重应用,一个侧重考试。

综上,我个人的建议是,希望大家在订阅博客之外,也务必抽出一些时间去细读教材,相互印证,才能走的长远。在漫长的算法之路上,兴趣可以说是最本质的动力(除了薪资之外~)

 

1.2 专栏的内容

这篇专栏的主要内容是以统计学习为主的算法基础和实用技巧,这也是构成机器学习的基石。可以说,没有这些算法基础和理论支撑,任何人工智能系统都不可能存在。这也意味着,这篇专栏将会以机器学习,深度学习两大块内容入手。虽然是同一个专栏,但作为并行的系列,两块会异步更新,大家如果关注的话可以有两种方法:

  • 两个内容同时看
  • 先看机器学习,完结后再跳转到深度学习

因为两个内容的交叉并不影响阅读体验,我个人建议第一种,因为

  1. 深度学习作为目前最火热的应用方法之一,也是所有互联网公司和科研机构必不可少的,学习算法绕不开这部分内容
  2. 纵向平行:从体系化的角度来看,这篇专栏要讲的是我称为“浅度学习”的东西,而深度学习可以理解为一条平行的线
  3. 横向交叉:对于假设条件、损失函数、模型目标等,二者都是共通的,同时学习,可以更好地理解算法工作的本质

对于机器学习和深度学习,我一直理解为“兼容并蓄”,在过去长达数年的学习、工作中,这个想法不断得到印证。读完《统计学习方法》后,我单独阅读了花书(《深度学习》),彼时我的这种想法更加强烈。我明白了为什么小蓝书不加入深度学习章节,也知道了周志华教授的西瓜书为什么只用一个章节简单提到了神经网络的构成。这两种体系,虽然可以合并,但本质上是不同的,在这一方面,我也在追随大牛们的足迹。

 

说完专栏的划分,现在回到专栏的内容上来。平地起高楼其实不太现实,我在学习算法的时候,也是基于国内外众多教材一步步来的。所以这篇专栏,不会跳脱出算法学习的体系,但会解构传统算法的学习路径和方法,借鉴国外算法教学的优点,由浅入深来讲述。按照传统教程的惯例,一上来就抛一大堆公式,不要说初学者了,我自己也看不下去,所以在这个系列中,我会尽量少一些空话和无用理论,把干货浓缩,取长补短。

具体内容除了按章节划分的传统常用算法,如无监督的K-means,PCA,有监督的线性回归,SVM,以及贝叶斯学习,强化学习之外,也加入了最新的算法,如业界最常用的FM类、图embedding,word2vec,概率图模型等内容。此外,根据特定章节,还会穿插讲解一些其他书中很少讲到的内容,包括模型的目标和意义,什么是信息熵,机器学习在大厂工程实现中的常见技巧,如何进行特征工程,以及机器学习所用到的数学基础等。这样安排的目的是希望达到理论和实践的有机结合,也就是每当遇到不懂的点,我会展开细讲而不是一笔带过。当然,任何问题也欢迎评论区或私信,我会一一解答。

 

1.3 专栏的受众

正在看文章的你

 

1.4 专栏的特点

最近有意将自己的经验和知识系统地整理一番,同时也换个方式圆一下自己出书的梦想。要强调的是,这篇专栏我会当作我的第一本书来写,态度即特点,其实就一句话:

 

1.5 如何高效的学习算法

对于同一个问题,同一类算法,要彻底搞懂吃透,可以简单分割成几个步骤

 

第一步,即初步了解,是对算法的基本构成,大致用途以及基础假设有一个模糊的认识,比如从某某博客中看到一个不认识的算法,知道它主要是用于分类,基于线性模型,要求独立同分布等。

 

第二步是教材学习,就是说当你听到这个算法的大致意思后,去寻找教材,可以是一本书,一篇博客或是知乎的一个回答,进一步了解这个算法的原理和应用场景,如算法由Logit构成,属于广义线性模型,在定义域内充分饱和等,可以用于二分类和多分类。

 

第三步,深入原理,此时经过一定的教材,你已经完全了解了算法的流程,知道它为什么叫逻辑回归,以及逻辑回归的作用甚至衍生算法,但对其基础原理还是一知半解,不知道Logit函数怎么来的,为什么要用负对数似然函数做LOSS,以及什么时候不该用LR等。这一步往往是最难的一步,需要大量的时间和思考,来充分理解并推导算法的组成。

对于大部分工程师来说,这一步取决于项目的时间宽裕程度(往往都是跳过的),但对于研究人员或是有心深入的人,却是必不可少的地基。吃透这一步,不管是面试还是科研,都是成为你胸有成竹的不二法门。

 

最后一步,自我实践,顾名思义就是通过代码将所学算法实现,现如今python和tensorflow的封装API以及各种库、包已经十分完善,我个人的建议是,除非是算法底层架构开发方向的人员,否则没有必要从0开始编写一个算法(比如在某本中文教材中,作者连numpy或pandas都不用),适当的借助工具,如可以让自己的学习经验更加的实用化,同时也加强对算法的理解。当然,在这个专栏的部分文章中,针对基础性较强的一些算法,比如逻辑回归或KNN,从底层逻辑一步步实现也是必要的,届时也会给出对应代码供大家参考。

 

第2、3、4步并非固定顺序,也不是走过一次就可以高枕无忧。实际上,很多时候它们是打乱的,也是迭代的,比如早上的一个项目要临时迁移算法,那么下午之前你就要完成第一步和第四步,在初步完成后,或许你会花一些时间来把第、二三步走一遍。而迭代的循环这个学习链条,可以加固算法知识和理解。

 

>>>关于作者

CSDN 博客专家,2019-CSDN百大博主,计算机(机器学习方向)博士在读,业余Kaggle选手,有过美团、腾讯算法工程师经历,目前就职于Amazon AI lab。喜爱分享和知识整合。

关注微信公众号,点击“学习资料”菜单即可获取算法、编程资源以及教学视频,还有免费SSR节点相送哦。其他平台(微信/知乎/B站),欢迎关注同名公众号「图灵的猫」~

版权声明
本文为[闻人翎悬]所创,转载请带上原文链接,感谢
https://y1ran.blog.csdn.net/article/details/103796617

Scroll to Top