利益相关:非CS背景(本硕数学专业),人工智能萌新研究者
最近,国家人力资源社会保障部发布了《人工智能训练师国家职业技能标准》 这一方面展示了国家层面对于人工智能行业的职业规范化意图,另一方面也将吸引更多人从事AI相关岗位。
那么,非CS专业背景,如何快速上手机器学习呢?
针对这个问题,我要从三个角度去回答:
为什么要使用机器学习?机器学习和自己有什么关系?如何动手操作?
注:机器学习是人工智能的子集。在下文描述中将同时提到这两个概念,为方便理解,可不做特别区分。
人工智能到底有啥好的?很多人或许只从别人的口中听闻,从相关上市公司资料中获取,从短视频中刷到,有定性的感受却并没有定量的认知。
上面这张图出自斯坦福大学的CS 3329P 实用机器学习课程(介绍机器学习在工业界的应用),说的是著名咨询公司麦肯锡的一项调研(见右图),图中数值描述的是使用机器学习之后,在2019年各行业的公司年营收增长情况,我们能非常直观地观察到有半数以上公司获得了至少 6% 的增长。那么我们也能预想到,这些公司将继续将机器学习用于生产经营,谋得更大收益。
在北上广深的朋友,我建议多多参加各大厂的科技展或者机构的学术研讨会,既能走马观花增长见识,也能和工程师们请教和讨论问题。
上面简单列举了几个有意思的会展场景,特别是最近一次亚马逊云科技中国峰会上海场中,我看到了使用NLP技术的资产盘活机器人,基于CV技术的智能车型车损照片识别机器人,基于多模态技术的智能金融视频生产机器人,还有基于“云+端”云原生的遥感技术服务……可以说,参加科技展或许是最快最全面了解到了解领域数字化,自动化和智能化应用的一种方式。
这不,最近亚马逊云科技中国又开启了re:Invent城市巡讲活动,可以上会了解到很多机器学习的前沿应用。
如果对机器学习确实已有一个较为全面的了解,下定决心要使用它,或者未来投身这个领域靠它吃饭,那么在正式动手前还得梳理一下和机器学习的关系。
一般来说有两类人急切希望使用机器学习:
第一类是具有一定的数理基础和编程能力,已经知道人工智能领域和他们的技术栈差异不大,学习AI技术后能快速获得更大收益的人,他们缺少的是机器学习知识和具体的实践经验。他们需要的是打通数据流,训练模型,维护模型;
第二类是泛AI行业(比如金融、医疗、教育等)领域专家,他们应该在自己原本的领域有一定的深入研究(虽然不一定是AI领域),期望通过使用机器学习使得自己的工作更加智能化,谋求更大的收获。这些人知道哪些数据是重要的,以及如何获取,并且可以论证机器学习模型对业务的影响。
使用机器学习其实并没有那么高大上,它也遵循问题建模的基本流程:
提出问题做出假设、收集数据、建立模型、部署模型、监控模型,然后收集新数据重新建模,不断迭代优化。
与行业外的认知不同,机器学习工程师并非专注构造一些精妙的模型,他们的很多工作时间都需要花在数据收集和清洗上。非机器学习专业的人士,如果已经掌握了数据处理的思路和技巧,那么其实是可以较为平滑地转到机器学习行业的。经过一段时间的努力后,这些人可以逐渐成为数据科学家(聚焦数据挖掘,模型训练和部署)和机器学习专家(训练,选择,调整 SOTA 机器学习模型)。
当然也会有人问,自己的数理基础和编程能力缺缺,也没有在自己原本的专业或行业深耕的经验,但还是想快速转行机器学习……那我建议还是稳扎稳打比较好呢亲。
终于到动手环节了无需死记硬背,带着问题去做项目才能走得最快。
那么在明确需要通过机器学习手段做什么项目后,新手通常会面临三个老大难的问题:
配不好环境,买不起GPU,写不好代码。
说到配环境,首先系统平台选用Linux还是Windows这个问题就能把很多人拦在外面了,好在现在大多数机器学习软件库还是能同时支持这些主流系统(虽然有时候会有一些莫名其妙的问题,但多多查询总能解决的)。我认为如果需要从事机器学习的职业,那必然要使用深度学习(这也是当下最有效最主流的研究方向),也肯定会面临使用GPU加速的情况,与其到时候再学,还不如一开始就搞定GPU的运行环境。那么就得面临安装显卡驱动,安装CUDA和cuDNN的问题(我个人一直很头疼这个,特别是需要有时候需要安装多个共存的CUDA环境)。搞定系统和确定需要使用GPU以后,还得选择语言和安装对应的依赖库,我个人建议使用Python语言(比较容易上手,而且有广泛的使用人群),Anaconda(Python数据科学发行版,可以理解为已经集成了非常多的数据科学工具,而且还能很方便的管理软件虚拟环境),PyTorch深度学习框架(参考 @微调 师兄的2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?)。除此以外最好学会使用命令行安装各种其他需要的软件库。如果很熟练的话,我相信能在半天内搞定上面的环境配置,反之可能得鼓捣一两天。
再到GPU,因为现在虚拟货币行情高涨,持续了一年多的时间,导致显卡价格也一直处于高点,原价GPU一卡难求。有很多人和我一样,发出难以弄到充足算力的悲鸣。如果放到以前,我肯定会推荐大家咬咬牙购买显卡,因为只要使用超过一年半载的,绝对比在云平台上租用划算,但当下确实应该多考虑租用算力资源,度过难关。实验室一块GPU都没有怎么做深度学习这个问题下也有很多朋友提出了折中方案,白嫖平台算力(比如 Google Colab、Kaggle、天池等平台会有一些免费使用时长),或者选用部署已预训练好的模型只在本地微调,又或者更换到不需要太多计算资源的研究方向(比如小样本学习,图神经网络等)。
担心代码写不好或许是非CS专业的人的共性了。这里想要说明的是,其实学习编程和掌握一门新语言很像,需要有使用环境(比如有很多外国朋友交流可以帮你掌握外语日常对话)和动机(比如想要出国留学也会逼着自己掌握语言能力)。那么兼顾使用环境和动机的编程场景就是找到一个感兴趣的项目并用编程实现它。这个小项目可以是解决一个生活中的痛点(想要一次性下载喜欢的明星写真集),也可以是工作的更高需求(比如想要批量处理一大堆Excel文件整理数据)。动手实现这样的一个个小项目,不论是编程技能熟练度还是自己的获得感,都能大大提升。
当然,上面的三个痛点也有一些公司注意到并提供一站式的解决方案。比如最近亚马逊云科技推出了 SageMaker Studio Lab,它有几个很好的特点:开箱即用,免费和提供云端存储。如果对这方面了解的朋友,此前应该也使用过其他家的训练服务,而与其相比,亚马逊云科技的产品会有两个优势,(云产品巨头提供的)稳定的云端服务,以及云边端协作的模型部署服务。
开箱即用听起来可能不太具体,但用实际场景举例就更好了。使用云端训练服务可以在几分钟内生成任意指定的硬软件环境实例,需要的显卡、配套的CUDA和科学计算环境等等都可以一键部署并马上投入使用。这个时候就无需和复杂的环境配置事项斗争,可以专心工作了。
除此以外,针对不擅长或者不愿意编程的朋友,SageMaker Canvas 在云服务的基础上加上了无码流程,无需了解任何编程相关的细节,仅用鼠标点击和拖拽控件,就能完成从数据读取、模型建模训练再到模型部署的全流程。而且还能一键将你的工作数据,模型和梳理流程分享给你的同事和合作伙伴。
总的来说,想要从CS转行机器学习,最重要的是有这个信念,然后早日动手操作。选择合适的平台和工具能大大加速你的成长,早日祝你达成愿望。
动起来吧,我的朋友们,就从今日开始~
这个问题我会答!17年的时候我写了一篇如何自学的机器学习的文章,现在也快万赞了。趁着这个机会我来更新一下内容,望大家广而告之。
早该学学了!
这篇回答的目标读者是计划零基础自学的朋友,对数学/统计/编程基础要求不高,比如:
1.1. 不要试图掌握所有的相关数学知识再开始学习
在很多相关的回答中,我都一再强调不要试图补足数学知识再开始学习机器学习。一般来说,大部分机器学习课程/书籍都要求:
一般人如果想要把这些知识都补全再开始机器学习往往需要很长时间,容易半途而废。而且这些知识是工具不是目的,我们的目标不是成为优化大师。建议在机器学习的过程中哪里不会补哪里,这样更有目的性且耗时更低。
同理,也没有必要苦练编程再开始。
1.2. 不要把深度学习作为入门第一课
虽然很多人都是冲着深度学习来的,但把深度学习作为机器学习第一课不是个好主意。原因如下:
更多讨论可以看我的回答:深度学习的教学和课程,与传统 CS 的教学和课程有什么区别?
1.3. 不要收集过多的资料 & 分辨资料的时效性
机器学习的资料很多,动辄就有几个G的材料可以下载或者观看。而很多朋友都有“收集癖”,一下子购买十几本书的人我也常常能够看到。
机器学习的发展和变化速度很快。在入门期间,建议“小而精”的选择资料,选择近期出版的且口碑良好的书籍。我不止一次的提到这个例子:
在很多深度学习的教科书中,尤其是10年以前的教科书中都还依然把Sigmoid当作默认的激活函数。但事实上,整流函数(ReLu)以及其拓展变形函数,如Leaky ReLu早就成为了主流的深度学习激活函数。但因为知识的滞后性,很多课程/书籍甚至都没有介绍ReLu的章节。
一般来说,我比较推荐近5年内出版的书籍,或者10年以后出版的书籍。有些书籍虽然是经典,比如Tom Mitchell的《机器学习》,但因为其出版已经超过20年,还是不建议大家购买。
在这篇文章中我所推荐的书籍和课程都相对比较经典,同时属于紧跟时代潮流的。入门阶段我推荐了1门课程和2本书,进阶阶段推荐了1本书,深度学习推荐了1门课程一本书,高级阶段推荐了2本额外书籍。
2.1. 硬件选择
另一个大家常问的问题是:是否可以用自己的笔记本电脑进行机器学习。答案是肯定的,大部分市面上的数据集都可以放到你的内存中运行。在入门阶段,我们很少会用到非常大的数据集,一般最大也就是MNIST,完全可以使用个人笔记本电脑进行运行。在Windows笔记本上也可以用GPU进行深度学习,基本上大部分游戏本自带的GPU都足够自学了。
除此之外,很多云服务都提供了免费付费的GPU,比如Google Colab。请不要打着学习的名义重新购买机器...
2.2. 软件选择
如果要做深度学习,Linux还是首选,因为其对很多学习模型支持比较好(主要是深度学习的Library)。但即使你使用的是Windows系统,也可以用虚拟机装Ubuntu来进行学习。小型的深度学习模型足够了,大型的深度学习我们很少在本地/个人计算机上运行。值得注意的是,现在各大深度学习库都对Windows支持的都很好,所以其实操作系统并没有那么重要。
至于编程语言,首推Python,因为其良好的拓展支持性,主流的工具包都有Python版本。在特定情况下,选择R作为编程语言也是可以的。其他可能的语言还包括C++、Java和Matlab,但我个人不大推荐。
而深度学习的话,我个人主推PyTorch(详情参考:2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?)。
此处也想额外提一句,因为编程属于机器学习基本要求之一,所以推荐大家可以自学一些基础编程的知识(如Python),但不必强求成为很厉害的开发者。
2.3. 语言能力
学好英语,至少打下阅读和听力的基础。虽然人工智能领域中国现在已经做得很不错,但主流的书籍、期刊和会议,资料都是英文的。我们可以接受翻译版,但最好的方法还是自己有能力直接阅读。即使你将来不做机器学习,英文阅读能力还是会有很大的帮助。
入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。在这个部分我介绍的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。
3.1.1. 吴恩达Cousera机器学习课程
Andrew Ng的机器学习课程(Machine Learning | Coursera)是很多人的启蒙课程,难度适中且完全免费。Coursera上总共有49285个人给出了评分,平均得分4.9分,满分5分。据我个人观察,大部分Coursera上的课程评分处于4-4.5分之间,能做到4.9分的课程寥寥无几。另一个值得关注的是,这门课有接近五万人给出评分,统计学知识告诉我们这个样本较大所以评分应该趋近于其真实值,比较可信。根据Freecodecamp的统计,这门课是所有在线Machine Learning课程中最受到大家好评的课程。另一个比较直接的观察是如果大家在知乎上搜索“机器学习如何入门?”,大部分答案都提到了Andrew的这门入门课程,所以这是一门绝对的口碑课程,详细讨论可以参考:微调:为何国人迷恋吴恩达的机器学习课?。
更重要的是,网易云课堂提供了免费中文版:吴恩达机器学习 - 网易云课堂
3.1.2. Python机器学习 & Introduction to Statistical Learning with R
在学习吴恩达的在线课程时,推荐同时阅读相关的机器学习书籍补充理论知识。我再次推荐这两本非常好的入门书籍,在我的专栏也有对于这两本书的介绍。
3.1.3. 周志华《机器学习》
周志华老师的《机器学习》也被大家亲切的叫做“西瓜书”。虽然只有几百页,但内容涵盖比较广泛。然而和其他人的看法不同,我建议把西瓜书作为参考书而不是主力阅读书。西瓜书因为篇幅的限制,涵盖了很多的内容但无法详细的展看来讲,对于初学者自学来说实际阅读难度很大。这本书更适合作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。
我个人建议的用法是在学习网课和阅读ISL遇到疑惑时可以参考西瓜书的相关章节,但入门阶段没有必要一章一章的阅读,建议在这个阶段只阅读前十章即可。
题外话:我做了快10年机器学习了,依然不少地方读不懂,因此不必感到沮丧。
好消息是有一群小伙伴对西瓜书的公式推导进行了详解,叫做南瓜书。具体可以参考这里:南瓜书PumpkinBook
在这个阶段,你已经对机器学习有了基本的了解。如果你认真的阅读了ISL并上完了吴恩达的课程,我相信你已经在理论上明白了什么是线性回归,什么是数据压缩,对特征工程以及简单的回归/预测问题有了理论上的基础。这个时候最重要的就是进行实践!
3.2.1. Kaggle挑战赛/练习
Kaggle(Your Home for Data Science)在数据分析领域早已大名鼎鼎,甚至可以说是数据分析第一社区,前一阵子刚刚被谷歌收购。Kaggle上有很多很好的数据集和挑战赛,你可以尝试这些挑战取得名次,甚至拿到奖金,对于将来找工作也非常有帮助。而且Kaggle的另一大优势是网友会分享他们的经验和看法,你也可以提出问题让大家来帮你提出一些修正方法。
国内也有类似的平台,比如天池大数据竞赛,其他类似的平台还包括DataCastle。
使用Kaggle的目的主要是将技能落在实处,防止练就一身屠龙之技。机器学习最大的幻觉就是觉得自己什么都懂了,但等到真的使用时发现并不奏效,而Kaggle是一个低成本的应用机器学习的机会。
3.2.2. Sklearn文档学习
Sklearn(scikit-learn: machine learning in Python)是Python上最流行的机器学习/数据科学工具包,上文介绍的Python Machine Learning书中就大量使用Sklearn的API。和使用Kaggle的目的一致,学习的Sklearn的文档也是一种实践过程。比较推荐的方法是把主流机器学习模型Sklearn中的例子都看一遍。
Sklearn的文档是少数写的跟教程一样的技术文档,很具有阅读价值。举个简单的例子,假设你想学习Python中使用逻辑回归,就可以参考: Logistic Regression 3-class Classifier
Sklearn的文档不仅提供了练习数据、sklearn的相关代码实例,还提供了可视化图。
同时配合着scikit-learn,我会推荐参考这本19年的新书,是我见过的为数不多的把理论和实践相结合的比较棒的书,尤其是代码部分!
3.2.2. 周志华机器学习
再次提到周老师是因为西瓜书是值得常常翻看的一本书,在kaggle挑战和阅读Sklearn文档的过程中你还会时不时的遇到一些新的名词,比如流形学习(manifold learning)等。这个时候你会发现西瓜书真的是一本中级阶段大而全的书籍:)
因为深度学习是当下的热点,很多公司都在寻找深度学习人才。虽然深度学习只是机器学习的一个子集,但有兴趣朝这个方向发展的朋友可以在完成以上学习后单独学习一下深度学习。
3.3.1. 吴恩达深度学习课程
吴恩达在八月份的时候通过Deeplearning.ai和Coursera平台推出了最新系列的五门深度学习课程(deeplearning.ai)。有条件的朋友可以通过Coursera学习获得证书,最近网易云课堂也上线了这门课的翻译版。如果想要上其中的课程,需要先注册报名「深度学习工程师微专业」 深度学习工程师微专业 - 一线人工智能大师吴恩达亲研-网易云课堂 - 网易云课堂,之后就可以分别点开每门课单独进行学习。
更多关于网易云课堂上深度学习课程的介绍可以看:如何评价网易云课堂上线的吴恩达Deep Learning课程?
3.3.2. Deep Learning - by Ian GoodFellow
深度学习这本书是由当下深度学习领域的几位领军人物所著,包含三大巨头之一的Bengio,还有教父Hinton来作序推荐。这本书的中文本翻译由张志华教授团队负责,在github上免费放出了翻译版本,印刷版也可以从亚马逊中国上买到。
英文版:Deep Learning
中文版:exacity/deeplearningbook-chinese
这本书的阅读建议:
第13-20章为进阶章节,在入门阶段没有必要阅读。其实比较实际的做法是吴恩达的课程讲到什么概念,你到这本书里面可以阅读一些深入的理论进行概念加深,按章节阅读还是比较耗时耗力的。
恭喜你!如果你已经完成了上面的计划表,代表你已经有了相当的机器学习能力。这个阶段,最重要的就是不要贪多嚼不烂。如果你浏览知乎,会发现大家都说你必须读Elements of Statistical Learning, MLAPP之类的大部头。我承认阅读这样的书会有帮助,但在你有了一定的基础知识后,相信你已经知道自己需要接着做什么了也有了志同道合的朋友,我希望把选择权交还给你,而不是继续推荐成堆的课程和书籍。当然,如果你希望继续深入的话,中文可以继续阅读周志华老师的《机器学习》和李航老师的《统计学习基础》,英文可以入手《Elements of Statistical Learning》。在这个阶段,重点要形成成体系的知识脉络,切记贪多嚼不烂,切记!
从阅读论文角度来说,订阅Arxiv,关注机器学习的顶级会议,如ICML/NIPS/KDD等,相关的方法在知乎上可以很容易搜索到,不在此赘述。
如果非要推荐书的话,卡内基梅隆大学的博士级别的高级机器学习用的书是:
Understanding Machine Learning: From Theory to Algorithms by Shai Shalev-Shwartz and Shai Ben-David,比较硬核不建议自学。如果非要看的话有在线免费版本:https://www.cs.huji.ac.il/~shais/UnderstandingMachineLearning/understanding-machine-learning-theory-algorithms.pdf
4.1. 研究经历
如果你还是学生,尝试尽早接触科研,进实验室。一般来说,大三的时候你应该已经有了基本的机器学习知识,尽管还比较浅。这个时候可以向老师/学长/学姐毛遂自荐进实验室,即使是无偿劳动和做基本的苦力活。进实验室有两个明显的好处:
4.2. 企业实习
上文提到过,机器学习光说不练假把式,最好的方法还是要实践。因此,应该先试着做科研,再尝试工业界实习。对待科研机会,有则就上,没有也不是太大的遗憾。我建议大部分做机器学习的朋友尽早实习,主要出于以下几个考量:
4.3. 在本职工作中使用机器学习
对于大部分已经工作的朋友来说,重新回到学校攻读学位并不现实,进研究室进行学习更是缺少机会。那么这个时候,你就可以试着把机器学习应用到你自己的工作当中。
已经有了工作/研究经验的朋友,要试着将自己的工作经历利用起来。举例,不要做机器学习里面最擅长投资的人,而要做金融领域中最擅长机器学习的专家,这才是你的价值主张(value proposition)。最重要的是,机器学习的基本功没有大家想的那么高不可攀,没有必要放弃自己的本专业全职转行,沉没成本太高。通过跨领域完全可以做到曲线救国,化劣势为优势,你们可能比只懂机器学习的人有更大的行业价值。
举几个我身边的例子,我的一个朋友是做传统软件工程研究的,前年他和我商量如何使用机器学习以GitHub上的commit历史来识别bug,这就是一个很好的结合领域的知识。如果你本身是做金融出身,在你补足上面基本功的同时,就可以把机器学习交叉运用于你自己擅长的领域,做策略研究,我已经听说了无数个“宣称”使用机器学习实现了交易策略案例。虽不可尽信,但对特定领域的深刻理解往往就是捅破窗户的那最后一层纸,只理解模型但不了解数据和数据背后的意义,导致很多机器学习模型只停留在好看而不实用的阶段。
虽然人们曾说二十一是生物的世纪,但现在还是人工智能的世纪。欢迎大家来试试机器学习,体验数据分析的魅力。
就像我曾在很多回答中提到,机器学习领域应该要敞开大门,让每个人都可以尝试将机器学习知识应用于他们原本的领域,摒弃人为制造的知识壁垒。唯有这样,机器学习技术才能在更多的不同领域落地,从而反哺机器学习研究本身。
最后的最后,我觉得自学的重点是心态,就是不要着急掌握大量的知识。即使从功利的角度来看,也要确保掌握,而不是混过去。
当你学习累了,不妨来看看 @微调 ,最美的鸡汤主播。