在从事机器学习算法研究3年之际,和大家分享一下我在ML方向上的入门方法!
无论是做算法还是开发、产品,认识自己是第一步。了解自己的特质、能力、兴趣爱好,再去做方向选择。
每一种选择都不分好坏或对错,只是要承担这个选择带来的所有结果,相信不同的选择下的人生都会有各自的圆满。
本文的宗旨:
- 指出一些自学误区
- 推荐近年精品资料
- 分享切实可行的机器学习入门路线
- 给出进阶/深入研究的方法。
0. 背景
本科时我是一个很贪玩的人,几乎每个周末都不在学校待着,掺和在一群骑行、登山、旅行者的队伍中。实验室有一次开组会,老师提到神经网络,听的我一头雾水。怎么计算机学院的老师,还兼职搞起生物了?
到了大三,我想着必须得学点什么了,不然毕不了业,于是选择了入门门槛较低的安卓开发。
有几个月,我每天在宿舍啃《第一行安卓代码》,看b站的开发教程。
最终为了完成课程设计,我做出了几个还过得去的demo,比如订票app和炸弹人小游戏。
模拟QQ堂的小游戏
空闲时我会写写博客,当时分享的技术内容也已安卓为主。
总的来说,本科时目标比较模糊,机器学习0基础,以被动学习为主;好在考研成功上岸,没有完全荒废。
读硕士后,发现身边很多同学都在研究AI,CV、NLP、ASR各行其道,人工智能的烈火烧得正旺。
因为我几乎没有任何基础,只能从Python和理论部分学起。
来实验室的最初3个月,我每天只做三件事:1)恶补python;2)看吴恩达的机器学习启蒙课;3)学习爬虫,帮师兄爬取语料。
因为做爬虫和文本分析的缘故,我对自然语言产生了兴趣,能让机器懂得文字的含义是很酷的一件事。于是我3个月后,我真正开始接触NLP,从分词、文本分类等底层任务做起。
学习到现在3年的时间,我真正喜欢上了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安装方法、JupyterLab最全详解,如果你还在使用Notebook,那你就out了!。
jupyter lab交互界面
关于操作系统,首选Linux,对各种模型训练有最好的兼容性,而且使用GPU非常方便。
mac和windows系统也可以做很多简单的机器学习实验。实际应用中,开发大型机器学习项目一般通过VSCode或Pycharm,远程接入Linux服务器完成。
2.2 硬件设备
个人笔记本电脑是完全可以入门机器学习的。最初1年的学习,我在自己的15年老Mac Air上完成了很多实验分析。
关于一些大型项目,或者涉及神经网络需要GPU显卡加速的情况,最简单的方法是“蹭”实验室或公司的计算资源。
如果是咱们学生党,既没钱,实验室计算卡资源又不够用,却入了机器学习的门...别着急,我们还有白嫖方案:
百度PaddleCloud和谷歌Colab平台,都提供了免费的底层计算资源和GPU。谷歌Colab已经把免费卡升级到了P100和V100,薅羊毛快乐再次加倍!详细可以戳:
mp.weixin.qq.com/s/vOgP6pszcbczBDvbhwkA2Qmp.weixin.qq.com/s/vOgP6pszcbczBDvbhwkA2Q
3. 机器学习升级打怪
有了初始化装备,游戏即将开始,请同学们抓紧跟上。
3.1 入门,小试牛刀(精品书、视频课推荐) 3-6个月
入门机器学习,前期需要掌握的基础主要包括机器学习算法理论、coding、高数/线性代数/概率论。
很多人推荐的《西瓜书》和《统计学习方法》,包含了大量数学推导和证明,我觉得并不太适合零基础的读者入门。
结合自身学习经验,关于机器学习我推荐1门网课和1本精品书。网课部分,强烈建议看吴恩达机器学习系列课程。内容侧重于原理和工程实现,对初学者友好。国内b站就能免费观看:
有了理论基础,coding自然必不可少。下面推荐一本机器学习神书《Hands-on Machine Learning with Scikit-Learn, Keras, and TensorFlow》。
书中介绍了大量经典的机器学习算法,并且都给出了具体的实现案例。换句话说,通过这本书大家不仅收获了原理,还锻炼了编程,将算法进行实践应用,一举多得。
Python是学习机器学习必不可少的工具之一。如果你是零基础,建议从《笨方法学python》入手,书中包含了Python最基础重要的知识点。
如果不想看书,推荐一个Python在线学习博客:Python教程
会有同学纠结一开始到底该学哪一门编程语言,C++,Python,Java?其实语言的学习有很多相通之处。如果想从事机器学习,建议从相对简单的Python入手,后期结合实际需求,学习其他编程语言。
至于高数/线性代数/概率论,我建议你跟着b站up主宋浩老师的课程就足够了,有空时可以多刷几集。宋老师的课幽默风趣,通俗易懂。
如果某节课的进度条特别长,不用慌,大概率有段子!
学完以上内容,我相信你已经对机器学习从理论和实践上有了初步的认识。前期掌握好基础为后续学习提供了重要保证。
对了,高数/线性代数/概率论的内容特别多,学习过程可以贯穿机器学习的各个阶段。
3.2 进阶,初露锋芒(选择细分领域,算法热身赛)3-5个月
经过入门阶段的学习,这时候大家可以选择性阅读《西瓜书》、《花书》、《统计学习方法》,进一步夯实基础。
机器学习包含了众多细分领域,当掌握前期基础后,你可以结合兴趣和实际,选择一个细领域进阶强化。常见领域包括:纯机器学习算法、自然语言处理、图像识别、计算机视觉、语音识别、强化学习等,每个领域又可分为科研和工程两条道路。
科研偏学术研究,工程偏业务落地。
我在硕士期间主要从事自然语言处理研究,在进阶和3.3深入阶段,我会以NLP为例进一步谈谈机器学习的i强化路线。
NLP常和深度学习挂钩,进阶部分我推荐3本近年的精品书单。
第一本是《Python自然语言处理实战》,书中包含分词、命名实体识别、关键词提取、句法分析、情感分析、基于深度学习的NLP算法等,同样是理论和实战相结合的一本书。
另外两本分别是《Python深度学习》和《Pytorch深度学习》,掌握两大深度学习主流框架Keras和Pytorch,能让你方便地上手机器学习和深度学习项目。
如果你感兴趣,也可以私信或给我留言,我把电子版pdf发送给你。
除了看书,这一阶段我推荐大家参与一个和研究领域相关的算法比赛。比赛平台包括国内的阿里天池、DataFountain、biendata,国际的kaggle等,不仅可以通过一个完整的项目,在实际应用中提升对算法的理解,还可能收获不菲的奖金哦。
当然一开始可能会碰到很多问题,这里分享两个秘诀:(1)和小伙伴组队刷比赛,互相交流鼓劲,比单人solo收获更大;(2)通过github、比赛交流群、搜索引擎等途径,主动寻找解决方案。
2019年,我和室友参加了科大讯飞举办的应用分类挑战赛。这是我们第一次参加算法比赛,经过2个月的讨论和坚持,获得了第2名,也收获了第一笔比赛奖金。
如果没有合适的比赛,可以在博客或Github上找几个合适的项目练手,先参考别人的方法和代码,再自己实现一遍,你的思路一定会清晰很多。
进阶阶段,coding能力也得提一提。推荐这本豆瓣评分9.4的《流畅的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字,分享也暂时接近尾声了,还有什么不明白的地方可以留言告诉我,我都会看到,也会尽力解答。
最后,再和大家啰嗦几句心里话:
机器学习是一门多领域交叉学科,涉及计算机基础、统计学甚至心理学,从零入门肯定是艰苦的。你需要经历一段孤独、劳累、高饱和的学习奋斗期,打磨好自己的基础,才能和名校或科班出身的同学PK。
所谓高风险,高回报,这又是一条非常有前景的道路。因为以机器学习为核心的人工智能是大势所趋,有很大的应用市场。
不仅是大厂,很多和新兴科技创业公司都急缺机器学习相关人才;高门槛确保你的薪资待遇不会差。
某网站机器学习岗位招聘信息
所以当你内心有目标和梦想的时候,不要害怕失败,勇敢的尝试一次吧。趁年轻,多多学习,给自己多一次机会,有何不可呢!
辛辛苦苦,过舒服日子;舒舒服服,过辛苦日子。
当然,以上内容主要是我自身的学习方法总结,大家还是需要慢下来了解自己,调好心态,制定最适合的学习计划。
想好之后,请朝着既定目标努力前进吧。正像歌中唱的那样 “不经历风雨,怎能见彩虹,没有人能随随便便成功!”