当前位置: 首页 > 学习社区 > 转行经历 > 文章

非计算机专业学生如何转行 AI

张戎 2019-01-28 19:02 505

个人背景

笔者本科和博士期间都在数学系攻读基础数学,也就是那种跟工业界基本上挨不上边的东西。后来博士毕业之后进入互联网公司搬砖,于是就开始做机器学习方向。之前也写过关于转行的文章,不过近期看到知乎上有类似的问题,于是整理一下之前所写分享给大家。

转专业的困难

虽然现在很多人都会说数学学完之后转计算机有优势,学了数学之后学金融如鱼得水。但是这些人很可能既没学过数学,也没学过计算机和金融,只是看了网络或者报纸上的宣传就开始四处说这些观点。其实,作为一个数学系的学生,如果要想转专业的话,其实是需要付出很多时间和精力的。因为数学系所上的课程和计算机所上的课程是不一样的。通常来说:数学系和计算机系的不完全课表大致如下:


数学系的课程:

数学分析高等代数解析几何C++离散数学,常微分方程,偏微分方程,抽象代数,复变函数,实变函数,泛函分析,数值计算,偏微分方程数值解,拓扑学,微分几何,概率论与数理统计,随机过程等。

计算机系的课程:

微积分线性代数离散数学,数据结构与算法,数字电路,计算机组成原理,操作系统,编译原理,计算机网络,数据库原理,软件工程,汇编语言等。


从这两个表格的对比情况来看,如果要想从数学系转行到计算机系,那么基本上要把计算机的一些基础知识课程都大致过一遍才行,否则企业为什么不直接招聘一个计算机系的,而需要一个跨专业的人呢?在这种情况下,对数学系的人其实提出了很高的挑战,因为在数学系繁重的课程下,想要同时兼顾数学系和计算机系两个专业的课程是比较困难的,需要同学耗费巨大的时间和精力才能够做好。


人工智能行业所带来的机遇和挑战

就这几年的人工智能发展情况和笔者的个人经验而言,人工智能可以大致分成以下几个方向:

1. 计算机视觉方向;

2. 自然语言处理方向;

3. 语音识别方向;

4. 机器学习方向。




作为一个转专业的学生,如果要在一些比较成熟的行业里面去和科班的人去竞争,那么自然就会出现劣势,因为企业是非常看个人产出的。既然能够招聘到一个有经验的人,其实没有必要培养一个无经验者。这种时候,转专业的同学一定要找好自己的定位,也就是传说中的“打法”,需要凸显自己的优势,然后尽量避开劣势。举个例子,假设让一个数学系的人去做美术设计,在大多数情况下就是把自身的缺点暴露给别人,当然在数学系也有美术不错的同学。但是在大多数情况下,数学系的美术功底比艺术院校的美术功底其实是差很远的。在人工智能领域也是这样的,在一些成熟的领域,其实计算机系就能给工业界源源不断地提供人才,对于转行的人来说其实是不算特别友好的。计算机视觉方向(Computer Vision)无论是在学校还是在公司,都有着大量的从业者,并且 ImageNet 项目可以提供上千万的标注图片供大家使用。既然 ImageNet 是开源的数据集,那么无论是学校的教授还是学生,不管是大型互联网公司还是初创企业,都可以轻易地获取到这些数据集,不仅可以进行 CV 算法的研究工作,还可以进行相关的工程实践。由于计算机视觉方向的历史悠久,不管是计算机系,工程系,甚至数学系,都有着大量的老师和相应的学生从事该方向的研究工作,因此,学校或者研究所能够对工业界输出的计算机视觉人才数量也是可观的。其他两个,自然语言处理和语音识别的老师其实也是有的,可能相对于图像来说是少了一些。



如果针对机器学习领域的话,就公司或者学术界的一些情况来看,其实机器学习领域的应用范围十分广泛。最经典的当然属于广告推荐和个性化推荐这一块,无论是今日头条,抖音,还是各个 APP,其实都包含了推荐系统,无论这个推荐系统是通过规则的形式做出来的,通过逻辑回归的方法做出来的,还是通过深度学习做出来的,都是可以在点击率和利润等方向上获得收益的。除了推荐系统之外,游戏 AI 也是一个不错的研究方向,几年前强化学习这个方向也是不温不火,但是在 AlphaGo 崛起之后,深度学习和强化学习就已经开始进入了大多数人的视野。随着围棋被攻克之后,德州扑克 AI,或者其他的游戏 AI 也被很多学者和大型游戏公司所关注。DeepMind 也在 2017 年开放了星际争霸的研究平台,今年无论是在 Dota2 还是星际争霸上,游戏 AI 相比之前都有了巨大的突破。因此,如何在诸多业务线中,选择一个适合自己的研究方向,才是比较关键的问题。是选择一个成熟的领域努力奋斗,还是选择一个新兴领域开疆拓土,都是需要自己去考虑的。


