我花了一年时间来学机器学习
我花了一年时间来学机器学习
为了把大家从越来越多的技术水文中拯救出来,“大公司技术博客”将良心推送国内外大公司的优质干货文,如Facebook, Google, Medium, GitHub(嗯,我知道很多国外的文章你点不开,或者是英文的你懒得看)等。
技术创新、深度研究、未来趋势,这里都有。
当然了,这么说无非就是希望你点下 关注。
文章介绍
大家都知道 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 | Udacity https://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 梯度下降算法。
在 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 问题。
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
这段学习旅程非常的漫长,但是也还算快。毕竟当我最初启动一周沉浸式训练时,我并不抱多大期望自己能在一年内掌握并应用到实际场景中。
但这样的学习方式百分百能行得通,如果我能学会,那每个人都能学会。
po主时间
想学机器学习的开发者一般都会首先找 Udacity 或者 Coursera 上的课程,不过,并不了解这些课程是否适合初学者,盲目的学习只会频繁受挫直到丧失兴趣,因此,可以好好了解下作者踩过的坑,好好规划自己的学习路线。
对了,po主花费一个半小时时间阅读,搜索,编辑。
相关阅读:
lombok 简化 Java 代码
java集合之ArrayList
java集合概述
NOIP 2017 逛公园
NOIP 2017 时间复杂度
NOIP 2017 奶酪
NOIP 2013 货车运输
NOIP 2012 疫情控制
NOIP 2015 运输计划
NOIP2014 联合权值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)