Py学习  »  机器学习算法

机器学习该怎么入门?(绝对干货)

AINLP • 3 年前 • 319 次点击  


知乎上有一个关于“机器学习该怎么入门”的火热问题,在从事机器学习研究两年之际,分享一下我的看法。绝对干货哈!
本文的宗旨是:1、指出一些自学误区 2、推荐近年精品资料 3、分享切实可行的机器学习入门路线 4、给出进阶/深入研究的方法

0. 背景

本科时我是一个很贪玩的人,几乎每个周末都不在学校待着,掺和在一群骑行、登山、旅行者的队伍中。实验室有一次开组会,老师提到了神经网络,听的我一头雾水。怎么计算机学院的老师,还兼职搞起生物了?
到了大三,我想着必须得学点什么了,不然毕不了业,于是选择了入门门槛较低的安卓开发。
有几个月,我每天在宿舍啃《第一行安卓代码》,看b站的开发教程。最终做出了几个还过得去的demo,比如订票app和炸弹人小游戏:

空闲时我会写写博客,当时分享的技术内容也已安卓为主。

总的来说,本科时目标比较模糊,机器学习0基础,以被动学习为主;好在考研成功上岸,没有完全荒废。
读硕士后,发现身边很多同学都在研究AI,CV、NLP、ASR各行其道,人工智能的烈火烧得正旺。
因为我几乎没有任何基础,只能从Python和理论部分学起。
来实验室的最初3个月,我每天只做三件事:1.恶补python,2.看Andrew Ng的机器学习启蒙课,3.学习爬虫,帮师兄爬取训练语料。
由于做爬虫和文本分析的缘故,我对自然语言产生了兴趣,能让机器懂得文字的含义是很酷的一件事。于是我3个月后,我真正开始接触NLP,从分词、文本分类等底层任务做起。
学习到现在2年的时间,我真正喜欢上了NLP研究。在科研和实习过程中,边踩坑,边收获了一些发明专利和顶会论文,认识了很多业界大咖;在前不久的校招中,成功拿下不少大厂的offer。
以上是我大学期间的经历。以此为背景,这篇回答的目标读者主要是零基础、想自学入门机器学习的朋友,包括:
  • 在校学生
  • 非计算机行业从业者
  • 已工作想将机器学习和本职工作结合的朋友

1. 关于机器学习的误区和陷阱

在分享具体方法前,我先谈谈机器学习的常见误区,其中一些是自己踩过的坑。

1.1 盲目报班

在这个日益内卷的时代,得益于机器学习的前沿性和高薪资,很多人还是不顾一切的往“坑”里冲。庞大的市场,让很多AI培训课雨后春笋般涌现。
研一时,实验室的一个同学在网易云课堂花了2000多元报了一门机器学习课程,上了没几节就放弃了。
我薅了把羊毛,登他的号去上网课。结果发现每节课不过是用简单的PPT介绍了常见机器学习算法,最后用sklearn开源库跑了一个简单demo。其内容在任何一本机器学习书或免费网课上都能找到。
因三分钟热度和优美的文案,很多时候我们稀里糊涂成了任人宰割的韭菜。
我的建议是,不要盲目报班。先认真想一想自己是否喜欢算法和编程?
如果不确定或不希望盲目消费,建议你先尝试着看完这篇文章。

1.2 收集大量资料

关于机器学习的资料和书籍层出不穷。我见过很多同学从网上收集了一堆pdf资料,或者买了一箩筐的书,认真地打开封面,合上,然后再也没有看过。
和知乎微调大佬的想法一致,在入门阶段,建议“小而精”的选择资料,选择近期出版且口碑良好的书籍。量不在多,在精。
这不仅有助于读者脚踏实地学完这些资料,还能树立信心,集中精力重点突破。在第三部分的机器学习入门阶段中,我会介绍2本书2门网课,进阶阶段推荐了4本书。
这些内容我都认真学习过,如果你不想花钱,我可以帮助你免费学到所有内容。

1.3 没打好基础,不敢开始学习

很多书的前言部分,都备注了读者需要具备概率论、编程等各项基础,导致一些同学没打好基础前,不敢开始学习。
其实学习本不是一蹴而就的事儿,把高数、概率论、编程全过一边再开始上手机器学习,先不说能不能坚持下来,时间性价比实在是太低了。换句话说,等你做好准备,和你同期开始学习的同学可能已经在大厂入职了。
更好的方法是,边学边补,哪里不会补哪里。在实践中学习,更容易保持动力和干劲。

1.4 求速成,狂奔式学习

和1.3相反,部分同学期望速成;刷完一节课两本书,会调包,认为自己已然玩捏于机器学习于股掌之中。然而,此言差矣。
学习不是百米赛跑而是马拉松。所谓基础不牢,地动山摇。
作为技术人,对自身技术负责,既是持续发展的必要条件也是职业道德。作为初学者,需要你稳扎稳打,在不敢开始和急于求成之间,寻找合适的度。