机器学习如何入门

上一部分介绍了人工智能方向的一些情况,下面可能各位同学比较关心机器学习领域该如何入门。由于笔者是做机器学习方向的,对计算机视觉,自然语言处理,语音识别等方向不太了解,所以这次着重讲一下如何转行到机器学习




在公司里面工作通常都需要有提取数据的工具,在大多数情况下就是写 SQL。SQL 是为了从数据库中提取数据,然后进行必要的数据过滤,数据分析,数据提取。对于 SQL,需要掌握的内容有以下几点:聚合函数,数学函数,字符串函数,表格的连接函数,条件语句等。SQL 的经典教材有两本,分别是:《HIVE编程指南》,作者 Edward Capriolo;《SQL基础教程》,作者 Mick。个人特别喜欢《SQL基础教程》,极易上手,易学易通。


目前工业界的机器学习编程语言很多,就个人浅显的经验来看,现在比较常见的编程语言还是 Python。Python 的话包括各种各样的工具包,例如 Numpy,Scipy,Scikit-Learn,Tensorflow 等等。其中,Scikitlearn 的文档是非常详细的,特别适合初学者入门学习。至于 Python 教材的话,其实有很多,例如:《Python基础教程》,作者是 Magnus Lie Hetland,这本书特别适合初学者看。如果是网络教材的话,推荐参考廖雪峰的官方网站,地址是:http://www.liaoxuefeng.com/。开发环境的话,公司一般都会使用 Linux,而不是 Windows 系统。在这里,特别推荐转行的同学掌握 Python 和 Linux。


其实,除了 SQL 和 Python 之外,C++ 或者 Java 也要选择一个方向来学。因为做机器学习的时候,除了离线使用 SQL 提取各种数据,用 Python 或者各种大数据工具来进行必要的模型训练,另外一个需要做的事情就是模型的上线工作。而模型的上线的时候是需要根据实际的数据来进行模型的预测,在模型预测的时候,通常来说用 Python 的话效率会有瓶颈,这种时候都会换成 C++ 或者 Java,因此,如果大家有时间准备的话,可以考虑把 SQL,Python,C++/Java 一起准备了。


除了基础的工具之外,其实做机器学习必不可少的那就是大学数学。在一般情况下,如果要读机器学习的普通书籍,数学系二年级左右的数学课程基本上就够用了。在一些特殊的时候需要读数学系更高年级的课程,不过在工作中还是相对偏少一些。如果是数学系的优秀学生的话,这一块基本上不需要特别担心,因为机器学习的数学没有数学系所教的那么难,机器学习更强调的是应用。基本上,数学分析,高等代数,概率论与数理统计,离散数学等课程其实就够用了。除了数学之外,计算机系的数据结构和算法的课程也是需要学习的,同时也应该多做一些算法题目,毕竟面试的时候是很有可能考这些算法题目的。


除了这些计算机与数学的基础知识之外,下面就要开始讲机器学习的入门了。通常来说,随便翻开一本机器学习的教材,都能够看到以下内容。

1. 线性回归

2. 决策树

3. 朴素 Bayes

4. 神经网络

5. 集成学习

6. 强化学习


在这里,推荐给大家看的教材有三本:

1. 《机器学习实战》,作者是 Peter Harrington,

2. 《机器学习》,作者是周志华

3.《Scikit-learn 与 Tensorflow 机器学习实用指南》,作者是 Aurelien Geron。

通过这几本书的学习,其实按照书上的目录和内容把机器学习过一遍,基本上就能够掌握机器学习的绝大部分知识点了。如果想学计算机视觉方向或者自然语言处理方向的话,建议再去看相关的书籍和教材,这一方面的知识点的话,Stanford 有不少优秀的课程。

转专业的人如何求职机器学习

其实,绝大部分的人都是需要求职的,在这种情况下,如何在转专业的时候脱颖而出就是一个关键的问题。其实,上面所说的知识点,无论是自学机器学习,还是努力刷题目,其实都是可以通过自我学习得到的,下面来说一些不太可能通过自己就能够得到的技能。



