我是如何花了一年时间来学机器学习的

标签: geek | 发表时间:2017-02-08 00:00 | 作者:
分享到:
出处:http://itindex.net/admin/pagedetail

大家都知道 AI 的发展前景非常好,例如 Google 成为了一家 AI First 的企业,越来越多的开发者开始关注并学习机器学习。因此,po 主特意找来这篇文章,分享下如何寻找适合入门者的在线学习资源,如 Udacity、Coursera、斯坦福大学课程等,并告诉大家如何避免其中的一些坑。

这篇文章来自  Per Harald Borgen,在 Medium 上获得了 2.7k 的赞。

这位大大最初在 Hacker News 上了解并对机器学习产生兴趣,然后花费了近一年时间,从入门机器学习到在实际项目中应用。期间利用 Udacity、Coursera、Kaggle竞赛、斯坦福大学课程等多种资源来进行学习和训练,也踩了不少坑。

下面是正文。


一年前我写过一篇文章《Machine Learning in a Week》,那时我花了五天的时间学了一些机器学习基本概念,算了入了门。从那之后,我开始利用业余时间,持续学习了一年时间,现在我已经能实际项目中应用了机器学习这门技术。

对我来说,我的本职工作需要我去学习机器学习,而这门技术恰好又是我感兴趣的,这真的非常赞。

我之前一直认为,只有机器学习领域的硕士或博士才能应用这门技术,但现在我发现这种想法并不正确。

真实情况是,入门机器学习并不需要多么高深的数学知识,而且你也不需要非得拿个研究生学位才能深入研究机器学习。

这篇文章里我想分享一下一年来我的学习心得,希望对大家有帮助。

入门:Hacker News 和 Udacity

我对机器学习的兴趣始于2014年,当时我在阅读 Hacker News 上的文章,文中提出了一个思想:我们可以提供大量数据来给机器去学习,这个思想深深吸引了我。当时的我只是个普通的程序猿,做过几个小的项目。

于是我当时开始去学习 Udacity 上的 Supervised Learning (监督学习)课程,同时也会阅读各种机器学习相关的文章。

这些课程和文章让我对机器学习的概念有了一定的了解,但并没有培养实际的技能。我并没有看完 Udacity 的课程,就像我也很少能看完 MOOC 上的课程。呵呵。

未预期完成 Coursera 上的机器学习课程

在 2015 年一月,我加入了位于伦敦的一个 Founders and Coders训练营,希望借此机会成为一名机器学习开发者。那时我和几个基友一起学习,每周二晚上,我们一起看 Coursera 上  Andrew Ng 的机器学习课程:https://www.coursera.org/learn/machine-learning

这个课程有点碉堡了,我从中学到了非常多。但是,它对于初学者而言还是有点难度。我当时也是反复多次看视频才能理解其中的概念。其中的 Octave 变成任务非常的有难度。在几周的学习中,由于其本身的难度不小,不少学员陆陆续续放弃。最后,我也放弃了。

现在回想下,我当时应该去找一门实践性更强的课程,最好让我们应用某些机器学习 library 来做一些编程实践,如果允许使用一门我已知的编程语言就能好了。

一边学习新语言,一边学习机器学习算法,这样的学习方式对于新手来说有点不太现实。

如果我再重新学一遍,我会先从 Udacity 的机器学习入门课程开始,因为这个课程更加简单,而且是使用 Python 和 Scikit 工具。这样子的话,会学得更加轻松,培养自信,学习起来也更有趣。

Intro to Machine Learning Course | Udacityhttps://www.udacity.com/course/intro-to-machine-learning–ud120

经验值: 先从简单、实用的方式来开始学习,而不是一上来就学习难点和纯理论。

一周沉浸式训练

Founders and Coders我做的最后一件事是一周魔鬼训练:完整花费一周的时间投入到机器学习上,并利用我掌握的机器学习知识来解决一个实际问题。

这一周我做了下面几件事:

  • 学习 Scikit Learn
  • 针对 真实世界数据集采用机器学习处理
  • 编写 线性回归算法代码(基于 Python)
  • 做一些自然语言处理

那一周是我经历过的最深入的学习曲线。感兴趣的话可以读一下这篇文章《Machine Learning in a Week》https://medium.com/learning-new-stuff/machine-learning-in-a-week-a0da25d59850

经验: 沉浸式地把自己投入去学习是非常高效的。

不顺利地神经网络学习

在我完成了伦敦的 FAC 训练营并会到挪威后,我尝试再用一周的沉浸式训练来学习神经网络技术。

不过这次,我失败了。

很简单,每天花完整的 10 个小时来学习并编程很容易受到各种干扰。我才发现,自己低估了当时在 FAC 训练营集体学习的重要性了,有同伴一起学习,往往效率会高很多。