2. 前期准备

2.1 软件设备

明确了误区,我们来做一些基础的准备工作。
首先,你需要在电脑上安装好相应的编程环境。以运行python为例,环境搭建方法有直接下载安装包或下载Anaconda发行包,可以选择的集成开发环境有pychram和VSCode,适合大中型项目开发,debug非常方便。
但入门阶段,我建议下载Anaconda包,选择交互式笔记本jupyter lab作为编程环境,可以分块查看代码运行结果,不易出错。详细安装过程可以参考:Python安装方法[1]、JupyterLab最全详解,如果你还在使用Notebook,那你就out了![2]

关于操作系统,首选Linux,对各种模型训练有最好的兼容性,而且使用GPU非常方便。
mac和windows系统也可以做很多简单的机器学习实验。实际应用中,开发大型机器学习项目一般通过VSCode或Pycharm,远程接入Linux服务器完成。

2.2 硬件设备

个人笔记本电脑是完全可以入门机器学习的。最初1年的学习,我在自己的15年老Mac Air上完成了很多实验分析。
关于一些大型项目,或者涉及神经网络需要GPU显卡加速的情况,最简单的方法是“蹭”实验室或公司的计算资源。
如果是咱们学生党,既没钱,实验室计算卡资源又不够用,却入了机器学习的门...别着急,我们还有白嫖方案:
百度PaddleCloud和谷歌Colab平台,都提供了免费的底层计算资源和GPU。谷歌Colab已经把免费卡升级到了P100和V100,薅羊毛快乐再次加倍!详细可以戳:谷歌Colab有了V100加持,薅羊毛快乐再次加倍

3. 机器学习升级打怪

有了初始化装备,游戏即将开始,请同学们抓紧跟上。

3.1 入门,小试牛刀(精品资料分享) 3-6个月

入门机器学习,前期需要掌握的基础主要包括机器学习算法理论、coding、高数/线性代数/概率论。
很多人推荐的《西瓜书》和《统计学习方法》,包含了大量数学推导和证明,我觉得并不太适合零基础的读者入门。
结合自身学习经验,关于机器学习我推荐1门网课和1本精品书。网课部分,强烈建议看吴恩达机器学习系列课程。内容侧重于原理和工程实现,对初学者友好。b站就能免费观看[3]。

有了理论基础,coding自然必不可少。下面推荐一本机器学习神书《Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow》。
书中介绍了大量经典的机器学习算法,并且都给出了具体的实现案例。换句话说,通过这本书大家不仅收获了原理,还锻炼了编程,将算法进行实践应用,一举多得
Python是学习机器学习必不可少的工具之一。如果你是零基础,建议从《笨方法学python》入手,书中包含了Python最基础重要的知识点。

如果不想看书,推荐一个Python在线学习博客:Python教程。[4]
会有同学纠结一开始到底该学哪一门编程语言,C++,Python,Java?其实语言的学习有很多相通之处。可以从相对简单的Python入手,后期结合实际需求,学习其他编程语言。
至于高数/线性代数/概率论,我建议你跟着b站up主宋浩老师的课程就足够了[5],有空时可以多刷几集。宋老师的课幽默风趣,通俗易懂,如果某节课的进度条特别长,不用慌,大概率有段子!
学完以上内容,我相信你已经对机器学习从理论和实践上有了初步的认识。前期掌握好基础为后续学习提供了重要保证。
对了,高数/线性代数/概率论的内容特别多,学习过程可以贯穿机器学习的各个阶段。

3.2 进阶,初露锋芒(选择细分领域,热身赛)3-5个月

经过入门阶段的学习,这时候大家可以选择性阅读《西瓜书》、《花书》、《统计学习方法》,进一步夯实基础。
机器学习包含了众多细分领域,当掌握前期基础后,你可以结合兴趣和实际,选择一个细领域进阶强化。常见领域包括:纯机器学习算法、自然语言处理、图像识别、计算机视觉、语音识别、强化学习等,每个领域又可分为科研工程两条道路。
科研偏学术研究,工程偏业务落地。
我在硕士期间主要从事自然语言处理研究,在进阶和3.3深入阶段,我会以NLP为例进一步谈谈机器学习的i强化路线。
NLP常和深度学习挂钩,进阶部分我推荐3本近年的精品书单。
第一本是《Python自然语言处理实战》,书中包含分词、命名实体识别、关键词提取、句法分析、情感分析、基于深度学习的NLP算法等,同样是理论和实战相结合的一本书。