1. 机器学习的竞赛。通常来说,无论是计算机视觉领域,NLP 领域,还是机器学习领域,都会有着各种各样的比赛。也就是公司或者竞赛的主办方会在网上公开竞赛的题目,并且提供必要的数据,让大家在该数据集上进行比赛,并且得分高的队伍获胜。而在比赛的过程中,通常都会用到各种各样的机器学习知识,这个是练习机器学习能力的第一步,也就是通过比赛来检验之前的学习是否达到了一个不错的效果。而在比赛的途中,建议还是通过组队的方式,几个人共同完成一项比赛。而且优秀的比赛结果其实最终也是可以写到简历里面的。


2. 实习经历。其实打比赛这件事情,自己做也是可以的。但是实习这个经历通常来说还是比较重要的,在一般情况下,公司选人都会从实习生当中来选,如果有合适的实习生,通常就不需要继续在校园招聘中寻找人才了。所以,找实习对应届生来说应该是比较重要的事情,而且这件事情建议早点做,而不要等到最后找工作的那一年才开始。一般来说,第一份实习可能比较难找一些,但是如果在低年级的暑假或者寒假就有实习机会的话,其实对于后续的实习或者就业是有很大的帮助的。通过实习,可以了解公司的一些业务和数据的情况,在这种情况下,才能够逐步理解工业界的数据和学术界的数据的差异性


其实在选择做机器学习方向的时候,可以考虑得更加清楚一些,因为无论是做 CV,NLP 还是其他,都面临着和计算机系的人竞争的场面。在这里提个醒,其实机器学习并不是这两年才发展起来的,很多年前机器学习技术就已经存在了。最理想的状况就是,把机器学习的技术运用到本领域中,因为本专业的领域知识是计算机系的人并不具备的,例如,做气象研究,做金融分析。这类研究方向其实对本专业的人更加友好,如果能够把机器学习的知识应用到这些方向,那么求职的时候在本方向就更有竞争力,也会更有优势。而计算机系的人如果要转行做金融之类的,其实也要学习金融方面的知识,不过计算机系的人应该还是会倾向于去更熟悉的环境或者企业找工作。


对于转专业的人来说,如果去互联网的企业寻找工作,其实就已经算跨行了。这种时候其实是占有一定劣势的。所以,需要做的事情就是尽快补齐一些知识上的不足,并且尽快找一份实习,通过实习来提升自己的实战经验,最差也要多做比赛项目。除此之外,如果要寻找工作的话,能够找到熟悉的人帮忙内部推荐一下,拿到一些面试的机会或者名额其实也是很关键的。内推并不是保送的意思,而是免除了筛选简历的过程,直接就能够拿到面试的机会。

转专业的工作感受


1. 给自己压力。一般来说,转专业求职是一个艰苦的过程,但是入职之后的生活则更加辛苦。因为公司的考核是每半年甚至两个月就一次,所以,在这种情况下,任何人都需要有一个上手的速度。有的人因为在学校学过相关的内容,或者之前实习过,因此上手的时候比较快;但是有的人转专业就面临上手慢的情况。其实这些对于应届生来说都可以理解,毕竟所有的人都需要有一个适应的过程。在这种情况下,在工作的初期一定要给自己一定的压力。意思就是说:在刚工作的第一年,每三个月就要让自己有一个飞速的提升;在工作的第二年,每半年就要让自己有一个提升;后续的话,每一年都要让自己有提升才是关键。因此,无论是本专业还是转专业的同学,都建议在前两年工作的时候,多给自己一些压力,只有这样,才能够让自己有更好的进步空间。


2. 业务经验。公司里面有很多东西并不是直接使用开源代码就能够发挥作用的,在公司里面无论做什么事情,最重要的一点就是对业务的理解。在对业务的理解方面,老员工相对于新人来说确实有着不少的优势。其次,在做业务的过程中,通常都会经历很多的坑,无论是别人主动挖的,还是自己踩坑踩出来的,都是自身宝贵的财富和经验。而这些经验只能够通过靠做大量的业务来获得。如果要想长期保持自身的优势,通过长期的训练和学习确实是一个有效的办法。无论是天才还是普通人,要想提升自身的技术,不花一定的时间去学习是不可行的。因此,无论在任何时候都不能够放弃让自己学习和充电的机会。