经验:在学习有难度的知识技能时,尽可能找一个积极向上的环境围绕自己。

但是,不管怎样,我至少入门了神经网络,并能缓慢地理解其中一些概念。到了2016年7月,我开始编写自己的神经网络代码。虽然那份代码写的非常蹩脚,我甚至都不好意思拿出来,不过,它确实基本实现了神经网络的功能。这也表明我大致理解了 backpropagation 反向传播算法gradient descent 梯度下降算法。

我是如何花了一年时间来学机器学习的0

在 2015 年下半年,我的学习进度有所下降,因为我重新换了工作。这期间我的主要成长是从非向量化神经网络实现到向量化实现。

在 2015 年底,我写了一篇总结文章介绍了我在神经网络的学习进展:《Learning How To Code Neural Networks》https://medium.com/learning-new-stuff/how-to-learn-neural-networks-758b78f2736e

尝试 Kaggle 算法竞赛

在 2015 年圣诞节期间,我决定尝试下 Kaggle 测试[ Kaggle是一个数据建模和数据分析竞赛平台]。于是我花了很多时间来实验各种算法来解决Homesite Quote Conversion, Otto Group Product Classification 和 Bike Sharing Demand 问题。

我是如何花了一年时间来学机器学习的1

Kaggle 是一个很赞的平台,它上面提供丰富的数据集,而且你能看到你的算法的实际运行性能。

这段期间我主要学会了不断迭代算法,来改善试验结果。而且在做机器学习时,我也学会了相信我的代码逻辑,很多时候只要调整一些参数就可以达到不错的效果。

在工作中继续保持学习

到 了 2016 年一月份,我想继续投入更多时间在机器学习上。于是我向 manager 请求在工作时间来学习机器学习,manager 同意了我的请求!我很高兴,还写了一篇文章关于如何利用工作时间来提高自己的技能:《How To Setup A Learning Routine At Work》https://medium.com/xeneta/how-to-gain-new-skills-at-work-923bb088a352

于是,我继续了我的学习。那时我已经对神经网络有了基本的理解了,我希望能够进一步去学习 深度学习

令我失望的 Udacity 深度学习课程

我第一次接触深度学习是 Udacity 的深度学习课程,不过这个课程让我非常失望。每一集的视频内容质量还不错,但是每一集实在是太短了,地主坑农民啊。

而且课程里采用的 IPython Notebook非常难使用,我花了大多数时间来调试代码错误,这直接毁了我的学习激情。于是在学了几次后,我直接放弃了。

当然,我并不是说 IPython Notebook 不好,只不过 IPython Notebook 对于初学者的我来说实在是个噩梦。

超赞!斯坦福大学-自然语言处理中的深度学习