另外两本分别是《Python深度学习》和《Pytorch深度学习》,掌握两大深度学习主流框架Keras和Pytorch,能让你方便地上手机器学习和深度学习项目。
除了看书,这一阶段我推荐大家参与一个和研究领域相关的算法比赛。比赛平台包括国内的阿里天池、DataFountain、biendata,国际的kaggle等,不仅可以通过一个完整的项目,在实际应用中提升对算法的理解,还可能收获不菲的奖金哦。
当然一开始可能会碰到很多问题,这里分享两个秘诀:(1)和小伙伴组队刷比赛,互相交流鼓劲,比单人solo收获更大;(2)通过github、比赛交流群、搜索引擎等途径,主动寻找解决方案。
2019年,我和室友参加了科大讯飞举办的应用分类挑战赛。这是我们第一次参加算法比赛,经过2个月的讨论和坚持,获得了第2名,也收获了第一笔比赛奖金。
如果没有合适的比赛,可以在博客或Github上找几个合适的项目练手,先参考别人的方法和代码,再自己实现一遍,你的思路一定会清晰很多。
进阶阶段,coding能力也得提一提。推荐这本豆瓣评分9.4的《流畅的Python》,阅读时会感觉一个博学但温柔的大叔在跟你侃侃而谈。考虑到咱们学生党资金有限,这儿我再分享一个“薅羊毛”的方法,让你能免费读到这本书!
微信读书是一款非常好用的读书app,除了文学小说,很多技术书籍也可以免费阅读。前两天我刚下载了3本和Python有关的精品书。你可以先浏览一下目录,如果有需要再购买纸质版本。

3.3 深入,如鱼得水(比赛 / paper / 实习 / 专利) 4-12个月

恭喜你!经过两个阶段的学习,你已经具备了相当不错的理论和实践基础。
不过,在越来越多人涌入机器学习的今天,当前学习的内容还不够用。之前在创业公司实习期间,曾有幸帮助公司面试了超过30位985/211计算机相关专业的同学,给我的一个感触是:虽然从事机器学习的人很多,但真正能在某个领域深入钻研,并有显著学术产出 or 解决实际问题能力的同学,只是少数。
那么,如何在某个领域深入钻研呢?
对于科研能力强(coding、英文写作、思路敏捷)的同学,可以在CCF-A顶会中发表paper。这是证明自己能力最简洁的方式。同实验室就有硕士期间发表7篇以上A类顶会的巨佬,还没毕业就被阿里高薪挖走了╮(╯▽╰)╭
当然,发paper是有一定门槛的;已经参加工作的读者,更是很难挤出时间发表学术论文。如果对自己的实力和精力没有清晰认识,很有可能付出和产出不成正比。
通过实习提升工程实践和解决实际问题能力的门槛相对低一些,是适合大部分同学(例如像我这样零基础)深入钻研的方式。作为商业公司,无论技术多么酷炫,如果不能落地,缺乏足够多的业务支撑,很容易被竞争对手击毙。所以企业对于候选人的实习和项目经历都相当重视。
除此之外,在知名比赛中获得Top5,发表发明专利,也是研究产出的优良证明。这两部分我之后会另开文章介绍。
切记,无论处于学习的哪个阶段,碰到问题要学会主动学习、主动解决问题,熟练运用Github、技术博客等工具。为了保持技术和视角的前沿性,建议大家适当读一些论文,途径包括订阅Arxiv,关注机器学习顶级会议,如ICML/ACL/NIPS等。

4. 心里话

写了快5500字,分享也接近尾声了,还有什么不明白的地方可以在NLP情报局公号后台或加微信告诉我,我都会看到,也会尽力解答。
最后,再和大家啰嗦几句心里话:
机器学习是一门多领域交叉学科,涉及计算机基础、统计学甚至心理学,从零入门肯定是艰苦的。你需要经历一段孤独、劳累、高饱和的学习奋斗期,打磨好自己的基础,才能和名校或科班出身的同学PK。
所谓高风险,高回报,这又是一条非常有前景的道路。因为以机器学习为核心的人工智能是大势所趋,有很大的应用市场。
不仅是大厂,很多和新兴科技创业公司都急缺机器学习相关人才;高门槛确保你的薪资待遇不会差。

所以当你内心有目标和梦想的时候,不要害怕失败,勇敢的尝试一次吧。趁年轻,多多学习,给自己多一次机会,有何不可呢!
当然,以上内容主要是我自身的学习方法总结,不一定适合所有人。大家还是需要慢下来,好好想一想,调好心态,制定适合自己的学习计划。
想好之后,朝着既定目标努力前进吧。正像李宗盛大哥唱的那样,“不经历风雨,怎能见彩虹,没有人能随随便便成功!” 共勉。

参 考 文 献

[1] Python安装方法:https://zhuanlan.zhihu.com/p/345932168

[2] JupyterLab最全详解,如果你还在使用Notebook,那你就out了!:https://zhuanlan.zhihu.com/p/154515490

[3] 吴恩达机器学习系列课程:https://www.bilibili.com/video/BV164411b7dx?p=1

[4] Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400

[5] 宋浩高数/概率论/线性代数:https://search.bilibili.com/all?keyword=%E5%AE%8B%E6%B5%A9&from_source=nav_suggest_new




由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面 最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入AINLP技术交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注NLP技术交流

推荐阅读

这个NLP工具,玩得根本停不下来

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/110165
 
319 次点击