3. 勇于接受新的挑战。公司里面除了已有的项目之外,通常来说都会开启各种各样的新项目,在这种情况下,如果有机会做新的项目,也就是别人没有做过的项目。这种机会已经要把握住,因为对于新人来说,能够接触全新的项目肯定是好过维护已有的项目的。但是几乎所有的人都是从维护旧的项目开始的,只有旧的项目做好了,才有机会拿到新的项目。


4. 不要永远抱着已有的方向不放手。在公司里面,业务方向总会或多或少的发生变化,随着部门的调整,方向的变化,所做的内容总会发生一些变化。在工作的时候,最好不要抱着我就是来做这个方向的,除了这个方向之外其他的内容我一概不想做。因为当时的工作岗位未必能够提供你想做的方向,但是说不定能够提供其他的研究方向。有的时候,在公司里面,根据方向的变化来调整自己的工作内容也是一个必要的技能。而且,在公司的时候,一定要多做一些有挑战的项目,只有通过这些项目,才能够让自己的技术壁垒更加深厚。当然,在求职的时候,每个人都有着自己的想法和选择,所以,在求职的时候,是可以选择一个自己喜欢的方向来做的。

 

机器学习还能持续多久


如果是在数学界,要想成为一个数学工作者,一般来说都要经过以下的学习路程:


数学分析/高等代数/概率论/复变函数/实变函数/泛函分析/微分几何/抽象代数


等一系列越来越难的课程的学习,而以上的这些课程只是基础课,连数学科研的边还没碰到。所有想要从事数学工作的人,都必须一步一步地,从头建立自己的数学知识体系,完善自己的数学工具库。而且数学的学习路径没有捷径,除非人绝顶聪明之外,都是需要一步一步,一年一年的来花费时间学习数学,才能够逐步体会数学所带来的奥妙。


与之截然不同的是 AI 领域(Machine Learning, CV, NLP, 语音等),一般来说只需要学习微积分/线性代数/概率论就可以基本上看懂机器学习的相关课程,当然要想深入学习 AI 的话还是需要很多数学基础的。随着科技的发展,各种开源工具的层出不穷,很多学校的学生甚至工业界的人士都已经不需要从底层从头开始,一步一步地建立自己的工具库。根据各种丰富的文档和 Blog,不少人都可以快速上手各种 AI 的工作内容,无论是使用 Tensorflow 建立图像分类器,还是使用 XGBoost 刷竞赛的成绩。这种时候,从事 AI 相关工作的门槛将会比之前变得越来越低,毕竟从头开始手动写一个 BP 算法或者说 GBDT 算法还是有一定门槛的。


根据经济学的基础知识,供需关系与价格有着一定的关系。一旦人数过多,而市场上的蛋糕并没有那么大的时候,很多人就要降低自己之前的期望,甚至转行做其他的事情。


之前在学校读书的时候,就听一些老师说过,最近放出来一个助理教授的职位,但是收到了200-300封简历,全部都是北美欧洲或者国内名校的PHD。之前听说在1980年的时候,数学PHD还不需要做posdoc就可以找到工作;到了1990年,基本上都要做一两年的posdoc才可以找到下家;到了00年以后,回国的话马上还能找到一个不错的职位,虽然工作不高,但是对论文的要求也没那么高;等到了2010年以后,国家千人计划等项目的开启,没有在国外混到一个好职位的,没有几篇好文章的,基本上在国内就没法找到教职了。等到了2020年以后,还真不知道是什么样的行情了,进入好学校的要求肯定是越来越高,要求的论文数量也是越来越多,质量也是越来越高了。


如果现在有十个岗位,但是只有五个 AI 专业的人来应聘,当然这些人都能够找到工作;但是随着人工智能专业的开设,相关的本科生和研究生开始培养,AI 从业者将会变得越来越多,但是岗位是否能够得到相应的增加就不是特别清楚了。就之前的经验而言,数学系的学生之间在毕业的时候差距还是挺大的,有的很强,有的很差。相信在人工智能专业也会有类似的情况,优秀的学生总是占少数。


就笔者的经验实在是无法确定这一波 AI 浪潮能够持续多久,如果五六年之后这波浪潮还在,蛋糕越来越大,那么现在选择攻读 AI 相关专业的人将会是受益者。但是如果这波浪潮不在了,蛋糕保持稳定甚至缩小的时候,AI 相关专业的人的竞争将会变得更加激烈。无论是工业界还是学术界的竞争,将会比现在的情况变大很多倍。而这波浪潮退去之后,能够留在沙滩上继续前进的永远都是少数人。


本文转自https://mp.weixin.qq.com/s/NK23gQuJ1IBU7mS_0-I3Sw