您的位置:首页 > 编程语言 > C语言/C++

机器学习从入门到出家

2017-04-21 20:53 148 查看
| 导语 简述一个2010年入坑的后台如何转向做算法和机器学习的历程和感悟,附录一个书单

写在前面:

本文主要介绍的是自己的一些经历,以及读过的一些书,实际应用的经验并没有介绍,包括现在很多机器学习的书一般也是侧重于理论,结合实践的时候会发现和模型比起来,数据清洗、特征工程的实际效果更明显,而这方面很难有系统的理论知识,怎么办呢?读paper,去搜索自己应用领域有关的、大公司的经典的paper,里面对数据清洗、样本筛选、特征构造、系统搭建这方面会有详细的介绍,在正式出版的书里,这块很少,所以读书只是基础,结合工作场景去应用才知道“纸上读来终觉浅,绝知此事要躬行”。另外如果碰到比较抽象的问题而难以理解的时候,有一个诀窍是,多和生活联系起来,很多计算机上的难题在生活中是有类似的事情和成熟的解决方案,比如优化与爬山;“世事洞明皆学问,人情练达即文章”-共勉

正文:

04年高考发挥失常,花了五分钟填了两个志愿,华科光电+华科计算机,感谢当年光电专业超高的分数线把我刷掉了,我被调到了计算机;收到通知书以后,原本比较坚定的复读的打算变的动摇,家境有比较糟糕,于是抱着早点读完,早点出来挣钱的想法读完了四年华科计算机;老实说,我不是一个特别爱动手的人,本科四年把所有c语言的书几乎都读了一遍,但动手能力还是很一般;保研以后,因为家里断了我所有经济支持,我花了比较多时间去挣生活费,所以专业也不算学的很好,只是晚上坚持把APUE和算法导论英文版啃完了,顺便把unix网络编程、c++设计新思维、stl源码剖析看完了,算是有一点基础吧。

找工作的时候,固执的想找一个后台开发,美其名曰可以多年钻研,沉淀技术;实际上回想起来不过是胆小,怕跟不上变化太快的技术节奏(有多少人和我一样?)进入鹅肠以后,确实是做了几年的后台开发,从一个小白到负责浏览器后台日活千万的图片转码服务,这中间的摸索、挫折、被叼不足为外人道也,工作三年左右,我先后接触过浏览器后台几乎所有的server模块,对公司海量学习、柔性可用也有一些理解,也隐隐看到了传统后台的天花板,下一步该做什么呢?一定要去造轮子、写框架吗?

恰好这个时候,我们成立了一个小说的项目组,而大家都知道我是一个骨灰级网络小说爱好者,起点阅读记录是3.5亿,阅仙称号,于是我有机会去做小说项目;在这个项目里我们碰到了一些文本处理的难题,比如怎么自动聚合同一个章节的多个数据源并挑选一个最优的候选源,怎么识别内容不对的源;在这个过程中,和搜索转岗过来的bencai有了比较多的交流,开始知道什么叫词袋模型、什么叫NLP、什么叫朴素贝叶斯、Kmeans聚类;将这些算法应用到小说业务场景,确实取得了不错的效果,于是一扇新的大门缓缓开启。

我开始阅读信息检索导论,这本书是介绍搜索的一本书,但其中涉及到很多基础的机器学习算法,比如谱聚类、kmeans聚类、LSA等等;中间转做过一段视频,不是很成功,最后又开始转为商业化,一开始我们想做点击率模型,后来因为是cpm模式,对点击率要求不高,就开始做商业画像;这个过程中,读过的基本比较重要的是李航博士的统计学习方法,里面把浅层学习的几个算法都从数学上给出了比较严谨的推倒,也是看这本书的时候意识到自己的数学基础还不是很好,虽然我对数学还是比较有兴趣,但是出来几年,很多也都忘了。

读这本书过程发现,机器学习对数学分析、概率论、线性代数以及优化理论都有不低的要求,于是开始回过头来重读数学分析,穿插着看了周志华的机器学习(俗称西瓜书);深度学习方面第一本书才刚刚付梓,但是网上有些博客还是有的,我读了一篇tutorial性质的博客。再回过头来看,人工智能是一个很大的概念,机器学习知识其中一部分,机器学习可以有各种定义和解读,可以说是让计算机从大量数据中自动学习规律,并应用;可以从信息压缩角度理解为,讲大量数据压缩陈成模型等等,他的应用也很广泛,应
4000
用在文本方面就是自然语言处理;应用在图像方面就是图像、模式识别;应用在推荐上就是推荐系统;应用在视频上可以做动作捕捉、实体识别等等;应用在汽车上可以是自动驾驶;在商业上,是广告排序。

五花八门的应用,又混杂了数学、统计、编程等知识,看起来就像一只凶悍的刺猬,作为一个只熟悉后台开发的码农?该怎么入手呢?复杂的问题,答案往往简单;大抵可以从这么三个方向入手:数学、文本或搜索、编程;我个人的经历实际是从文本处理入手,但并不推荐所有人都走这条路,如果你的工作和文本处理搭不上边,大可不必学习太多和文本相关的奇技淫巧。直接从数学的统计或者概率入手,可能会更直接。