很幸运,我随后发现了斯坦福大学的课程 CS224D(http://cs224d.stanford.edu/syllabus.html)并决定去尝试一下。这个课程非常赞!虽然它讲的内容有点难度,但我再也不用去持续不断 debug 代码问题了。

而且,他们还提供了答案代码,每次我搞不懂时就去读答案,这也帮助了我理解一个问题是如何一步步被解决的。

虽然我还没有完全学完这套课程,但它大大扩展了我在自然语言处理和神经网络方面的知识面。

不过,这个课程不是那么容易。有一次,我意识到了自己必须要一位大牛来帮我,于是我花了 40 刀每小时请了一位博士学生来做我的家教,帮我讲解遇到的问题,形成整体的理解。这位家教帮我扫清了很多知识上的漏洞。

经验:可以考虑花 50 刀每小时的金钱来换取一位优秀的机器学习老师。如果你资金上宽裕,那一定值得这样做。

而且,我的公司 Xeneta最近招了一位数据科学家,他有数学硕士学位。因此每次我遇到线性代数、微积分或机器学习的问题时就会向他请教。所以,尽可能让公司内部的资源帮助你的学习。

利用机器学习知识来改进我司销售评估

在完成了大半年的学习后,我觉得自己已经准备好在实际工作用应用了。于是,我利用公司的描述信息数据,训练了一套算法来评估销售人员的业绩。这套算法最重为销售人员带来了极大的效率提高。

你可以读我之前写的文章《Boosting Sales With Machine Learning 我们如何应用自然语言处理技术来评估销售负责人》https://medium.com/xeneta/boosting-sales-with-machine-learning-fbcf2e618be3,代码开源在 GitHub:https://github.com/xeneta/LeadQualifier
这段学习旅程非常的漫长,但是也还算快。毕竟当我最初启动一周沉浸式训练时,我并不抱多大期望自己能在一年内掌握并应用到实际场景中。

但这样的学习方式百分百能行得通,如果我能学会,那每个人都能学会。

相关 [时间 机器学习] 推荐:

我是如何花了一年时间来学机器学习的

- - IT瘾-geek
大家都知道 AI 的发展前景非常好,例如 Google 成为了一家 AI First 的企业,越来越多的开发者开始关注并学习机器学习. 因此,po 主特意找来这篇文章,分享下如何寻找适合入门者的在线学习资源,如 Udacity、Coursera、斯坦福大学课程等,并告诉大家如何避免其中的一些坑. 这篇文章来自  Per Harald Borgen,在 Medium 上获得了 2.7k 的赞.

机器学习五步走

- - 我爱机器学习
经常会有人问“我该如何在机器学习方面更进一步,我不知道我接下来要学什么了. 一般我都会给出继续钻研教科书的答案. 每当这时候我都会收到一种大惑不解的表情. 但是进步确实就是持续的练习,保持较强的求知欲,并尽你可能的完成具有挑战性的工作. 因为他是为数不多的几种可以让你真真让你获取坚实知识的媒介. 是的,你可以选择选一门课,注册MOOC,参加一些讨论班.

机器学习之路

- - 我爱机器学习
自从答应简二毛博士将自己的机器学习历程和心得分享给大家至今,转眼间半年已经过去了,感谢简博士分享和开源精神的鼓舞,这也正是本系列关于机器学习介绍博客的动力来源. 之前有些网友,师弟们问我,学习机器学习怎么入手,从看什么书开始. 如果你只愿意看一本书,那么推荐Bishop的PRML,全名Pattern Recognition and Machine Learning. 这本书是机器学习的圣经之作,尤其对于贝叶斯方法,介绍非常完善.

Mahout实现的机器学习算法

- - ITeye博客
使用命令:mahout -h.   在Mahout实现的机器学习算法见下表:. EM聚类(期望最大化聚类). 并行FP Growth算法. 并行化了Watchmaker框架. 非Map-Reduce算法. 扩展了java的Collections类. Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能.

国内的机器学习几个人

- - 丕子
转: http://blog.csdn.net/playoffs/article/details/7588597. 推荐几个机器学习和数据挖掘领域相关的中国大牛:. 李航:http://research.microsoft.com/en-us/people/hangli/,是MSRA Web Search and Mining Group高级研究员和主管,主要研究领域是信息检索,自然语言处理和统计学习.

Apache Mahout 0.8 发布,机器学习库

- - 开源中国社区最新新闻
Apache Mahout 0.8 发布了,Apache Mahout 是 Apache Software Foundation (ASF) 开发的一个全新的开源项目,其主要目标是创建一些可伸缩的机器学习算法,供开发人员在 Apache 在许可下免费使用. 该项目已经发展到了它的最二个年头,目前只有一个公共发行版.

Ruby的机器学习项目

- - 阳志平的网志-技术类
作者是辉瑞公司的小牛,可惜烂尾了. 我在改啊改啊,可惜现在是商业项目,暂时不能放出改掉的部分. 对了,顺便做个小广告,去年组织翻译的一本小书:社会网络分析:方法与实践. 已经上市了,感兴趣的可以翻翻:. 社会网络分析:探索关系背后的科学与技术. treat:自然语言处理. 类似于igraph,也是桥接处理nlp.

机器学习该如何入门

- - CSDN博客综合推荐文章
  对于这个问题的解释,说实话我很有压力,因为在分享篇文章之前就有朋友告诉我,这个百度上一搜一大片,还需要你讲吗. 正如同一千个读者眼里有一千个林黛玉一样,我解释的当然是我个人自从读研到工作这么多年对机器学习的学习到应用过程的独特见解.   首先我们看下图了解一下机器学习在AI(Artificial Intelligence 人工智能)领域的地位.

[译] 理解机器学习技术

- - IT瘾-dev
第1讲 理解机器学习技术. 学完本模块的内容,读者将能够:. 讨论机器学习的技术和商业应用. 学完本讲的内容,读者将能够:. 解释各类机器学习方法和算法. “机器学习领域的突破,其价值10倍于微软. 你是否曾经为计算机能够下象棋或者机器人能够完成复杂任务而感到惊奇. 一旦你理解了机器如何学习和适应各种问题、提供合适的解决方案时,这些看上去很复杂的问题实际上相当简单.

Mllib机器学习工具包在Hadoop上的使用

- 小丑鱼 - 搜索技术博客-淘宝
         Hadoop是基于Java的数据计算平台,在我们公司得到了广泛应用. 同样mllib也是我们算法组同学经常使用的一个机器学习工具包. 但目前mllib工具包只提供了供C++程序调用的so链接库,没有可供java程序调用的jar包. 由于这个需求有一定的普遍性,笔者将mllib做了进一步封装,并通过jni的方式把其封装成了可供java程序调用的接口.