下面我按照我的一个学习大概历程给一个书单吧,不一定是最全的,也不一定是最合理的,仅供大家参考:

1.统计学习方法,李航博士是华为诺亚方舟的首席科学家,前不久一次会上见到了本尊,这本书的特点是:算法齐备、推倒严谨,薄薄的一本书几乎涵盖了浅层学习所有的算法,并都从数学上给出了较为严谨的推倒,适合有一定数学基础的人入门使用;过程中发现自己数学上的不足,再回头去补;

2.数学分析新讲:北大张筑生老师的,一套三册,我花了大约一年的时间才读完,非常费劲,但是很值得,比普通的高等数学要周全的多,唯一小有瑕疵的地方是实数连续统的描述用了计数法,不过这里可以参考陶哲轩的实分析,他是从peano公里体系出发来论述;费尔金斯的大作里则是用戴德金分割来论述的,都对比一下会很有意思;

3.最优化导论:看完数学分析以后再看1中的推倒会发现还是有很多地方不甚了了,举个例子牛顿法或者说LBFGS可以用在多种算法的推导上,那牛顿法、海瑟矩阵到底是怎么回事呢?这时候就是该祭出这本书的时候了,这本书我觉得是补齐了从数学到统计学习方法之间确实的一环,里面主要介绍一些优化理论;简单来说,机器学习里一个很大的困难是函数没有解析式,那么对函数求解最优解是不可能像二次函数一样通过公式直接求得的,必须通过迭代的方式逐渐去逼近最优解,就像爬一座山,不能一下子看到山顶,但是我们可以看到比现在更高的地方,于是先爬一小段,到了那个位置再往上看,又能看到最高的地方,于是又换个方向再爬一段,最终我们一定可以爬到山顶;最优化导论的几个算法几乎都可以往这个例子里面套,不过是观望和路线指定的策略略有差异罢了。

4.机器学习,周志华:大家都知道有一个mithell写过的机器学习,但实话说,那本书的内容真的比较陈旧了,不如读周老师这本西瓜书,因为全书都在用西瓜举例;这本书和1有不少重合的地方,区别在于这本书是从机器学习自身出发,弥补了1偏数学理论,而工程实践严重缺失的不足,这本书则从基础概念讲起,让你对机器学习有一个基础的、正确的理解,打个比方就和陈近南给韦小宝的那本绝世秘籍的目录差不多,读完这本书,你并不会马上获得很高的算法设计调优的能力,但是你拿到了入场券,你可以选一两个方向或一两个算法去深入研究;

5.《neural networks and deep learning》http://neuralnetworksanddeeplearning.com :这就是我提到的深度学习的一篇优秀的blog,配有代码,深入浅出的介绍了神经网络、bp算法、深度学习的一些基本概念,适合入门;深入的话可以看看三位大神合著,最近刚出版的那本deep
learning;72美刀的价格不便宜,好在有电子版

小结1:上面5本书基本可以做一个很好的入门了,之后的路该怎么走,相信读完了的同学一般都会有自己的看法,任何一个领域,良好的入门手续才是比较难的,入门以后登堂入室的路怎么走其实大家都会有自己的主见。接下来的书单我并没全部读完,仅供进一步参考,这里也不再排序

1.线性代数,我读完了浙大版的线性代数,但很遗憾,这本书过于简单,对矩阵分解、奇异值分解等机器学习里的常用只是没有涉及,网上比较推崇的是strang的两本书,一本是introduction to linear algebra 另一本事applied linear algebra;我是准备配合视频读前一本

2.概率论后续是随机过程、统计模拟、时间序列这方面的资料,包括贝叶斯分析、吉布斯采样、mcmc方法:统计这块我的感觉比较差,理解比较慢,推荐陈希孺的两本书吧,一本是概率 一本数理统计;贝叶斯的书我之前的文章有提到,大家可以去找找;吉布斯 mcmc建议看博客

3.实分析:陶哲轩

4.微分流形:陈省身

5.点集拓扑:北大教材

6.泛函分析

这几本书是进阶版了,大部分可能用不到,想研究流形优化、核方法的同学可以挑战一下

7.PRML:模式识别与机器学习,非常翔实的一本书,也是经典,可惜我没有读完,只看了前几章;

8.凸分析:最优化导论的升级版,应该是目前优化理论的集大成者;

9.数学之美:吴军博士的书,消遣的时候翻一翻吧

10.deep learning:三位大神版本

以下推荐几本智能相关的书,博大家一笑

1.心智社会:马文明斯基的巨著,他自己的总结挺好:没有心智社会就没有智能,智能源于笨拙。这本书主要是探索人的思维的本质,很有意思的论述;

2.弗洛伊德:马文明斯基推崇的心里学家,我也没怎么看,只翻了一点点梦的解析

3.上帝掷骰子吗,量子物理史话:推荐读一读,对量子、意识有一点了解;

4.周易:配合孔子的十翼看看,中国玄学、文化起源的神书;

5.波若波罗蜜多心经:心浮气躁的时候默念一下

总结2:这部分比较随性,有深入研究ml的书,也有一些看似不着调的书,归根到底,所有的神秘都会归结于灵魂、意识,佛学说法不外求不是没有道理的,毕。

此文已由作者授权腾讯云技术社区发布,转载请注明文章出处
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息